From 036c628ba5e27a0624ea21d46d4075a6ce23ecb2 Mon Sep 17 00:00:00 2001 From: Joke Puts Date: Tue, 26 Sep 2017 12:28:58 +0200 Subject: [PATCH 001/653] Keep maintenance mode on if it was previously enabled --- app/code/Magento/Deploy/Model/Mode.php | 17 +++++++ .../Console/Command/ThemeUninstallCommand.php | 47 +++++++++++++++++-- .../Setup/Console/Command/BackupCommand.php | 47 +++++++++++++++++-- .../Command/ModuleUninstallCommand.php | 47 +++++++++++++++++-- .../Setup/Console/Command/RollbackCommand.php | 47 +++++++++++++++++-- 5 files changed, 189 insertions(+), 16 deletions(-) diff --git a/app/code/Magento/Deploy/Model/Mode.php b/app/code/Magento/Deploy/Model/Mode.php index ba3e8652fd443..e1efc9ff711e1 100644 --- a/app/code/Magento/Deploy/Model/Mode.php +++ b/app/code/Magento/Deploy/Model/Mode.php @@ -78,6 +78,11 @@ class Mode */ private $emulatedAreaProcessor; + /** + * @var bool + */ + private $skipDisableMaintenanceMode; + /** * @param InputInterface $input * @param OutputInterface $output @@ -227,7 +232,14 @@ private function saveAppConfigs($mode) */ protected function enableMaintenanceMode(OutputInterface $output) { + if ($this->maintenanceMode->isOn()) { + $this->skipDisableMaintenanceMode = true; + $output->writeln('Maintenance mode already enabled'); + return; + } + $this->maintenanceMode->set(true); + $this->skipDisableMaintenanceMode = false; $output->writeln('Enabled maintenance mode'); } @@ -239,6 +251,11 @@ protected function enableMaintenanceMode(OutputInterface $output) */ protected function disableMaintenanceMode(OutputInterface $output) { + if ($this->skipDisableMaintenanceMode) { + $output->writeln('Skipped disabling maintenance mode'); + return; + } + $this->maintenanceMode->set(false); $output->writeln('Disabled maintenance mode'); } diff --git a/app/code/Magento/Theme/Console/Command/ThemeUninstallCommand.php b/app/code/Magento/Theme/Console/Command/ThemeUninstallCommand.php index 4c8d6bca52edc..9d747799ddb47 100644 --- a/app/code/Magento/Theme/Console/Command/ThemeUninstallCommand.php +++ b/app/code/Magento/Theme/Console/Command/ThemeUninstallCommand.php @@ -116,6 +116,11 @@ class ThemeUninstallCommand extends Command */ private $themeDependencyChecker; + /** + * @var bool + */ + private $skipDisableMaintenanceMode; + /** * Constructor * @@ -215,8 +220,7 @@ protected function execute(InputInterface $input, OutputInterface $output) } try { - $output->writeln('Enabling maintenance mode'); - $this->maintenanceMode->set(true); + $this->enableMaintenanceMode($output); if ($input->getOption(self::INPUT_KEY_BACKUP_CODE)) { $time = time(); $codeBackup = $this->backupRollbackFactory->create($output); @@ -227,8 +231,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $this->themeUninstaller->uninstallCode($output, $themePaths); $this->cleanup($input, $output); - $output->writeln('Disabling maintenance mode'); - $this->maintenanceMode->set(false); + $this->disableMaintenanceMode($output); } catch (\Exception $e) { $output->writeln('' . $e->getMessage() . ''); $output->writeln('Please disable maintenance mode after you resolved above issues'); @@ -375,4 +378,40 @@ private function cleanup(InputInterface $input, OutputInterface $output) ); } } + + /** + * Enable maintenance mode + * + * @param OutputInterface $output + * @return void + */ + private function enableMaintenanceMode(OutputInterface $output) + { + if ($this->maintenanceMode->isOn()) { + $this->skipDisableMaintenanceMode = true; + $output->writeln('Maintenance mode already enabled'); + return; + } + + $this->maintenanceMode->set(true); + $this->skipDisableMaintenanceMode = false; + $output->writeln('Enabling maintenance mode'); + } + + /** + * Disable maintenance mode + * + * @param OutputInterface $output + * @return void + */ + private function disableMaintenanceMode(OutputInterface $output) + { + if ($this->skipDisableMaintenanceMode) { + $output->writeln('Skipped disabling maintenance mode'); + return; + } + + $this->maintenanceMode->set(false); + $output->writeln('Disabling maintenance mode'); + } } diff --git a/setup/src/Magento/Setup/Console/Command/BackupCommand.php b/setup/src/Magento/Setup/Console/Command/BackupCommand.php index fafa47296d304..d85d7d1f8fd10 100644 --- a/setup/src/Magento/Setup/Console/Command/BackupCommand.php +++ b/setup/src/Magento/Setup/Console/Command/BackupCommand.php @@ -57,6 +57,11 @@ class BackupCommand extends AbstractSetupCommand */ private $deploymentConfig; + /** + * @var bool + */ + private $skipDisableMaintenanceMode; + /** * Constructor * @@ -121,8 +126,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $returnValue = \Magento\Framework\Console\Cli::RETURN_SUCCESS; try { $inputOptionProvided = false; - $output->writeln('Enabling maintenance mode'); - $this->maintenanceMode->set(true); + $this->enableMaintenanceMode($output); $time = time(); $backupHandler = $this->backupRollbackFactory->create($output); if ($input->getOption(self::INPUT_KEY_CODE)) { @@ -147,8 +151,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $output->writeln('' . $e->getMessage() . ''); $returnValue = \Magento\Framework\Console\Cli::RETURN_FAILURE; } finally { - $output->writeln('Disabling maintenance mode'); - $this->maintenanceMode->set(false); + $this->disableMaintenanceMode($output); } return $returnValue; } @@ -168,4 +171,40 @@ private function setAreaCode() $configLoader = $this->objectManager->get(\Magento\Framework\ObjectManager\ConfigLoaderInterface::class); $this->objectManager->configure($configLoader->load($areaCode)); } + + /** + * Enable maintenance mode + * + * @param OutputInterface $output + * @return void + */ + private function enableMaintenanceMode(OutputInterface $output) + { + if ($this->maintenanceMode->isOn()) { + $this->skipDisableMaintenanceMode = true; + $output->writeln('Maintenance mode already enabled'); + return; + } + + $this->maintenanceMode->set(true); + $this->skipDisableMaintenanceMode = false; + $output->writeln('Enabling maintenance mode'); + } + + /** + * Disable maintenance mode + * + * @param OutputInterface $output + * @return void + */ + private function disableMaintenanceMode(OutputInterface $output) + { + if ($this->skipDisableMaintenanceMode) { + $output->writeln('Skipped disabling maintenance mode'); + return; + } + + $this->maintenanceMode->set(false); + $output->writeln('Disabling maintenance mode'); + } } diff --git a/setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php b/setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php index 4e25cf60a56d3..dd121721f485f 100644 --- a/setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php +++ b/setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php @@ -108,6 +108,11 @@ class ModuleUninstallCommand extends AbstractModuleCommand */ private $moduleRegistryUninstaller; + /** + * @var bool + */ + private $skipDisableMaintenanceMode; + /** * Constructor * @@ -228,8 +233,7 @@ protected function execute(InputInterface $input, OutputInterface $output) return \Magento\Framework\Console\Cli::RETURN_FAILURE; } try { - $output->writeln('Enabling maintenance mode'); - $this->maintenanceMode->set(true); + $this->enableMaintenanceMode($output); $this->takeBackup($input, $output); $dbBackupOption = $input->getOption(self::INPUT_KEY_BACKUP_DB); if ($input->getOption(self::INPUT_KEY_REMOVE_DATA)) { @@ -255,8 +259,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $this->moduleRegistryUninstaller->removeModulesFromDeploymentConfig($output, $modules); $this->moduleUninstaller->uninstallCode($output, $modules); $this->cleanup($input, $output); - $output->writeln('Disabling maintenance mode'); - $this->maintenanceMode->set(false); + $this->disableMaintenanceMode($output); } catch (\Exception $e) { $output->writeln('' . $e->getMessage() . ''); $output->writeln('Please disable maintenance mode after you resolved above issues'); @@ -378,4 +381,40 @@ private function setAreaCode() $configLoader = $this->objectManager->get(\Magento\Framework\ObjectManager\ConfigLoaderInterface::class); $this->objectManager->configure($configLoader->load($areaCode)); } + + /** + * Enable maintenance mode + * + * @param OutputInterface $output + * @return void + */ + private function enableMaintenanceMode(OutputInterface $output) + { + if ($this->maintenanceMode->isOn()) { + $this->skipDisableMaintenanceMode = true; + $output->writeln('Maintenance mode already enabled'); + return; + } + + $this->maintenanceMode->set(true); + $this->skipDisableMaintenanceMode = false; + $output->writeln('Enabling maintenance mode'); + } + + /** + * Disable maintenance mode + * + * @param OutputInterface $output + * @return void + */ + private function disableMaintenanceMode(OutputInterface $output) + { + if ($this->skipDisableMaintenanceMode) { + $output->writeln('Skipped disabling maintenance mode'); + return; + } + + $this->maintenanceMode->set(false); + $output->writeln('Disabling maintenance mode'); + } } diff --git a/setup/src/Magento/Setup/Console/Command/RollbackCommand.php b/setup/src/Magento/Setup/Console/Command/RollbackCommand.php index 2d728e22fa140..50cd8d69bc0e8 100644 --- a/setup/src/Magento/Setup/Console/Command/RollbackCommand.php +++ b/setup/src/Magento/Setup/Console/Command/RollbackCommand.php @@ -54,6 +54,11 @@ class RollbackCommand extends AbstractSetupCommand */ private $deploymentConfig; + /** + * @var bool + */ + private $skipDisableMaintenanceMode; + /** * Constructor * @@ -117,8 +122,7 @@ protected function execute(InputInterface $input, OutputInterface $output) } $returnValue = \Magento\Framework\Console\Cli::RETURN_SUCCESS; try { - $output->writeln('Enabling maintenance mode'); - $this->maintenanceMode->set(true); + $this->enableMaintenanceMode($output); $helper = $this->getHelper('question'); $question = new ConfirmationQuestion( 'You are about to remove current code and/or database tables. Are you sure?[y/N]', @@ -134,8 +138,7 @@ protected function execute(InputInterface $input, OutputInterface $output) // we must have an exit code higher than zero to indicate something was wrong $returnValue = \Magento\Framework\Console\Cli::RETURN_FAILURE; } finally { - $output->writeln('Disabling maintenance mode'); - $this->maintenanceMode->set(false); + $this->disableMaintenanceMode($output); } return $returnValue; } @@ -187,4 +190,40 @@ private function setAreaCode() $configLoader = $this->objectManager->get(\Magento\Framework\ObjectManager\ConfigLoaderInterface::class); $this->objectManager->configure($configLoader->load($areaCode)); } + + /** + * Enable maintenance mode + * + * @param OutputInterface $output + * @return void + */ + private function enableMaintenanceMode(OutputInterface $output) + { + if ($this->maintenanceMode->isOn()) { + $this->skipDisableMaintenanceMode = true; + $output->writeln('Maintenance mode already enabled'); + return; + } + + $this->maintenanceMode->set(true); + $this->skipDisableMaintenanceMode = false; + $output->writeln('Enabling maintenance mode'); + } + + /** + * Disable maintenance mode + * + * @param OutputInterface $output + * @return void + */ + private function disableMaintenanceMode(OutputInterface $output) + { + if ($this->skipDisableMaintenanceMode) { + $output->writeln('Skipped disabling maintenance mode'); + return; + } + + $this->maintenanceMode->set(false); + $output->writeln('Disabling maintenance mode'); + } } From 729501733e450c1f040298c480389f7c53b9746c Mon Sep 17 00:00:00 2001 From: Joke Puts Date: Tue, 26 Sep 2017 16:47:51 +0200 Subject: [PATCH 002/653] Moved all maintenance logic to MaintenanceModeEnabler --- app/code/Magento/Deploy/Model/Mode.php | 53 ++------------ .../Deploy/Test/Unit/Model/ModeTest.php | 6 +- .../Console/Command/ThemeUninstallCommand.php | 55 ++------------- .../Command/ThemeUninstallCommandTest.php | 4 +- .../App/Console/MaintenanceModeEnabler.php | 70 +++++++++++++++++++ .../Setup/Console/Command/BackupCommand.php | 55 ++------------- .../Command/ModuleUninstallCommand.php | 55 ++------------- .../Setup/Console/Command/RollbackCommand.php | 53 ++------------ .../Console/Command/BackupCommandTest.php | 2 +- .../Command/ModuleUninstallCommandTest.php | 4 +- .../Console/Command/RollbackCommandTest.php | 2 +- 11 files changed, 109 insertions(+), 250 deletions(-) create mode 100644 lib/internal/Magento/Framework/App/Console/MaintenanceModeEnabler.php diff --git a/app/code/Magento/Deploy/Model/Mode.php b/app/code/Magento/Deploy/Model/Mode.php index e1efc9ff711e1..58ffad17fd25b 100644 --- a/app/code/Magento/Deploy/Model/Mode.php +++ b/app/code/Magento/Deploy/Model/Mode.php @@ -8,10 +8,10 @@ use Magento\Deploy\App\Mode\ConfigProvider; use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig\Reader; use Magento\Framework\App\DeploymentConfig\Writer; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\App\MaintenanceMode; use Magento\Framework\App\State; use Magento\Framework\Config\File\ConfigFilePool; use Symfony\Component\Console\Input\InputInterface; @@ -50,7 +50,7 @@ class Mode private $reader; /** - * @var MaintenanceMode + * @var MaintenanceModeEnabler */ private $maintenanceMode; @@ -78,17 +78,12 @@ class Mode */ private $emulatedAreaProcessor; - /** - * @var bool - */ - private $skipDisableMaintenanceMode; - /** * @param InputInterface $input * @param OutputInterface $output * @param Writer $writer * @param Reader $reader - * @param MaintenanceMode $maintenanceMode + * @param MaintenanceModeEnabler $maintenanceMode * @param Filesystem $filesystem * @param ConfigProvider $configProvider * @param ProcessorFacadeFactory $processorFacadeFactory @@ -99,7 +94,7 @@ public function __construct( OutputInterface $output, Writer $writer, Reader $reader, - MaintenanceMode $maintenanceMode, + MaintenanceModeEnabler $maintenanceMode, Filesystem $filesystem, ConfigProvider $configProvider = null, ProcessorFacadeFactory $processorFacadeFactory = null, @@ -128,7 +123,7 @@ public function __construct( */ public function enableProductionMode() { - $this->enableMaintenanceMode($this->output); + $this->maintenanceMode->enableMaintenanceMode($this->output); $previousMode = $this->getMode(); try { // We have to turn on production mode before generation. @@ -140,7 +135,7 @@ public function enableProductionMode() $this->setStoreMode($previousMode); throw $e; } - $this->disableMaintenanceMode($this->output); + $this->maintenanceMode->disableMaintenanceMode($this->output); } /** @@ -223,40 +218,4 @@ private function saveAppConfigs($mode) $this->output->writeln('Config "' . $path . ' = ' . $value . '" has been saved.'); } } - - /** - * Enable maintenance mode - * - * @param OutputInterface $output - * @return void - */ - protected function enableMaintenanceMode(OutputInterface $output) - { - if ($this->maintenanceMode->isOn()) { - $this->skipDisableMaintenanceMode = true; - $output->writeln('Maintenance mode already enabled'); - return; - } - - $this->maintenanceMode->set(true); - $this->skipDisableMaintenanceMode = false; - $output->writeln('Enabled maintenance mode'); - } - - /** - * Disable maintenance mode - * - * @param OutputInterface $output - * @return void - */ - protected function disableMaintenanceMode(OutputInterface $output) - { - if ($this->skipDisableMaintenanceMode) { - $output->writeln('Skipped disabling maintenance mode'); - return; - } - - $this->maintenanceMode->set(false); - $output->writeln('Disabled maintenance mode'); - } } diff --git a/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php b/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php index f80c6cb69f1a9..3a171228a88f9 100644 --- a/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php +++ b/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php @@ -12,9 +12,9 @@ use Magento\Deploy\Model\Filesystem; use Magento\Deploy\Model\Mode; use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig\Reader; use Magento\Framework\App\DeploymentConfig\Writer; -use Magento\Framework\App\MaintenanceMode; use Magento\Framework\App\State; use PHPUnit_Framework_MockObject_MockObject as Mock; use Symfony\Component\Console\Input\InputInterface; @@ -54,7 +54,7 @@ class ModeTest extends \PHPUnit\Framework\TestCase private $writerMock; /** - * @var MaintenanceMode|Mock + * @var MaintenanceModeEnabler|Mock */ private $maintenanceMock; @@ -95,7 +95,7 @@ protected function setUp() $this->readerMock = $this->getMockBuilder(Reader::class) ->disableOriginalConstructor() ->getMock(); - $this->maintenanceMock = $this->getMockBuilder(MaintenanceMode::class) + $this->maintenanceMock = $this->getMockBuilder(MaintenanceModeEnabler::class) ->disableOriginalConstructor() ->getMock(); $this->filesystemMock = $this->getMockBuilder(Filesystem::class) diff --git a/app/code/Magento/Theme/Console/Command/ThemeUninstallCommand.php b/app/code/Magento/Theme/Console/Command/ThemeUninstallCommand.php index 9d747799ddb47..def73c33e8a8a 100644 --- a/app/code/Magento/Theme/Console/Command/ThemeUninstallCommand.php +++ b/app/code/Magento/Theme/Console/Command/ThemeUninstallCommand.php @@ -8,7 +8,7 @@ use Magento\Framework\App\Area; use Magento\Framework\App\Cache; -use Magento\Framework\App\MaintenanceMode; +use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\State\CleanupFiles; use Magento\Framework\Composer\ComposerInformation; use Magento\Framework\Composer\DependencyChecker; @@ -40,9 +40,7 @@ class ThemeUninstallCommand extends Command const INPUT_KEY_CLEAR_STATIC_CONTENT = 'clear-static-content'; /** - * Maintenance Mode - * - * @var MaintenanceMode + * @var MaintenanceModeEnabler */ private $maintenanceMode; @@ -116,18 +114,13 @@ class ThemeUninstallCommand extends Command */ private $themeDependencyChecker; - /** - * @var bool - */ - private $skipDisableMaintenanceMode; - /** * Constructor * * @param Cache $cache * @param CleanupFiles $cleanupFiles * @param ComposerInformation $composer - * @param MaintenanceMode $maintenanceMode + * @param MaintenanceModeEnabler $maintenanceMode * @param DependencyChecker $dependencyChecker * @param Collection $themeCollection * @param BackupRollbackFactory $backupRollbackFactory @@ -140,7 +133,7 @@ public function __construct( Cache $cache, CleanupFiles $cleanupFiles, ComposerInformation $composer, - MaintenanceMode $maintenanceMode, + MaintenanceModeEnabler $maintenanceMode, DependencyChecker $dependencyChecker, Collection $themeCollection, BackupRollbackFactory $backupRollbackFactory, @@ -220,7 +213,7 @@ protected function execute(InputInterface $input, OutputInterface $output) } try { - $this->enableMaintenanceMode($output); + $this->maintenanceMode->enableMaintenanceMode($output); if ($input->getOption(self::INPUT_KEY_BACKUP_CODE)) { $time = time(); $codeBackup = $this->backupRollbackFactory->create($output); @@ -231,7 +224,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $this->themeUninstaller->uninstallCode($output, $themePaths); $this->cleanup($input, $output); - $this->disableMaintenanceMode($output); + $this->maintenanceMode->disableMaintenanceMode($output); } catch (\Exception $e) { $output->writeln('' . $e->getMessage() . ''); $output->writeln('Please disable maintenance mode after you resolved above issues'); @@ -378,40 +371,4 @@ private function cleanup(InputInterface $input, OutputInterface $output) ); } } - - /** - * Enable maintenance mode - * - * @param OutputInterface $output - * @return void - */ - private function enableMaintenanceMode(OutputInterface $output) - { - if ($this->maintenanceMode->isOn()) { - $this->skipDisableMaintenanceMode = true; - $output->writeln('Maintenance mode already enabled'); - return; - } - - $this->maintenanceMode->set(true); - $this->skipDisableMaintenanceMode = false; - $output->writeln('Enabling maintenance mode'); - } - - /** - * Disable maintenance mode - * - * @param OutputInterface $output - * @return void - */ - private function disableMaintenanceMode(OutputInterface $output) - { - if ($this->skipDisableMaintenanceMode) { - $output->writeln('Skipped disabling maintenance mode'); - return; - } - - $this->maintenanceMode->set(false); - $output->writeln('Disabling maintenance mode'); - } } diff --git a/app/code/Magento/Theme/Test/Unit/Console/Command/ThemeUninstallCommandTest.php b/app/code/Magento/Theme/Test/Unit/Console/Command/ThemeUninstallCommandTest.php index abd4c91a7e1b7..1aa17f990bebf 100644 --- a/app/code/Magento/Theme/Test/Unit/Console/Command/ThemeUninstallCommandTest.php +++ b/app/code/Magento/Theme/Test/Unit/Console/Command/ThemeUninstallCommandTest.php @@ -19,7 +19,7 @@ class ThemeUninstallCommandTest extends \PHPUnit\Framework\TestCase { /** - * @var \Magento\Framework\App\MaintenanceMode|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\App\Console\MaintenanceModeEnabler|\PHPUnit_Framework_MockObject_MockObject */ private $maintenanceMode; @@ -82,7 +82,7 @@ class ThemeUninstallCommandTest extends \PHPUnit\Framework\TestCase protected function setUp() { - $this->maintenanceMode = $this->createMock(\Magento\Framework\App\MaintenanceMode::class); + $this->maintenanceMode = $this->createMock(\Magento\Framework\App\Console\MaintenanceModeEnabler::class); $composerInformation = $this->createMock(\Magento\Framework\Composer\ComposerInformation::class); $composerInformation->expects($this->any()) ->method('getRootRequiredPackages') diff --git a/lib/internal/Magento/Framework/App/Console/MaintenanceModeEnabler.php b/lib/internal/Magento/Framework/App/Console/MaintenanceModeEnabler.php new file mode 100644 index 0000000000000..f2d106c5d3644 --- /dev/null +++ b/lib/internal/Magento/Framework/App/Console/MaintenanceModeEnabler.php @@ -0,0 +1,70 @@ +maintenanceMode = $maintenanceMode; + } + + /** + * Enable maintenance mode + * + * @param OutputInterface $output + * @return void + */ + public function enableMaintenanceMode(OutputInterface $output) + { + if ($this->maintenanceMode->isOn()) { + $this->skipDisableMaintenanceMode = true; + $output->writeln('Maintenance mode already enabled'); + return; + } + + $this->maintenanceMode->set(true); + $this->skipDisableMaintenanceMode = false; + $output->writeln('Enabling maintenance mode'); + } + + /** + * Disable maintenance mode + * + * @param OutputInterface $output + * @return void + */ + public function disableMaintenanceMode(OutputInterface $output) + { + if ($this->skipDisableMaintenanceMode) { + $output->writeln('Skipped disabling maintenance mode'); + return; + } + + $this->maintenanceMode->set(false); + $output->writeln('Disabling maintenance mode'); + } +} diff --git a/setup/src/Magento/Setup/Console/Command/BackupCommand.php b/setup/src/Magento/Setup/Console/Command/BackupCommand.php index d85d7d1f8fd10..4cf23e4fbe3c3 100644 --- a/setup/src/Magento/Setup/Console/Command/BackupCommand.php +++ b/setup/src/Magento/Setup/Console/Command/BackupCommand.php @@ -5,8 +5,8 @@ */ namespace Magento\Setup\Console\Command; +use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig; -use Magento\Framework\App\MaintenanceMode; use Magento\Framework\Backup\Factory; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Setup\BackupRollbackFactory; @@ -37,9 +37,7 @@ class BackupCommand extends AbstractSetupCommand private $objectManager; /** - * Handler for maintenance mode - * - * @var MaintenanceMode + * @var MaintenanceModeEnabler */ private $maintenanceMode; @@ -57,21 +55,16 @@ class BackupCommand extends AbstractSetupCommand */ private $deploymentConfig; - /** - * @var bool - */ - private $skipDisableMaintenanceMode; - /** * Constructor * * @param ObjectManagerProvider $objectManagerProvider - * @param MaintenanceMode $maintenanceMode + * @param MaintenanceModeEnabler $maintenanceMode * @param DeploymentConfig $deploymentConfig */ public function __construct( ObjectManagerProvider $objectManagerProvider, - MaintenanceMode $maintenanceMode, + MaintenanceModeEnabler $maintenanceMode, DeploymentConfig $deploymentConfig ) { $this->objectManager = $objectManagerProvider->get(); @@ -126,7 +119,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $returnValue = \Magento\Framework\Console\Cli::RETURN_SUCCESS; try { $inputOptionProvided = false; - $this->enableMaintenanceMode($output); + $this->maintenanceMode->enableMaintenanceMode($output); $time = time(); $backupHandler = $this->backupRollbackFactory->create($output); if ($input->getOption(self::INPUT_KEY_CODE)) { @@ -151,7 +144,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $output->writeln('' . $e->getMessage() . ''); $returnValue = \Magento\Framework\Console\Cli::RETURN_FAILURE; } finally { - $this->disableMaintenanceMode($output); + $this->maintenanceMode->disableMaintenanceMode($output); } return $returnValue; } @@ -171,40 +164,4 @@ private function setAreaCode() $configLoader = $this->objectManager->get(\Magento\Framework\ObjectManager\ConfigLoaderInterface::class); $this->objectManager->configure($configLoader->load($areaCode)); } - - /** - * Enable maintenance mode - * - * @param OutputInterface $output - * @return void - */ - private function enableMaintenanceMode(OutputInterface $output) - { - if ($this->maintenanceMode->isOn()) { - $this->skipDisableMaintenanceMode = true; - $output->writeln('Maintenance mode already enabled'); - return; - } - - $this->maintenanceMode->set(true); - $this->skipDisableMaintenanceMode = false; - $output->writeln('Enabling maintenance mode'); - } - - /** - * Disable maintenance mode - * - * @param OutputInterface $output - * @return void - */ - private function disableMaintenanceMode(OutputInterface $output) - { - if ($this->skipDisableMaintenanceMode) { - $output->writeln('Skipped disabling maintenance mode'); - return; - } - - $this->maintenanceMode->set(false); - $output->writeln('Disabling maintenance mode'); - } } diff --git a/setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php b/setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php index dd121721f485f..15dee6e2ee355 100644 --- a/setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php +++ b/setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php @@ -5,8 +5,8 @@ */ namespace Magento\Setup\Console\Command; +use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig; -use Magento\Framework\App\MaintenanceMode; use Magento\Framework\Backup\Factory; use Magento\Framework\Composer\ComposerInformation; use Magento\Framework\Module\DependencyChecker; @@ -39,9 +39,7 @@ class ModuleUninstallCommand extends AbstractModuleCommand const INPUT_KEY_BACKUP_DB = 'backup-db'; /** - * Maintenance mode - * - * @var MaintenanceMode + * @var MaintenanceModeEnabler */ private $maintenanceMode; @@ -108,18 +106,13 @@ class ModuleUninstallCommand extends AbstractModuleCommand */ private $moduleRegistryUninstaller; - /** - * @var bool - */ - private $skipDisableMaintenanceMode; - /** * Constructor * * @param ComposerInformation $composer * @param DeploymentConfig $deploymentConfig * @param FullModuleList $fullModuleList - * @param MaintenanceMode $maintenanceMode + * @param MaintenanceModeEnabler $maintenanceMode * @param ObjectManagerProvider $objectManagerProvider * @param UninstallCollector $collector * @param ModuleUninstaller $moduleUninstaller @@ -129,7 +122,7 @@ public function __construct( ComposerInformation $composer, DeploymentConfig $deploymentConfig, FullModuleList $fullModuleList, - MaintenanceMode $maintenanceMode, + MaintenanceModeEnabler $maintenanceMode, ObjectManagerProvider $objectManagerProvider, UninstallCollector $collector, ModuleUninstaller $moduleUninstaller, @@ -233,7 +226,7 @@ protected function execute(InputInterface $input, OutputInterface $output) return \Magento\Framework\Console\Cli::RETURN_FAILURE; } try { - $this->enableMaintenanceMode($output); + $this->maintenanceMode->enableMaintenanceMode($output); $this->takeBackup($input, $output); $dbBackupOption = $input->getOption(self::INPUT_KEY_BACKUP_DB); if ($input->getOption(self::INPUT_KEY_REMOVE_DATA)) { @@ -259,7 +252,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $this->moduleRegistryUninstaller->removeModulesFromDeploymentConfig($output, $modules); $this->moduleUninstaller->uninstallCode($output, $modules); $this->cleanup($input, $output); - $this->disableMaintenanceMode($output); + $this->maintenanceMode->disableMaintenanceMode($output); } catch (\Exception $e) { $output->writeln('' . $e->getMessage() . ''); $output->writeln('Please disable maintenance mode after you resolved above issues'); @@ -381,40 +374,4 @@ private function setAreaCode() $configLoader = $this->objectManager->get(\Magento\Framework\ObjectManager\ConfigLoaderInterface::class); $this->objectManager->configure($configLoader->load($areaCode)); } - - /** - * Enable maintenance mode - * - * @param OutputInterface $output - * @return void - */ - private function enableMaintenanceMode(OutputInterface $output) - { - if ($this->maintenanceMode->isOn()) { - $this->skipDisableMaintenanceMode = true; - $output->writeln('Maintenance mode already enabled'); - return; - } - - $this->maintenanceMode->set(true); - $this->skipDisableMaintenanceMode = false; - $output->writeln('Enabling maintenance mode'); - } - - /** - * Disable maintenance mode - * - * @param OutputInterface $output - * @return void - */ - private function disableMaintenanceMode(OutputInterface $output) - { - if ($this->skipDisableMaintenanceMode) { - $output->writeln('Skipped disabling maintenance mode'); - return; - } - - $this->maintenanceMode->set(false); - $output->writeln('Disabling maintenance mode'); - } } diff --git a/setup/src/Magento/Setup/Console/Command/RollbackCommand.php b/setup/src/Magento/Setup/Console/Command/RollbackCommand.php index 50cd8d69bc0e8..afe433d55c18c 100644 --- a/setup/src/Magento/Setup/Console/Command/RollbackCommand.php +++ b/setup/src/Magento/Setup/Console/Command/RollbackCommand.php @@ -5,8 +5,8 @@ */ namespace Magento\Setup\Console\Command; +use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig; -use Magento\Framework\App\MaintenanceMode; use Magento\Framework\Backup\Factory; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Setup\BackupRollbackFactory; @@ -38,7 +38,7 @@ class RollbackCommand extends AbstractSetupCommand private $objectManager; /** - * @var MaintenanceMode + * @var MaintenanceModeEnabler */ private $maintenanceMode; @@ -54,21 +54,16 @@ class RollbackCommand extends AbstractSetupCommand */ private $deploymentConfig; - /** - * @var bool - */ - private $skipDisableMaintenanceMode; - /** * Constructor * * @param ObjectManagerProvider $objectManagerProvider - * @param MaintenanceMode $maintenanceMode + * @param MaintenanceModeEnabler $maintenanceMode * @param DeploymentConfig $deploymentConfig */ public function __construct( ObjectManagerProvider $objectManagerProvider, - MaintenanceMode $maintenanceMode, + MaintenanceModeEnabler $maintenanceMode, DeploymentConfig $deploymentConfig ) { $this->objectManager = $objectManagerProvider->get(); @@ -122,7 +117,7 @@ protected function execute(InputInterface $input, OutputInterface $output) } $returnValue = \Magento\Framework\Console\Cli::RETURN_SUCCESS; try { - $this->enableMaintenanceMode($output); + $this->maintenanceMode->enableMaintenanceMode($output); $helper = $this->getHelper('question'); $question = new ConfirmationQuestion( 'You are about to remove current code and/or database tables. Are you sure?[y/N]', @@ -138,7 +133,7 @@ protected function execute(InputInterface $input, OutputInterface $output) // we must have an exit code higher than zero to indicate something was wrong $returnValue = \Magento\Framework\Console\Cli::RETURN_FAILURE; } finally { - $this->disableMaintenanceMode($output); + $this->maintenanceMode->disableMaintenanceMode($output); } return $returnValue; } @@ -190,40 +185,4 @@ private function setAreaCode() $configLoader = $this->objectManager->get(\Magento\Framework\ObjectManager\ConfigLoaderInterface::class); $this->objectManager->configure($configLoader->load($areaCode)); } - - /** - * Enable maintenance mode - * - * @param OutputInterface $output - * @return void - */ - private function enableMaintenanceMode(OutputInterface $output) - { - if ($this->maintenanceMode->isOn()) { - $this->skipDisableMaintenanceMode = true; - $output->writeln('Maintenance mode already enabled'); - return; - } - - $this->maintenanceMode->set(true); - $this->skipDisableMaintenanceMode = false; - $output->writeln('Enabling maintenance mode'); - } - - /** - * Disable maintenance mode - * - * @param OutputInterface $output - * @return void - */ - private function disableMaintenanceMode(OutputInterface $output) - { - if ($this->skipDisableMaintenanceMode) { - $output->writeln('Skipped disabling maintenance mode'); - return; - } - - $this->maintenanceMode->set(false); - $output->writeln('Disabling maintenance mode'); - } } diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php index b44dcb123632e..7800c59adac98 100644 --- a/setup/src/Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php @@ -37,7 +37,7 @@ class BackupCommandTest extends \PHPUnit\Framework\TestCase public function setUp() { - $maintenanceMode = $this->createMock(\Magento\Framework\App\MaintenanceMode::class); + $maintenanceMode = $this->createMock(\Magento\Framework\App\Console\MaintenanceModeEnabler::class); $objectManagerProvider = $this->createMock(\Magento\Setup\Model\ObjectManagerProvider::class); $this->objectManager = $this->getMockForAbstractClass( \Magento\Framework\ObjectManagerInterface::class, diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/ModuleUninstallCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/ModuleUninstallCommandTest.php index affff69d83544..50bdce4e425b4 100644 --- a/setup/src/Magento/Setup/Test/Unit/Console/Command/ModuleUninstallCommandTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/ModuleUninstallCommandTest.php @@ -26,7 +26,7 @@ class ModuleUninstallCommandTest extends \PHPUnit\Framework\TestCase private $fullModuleList; /** - * @var \Magento\Framework\App\MaintenanceMode|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\App\Console\MaintenanceModeEnabler|\PHPUnit_Framework_MockObject_MockObject */ private $maintenanceMode; @@ -102,7 +102,7 @@ public function setUp() { $this->deploymentConfig = $this->createMock(\Magento\Framework\App\DeploymentConfig::class); $this->fullModuleList = $this->createMock(\Magento\Framework\Module\FullModuleList::class); - $this->maintenanceMode = $this->createMock(\Magento\Framework\App\MaintenanceMode::class); + $this->maintenanceMode = $this->createMock(\Magento\Framework\App\Console\MaintenanceModeEnabler::class); $objectManagerProvider = $this->createMock(\Magento\Setup\Model\ObjectManagerProvider::class); $objectManager = $this->getMockForAbstractClass( \Magento\Framework\ObjectManagerInterface::class, diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php index 6c2e22a9a202c..df04fdfa68ef4 100644 --- a/setup/src/Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php @@ -53,7 +53,7 @@ class RollbackCommandTest extends \PHPUnit\Framework\TestCase public function setUp() { $this->deploymentConfig = $this->createMock(\Magento\Framework\App\DeploymentConfig::class); - $maintenanceMode = $this->createMock(\Magento\Framework\App\MaintenanceMode::class); + $maintenanceMode = $this->createMock(\Magento\Framework\App\Console\MaintenanceModeEnabler::class); $this->objectManager = $this->getMockForAbstractClass( \Magento\Framework\ObjectManagerInterface::class, [], From aa1f29c00f5d3acd64bba8cd4b41092bcb9e745b Mon Sep 17 00:00:00 2001 From: Joke Puts Date: Tue, 26 Sep 2017 16:59:52 +0200 Subject: [PATCH 003/653] Updated tests to include the MaintenanceModeEnabler --- .../Console/Command/ThemeUninstallCommandTest.php | 8 ++++---- .../Unit/Console/Command/BackupCommandTest.php | 15 ++++++++++----- .../Unit/Console/Command/RollbackCommandTest.php | 15 ++++++++++----- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/code/Magento/Theme/Test/Unit/Console/Command/ThemeUninstallCommandTest.php b/app/code/Magento/Theme/Test/Unit/Console/Command/ThemeUninstallCommandTest.php index 1aa17f990bebf..ff6a040948784 100644 --- a/app/code/Magento/Theme/Test/Unit/Console/Command/ThemeUninstallCommandTest.php +++ b/app/code/Magento/Theme/Test/Unit/Console/Command/ThemeUninstallCommandTest.php @@ -304,9 +304,9 @@ public function testExecute() { $this->setUpExecute(); $this->cleanupFiles->expects($this->never())->method('clearMaterializedViewFiles'); + $this->maintenanceMode->expects($this->once())->method('enableMaintenanceMode'); + $this->maintenanceMode->expects($this->once())->method('disableMaintenanceMode'); $this->tester->execute(['theme' => ['area/vendor/test']]); - $this->assertContains('Enabling maintenance mode', $this->tester->getDisplay()); - $this->assertContains('Disabling maintenance mode', $this->tester->getDisplay()); $this->assertContains('Alert: Generated static view files were not cleared.', $this->tester->getDisplay()); $this->assertNotContains('Generated static view files cleared successfully', $this->tester->getDisplay()); } @@ -315,9 +315,9 @@ public function testExecuteCleanStaticFiles() { $this->setUpExecute(); $this->cleanupFiles->expects($this->once())->method('clearMaterializedViewFiles'); + $this->maintenanceMode->expects($this->once())->method('enableMaintenanceMode'); + $this->maintenanceMode->expects($this->once())->method('disableMaintenanceMode'); $this->tester->execute(['theme' => ['area/vendor/test'], '-c' => true]); - $this->assertContains('Enabling maintenance mode', $this->tester->getDisplay()); - $this->assertContains('Disabling maintenance mode', $this->tester->getDisplay()); $this->assertNotContains('Alert: Generated static view files were not cleared.', $this->tester->getDisplay()); $this->assertContains('Generated static view files cleared successfully', $this->tester->getDisplay()); } diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php index 7800c59adac98..f28d7756f7d37 100644 --- a/setup/src/Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php @@ -35,9 +35,14 @@ class BackupCommandTest extends \PHPUnit\Framework\TestCase */ private $deploymentConfig; + /** + * @var \Magento\Framework\App\Console\MaintenanceModeEnabler|\PHPUnit_Framework_MockObject_MockObject + */ + private $maintenanceMode; + public function setUp() { - $maintenanceMode = $this->createMock(\Magento\Framework\App\Console\MaintenanceModeEnabler::class); + $this->maintenanceMode = $this->createMock(\Magento\Framework\App\Console\MaintenanceModeEnabler::class); $objectManagerProvider = $this->createMock(\Magento\Setup\Model\ObjectManagerProvider::class); $this->objectManager = $this->getMockForAbstractClass( \Magento\Framework\ObjectManagerInterface::class, @@ -72,7 +77,7 @@ public function setUp() ); $command = new BackupCommand( $objectManagerProvider, - $maintenanceMode, + $this->maintenanceMode, $this->deploymentConfig ); $this->tester = new CommandTester($command); @@ -128,10 +133,10 @@ public function testExecuteNoOptions() $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->will($this->returnValue(false)); + $this->maintenanceMode->expects($this->once())->method('enableMaintenanceMode'); + $this->maintenanceMode->expects($this->once())->method('disableMaintenanceMode'); $this->tester->execute([]); - $expected = 'Enabling maintenance mode' . PHP_EOL - . 'Not enough information provided to take backup.' . PHP_EOL - . 'Disabling maintenance mode' . PHP_EOL; + $expected = 'Not enough information provided to take backup.' . PHP_EOL; $this->assertSame($expected, $this->tester->getDisplay()); } } diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php index df04fdfa68ef4..300caaa0333f1 100644 --- a/setup/src/Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php @@ -50,10 +50,15 @@ class RollbackCommandTest extends \PHPUnit\Framework\TestCase */ private $command; + /** + * @var \Magento\Framework\App\Console\MaintenanceModeEnabler|\PHPUnit_Framework_MockObject_MockObject + */ + private $maintenanceMode; + public function setUp() { $this->deploymentConfig = $this->createMock(\Magento\Framework\App\DeploymentConfig::class); - $maintenanceMode = $this->createMock(\Magento\Framework\App\Console\MaintenanceModeEnabler::class); + $this->maintenanceMode = $this->createMock(\Magento\Framework\App\Console\MaintenanceModeEnabler::class); $this->objectManager = $this->getMockForAbstractClass( \Magento\Framework\ObjectManagerInterface::class, [], @@ -95,7 +100,7 @@ public function setUp() ->will($this->returnValue($this->question)); $this->command = new RollbackCommand( $objectManagerProvider, - $maintenanceMode, + $this->maintenanceMode, $this->deploymentConfig ); $this->command->setHelperSet($this->helperSet); @@ -152,10 +157,10 @@ public function testExecuteNoOptions() $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->will($this->returnValue(true)); + $this->maintenanceMode->expects($this->once())->method('enableMaintenanceMode'); + $this->maintenanceMode->expects($this->once())->method('disableMaintenanceMode'); $this->tester->execute([]); - $expected = 'Enabling maintenance mode' . PHP_EOL - . 'Not enough information provided to roll back.' . PHP_EOL - . 'Disabling maintenance mode' . PHP_EOL; + $expected = 'Not enough information provided to roll back.' . PHP_EOL; $this->assertSame($expected, $this->tester->getDisplay()); } From d2e0d446b1a72be0b473562f732d15c5446eaf10 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Tue, 26 Sep 2017 16:13:12 +0200 Subject: [PATCH 004/653] Replace expectException(, ) in unit tests expectException(); expectExceptionMessage() --- .../Config/SessionLifetime/BackendModelTest.php | 3 ++- .../Test/Unit/Model/CategoryRepositoryTest.php | 3 ++- .../Model/Indexer/Product/Eav/Action/FullTest.php | 3 ++- .../Unit/Model/Indexer/Stock/Action/FullTest.php | 3 ++- .../System/Config/Form/Field/RegexceptionsTest.php | 3 ++- .../Command/ConfigSet/ProcessorFacadeTest.php | 3 ++- .../Mapper/Helper/RelativePathConverterTest.php | 6 ++++-- .../Magento/Config/Test/Unit/Model/ConfigTest.php | 3 ++- .../Test/Unit/Model/OptionRepositoryTest.php | 3 ++- .../Model/Product/Cache/Tag/ConfigurableTest.php | 6 ++++-- .../Magento/Customer/Test/Unit/Model/LoggerTest.php | 3 ++- .../Test/Unit/Model/Currency/Import/ConfigTest.php | 3 ++- .../Eav/Test/Unit/Model/Entity/Attribute/SetTest.php | 3 ++- .../Email/Test/Unit/Model/Template/ConfigTest.php | 3 ++- .../Integration/Test/Unit/Model/Oauth/TokenTest.php | 12 ++++++++---- .../Magento/Paypal/Test/Unit/Model/Api/NvpTest.php | 3 ++- .../Rule/Test/Unit/Model/ConditionFactoryTest.php | 6 ++++-- .../Test/Unit/Model/CouponRepositoryTest.php | 3 ++- .../Unit/Model/Calculation/RateRepositoryTest.php | 3 ++- .../Tax/Test/Unit/Model/Calculation/RateTest.php | 3 ++- .../Tax/Test/Unit/Model/TaxRuleRepositoryTest.php | 3 ++- .../CleanThemeRelatedContentObserverTest.php | 3 ++- app/code/Magento/Webapi/Test/Unit/ExceptionTest.php | 3 ++- .../Unit/Model/Attribute/Backend/Weee/TaxTest.php | 3 ++- 24 files changed, 60 insertions(+), 30 deletions(-) diff --git a/app/code/Magento/Backend/Test/Unit/Model/Config/SessionLifetime/BackendModelTest.php b/app/code/Magento/Backend/Test/Unit/Model/Config/SessionLifetime/BackendModelTest.php index 31a13191750a3..2f0102ffd410d 100755 --- a/app/code/Magento/Backend/Test/Unit/Model/Config/SessionLifetime/BackendModelTest.php +++ b/app/code/Magento/Backend/Test/Unit/Model/Config/SessionLifetime/BackendModelTest.php @@ -20,7 +20,8 @@ public function testBeforeSave($value, $errorMessage = null) \Magento\Backend\Model\Config\SessionLifetime\BackendModel::class ); if ($errorMessage !== null) { - $this->expectException(\Magento\Framework\Exception\LocalizedException::class, $errorMessage); + $this->expectException(\Magento\Framework\Exception\LocalizedException::class); + $this->expectExceptionMessage($errorMessage); } $model->setValue($value); $object = $model->beforeSave(); diff --git a/app/code/Magento/Catalog/Test/Unit/Model/CategoryRepositoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/CategoryRepositoryTest.php index 1bc5e450ae153..f77a6fec283a5 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/CategoryRepositoryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/CategoryRepositoryTest.php @@ -255,7 +255,8 @@ public function testSaveWithException() */ public function testSaveWithValidateCategoryException($error, $expectedException, $expectedExceptionMessage) { - $this->expectException($expectedException, $expectedExceptionMessage); + $this->expectException($expectedException); + $this->expectExceptionMessage($expectedExceptionMessage); $categoryId = 5; $categoryMock = $this->createMock(\Magento\Catalog\Model\Category::class); $this->extensibleDataObjectConverterMock diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/FullTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/FullTest.php index eb5fdabe53303..c254557904da1 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/FullTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/FullTest.php @@ -48,7 +48,8 @@ public function testExecuteWithAdapterErrorThrowsException() $tableSwitcherMock ); - $this->expectException(\Magento\Framework\Exception\LocalizedException::class, $exceptionMessage); + $this->expectException(\Magento\Framework\Exception\LocalizedException::class); + $this->expectExceptionMessage($exceptionMessage); $model->execute(); } diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/FullTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/FullTest.php index e1a19bf10ecd4..3590c96bd1532 100644 --- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/FullTest.php +++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/FullTest.php @@ -44,7 +44,8 @@ public function testExecuteWithAdapterErrorThrowsException() ] ); - $this->expectException(\Magento\Framework\Exception\LocalizedException::class, $exceptionMessage); + $this->expectException(\Magento\Framework\Exception\LocalizedException::class); + $this->expectExceptionMessage($exceptionMessage); $model->execute(); } diff --git a/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/Field/RegexceptionsTest.php b/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/Field/RegexceptionsTest.php index 4f53f1072e035..0b4d5f7ef15f7 100644 --- a/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/Field/RegexceptionsTest.php +++ b/app/code/Magento/Config/Test/Unit/Block/System/Config/Form/Field/RegexceptionsTest.php @@ -128,7 +128,8 @@ public function testRenderCellTemplateWrongColumnName() $this->object->addColumn($wrongColumnName, $this->cellParameters); - $this->expectException('\Exception', 'Wrong column name specified.'); + $this->expectException('\Exception'); + $this->expectExceptionMessage('Wrong column name specified.'); $this->object->renderCellTemplate($columnName); } diff --git a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php index 4e65ab3f4cc21..0f5852c322bdd 100644 --- a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php +++ b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php @@ -132,7 +132,8 @@ public function testProcess() */ public function testProcessWithValidatorException(LocalizedException $exception) { - $this->expectException(ValidatorException::class, 'Some error'); + $this->expectException(ValidatorException::class); + $this->expectExceptionMessage('Some error'); $this->scopeValidatorMock->expects($this->once()) ->method('isValid') ->willThrowException($exception); diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Mapper/Helper/RelativePathConverterTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Mapper/Helper/RelativePathConverterTest.php index c671a5326c4de..058f9a380a27d 100644 --- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Mapper/Helper/RelativePathConverterTest.php +++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Mapper/Helper/RelativePathConverterTest.php @@ -24,7 +24,8 @@ public function testConvertWithInvalidRelativePath() $exceptionMessage = sprintf('Invalid relative path %s in %s node', $relativePath, $nodePath); - $this->expectException('InvalidArgumentException', $exceptionMessage); + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage($exceptionMessage); $this->_sut->convert($nodePath, $relativePath); } @@ -35,7 +36,8 @@ public function testConvertWithInvalidRelativePath() */ public function testConvertWithInvalidArguments($nodePath, $relativePath) { - $this->expectException('InvalidArgumentException', 'Invalid arguments'); + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage('Invalid arguments'); $this->_sut->convert($nodePath, $relativePath); } diff --git a/app/code/Magento/Config/Test/Unit/Model/ConfigTest.php b/app/code/Magento/Config/Test/Unit/Model/ConfigTest.php index 2832e8e54e5f6..2ddbbd5ffe1e8 100644 --- a/app/code/Magento/Config/Test/Unit/Model/ConfigTest.php +++ b/app/code/Magento/Config/Test/Unit/Model/ConfigTest.php @@ -280,7 +280,8 @@ public function testSetDataByPathEmpty() public function testSetDataByPathWrongDepth($path, $expectedException) { $expectedException = 'Allowed depth of configuration is 3 (
//). ' . $expectedException; - $this->expectException('\UnexpectedValueException', $expectedException); + $this->expectException('\UnexpectedValueException'); + $this->expectExceptionMessage($expectedException); $value = 'value'; $this->_model->setDataByPath($path, $value); } diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/OptionRepositoryTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/OptionRepositoryTest.php index 2d824e52c7244..ab3fd33322aa5 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/OptionRepositoryTest.php +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/OptionRepositoryTest.php @@ -356,7 +356,8 @@ public function testGetListNotConfigurableProduct() */ public function testValidateNewOptionData($attributeId, $label, $optionValues, $msg) { - $this->expectException(\Magento\Framework\Exception\InputException::class, $msg); + $this->expectException(\Magento\Framework\Exception\InputException::class); + $this->expectExceptionMessage($msg); $optionValueMock = $this->getMockBuilder(\Magento\ConfigurableProduct\Api\Data\OptionValueInterface::class) ->setMethods(['getValueIndex', 'getPricingValue', 'getIsPercent']) ->getMockForAbstractClass(); diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Cache/Tag/ConfigurableTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Cache/Tag/ConfigurableTest.php index 519288a50c858..958b75a228518 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Cache/Tag/ConfigurableTest.php +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Cache/Tag/ConfigurableTest.php @@ -32,13 +32,15 @@ protected function setUp() public function testGetWithScalar() { - $this->expectException(\InvalidArgumentException::class, 'Provided argument is not an object'); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Provided argument is not an object'); $this->model->getTags('scalar'); } public function testGetTagsWithObject() { - $this->expectException(\InvalidArgumentException::class, 'Provided argument must be a product'); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Provided argument must be a product'); $this->model->getTags(new \StdClass()); } diff --git a/app/code/Magento/Customer/Test/Unit/Model/LoggerTest.php b/app/code/Magento/Customer/Test/Unit/Model/LoggerTest.php index 4cea7ee22837d..408389182ae49 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/LoggerTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/LoggerTest.php @@ -71,7 +71,8 @@ public function testLog($customerId, $data) $data = array_filter($data); if (!$data) { - $this->expectException('\InvalidArgumentException', 'Log data is empty'); + $this->expectException('\InvalidArgumentException'); + $this->expectExceptionMessage('Log data is empty'); $this->logger->log($customerId, $data); return; } diff --git a/app/code/Magento/Directory/Test/Unit/Model/Currency/Import/ConfigTest.php b/app/code/Magento/Directory/Test/Unit/Model/Currency/Import/ConfigTest.php index 54ec26386f3bd..76b23e4e79ec2 100644 --- a/app/code/Magento/Directory/Test/Unit/Model/Currency/Import/ConfigTest.php +++ b/app/code/Magento/Directory/Test/Unit/Model/Currency/Import/ConfigTest.php @@ -29,7 +29,8 @@ protected function setUp() */ public function testConstructorException(array $configData, $expectedException) { - $this->expectException('InvalidArgumentException', $expectedException); + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage($expectedException); new \Magento\Directory\Model\Currency\Import\Config($configData); } diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/SetTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/SetTest.php index 78465e57c6236..e976d031e965f 100644 --- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/SetTest.php +++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/SetTest.php @@ -44,7 +44,8 @@ public function testValidateWithExistingName($attributeSetName, $exceptionMessag { $this->_model->getResource()->expects($this->any())->method('validate')->will($this->returnValue(false)); - $this->expectException(\Magento\Framework\Exception\LocalizedException::class, $exceptionMessage); + $this->expectException(\Magento\Framework\Exception\LocalizedException::class); + $this->expectExceptionMessage($exceptionMessage); $this->_model->setAttributeSetName($attributeSetName); $this->_model->validate(); } diff --git a/app/code/Magento/Email/Test/Unit/Model/Template/ConfigTest.php b/app/code/Magento/Email/Test/Unit/Model/Template/ConfigTest.php index 6ec3905fe4633..47c3ac1e7e450 100644 --- a/app/code/Magento/Email/Test/Unit/Model/Template/ConfigTest.php +++ b/app/code/Magento/Email/Test/Unit/Model/Template/ConfigTest.php @@ -311,7 +311,8 @@ public function testGetterMethodUnknownField( array $fixtureFields = [], $argument = null ) { - $this->expectException('UnexpectedValueException', $expectedException); + $this->expectException('UnexpectedValueException'); + $this->expectExceptionMessage($expectedException); $dataStorage = $this->createPartialMock(\Magento\Email\Model\Template\Config\Data::class, ['get']); $dataStorage->expects( $this->atLeastOnce() diff --git a/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php b/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php index 36b0d77d1e1ae..badb69aa19fe4 100644 --- a/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php +++ b/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php @@ -384,7 +384,8 @@ public function testValidateIfNotCallbackEstablishedAndNotValid() $this->validatorMock->expects($this->once())->method('isValid')->willReturn(false); $this->validatorMock->expects($this->once())->method('getMessages')->willReturn([$exceptionMessage]); - $this->expectException(\Magento\Framework\Oauth\Exception::class, $exceptionMessage); + $this->expectException(\Magento\Framework\Oauth\Exception::class); + $this->expectExceptionMessage($exceptionMessage); $this->tokenModel->validate(); } @@ -402,7 +403,8 @@ public function testValidateIfSecretNotValid() $this->validatorKeyLengthMock->expects($this->once())->method('isValid')->willReturn(false); $this->validatorKeyLengthMock->expects($this->once())->method('getMessages')->willReturn([$exceptionMessage]); - $this->expectException(\Magento\Framework\Oauth\Exception::class, $exceptionMessage); + $this->expectException(\Magento\Framework\Oauth\Exception::class); + $this->expectExceptionMessage($exceptionMessage); $this->tokenModel->validate(); } @@ -429,7 +431,8 @@ public function testValidateIfTokenNotValid() ] ); $this->validatorKeyLengthMock->expects($this->once())->method('getMessages')->willReturn([$exceptionMessage]); - $this->expectException(\Magento\Framework\Oauth\Exception::class, $exceptionMessage); + $this->expectException(\Magento\Framework\Oauth\Exception::class); + $this->expectExceptionMessage($exceptionMessage); $this->tokenModel->validate(); } @@ -459,7 +462,8 @@ public function testValidateIfVerifierNotValid() ] ); $this->validatorKeyLengthMock->expects($this->once())->method('getMessages')->willReturn([$exceptionMessage]); - $this->expectException(\Magento\Framework\Oauth\Exception::class, $exceptionMessage); + $this->expectException(\Magento\Framework\Oauth\Exception::class); + $this->expectExceptionMessage($exceptionMessage); $this->tokenModel->validate(); } diff --git a/app/code/Magento/Paypal/Test/Unit/Model/Api/NvpTest.php b/app/code/Magento/Paypal/Test/Unit/Model/Api/NvpTest.php index 8b270fe24ab15..c0b2bb4fc1dca 100644 --- a/app/code/Magento/Paypal/Test/Unit/Model/Api/NvpTest.php +++ b/app/code/Magento/Paypal/Test/Unit/Model/Api/NvpTest.php @@ -126,7 +126,8 @@ protected function _invokeNvpProperty(\Magento\Paypal\Model\Api\Nvp $nvpObject, public function testCall($response, $processableErrors, $exception, $exceptionMessage = '', $exceptionCode = null) { if (isset($exception)) { - $this->expectException($exception, $exceptionMessage, $exceptionCode); + $this->expectException($exception); + $this->expectExceptionMessage($exceptionMessage, $exceptionCode); } $this->curl->expects($this->once()) ->method('read') diff --git a/app/code/Magento/Rule/Test/Unit/Model/ConditionFactoryTest.php b/app/code/Magento/Rule/Test/Unit/Model/ConditionFactoryTest.php index d8c0cc470f55e..f78ee4f345d0d 100644 --- a/app/code/Magento/Rule/Test/Unit/Model/ConditionFactoryTest.php +++ b/app/code/Magento/Rule/Test/Unit/Model/ConditionFactoryTest.php @@ -78,7 +78,8 @@ public function testCreateExceptionClass() ->expects($this->never()) ->method('create'); - $this->expectException(\InvalidArgumentException::class, 'Class does not exist'); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Class does not exist'); $this->conditionFactory->create($type); } @@ -92,7 +93,8 @@ public function testCreateExceptionType() ->method('create') ->with($type) ->willReturn(new \stdClass()); - $this->expectException(\InvalidArgumentException::class, 'Class does not implement condition interface'); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Class does not implement condition interface'); $this->conditionFactory->create($type); } } diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/CouponRepositoryTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/CouponRepositoryTest.php index ebdc10830f33f..31536e1be3d2e 100644 --- a/app/code/Magento/SalesRule/Test/Unit/Model/CouponRepositoryTest.php +++ b/app/code/Magento/SalesRule/Test/Unit/Model/CouponRepositoryTest.php @@ -150,7 +150,8 @@ public function testSaveWithExceptions($exceptionObject, $exceptionName, $except $this->resource->expects($this->once())->method('save')->with($coupon) ->willThrowException($exceptionObject); } - $this->expectException($exceptionName, $exceptionMessage); + $this->expectException($exceptionName); + $this->expectExceptionMessage($exceptionMessage); $this->model->save($coupon); } diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateRepositoryTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateRepositoryTest.php index db2053efd41f6..e6a29177301dd 100644 --- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateRepositoryTest.php +++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateRepositoryTest.php @@ -307,7 +307,8 @@ public function testSaveThrowsExceptionIfCannotSaveTitles($expectedException, $e ->with($rateTitles) ->willThrowException($expectedException); $this->rateRegistryMock->expects($this->never())->method('registerTaxRate')->with($rateMock); - $this->expectException($exceptionType, $exceptionMessage); + $this->expectException($exceptionType); + $this->expectExceptionMessage($exceptionMessage); $this->model->save($rateMock); } diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php index 5a5abfd828d88..c0a04a3fb45f6 100644 --- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php +++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php @@ -46,7 +46,8 @@ protected function setUp() */ public function testExceptionOfValidation($exceptionMessage, $data) { - $this->expectException(\Magento\Framework\Exception\LocalizedException::class, $exceptionMessage); + $this->expectException(\Magento\Framework\Exception\LocalizedException::class); + $this->expectExceptionMessage($exceptionMessage); $rate = $this->objectHelper->getObject( \Magento\Tax\Model\Calculation\Rate::class, ['resource' => $this->resourceMock] diff --git a/app/code/Magento/Tax/Test/Unit/Model/TaxRuleRepositoryTest.php b/app/code/Magento/Tax/Test/Unit/Model/TaxRuleRepositoryTest.php index 182e1b43d786c..f4151cd18ba66 100644 --- a/app/code/Magento/Tax/Test/Unit/Model/TaxRuleRepositoryTest.php +++ b/app/code/Magento/Tax/Test/Unit/Model/TaxRuleRepositoryTest.php @@ -163,7 +163,8 @@ public function testSaveWithExceptions($exceptionObject, $exceptionName, $except ->willThrowException($exceptionObject); $this->taxRuleRegistry->expects($this->never())->method('registerTaxRule'); - $this->expectException($exceptionName, $exceptionMessage); + $this->expectException($exceptionName); + $this->expectExceptionMessage($exceptionMessage); $this->model->save($rule); } diff --git a/app/code/Magento/Theme/Test/Unit/Observer/CleanThemeRelatedContentObserverTest.php b/app/code/Magento/Theme/Test/Unit/Observer/CleanThemeRelatedContentObserverTest.php index 0eaa509685616..f1f4664c8541d 100644 --- a/app/code/Magento/Theme/Test/Unit/Observer/CleanThemeRelatedContentObserverTest.php +++ b/app/code/Magento/Theme/Test/Unit/Observer/CleanThemeRelatedContentObserverTest.php @@ -105,7 +105,8 @@ public function testCleanThemeRelatedContentException() $this->themeConfig->expects($this->any())->method('isThemeAssignedToStore')->with($themeMock)->willReturn(true); - $this->expectException(\Magento\Framework\Exception\LocalizedException::class, 'Theme isn\'t deletable.'); + $this->expectException(\Magento\Framework\Exception\LocalizedException::class); + $this->expectExceptionMessage('Theme isn\'t deletable.'); $this->themeObserver->execute($observerMock); } diff --git a/app/code/Magento/Webapi/Test/Unit/ExceptionTest.php b/app/code/Magento/Webapi/Test/Unit/ExceptionTest.php index f4ba35194725d..c3761c4e24862 100644 --- a/app/code/Magento/Webapi/Test/Unit/ExceptionTest.php +++ b/app/code/Magento/Webapi/Test/Unit/ExceptionTest.php @@ -43,7 +43,8 @@ public function testConstruct() */ public function testConstructInvalidHttpCode($httpCode) { - $this->expectException('InvalidArgumentException', "The specified HTTP code \"{$httpCode}\" is invalid."); + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage("The specified HTTP code \"{$httpCode}\" is invalid."); /** Create \Magento\Framework\Webapi\Exception object with invalid code. */ /** Valid codes range is from 400 to 599. */ new \Magento\Framework\Webapi\Exception(__('Message'), 0, $httpCode); diff --git a/app/code/Magento/Weee/Test/Unit/Model/Attribute/Backend/Weee/TaxTest.php b/app/code/Magento/Weee/Test/Unit/Model/Attribute/Backend/Weee/TaxTest.php index 9e220091d6c2e..8ba8afaa1a8ab 100644 --- a/app/code/Magento/Weee/Test/Unit/Model/Attribute/Backend/Weee/TaxTest.php +++ b/app/code/Magento/Weee/Test/Unit/Model/Attribute/Backend/Weee/TaxTest.php @@ -82,7 +82,8 @@ public function testValidate($data, $expected) ->will($this->returnValue($taxes)); // Exception caught - $this->expectException('Exception', $expected); + $this->expectException('Exception'); + $this->expectExceptionMessage($expected); $modelMock->validate($productMock); } From 485cd5757d51dceb7beabdec09dfb3be465dcc42 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Tue, 26 Sep 2017 16:18:36 +0200 Subject: [PATCH 005/653] Replace expectException(, ) in integration tests expectException(); expectExceptionMessage() --- ...AttributeMediaGalleryManagementInterfaceTest.php | 6 ++++-- .../Api/ProductCustomAttributeWrongTypeTest.php | 6 ++++-- .../Api/ProductCustomOptionRepositoryTest.php | 13 +++++++++---- .../Catalog/Api/ProductRepositoryInterfaceTest.php | 3 ++- .../Magento/Webapi/Routing/CoreRoutingTest.php | 3 ++- .../Magento/Test/Bootstrap/SettingsTest.php | 3 ++- .../Framework/View/Design/Fallback/RulePoolTest.php | 3 ++- .../testsuite/Magento/Framework/View/LayoutTest.php | 3 ++- .../Review/Model/ResourceModel/RatingTest.php | 3 ++- 9 files changed, 29 insertions(+), 14 deletions(-) diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeMediaGalleryManagementInterfaceTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeMediaGalleryManagementInterfaceTest.php index ca9ad9897bf8c..17bc1226d992c 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeMediaGalleryManagementInterfaceTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeMediaGalleryManagementInterfaceTest.php @@ -609,9 +609,11 @@ public function testGetListForAbsentSku() 'sku' => $productSku, ]; if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) { - $this->expectException('SoapFault', 'Requested product doesn\'t exist'); + $this->expectException('SoapFault'); + $this->expectExceptionMessage('Requested product doesn\'t exist'); } else { - $this->expectException('Exception', '', 404); + $this->expectException('Exception'); + $this->expectExceptionCode(404); } $this->_webApiCall($serviceInfo, $requestData); } diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductCustomAttributeWrongTypeTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductCustomAttributeWrongTypeTest.php index 2dc8d19777898..19b0757439077 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductCustomAttributeWrongTypeTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductCustomAttributeWrongTypeTest.php @@ -43,9 +43,11 @@ public function testCustomAttributeWrongType() ]; if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) { - $this->expectException('Exception', 'Attribute "meta_title" has invalid value.'); + $this->expectException('Exception'); + $this->expectExceptionMessage('Attribute "meta_title" has invalid value.'); } else { - $this->expectException('Exception', 'Attribute \"meta_title\" has invalid value.'); + $this->expectException('Exception'); + $this->expectExceptionMessage('Attribute \"meta_title\" has invalid value.'); } $this->_webApiCall($serviceInfo, $this->getRequestData()); diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductCustomOptionRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductCustomOptionRepositoryTest.php index a152167a345fa..b0dd2702f89be 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductCustomOptionRepositoryTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductCustomOptionRepositoryTest.php @@ -211,12 +211,15 @@ public function testAddNegative($optionData) if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) { if (isset($optionDataPost['title']) && empty($optionDataPost['title'])) { - $this->expectException('SoapFault', 'Missed values for option required fields'); + $this->expectException('SoapFault'); + $this->expectExceptionMessage('Missed values for option required fields'); } else { - $this->expectException('SoapFault', 'Invalid option'); + $this->expectException('SoapFault'); + $this->expectExceptionMessage('Invalid option'); } } else { - $this->expectException('Exception', '', 400); + $this->expectException('Exception'); + $this->expectExceptionMessage('', 400); } $this->_webApiCall($serviceInfo, ['option' => $optionDataPost]); } @@ -406,7 +409,9 @@ public function testUpdateNegative($optionData, $message) ], ]; - $this->expectException('Exception', $message, 400); + $this->expectException('Exception'); + $this->expectExceptionMessage($message); + $this->expectExceptionCode(400); $this->_webApiCall($serviceInfo, ['option' => $optionData]); } diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php index cd9aaa1d95294..cb33edce3af39 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php @@ -313,7 +313,8 @@ public function testDeleteAllStoreCode($fixtureProduct) { $sku = $fixtureProduct[ProductInterface::SKU]; $this->saveProduct($fixtureProduct); - $this->expectException('Exception', 'Requested product doesn\'t exist'); + $this->expectException('Exception'); + $this->expectExceptionMessage('Requested product doesn\'t exist'); // Delete all with 'all' store code $this->deleteProduct($sku); diff --git a/dev/tests/api-functional/testsuite/Magento/Webapi/Routing/CoreRoutingTest.php b/dev/tests/api-functional/testsuite/Magento/Webapi/Routing/CoreRoutingTest.php index 89533a0a62474..23b889c7c1251 100644 --- a/dev/tests/api-functional/testsuite/Magento/Webapi/Routing/CoreRoutingTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Webapi/Routing/CoreRoutingTest.php @@ -73,7 +73,8 @@ public function testExceptionSoapInternalError() 'operation' => 'testModule3ErrorV1ServiceException', ], ]; - $this->expectException('SoapFault', 'Generic service exception'); + $this->expectException('SoapFault'); + $this->expectExceptionMessage('Generic service exception'); $this->_webApiCall($serviceInfo); } diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php index aefe51f6ab37c..26e6b59ede06d 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php @@ -199,7 +199,8 @@ public function getAsConfigFileDataProvider() */ public function testGetAsConfigFileException($settingName, $expectedExceptionMsg) { - $this->expectException(\Magento\Framework\Exception\LocalizedException::class, $expectedExceptionMsg); + $this->expectException(\Magento\Framework\Exception\LocalizedException::class); + $this->expectExceptionMessage($expectedExceptionMsg); $this->_object->getAsConfigFile($settingName); } diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/Design/Fallback/RulePoolTest.php b/dev/tests/integration/testsuite/Magento/Framework/View/Design/Fallback/RulePoolTest.php index 1500c91478a4a..c586c68b74573 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/View/Design/Fallback/RulePoolTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/View/Design/Fallback/RulePoolTest.php @@ -74,7 +74,8 @@ public function testGetRuleUnsupportedType() */ public function testGetPatternDirsException($type, array $overriddenParams, $expectedErrorMessage) { - $this->expectException('InvalidArgumentException', $expectedErrorMessage); + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage($expectedErrorMessage); $params = $overriddenParams + $this->defaultParams; $this->model->getRule($type)->getPatternDirs($params); } diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/LayoutTest.php b/dev/tests/integration/testsuite/Magento/Framework/View/LayoutTest.php index c014b517f6463..66e8eb3e453f9 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/View/LayoutTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/View/LayoutTest.php @@ -275,7 +275,8 @@ public function testAddContainerInvalidHtmlTag() $msg = 'Html tag "span" is forbidden for usage in containers. ' . 'Consider to use one of the allowed: aside, dd, div, dl, fieldset, main, nav, ' . 'header, footer, ol, p, section, table, tfoot, ul.'; - $this->expectException(\Magento\Framework\Exception\LocalizedException::class, $msg); + $this->expectException(\Magento\Framework\Exception\LocalizedException::class); + $this->expectExceptionMessage($msg); $this->_layout->addContainer('container', 'Container', ['htmlTag' => 'span']); } diff --git a/dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/RatingTest.php b/dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/RatingTest.php index c88bd5ed7cf77..7801cb2c78c24 100644 --- a/dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/RatingTest.php +++ b/dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/RatingTest.php @@ -77,7 +77,8 @@ public function testRatingEdit() */ public function testRatingSaveWithError() { - $this->expectException('Exception', 'Rolled back transaction has not been completed correctly'); + $this->expectException('Exception'); + $this->expectExceptionMessage('Rolled back transaction has not been completed correctly'); $rating = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( \Magento\Review\Model\Rating::class ); From 3dbfc5e79abff5dbd15c4f712e64737106cf77e4 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Wed, 27 Sep 2017 20:50:36 +0200 Subject: [PATCH 006/653] Convert phrase to string --- .../unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php index 26e6b59ede06d..9964ec7f8c508 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Bootstrap/SettingsTest.php @@ -200,7 +200,7 @@ public function getAsConfigFileDataProvider() public function testGetAsConfigFileException($settingName, $expectedExceptionMsg) { $this->expectException(\Magento\Framework\Exception\LocalizedException::class); - $this->expectExceptionMessage($expectedExceptionMsg); + $this->expectExceptionMessage((string)$expectedExceptionMsg); $this->_object->getAsConfigFile($settingName); } From 0253aecce5261c0543b203c727ba28a574caf70a Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Wed, 27 Sep 2017 20:57:36 +0200 Subject: [PATCH 007/653] Distinguish between non existing SKU and missing SKU in API test --- .../product_options_update_negative.php | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/_files/product_options_update_negative.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/_files/product_options_update_negative.php index 1e713424f8047..08a14c2e7b261 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/_files/product_options_update_negative.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/_files/product_options_update_negative.php @@ -5,18 +5,29 @@ */ return [ - 'missed_product_sku' => + 'missing_product_sku' => [ [ - [ - 'title' => 'title', - 'type' => 'field', - 'sort_order' => 1, - 'is_require' => 1, - 'price' => 10.0, - 'price_type' => 'fixed', - 'sku' => 'sku1', - 'max_characters' => 10, - ], - 'ProductSku should be specified', - ] + 'title' => 'title', + 'type' => 'field', + 'sort_order' => 1, + 'is_require' => 1, + 'price' => 10.0, + 'price_type' => 'fixed', + 'max_characters' => 10, + ], + 'ProductSku should be specified', + ], + 'invalid_product_sku' => [ + [ + 'title' => 'title', + 'type' => 'field', + 'sort_order' => 1, + 'is_require' => 1, + 'price' => 10.0, + 'price_type' => 'fixed', + 'sku' => 'sku1', + 'max_characters' => 10, + ], + 'Requested product doesn\'t exist', + ], ]; From cbf7c18d2d6e6bcef06e272d8b942bb73582545e Mon Sep 17 00:00:00 2001 From: Carey Sizer Date: Wed, 16 Nov 2016 13:06:08 +1300 Subject: [PATCH 008/653] Fix Swagger-generated operation parameter names for "body" parameters These were previously all output as a string "$body". This improves Swagger-generated API clients and compatibility with swagger-codegen & janephp/openapi generator. This caused the following issues: - Variable variable output in janephp/openapi code generation - Incorrect code output (multiple models called "Body") in janephp/openapi - "Anonymous" class naming in swagger-codegen generated clients (approx 20 models called Body1, Body2, Body3 are output for a Magento Enterprise schema) The new format is: operationNamePostBody. Operation Id is guaranteed to be unique under the Open API specification. Changing the body parameter in the schema should also not affect clients conforming to the specification. --- .../Magento/Webapi/Model/Rest/Swagger/Generator.php | 11 ++++++----- .../Test/Unit/Model/Rest/Swagger/GeneratorTest.php | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Webapi/Model/Rest/Swagger/Generator.php b/app/code/Magento/Webapi/Model/Rest/Swagger/Generator.php index ee7d65e484792..0805854c8f8de 100644 --- a/app/code/Magento/Webapi/Model/Rest/Swagger/Generator.php +++ b/app/code/Magento/Webapi/Model/Rest/Swagger/Generator.php @@ -204,14 +204,14 @@ protected function getGeneralInfo() protected function generatePathInfo($methodName, $httpMethodData, $tagName) { $methodData = $httpMethodData[Converter::KEY_METHOD]; + $operationId = $this->typeProcessor->getOperationName($tagName, $methodData[Converter::KEY_METHOD]) . ucfirst($methodName); $pathInfo = [ 'tags' => [$tagName], 'description' => $methodData['documentation'], - 'operationId' => $this->typeProcessor->getOperationName($tagName, $methodData[Converter::KEY_METHOD]) . - ucfirst($methodName) + 'operationId' => $operationId, ]; - $parameters = $this->generateMethodParameters($httpMethodData); + $parameters = $this->generateMethodParameters($httpMethodData, $operationId); if ($parameters) { $pathInfo['parameters'] = $parameters; } @@ -265,11 +265,12 @@ protected function generateMethodResponses($methodData) * Generate parameters based on method data * * @param array $httpMethodData + * @param string $operationId * @return array * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ - private function generateMethodParameters($httpMethodData) + private function generateMethodParameters($httpMethodData, $operationId) { $bodySchema = []; $parameters = []; @@ -335,7 +336,7 @@ private function generateMethodParameters($httpMethodData) if ($bodySchema) { $bodyParam = []; - $bodyParam['name'] = '$body'; + $bodyParam['name'] = $operationId . 'Body'; $bodyParam['in'] = 'body'; $bodyParam['schema'] = $bodySchema; $parameters[] = $bodyParam; diff --git a/app/code/Magento/Webapi/Test/Unit/Model/Rest/Swagger/GeneratorTest.php b/app/code/Magento/Webapi/Test/Unit/Model/Rest/Swagger/GeneratorTest.php index 9883c3a2766e9..611517df51657 100644 --- a/app/code/Magento/Webapi/Test/Unit/Model/Rest/Swagger/GeneratorTest.php +++ b/app/code/Magento/Webapi/Test/Unit/Model/Rest/Swagger/GeneratorTest.php @@ -223,7 +223,7 @@ public function generateDataProvider() ] ], // @codingStandardsIgnoreStart - '{"swagger":"2.0","info":{"version":"","title":""},"host":"magento.host","basePath":"/rest/default","schemes":["http://"],"tags":[{"name":"testModule5AllSoapAndRestV2","description":"AllSoapAndRestInterface"}],"paths":{"/V1/testModule5":{"post":{"tags":["testModule5AllSoapAndRestV2"],"description":"Add new item.","operationId":"' . self::OPERATION_NAME . 'Post","parameters":[{"name":"$body","in":"body","schema":{"required":["item"],"properties":{"item":{"$ref":"#/definitions/test-module5-v2-entity-all-soap-and-rest"}},"type":"object"}}],"responses":{"200":{"description":"200 Success.","schema":{"$ref":"#/definitions/test-module5-v2-entity-all-soap-and-rest"}},"401":{"description":"401 Unauthorized","schema":{"$ref":"#/definitions/error-response"}},"500":{"description":"Internal Server error","schema":{"$ref":"#/definitions/error-response"}},"default":{"description":"Unexpected error","schema":{"$ref":"#/definitions/error-response"}}}}}},"definitions":{"error-response":{"type":"object","properties":{"message":{"type":"string","description":"Error message"},"errors":{"$ref":"#/definitions/error-errors"},"code":{"type":"integer","description":"Error code"},"parameters":{"$ref":"#/definitions/error-parameters"},"trace":{"type":"string","description":"Stack trace"}},"required":["message"]},"error-errors":{"type":"array","description":"Errors list","items":{"$ref":"#/definitions/error-errors-item"}},"error-errors-item":{"type":"object","description":"Error details","properties":{"message":{"type":"string","description":"Error message"},"parameters":{"$ref":"#/definitions/error-parameters"}}},"error-parameters":{"type":"array","description":"Error parameters list","items":{"$ref":"#/definitions/error-parameters-item"}},"error-parameters-item":{"type":"object","description":"Error parameters item","properties":{"resources":{"type":"string","description":"ACL resource"},"fieldName":{"type":"string","description":"Missing or invalid field name"},"fieldValue":{"type":"string","description":"Incorrect field value"}}},"test-module5-v2-entity-all-soap-and-rest":{"type":"object","description":"Some Data Object","properties":{"price":{"type":"integer"}},"required":["price"]}}}' + '{"swagger":"2.0","info":{"version":"","title":""},"host":"magento.host","basePath":"/rest/default","schemes":["http://"],"tags":[{"name":"testModule5AllSoapAndRestV2","description":"AllSoapAndRestInterface"}],"paths":{"/V1/testModule5":{"post":{"tags":["testModule5AllSoapAndRestV2"],"description":"Add new item.","operationId":"' . self::OPERATION_NAME . 'Post","parameters":[{"name":"operationNamePostBody","in":"body","schema":{"required":["item"],"properties":{"item":{"$ref":"#/definitions/test-module5-v2-entity-all-soap-and-rest"}},"type":"object"}}],"responses":{"200":{"description":"200 Success.","schema":{"$ref":"#/definitions/test-module5-v2-entity-all-soap-and-rest"}},"401":{"description":"401 Unauthorized","schema":{"$ref":"#/definitions/error-response"}},"500":{"description":"Internal Server error","schema":{"$ref":"#/definitions/error-response"}},"default":{"description":"Unexpected error","schema":{"$ref":"#/definitions/error-response"}}}}}},"definitions":{"error-response":{"type":"object","properties":{"message":{"type":"string","description":"Error message"},"errors":{"$ref":"#/definitions/error-errors"},"code":{"type":"integer","description":"Error code"},"parameters":{"$ref":"#/definitions/error-parameters"},"trace":{"type":"string","description":"Stack trace"}},"required":["message"]},"error-errors":{"type":"array","description":"Errors list","items":{"$ref":"#/definitions/error-errors-item"}},"error-errors-item":{"type":"object","description":"Error details","properties":{"message":{"type":"string","description":"Error message"},"parameters":{"$ref":"#/definitions/error-parameters"}}},"error-parameters":{"type":"array","description":"Error parameters list","items":{"$ref":"#/definitions/error-parameters-item"}},"error-parameters-item":{"type":"object","description":"Error parameters item","properties":{"resources":{"type":"string","description":"ACL resource"},"fieldName":{"type":"string","description":"Missing or invalid field name"},"fieldValue":{"type":"string","description":"Incorrect field value"}}},"test-module5-v2-entity-all-soap-and-rest":{"type":"object","description":"Some Data Object","properties":{"price":{"type":"integer"}},"required":["price"]}}}' // @codingStandardsIgnoreEnd ], [ From 9c8addb72a04ef231a8b3eb5f5484e9c960f7ad9 Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko Date: Tue, 11 Jul 2017 16:47:01 -0500 Subject: [PATCH 009/653] MAGETWO-70495: Fix Swagger-generated operation parameter names for "body" parameters #7446 - fixed REST tests --- app/code/Magento/Webapi/Model/Rest/Swagger/Generator.php | 5 ++++- .../Magento/Webapi/JsonGenerationFromDataObjectTest.php | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Webapi/Model/Rest/Swagger/Generator.php b/app/code/Magento/Webapi/Model/Rest/Swagger/Generator.php index 0805854c8f8de..3df6966fb01b3 100644 --- a/app/code/Magento/Webapi/Model/Rest/Swagger/Generator.php +++ b/app/code/Magento/Webapi/Model/Rest/Swagger/Generator.php @@ -204,7 +204,10 @@ protected function getGeneralInfo() protected function generatePathInfo($methodName, $httpMethodData, $tagName) { $methodData = $httpMethodData[Converter::KEY_METHOD]; - $operationId = $this->typeProcessor->getOperationName($tagName, $methodData[Converter::KEY_METHOD]) . ucfirst($methodName); + + $operationId = $this->typeProcessor->getOperationName($tagName, $methodData[Converter::KEY_METHOD]); + $operationId .= ucfirst($methodName); + $pathInfo = [ 'tags' => [$tagName], 'description' => $methodData['documentation'], diff --git a/dev/tests/api-functional/testsuite/Magento/Webapi/JsonGenerationFromDataObjectTest.php b/dev/tests/api-functional/testsuite/Magento/Webapi/JsonGenerationFromDataObjectTest.php index 67068e3a11aa9..9a3fac9e8739f 100644 --- a/dev/tests/api-functional/testsuite/Magento/Webapi/JsonGenerationFromDataObjectTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Webapi/JsonGenerationFromDataObjectTest.php @@ -10,6 +10,7 @@ use Magento\TestFramework\Helper\Bootstrap; use Magento\Framework\App\ProductMetadataInterface; +use Magento\Store\Model\StoreManagerInterface; /** * Test REST schema generation mechanisms. @@ -34,10 +35,10 @@ protected function setUp() { $this->_markTestAsRestOnly("JSON generation tests are intended to be executed for REST adapter only."); - $this->storeCode = Bootstrap::getObjectManager()->get(\Magento\Store\Model\StoreManagerInterface::class) + $this->storeCode = Bootstrap::getObjectManager()->get(StoreManagerInterface::class) ->getStore()->getCode(); - $this->productMetadata = Bootstrap::getObjectManager()->get(\Magento\Framework\App\ProductMetadataInterface::class); + $this->productMetadata = Bootstrap::getObjectManager()->get(ProductMetadataInterface::class); parent::setUp(); } @@ -197,7 +198,7 @@ public function getExpectedMultiServiceData() 'required' => true ], [ - 'name' => '$body', + 'name' => 'testModule5AllSoapAndRestV1NestedUpdatePutBody', 'in' => 'body', 'schema' => [ 'required' => [ From e6f9d804a236e1f4ad597fa93c069e4e31845098 Mon Sep 17 00:00:00 2001 From: Ievgen Sentiabov Date: Tue, 3 Oct 2017 13:48:41 +0300 Subject: [PATCH 010/653] MAGETWO-71966: [2.2.x] Braintree online refund not working for two websites using individual Braintree accounts - Added store ID as additional parameter for configuration loading - Added request to retrieve correct Braintree token for new order in adminhtml area - Refactored Braintree adapter --- app/code/Magento/Braintree/Block/Form.php | 36 ++-- app/code/Magento/Braintree/Block/Payment.php | 4 + .../Adminhtml/Payment/GetClientToken.php | 73 ++++++++ .../Braintree/Controller/Payment/GetNonce.php | 5 +- .../Command/CaptureStrategyCommand.php | 49 ++--- .../Command/GetPaymentNonceCommand.php | 17 +- .../Braintree/Gateway/Config/Config.php | 121 ++++++++----- .../Gateway/Helper/SubjectReader.php | 14 +- .../Http/Client/AbstractTransaction.php | 12 +- .../Gateway/Http/Client/TransactionRefund.php | 10 +- .../Gateway/Http/Client/TransactionSale.php | 7 +- .../Client/TransactionSubmitForSettlement.php | 10 +- .../Gateway/Http/Client/TransactionVoid.php | 7 +- .../Gateway/Request/DescriptorDataBuilder.php | 17 +- .../Request/KountPaymentDataBuilder.php | 6 +- .../Gateway/Request/PaymentDataBuilder.php | 2 +- .../Gateway/Request/StoreConfigBuilder.php | 42 +++++ .../Request/ThreeDSecureDataBuilder.php | 7 +- .../Model/Adapter/BraintreeAdapter.php | 21 ++- .../Model/Adapter/BraintreeAdapterFactory.php | 56 ++++++ .../Model/Report/TransactionsCollection.php | 18 +- .../Braintree/Model/Ui/ConfigProvider.php | 52 +++--- .../Braintree/Test/Unit/Block/FormTest.php | 59 ++---- .../Unit/Controller/Payment/GetNonceTest.php | 75 ++++---- .../Command/CaptureStrategyCommandTest.php | 170 ++++++++---------- .../Command/GetPaymentNonceCommandTest.php | 117 +++++------- .../Http/Client/TransactionSaleTest.php | 56 +++--- .../TransactionSubmitForSettlementTest.php | 49 ++--- .../Request/AddressDataBuilderTest.php | 98 ++++------ .../Request/CaptureDataBuilderTest.php | 47 +---- .../Request/CustomerDataBuilderTest.php | 73 +++----- .../Request/DescriptorDataBuilderTest.php | 19 +- .../Request/KountPaymentDataBuilderTest.php | 55 +++--- .../Request/PayPal/DeviceDataBuilderTest.php | 32 +--- .../Request/PayPal/VaultDataBuilderTest.php | 31 +--- .../Request/PaymentDataBuilderTest.php | 78 +++----- .../Gateway/Request/RefundDataBuilderTest.php | 75 ++------ .../Request/SettlementDataBuilderTest.php | 2 +- .../Request/ThreeDSecureDataBuilderTest.php | 78 ++++---- .../Request/VaultCaptureDataBuilderTest.php | 39 +--- .../Gateway/Request/VaultDataBuilderTest.php | 2 +- .../Report/TransactionsCollectionTest.php | 124 ++++++------- .../Test/Unit/Model/Ui/ConfigProviderTest.php | 40 +++-- .../Magento/Braintree/etc/adminhtml/di.xml | 7 + app/code/Magento/Braintree/etc/di.xml | 30 +++- .../view/adminhtml/web/js/braintree.js | 75 +++++--- .../Adminhtml/Payment/GetClientTokenTest.php | 151 ++++++++++++++++ .../_files/payment_configuration.php | 58 ++++++ .../_files/payment_configuration_rollback.php | 42 +++++ 49 files changed, 1267 insertions(+), 1001 deletions(-) create mode 100644 app/code/Magento/Braintree/Controller/Adminhtml/Payment/GetClientToken.php create mode 100644 app/code/Magento/Braintree/Gateway/Request/StoreConfigBuilder.php create mode 100644 app/code/Magento/Braintree/Model/Adapter/BraintreeAdapterFactory.php create mode 100644 dev/tests/integration/testsuite/Magento/Braintree/Controller/Adminhtml/Payment/GetClientTokenTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Braintree/_files/payment_configuration.php create mode 100644 dev/tests/integration/testsuite/Magento/Braintree/_files/payment_configuration_rollback.php diff --git a/app/code/Magento/Braintree/Block/Form.php b/app/code/Magento/Braintree/Block/Form.php index f6cf62f5a2131..8a727ae87262f 100644 --- a/app/code/Magento/Braintree/Block/Form.php +++ b/app/code/Magento/Braintree/Block/Form.php @@ -9,7 +9,6 @@ use Magento\Braintree\Gateway\Config\Config as GatewayConfig; use Magento\Braintree\Model\Adminhtml\Source\CcType; use Magento\Braintree\Model\Ui\ConfigProvider; -use Magento\Framework\App\ObjectManager; use Magento\Framework\View\Element\Template\Context; use Magento\Payment\Block\Form\Cc; use Magento\Payment\Helper\Data; @@ -21,7 +20,6 @@ */ class Form extends Cc { - /** * @var Quote */ @@ -48,6 +46,7 @@ class Form extends Cc * @param Quote $sessionQuote * @param GatewayConfig $gatewayConfig * @param CcType $ccType + * @param Data $paymentDataHelper * @param array $data */ public function __construct( @@ -56,12 +55,14 @@ public function __construct( Quote $sessionQuote, GatewayConfig $gatewayConfig, CcType $ccType, + Data $paymentDataHelper, array $data = [] ) { parent::__construct($context, $paymentConfig, $data); $this->sessionQuote = $sessionQuote; $this->gatewayConfig = $gatewayConfig; $this->ccType = $ccType; + $this->paymentDataHelper = $paymentDataHelper; } /** @@ -81,7 +82,7 @@ public function getCcAvailableTypes() */ public function useCvv() { - return $this->gatewayConfig->isCvvEnabled(); + return $this->gatewayConfig->isCvvEnabled($this->sessionQuote->getStoreId()); } /** @@ -90,9 +91,8 @@ public function useCvv() */ public function isVaultEnabled() { - $storeId = $this->_storeManager->getStore()->getId(); $vaultPayment = $this->getVaultPayment(); - return $vaultPayment->isActive($storeId); + return $vaultPayment->isActive($this->sessionQuote->getStoreId()); } /** @@ -102,7 +102,10 @@ public function isVaultEnabled() private function getConfiguredCardTypes() { $types = $this->ccType->getCcTypeLabelMap(); - $configCardTypes = array_fill_keys($this->gatewayConfig->getAvailableCardTypes(), ''); + $configCardTypes = array_fill_keys( + $this->gatewayConfig->getAvailableCardTypes($this->sessionQuote->getStoreId()), + '' + ); return array_intersect_key($types, $configCardTypes); } @@ -116,7 +119,11 @@ private function getConfiguredCardTypes() private function filterCardTypesForCountry(array $configCardTypes, $countryId) { $filtered = $configCardTypes; - $countryCardTypes = $this->gatewayConfig->getCountryAvailableCardTypes($countryId); + $countryCardTypes = $this->gatewayConfig->getCountryAvailableCardTypes( + $countryId, + $this->sessionQuote->getStoreId() + ); + // filter card types only if specific card types are set for country if (!empty($countryCardTypes)) { $availableTypes = array_fill_keys($countryCardTypes, ''); @@ -131,19 +138,6 @@ private function filterCardTypesForCountry(array $configCardTypes, $countryId) */ private function getVaultPayment() { - return $this->getPaymentDataHelper()->getMethodInstance(ConfigProvider::CC_VAULT_CODE); - } - - /** - * Get payment data helper instance - * @return Data - * @deprecated 100.1.0 - */ - private function getPaymentDataHelper() - { - if ($this->paymentDataHelper === null) { - $this->paymentDataHelper = ObjectManager::getInstance()->get(Data::class); - } - return $this->paymentDataHelper; + return $this->paymentDataHelper->getMethodInstance(ConfigProvider::CC_VAULT_CODE); } } diff --git a/app/code/Magento/Braintree/Block/Payment.php b/app/code/Magento/Braintree/Block/Payment.php index 8e05856d9b57a..aa5b3b07fb23c 100644 --- a/app/code/Magento/Braintree/Block/Payment.php +++ b/app/code/Magento/Braintree/Block/Payment.php @@ -48,6 +48,10 @@ public function getPaymentConfig() $payment = $this->config->getConfig()['payment']; $config = $payment[$this->getCode()]; $config['code'] = $this->getCode(); + $config['clientTokenUrl'] = $this->_urlBuilder->getUrl( + ConfigProvider::CODE . '/payment/getClientToken', + ['_secure' => true] + ); return json_encode($config, JSON_UNESCAPED_SLASHES); } diff --git a/app/code/Magento/Braintree/Controller/Adminhtml/Payment/GetClientToken.php b/app/code/Magento/Braintree/Controller/Adminhtml/Payment/GetClientToken.php new file mode 100644 index 0000000000000..af0f1d75665d5 --- /dev/null +++ b/app/code/Magento/Braintree/Controller/Adminhtml/Payment/GetClientToken.php @@ -0,0 +1,73 @@ +config = $config; + $this->adapterFactory = $adapterFactory; + $this->quoteSession = $quoteSession; + } + + /** + * @inheritdoc + */ + public function execute() + { + $params = []; + $response = $this->resultFactory->create(ResultFactory::TYPE_JSON); + + $storeId = $this->quoteSession->getStoreId(); + $merchantAccountId = $this->config->getMerchantAccountId($storeId); + if (!empty($merchantAccountId)) { + $params[PaymentDataBuilder::MERCHANT_ACCOUNT_ID] = $merchantAccountId; + } + + $clientToken = $this->adapterFactory->create($storeId) + ->generate($params); + $response->setData(['clientToken' => $clientToken]); + + return $response; + } +} diff --git a/app/code/Magento/Braintree/Controller/Payment/GetNonce.php b/app/code/Magento/Braintree/Controller/Payment/GetNonce.php index aecde869ca196..f8b152ded1556 100644 --- a/app/code/Magento/Braintree/Controller/Payment/GetNonce.php +++ b/app/code/Magento/Braintree/Controller/Payment/GetNonce.php @@ -62,7 +62,10 @@ public function execute() try { $publicHash = $this->getRequest()->getParam('public_hash'); $customerId = $this->session->getCustomerId(); - $result = $this->command->execute(['public_hash' => $publicHash, 'customer_id' => $customerId])->get(); + $result = $this->command->execute( + ['public_hash' => $publicHash, 'customer_id' => $customerId, 'store_id' => $this->session->getStoreId()] + ) + ->get(); $response->setData(['paymentMethodNonce' => $result['paymentMethodNonce']]); } catch (\Exception $e) { $this->logger->critical($e); diff --git a/app/code/Magento/Braintree/Gateway/Command/CaptureStrategyCommand.php b/app/code/Magento/Braintree/Gateway/Command/CaptureStrategyCommand.php index f972eecf9f92d..53d113ff28dc6 100644 --- a/app/code/Magento/Braintree/Gateway/Command/CaptureStrategyCommand.php +++ b/app/code/Magento/Braintree/Gateway/Command/CaptureStrategyCommand.php @@ -6,18 +6,19 @@ namespace Magento\Braintree\Gateway\Command; use Braintree\Transaction; -use Magento\Braintree\Model\Adapter\BraintreeAdapter; +use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; use Magento\Braintree\Model\Adapter\BraintreeSearchAdapter; use Magento\Framework\Api\FilterBuilder; use Magento\Framework\Api\SearchCriteriaBuilder; -use Magento\Payment\Gateway\Command; use Magento\Payment\Gateway\Command\CommandPoolInterface; use Magento\Payment\Gateway\CommandInterface; +use Magento\Payment\Gateway\Data\OrderAdapterInterface; use Magento\Payment\Gateway\Helper\ContextHelper; -use Magento\Braintree\Gateway\Helper\SubjectReader; use Magento\Sales\Api\Data\OrderPaymentInterface; -use Magento\Sales\Api\TransactionRepositoryInterface; use Magento\Sales\Api\Data\TransactionInterface; +use Magento\Sales\Api\TransactionRepositoryInterface; +use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; /** * Class CaptureStrategyCommand @@ -66,9 +67,9 @@ class CaptureStrategyCommand implements CommandInterface private $subjectReader; /** - * @var BraintreeAdapter + * @var BraintreeAdapterFactory */ - private $braintreeAdapter; + private $braintreeAdapterFactory; /** * @var BraintreeSearchAdapter @@ -83,7 +84,7 @@ class CaptureStrategyCommand implements CommandInterface * @param FilterBuilder $filterBuilder * @param SearchCriteriaBuilder $searchCriteriaBuilder * @param SubjectReader $subjectReader - * @param BraintreeAdapter $braintreeAdapter + * @param BraintreeAdapterFactory $braintreeAdapterFactory, * @param BraintreeSearchAdapter $braintreeSearchAdapter */ public function __construct( @@ -92,7 +93,7 @@ public function __construct( FilterBuilder $filterBuilder, SearchCriteriaBuilder $searchCriteriaBuilder, SubjectReader $subjectReader, - BraintreeAdapter $braintreeAdapter, + BraintreeAdapterFactory $braintreeAdapterFactory, BraintreeSearchAdapter $braintreeSearchAdapter ) { $this->commandPool = $commandPool; @@ -100,7 +101,7 @@ public function __construct( $this->filterBuilder = $filterBuilder; $this->searchCriteriaBuilder = $searchCriteriaBuilder; $this->subjectReader = $subjectReader; - $this->braintreeAdapter = $braintreeAdapter; + $this->braintreeAdapterFactory = $braintreeAdapterFactory; $this->braintreeSearchAdapter = $braintreeSearchAdapter; } @@ -112,29 +113,29 @@ public function execute(array $commandSubject) /** @var \Magento\Payment\Gateway\Data\PaymentDataObjectInterface $paymentDO */ $paymentDO = $this->subjectReader->readPayment($commandSubject); - /** @var \Magento\Sales\Api\Data\OrderPaymentInterface $paymentInfo */ - $paymentInfo = $paymentDO->getPayment(); - ContextHelper::assertOrderPayment($paymentInfo); - - $command = $this->getCommand($paymentInfo); + $command = $this->getCommand($paymentDO); $this->commandPool->get($command)->execute($commandSubject); } /** - * Get execution command name - * @param OrderPaymentInterface $payment + * Gets command name. + * + * @param PaymentDataObjectInterface $paymentDO * @return string */ - private function getCommand(OrderPaymentInterface $payment) + private function getCommand(PaymentDataObjectInterface $paymentDO) { - // if auth transaction is not exists execute authorize&capture command + $payment = $paymentDO->getPayment(); + ContextHelper::assertOrderPayment($payment); + + // if auth transaction does not exist then execute authorize&capture command $existsCapture = $this->isExistsCaptureTransaction($payment); if (!$payment->getAuthorizationTransaction() && !$existsCapture) { return self::SALE; } // do capture for authorization transaction - if (!$existsCapture && !$this->isExpiredAuthorization($payment)) { + if (!$existsCapture && !$this->isExpiredAuthorization($payment, $paymentDO->getOrder())) { return self::CAPTURE; } @@ -143,12 +144,16 @@ private function getCommand(OrderPaymentInterface $payment) } /** + * Checks if authorization transaction does not expired yet. + * * @param OrderPaymentInterface $payment - * @return boolean + * @param OrderAdapterInterface $orderAdapter + * @return bool */ - private function isExpiredAuthorization(OrderPaymentInterface $payment) + private function isExpiredAuthorization(OrderPaymentInterface $payment, OrderAdapterInterface $orderAdapter) { - $collection = $this->braintreeAdapter->search( + $adapter = $this->braintreeAdapterFactory->create($orderAdapter->getStoreId()); + $collection = $adapter->search( [ $this->braintreeSearchAdapter->id()->is($payment->getLastTransId()), $this->braintreeSearchAdapter->status()->is(Transaction::AUTHORIZATION_EXPIRED) diff --git a/app/code/Magento/Braintree/Gateway/Command/GetPaymentNonceCommand.php b/app/code/Magento/Braintree/Gateway/Command/GetPaymentNonceCommand.php index 91c9f6c14bb5d..a40c4a1296a75 100644 --- a/app/code/Magento/Braintree/Gateway/Command/GetPaymentNonceCommand.php +++ b/app/code/Magento/Braintree/Gateway/Command/GetPaymentNonceCommand.php @@ -9,8 +9,7 @@ use Exception; use Magento\Braintree\Gateway\Helper\SubjectReader; use Magento\Braintree\Gateway\Validator\PaymentNonceResponseValidator; -use Magento\Braintree\Model\Adapter\BraintreeAdapter; -use Magento\Payment\Gateway\Command; +use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; use Magento\Payment\Gateway\Command\Result\ArrayResultFactory; use Magento\Payment\Gateway\CommandInterface; use Magento\Vault\Api\PaymentTokenManagementInterface; @@ -27,9 +26,9 @@ class GetPaymentNonceCommand implements CommandInterface private $tokenManagement; /** - * @var BraintreeAdapter + * @var BraintreeAdapterFactory */ - private $adapter; + private $adapterFactory; /** * @var ArrayResultFactory @@ -48,20 +47,20 @@ class GetPaymentNonceCommand implements CommandInterface /** * @param PaymentTokenManagementInterface $tokenManagement - * @param BraintreeAdapter $adapter + * @param BraintreeAdapterFactory $adapterFactory * @param ArrayResultFactory $resultFactory * @param SubjectReader $subjectReader * @param PaymentNonceResponseValidator $responseValidator */ public function __construct( PaymentTokenManagementInterface $tokenManagement, - BraintreeAdapter $adapter, + BraintreeAdapterFactory $adapterFactory, ArrayResultFactory $resultFactory, SubjectReader $subjectReader, PaymentNonceResponseValidator $responseValidator ) { $this->tokenManagement = $tokenManagement; - $this->adapter = $adapter; + $this->adapterFactory = $adapterFactory; $this->resultFactory = $resultFactory; $this->subjectReader = $subjectReader; $this->responseValidator = $responseValidator; @@ -80,7 +79,9 @@ public function execute(array $commandSubject) throw new Exception('No available payment tokens'); } - $data = $this->adapter->createNonce($paymentToken->getGatewayToken()); + $storeId = $this->subjectReader->readStoreId($commandSubject); + $data = $this->adapterFactory->create($storeId) + ->createNonce($paymentToken->getGatewayToken()); $result = $this->responseValidator->validate(['response' => ['object' => $data]]); if (!$result->isValid()) { diff --git a/app/code/Magento/Braintree/Gateway/Config/Config.php b/app/code/Magento/Braintree/Gateway/Config/Config.php index 7badd2b87ac34..01bb32fbb1a7e 100644 --- a/app/code/Magento/Braintree/Gateway/Config/Config.php +++ b/app/code/Magento/Braintree/Gateway/Config/Config.php @@ -68,11 +68,12 @@ public function __construct( /** * Return the country specific card type config * + * @param int|null $storeId * @return array */ - public function getCountrySpecificCardTypeConfig() + public function getCountrySpecificCardTypeConfig($storeId = null) { - $countryCardTypes = $this->getValue(self::KEY_COUNTRY_CREDIT_CARD); + $countryCardTypes = $this->getValue(self::KEY_COUNTRY_CREDIT_CARD, $storeId); if (!$countryCardTypes) { return []; } @@ -83,11 +84,12 @@ public function getCountrySpecificCardTypeConfig() /** * Retrieve available credit card types * + * @param int|null $storeId * @return array */ - public function getAvailableCardTypes() + public function getAvailableCardTypes($storeId = null) { - $ccTypes = $this->getValue(self::KEY_CC_TYPES); + $ccTypes = $this->getValue(self::KEY_CC_TYPES, $storeId); return !empty($ccTypes) ? explode(',', $ccTypes) : []; } @@ -108,79 +110,111 @@ public function getCcTypesMapper() } /** - * Get list of card types available for country + * Gets list of card types available for country. + * * @param string $country + * @param int|null $storeId * @return array */ - public function getCountryAvailableCardTypes($country) + public function getCountryAvailableCardTypes($country, $storeId = null) { - $types = $this->getCountrySpecificCardTypeConfig(); + $types = $this->getCountrySpecificCardTypeConfig($storeId); return (!empty($types[$country])) ? $types[$country] : []; } /** - * Check if cvv field is enabled - * @return boolean + * Checks if cvv field is enabled. + * + * @param int|null $storeId + * @return bool */ - public function isCvvEnabled() + public function isCvvEnabled($storeId = null) { - return (bool) $this->getValue(self::KEY_USE_CVV); + return (bool) $this->getValue(self::KEY_USE_CVV, $storeId); } /** - * Check if 3d secure verification enabled + * Checks if 3d secure verification enabled. + * + * @param int|null $storeId * @return bool */ - public function isVerify3DSecure() + public function isVerify3DSecure($storeId = null) { - return (bool) $this->getValue(self::KEY_VERIFY_3DSECURE); + return (bool) $this->getValue(self::KEY_VERIFY_3DSECURE, $storeId); } /** - * Get threshold amount for 3d secure + * Gets threshold amount for 3d secure. + * + * @param int|null $storeId * @return float */ - public function getThresholdAmount() + public function getThresholdAmount($storeId = null) { - return (double) $this->getValue(self::KEY_THRESHOLD_AMOUNT); + return (double) $this->getValue(self::KEY_THRESHOLD_AMOUNT, $storeId); } /** - * Get list of specific countries for 3d secure + * Gets list of specific countries for 3d secure. + * + * @param int|null $storeId * @return array */ - public function get3DSecureSpecificCountries() + public function get3DSecureSpecificCountries($storeId = null) { - if ((int) $this->getValue(self::KEY_VERIFY_ALLOW_SPECIFIC) == self::VALUE_3DSECURE_ALL) { + if ((int) $this->getValue(self::KEY_VERIFY_ALLOW_SPECIFIC, $storeId) == self::VALUE_3DSECURE_ALL) { return []; } - return explode(',', $this->getValue(self::KEY_VERIFY_SPECIFIC)); + return explode(',', $this->getValue(self::KEY_VERIFY_SPECIFIC, $storeId)); + } + + /** + * Gets value of configured environment. + * Possible values: production or sandbox. + * + * @param int|null $storeId + * @return string + */ + public function getEnvironment($storeId = null) + { + return $this->getValue(Config::KEY_ENVIRONMENT, $storeId); } /** + * Gets Kount merchant ID. + * + * @param int|null $storeId * @return string + * @internal param null $storeId */ - public function getEnvironment() + public function getKountMerchantId($storeId = null) { - return $this->getValue(Config::KEY_ENVIRONMENT); + return $this->getValue(Config::KEY_KOUNT_MERCHANT_ID, $storeId); } /** + * Gets merchant ID. + * + * @param int|null $storeId * @return string */ - public function getKountMerchantId() + public function getMerchantId($storeId = null) { - return $this->getValue(Config::KEY_KOUNT_MERCHANT_ID); + return $this->getValue(Config::KEY_MERCHANT_ID, $storeId); } /** + * Gets Merchant account ID. + * + * @param int|null $storeId * @return string */ - public function getMerchantId() + public function getMerchantAccountId($storeId = null) { - return $this->getValue(Config::KEY_MERCHANT_ID); + return $this->getValue(self::KEY_MERCHANT_ACCOUNT_ID, $storeId); } /** @@ -192,45 +226,42 @@ public function getSdkUrl() } /** + * Checks if fraud protection is enabled. + * + * @param int|null $storeId * @return bool */ - public function hasFraudProtection() + public function hasFraudProtection($storeId = null) { - return (bool) $this->getValue(Config::FRAUD_PROTECTION); + return (bool) $this->getValue(Config::FRAUD_PROTECTION, $storeId); } /** - * Get Payment configuration status + * Gets Payment configuration status. + * + * @param int|null $storeId * @return bool */ - public function isActive() + public function isActive($storeId = null) { - return (bool) $this->getValue(self::KEY_ACTIVE); + return (bool) $this->getValue(self::KEY_ACTIVE, $storeId); } /** - * Get list of configured dynamic descriptors + * Gets list of configured dynamic descriptors. + * + * @param int|null $storeId * @return array */ - public function getDynamicDescriptors() + public function getDynamicDescriptors($storeId = null) { $values = []; foreach (self::$dynamicDescriptorKeys as $key) { - $value = $this->getValue('descriptor_' . $key); + $value = $this->getValue('descriptor_' . $key, $storeId); if (!empty($value)) { $values[$key] = $value; } } return $values; } - - /** - * Get Merchant account ID - * - * @return string - */ - public function getMerchantAccountId() - { - return $this->getValue(self::KEY_MERCHANT_ACCOUNT_ID); - } } diff --git a/app/code/Magento/Braintree/Gateway/Helper/SubjectReader.php b/app/code/Magento/Braintree/Gateway/Helper/SubjectReader.php index e98597655190f..6c3231978a54a 100644 --- a/app/code/Magento/Braintree/Gateway/Helper/SubjectReader.php +++ b/app/code/Magento/Braintree/Gateway/Helper/SubjectReader.php @@ -6,10 +6,9 @@ namespace Magento\Braintree\Gateway\Helper; use Braintree\Transaction; -use Magento\Quote\Model\Quote; +use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Payment\Gateway\Helper; use Magento\Vault\Api\Data\PaymentTokenInterface; -use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; /** * Class SubjectReader @@ -119,4 +118,15 @@ public function readPayPal(Transaction $transaction) return $transaction->paypal; } + + /** + * Reads store's ID, otherwise returns null. + * + * @param array $subject + * @return int|null + */ + public function readStoreId(array $subject) + { + return $subject['store_id'] ?? null; + } } diff --git a/app/code/Magento/Braintree/Gateway/Http/Client/AbstractTransaction.php b/app/code/Magento/Braintree/Gateway/Http/Client/AbstractTransaction.php index caeaaa7fe45a2..ef35152bf7e95 100644 --- a/app/code/Magento/Braintree/Gateway/Http/Client/AbstractTransaction.php +++ b/app/code/Magento/Braintree/Gateway/Http/Client/AbstractTransaction.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Gateway\Http\Client; -use Magento\Braintree\Model\Adapter\BraintreeAdapter; +use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; use Magento\Payment\Gateway\Http\ClientException; use Magento\Payment\Gateway\Http\ClientInterface; use Magento\Payment\Gateway\Http\TransferInterface; @@ -29,22 +29,22 @@ abstract class AbstractTransaction implements ClientInterface protected $customLogger; /** - * @var BraintreeAdapter + * @var BraintreeAdapterFactory */ - protected $adapter; + protected $adapterFactory; /** * Constructor * * @param LoggerInterface $logger * @param Logger $customLogger - * @param BraintreeAdapter $transaction + * @param BraintreeAdapterFactory $adapterFactory */ - public function __construct(LoggerInterface $logger, Logger $customLogger, BraintreeAdapter $adapter) + public function __construct(LoggerInterface $logger, Logger $customLogger, BraintreeAdapterFactory $adapterFactory) { $this->logger = $logger; $this->customLogger = $customLogger; - $this->adapter = $adapter; + $this->adapterFactory = $adapterFactory; } /** diff --git a/app/code/Magento/Braintree/Gateway/Http/Client/TransactionRefund.php b/app/code/Magento/Braintree/Gateway/Http/Client/TransactionRefund.php index 180344ab7263f..4c3f1e179d378 100644 --- a/app/code/Magento/Braintree/Gateway/Http/Client/TransactionRefund.php +++ b/app/code/Magento/Braintree/Gateway/Http/Client/TransactionRefund.php @@ -16,9 +16,11 @@ class TransactionRefund extends AbstractTransaction */ protected function process(array $data) { - return $this->adapter->refund( - $data['transaction_id'], - $data[PaymentDataBuilder::AMOUNT] - ); + $storeId = $data['store_id'] ?? null; + // sending store id and other additional keys are restricted by Braintree API + unset($data['store_id']); + + return $this->adapterFactory->create($storeId) + ->refund($data['transaction_id'], $data[PaymentDataBuilder::AMOUNT]); } } diff --git a/app/code/Magento/Braintree/Gateway/Http/Client/TransactionSale.php b/app/code/Magento/Braintree/Gateway/Http/Client/TransactionSale.php index 81c79e522907d..529045b5b18f5 100644 --- a/app/code/Magento/Braintree/Gateway/Http/Client/TransactionSale.php +++ b/app/code/Magento/Braintree/Gateway/Http/Client/TransactionSale.php @@ -15,6 +15,11 @@ class TransactionSale extends AbstractTransaction */ protected function process(array $data) { - return $this->adapter->sale($data); + $storeId = $data['store_id'] ?? null; + // sending store id and other additional keys are restricted by Braintree API + unset($data['store_id']); + + return $this->adapterFactory->create($storeId) + ->sale($data); } } diff --git a/app/code/Magento/Braintree/Gateway/Http/Client/TransactionSubmitForSettlement.php b/app/code/Magento/Braintree/Gateway/Http/Client/TransactionSubmitForSettlement.php index 0df5799b54b83..16ebd7a7a00c5 100644 --- a/app/code/Magento/Braintree/Gateway/Http/Client/TransactionSubmitForSettlement.php +++ b/app/code/Magento/Braintree/Gateway/Http/Client/TransactionSubmitForSettlement.php @@ -18,9 +18,11 @@ class TransactionSubmitForSettlement extends AbstractTransaction */ protected function process(array $data) { - return $this->adapter->submitForSettlement( - $data[CaptureDataBuilder::TRANSACTION_ID], - $data[PaymentDataBuilder::AMOUNT] - ); + $storeId = $data['store_id'] ?? null; + // sending store id and other additional keys are restricted by Braintree API + unset($data['store_id']); + + return $this->adapterFactory->create($storeId) + ->submitForSettlement($data[CaptureDataBuilder::TRANSACTION_ID], $data[PaymentDataBuilder::AMOUNT]); } } diff --git a/app/code/Magento/Braintree/Gateway/Http/Client/TransactionVoid.php b/app/code/Magento/Braintree/Gateway/Http/Client/TransactionVoid.php index a774065365b47..133c7f0f4062e 100644 --- a/app/code/Magento/Braintree/Gateway/Http/Client/TransactionVoid.php +++ b/app/code/Magento/Braintree/Gateway/Http/Client/TransactionVoid.php @@ -14,6 +14,11 @@ class TransactionVoid extends AbstractTransaction */ protected function process(array $data) { - return $this->adapter->void($data['transaction_id']); + $storeId = $data['store_id'] ?? null; + // sending store id and other additional keys are restricted by Braintree API + unset($data['store_id']); + + return $this->adapterFactory->create($storeId) + ->void($data['transaction_id']); } } diff --git a/app/code/Magento/Braintree/Gateway/Request/DescriptorDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/DescriptorDataBuilder.php index 3794058c2be8c..f70ff20206163 100644 --- a/app/code/Magento/Braintree/Gateway/Request/DescriptorDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/DescriptorDataBuilder.php @@ -5,6 +5,7 @@ */ namespace Magento\Braintree\Gateway\Request; +use Magento\Braintree\Gateway\Helper\SubjectReader; use Magento\Payment\Gateway\Request\BuilderInterface; use Magento\Braintree\Gateway\Config\Config; @@ -24,21 +25,29 @@ class DescriptorDataBuilder implements BuilderInterface private $config; /** - * DescriptorDataBuilder constructor. + * @var SubjectReader + */ + private $subjectReader; + + /** * @param Config $config + * @param SubjectReader $subjectReader */ - public function __construct(Config $config) + public function __construct(Config $config, SubjectReader $subjectReader) { $this->config = $config; + $this->subjectReader = $subjectReader; } /** * @inheritdoc - * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function build(array $buildSubject) { - $values = $this->config->getDynamicDescriptors(); + $paymentDO = $this->subjectReader->readPayment($buildSubject); + $order = $paymentDO->getOrder(); + + $values = $this->config->getDynamicDescriptors($order->getStoreId()); return !empty($values) ? [self::$descriptorKey => $values] : []; } } diff --git a/app/code/Magento/Braintree/Gateway/Request/KountPaymentDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/KountPaymentDataBuilder.php index 7eebbca1d4290..29d6e5c958307 100644 --- a/app/code/Magento/Braintree/Gateway/Request/KountPaymentDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/KountPaymentDataBuilder.php @@ -48,10 +48,12 @@ public function __construct(Config $config, SubjectReader $subjectReader) public function build(array $buildSubject) { $result = []; - if (!$this->config->hasFraudProtection()) { + $paymentDO = $this->subjectReader->readPayment($buildSubject); + $order = $paymentDO->getOrder(); + + if (!$this->config->hasFraudProtection($order->getStoreId())) { return $result; } - $paymentDO = $this->subjectReader->readPayment($buildSubject); $payment = $paymentDO->getPayment(); $data = $payment->getAdditionalInformation(); diff --git a/app/code/Magento/Braintree/Gateway/Request/PaymentDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/PaymentDataBuilder.php index a3341c3fc1873..51efea6e6ed29 100644 --- a/app/code/Magento/Braintree/Gateway/Request/PaymentDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/PaymentDataBuilder.php @@ -87,7 +87,7 @@ public function build(array $buildSubject) self::ORDER_ID => $order->getOrderIncrementId() ]; - $merchantAccountId = $this->config->getMerchantAccountId(); + $merchantAccountId = $this->config->getMerchantAccountId($order->getStoreId()); if (!empty($merchantAccountId)) { $result[self::MERCHANT_ACCOUNT_ID] = $merchantAccountId; } diff --git a/app/code/Magento/Braintree/Gateway/Request/StoreConfigBuilder.php b/app/code/Magento/Braintree/Gateway/Request/StoreConfigBuilder.php new file mode 100644 index 0000000000000..2f9243529bd15 --- /dev/null +++ b/app/code/Magento/Braintree/Gateway/Request/StoreConfigBuilder.php @@ -0,0 +1,42 @@ +subjectReader = $subjectReader; + } + + /** + * @inheritdoc + */ + public function build(array $buildSubject) + { + $paymentDO = $this->subjectReader->readPayment($buildSubject); + $order = $paymentDO->getOrder(); + + return [ + 'store_id' => $order->getStoreId() + ]; + } +} diff --git a/app/code/Magento/Braintree/Gateway/Request/ThreeDSecureDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/ThreeDSecureDataBuilder.php index c366a67701521..b28002a23486b 100644 --- a/app/code/Magento/Braintree/Gateway/Request/ThreeDSecureDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/ThreeDSecureDataBuilder.php @@ -64,12 +64,15 @@ public function build(array $buildSubject) */ private function is3DSecureEnabled(OrderAdapterInterface $order, $amount) { - if (!$this->config->isVerify3DSecure() || $amount < $this->config->getThresholdAmount()) { + $storeId = $order->getStoreId(); + if (!$this->config->isVerify3DSecure($storeId) + || $amount < $this->config->getThresholdAmount($storeId) + ) { return false; } $billingAddress = $order->getBillingAddress(); - $specificCounties = $this->config->get3DSecureSpecificCountries(); + $specificCounties = $this->config->get3DSecureSpecificCountries($storeId); if (!empty($specificCounties) && !in_array($billingAddress->getCountryId(), $specificCounties)) { return false; } diff --git a/app/code/Magento/Braintree/Model/Adapter/BraintreeAdapter.php b/app/code/Magento/Braintree/Model/Adapter/BraintreeAdapter.php index 71f3828ebe9d4..d11be39a9bb49 100644 --- a/app/code/Magento/Braintree/Model/Adapter/BraintreeAdapter.php +++ b/app/code/Magento/Braintree/Model/Adapter/BraintreeAdapter.php @@ -15,29 +15,40 @@ /** * Class BraintreeAdapter + * Use \Magento\Braintree\Model\Adapter\BraintreeAdapterFactory to create new instance of adapter. * @codeCoverageIgnore */ class BraintreeAdapter { - /** * @var Config */ private $config; /** - * @param Config $config + * @param string $merchantId + * @param string $publicKey + * @param string $privateKey + * @param string $environment */ - public function __construct(Config $config) + public function __construct($merchantId, $publicKey, $privateKey, $environment) { - $this->config = $config; - $this->initCredentials(); + $this->merchantId($merchantId); + $this->publicKey($publicKey); + $this->privateKey($privateKey); + + if ($environment == Environment::ENVIRONMENT_PRODUCTION) { + $this->environment(Environment::ENVIRONMENT_PRODUCTION); + } else { + $this->environment(Environment::ENVIRONMENT_SANDBOX); + } } /** * Initializes credentials. * * @return void + * @deprecated is not used anymore */ protected function initCredentials() { diff --git a/app/code/Magento/Braintree/Model/Adapter/BraintreeAdapterFactory.php b/app/code/Magento/Braintree/Model/Adapter/BraintreeAdapterFactory.php new file mode 100644 index 0000000000000..890f1a1021eda --- /dev/null +++ b/app/code/Magento/Braintree/Model/Adapter/BraintreeAdapterFactory.php @@ -0,0 +1,56 @@ +config = $config; + $this->objectManager = $objectManager; + } + + /** + * Creates instance of Braintree Adapter. + * + * @param int $storeId if null is provided as an argument, then current scope will be resolved + * by \Magento\Framework\App\Config\ScopeCodeResolver (useful for most cases) but for adminhtml area the store + * should be provided as the argument for correct config settings loading. + * @return BraintreeAdapter + */ + public function create($storeId = null) + { + return $this->objectManager->create( + BraintreeAdapter::class, + [ + 'merchantId' => $this->config->getMerchantId($storeId), + 'publicKey' => $this->config->getValue(Config::KEY_PUBLIC_KEY, $storeId), + 'privateKey' => $this->config->getValue(Config::KEY_PRIVATE_KEY, $storeId), + 'environment' => $this->config->getEnvironment($storeId) + ] + ); + } +} diff --git a/app/code/Magento/Braintree/Model/Report/TransactionsCollection.php b/app/code/Magento/Braintree/Model/Report/TransactionsCollection.php index edac6e3533849..a237b64bf58ee 100644 --- a/app/code/Magento/Braintree/Model/Report/TransactionsCollection.php +++ b/app/code/Magento/Braintree/Model/Report/TransactionsCollection.php @@ -5,7 +5,8 @@ */ namespace Magento\Braintree\Model\Report; -use Magento\Braintree\Model\Adapter\BraintreeAdapter; +use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; +use Magento\Braintree\Model\Report\Row\TransactionMap; use Magento\Framework\Api\Search\SearchResultInterface; use Magento\Framework\Api\SearchCriteriaInterface; use Magento\Framework\Data\Collection; @@ -26,7 +27,7 @@ class TransactionsCollection extends Collection implements SearchResultInterface * * @var string */ - protected $_itemObjectClass = \Magento\Braintree\Model\Report\Row\TransactionMap::class; + protected $_itemObjectClass = TransactionMap::class; /** * @var array @@ -39,9 +40,9 @@ class TransactionsCollection extends Collection implements SearchResultInterface private $filterMapper; /** - * @var BraintreeAdapter + * @var BraintreeAdapterFactory */ - private $braintreeAdapter; + private $braintreeAdapterFactory; /** * @var \Braintree\ResourceCollection | null @@ -50,17 +51,17 @@ class TransactionsCollection extends Collection implements SearchResultInterface /** * @param EntityFactoryInterface $entityFactory - * @param BraintreeAdapter $braintreeAdapter + * @param BraintreeAdapterFactory $braintreeAdapterFactory * @param FilterMapper $filterMapper */ public function __construct( EntityFactoryInterface $entityFactory, - BraintreeAdapter $braintreeAdapter, + BraintreeAdapterFactory $braintreeAdapterFactory, FilterMapper $filterMapper ) { parent::__construct($entityFactory); $this->filterMapper = $filterMapper; - $this->braintreeAdapter = $braintreeAdapter; + $this->braintreeAdapterFactory = $braintreeAdapterFactory; } /** @@ -110,7 +111,8 @@ protected function fetchIdsCollection() // Fetch all transaction IDs in order to filter if (empty($this->collection)) { $filters = $this->getFilters(); - $this->collection = $this->braintreeAdapter->search($filters); + $this->collection = $this->braintreeAdapterFactory->create() + ->search($filters); } return $this->collection; diff --git a/app/code/Magento/Braintree/Model/Ui/ConfigProvider.php b/app/code/Magento/Braintree/Model/Ui/ConfigProvider.php index c420195446270..6ab69923760ce 100644 --- a/app/code/Magento/Braintree/Model/Ui/ConfigProvider.php +++ b/app/code/Magento/Braintree/Model/Ui/ConfigProvider.php @@ -5,10 +5,11 @@ */ namespace Magento\Braintree\Model\Ui; +use Magento\Braintree\Gateway\Config\Config; use Magento\Braintree\Gateway\Request\PaymentDataBuilder; +use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; use Magento\Checkout\Model\ConfigProviderInterface; -use Magento\Braintree\Gateway\Config\Config; -use Magento\Braintree\Model\Adapter\BraintreeAdapter; +use Magento\Framework\Session\SessionManagerInterface; /** * Class ConfigProvider @@ -25,27 +26,35 @@ class ConfigProvider implements ConfigProviderInterface private $config; /** - * @var BraintreeAdapter + * @var BraintreeAdapterFactory */ - private $adapter; + private $adapterFactory; /** * @var string */ private $clientToken = ''; + /** + * @var SessionManagerInterface + */ + private $session; + /** * Constructor * * @param Config $config - * @param BraintreeAdapter $adapter + * @param BraintreeAdapterFactory $adapterFactory + * @param SessionManagerInterface $session */ public function __construct( Config $config, - BraintreeAdapter $adapter + BraintreeAdapterFactory $adapterFactory, + SessionManagerInterface $session ) { $this->config = $config; - $this->adapter = $adapter; + $this->adapterFactory = $adapterFactory; + $this->session = $session; } /** @@ -55,26 +64,27 @@ public function __construct( */ public function getConfig() { + $storeId = $this->session->getStoreId(); return [ 'payment' => [ self::CODE => [ - 'isActive' => $this->config->isActive(), + 'isActive' => $this->config->isActive($storeId), 'clientToken' => $this->getClientToken(), 'ccTypesMapper' => $this->config->getCctypesMapper(), 'sdkUrl' => $this->config->getSdkUrl(), - 'countrySpecificCardTypes' => $this->config->getCountrySpecificCardTypeConfig(), - 'availableCardTypes' => $this->config->getAvailableCardTypes(), - 'useCvv' => $this->config->isCvvEnabled(), - 'environment' => $this->config->getEnvironment(), - 'kountMerchantId' => $this->config->getKountMerchantId(), - 'hasFraudProtection' => $this->config->hasFraudProtection(), - 'merchantId' => $this->config->getMerchantId(), + 'countrySpecificCardTypes' => $this->config->getCountrySpecificCardTypeConfig($storeId), + 'availableCardTypes' => $this->config->getAvailableCardTypes($storeId), + 'useCvv' => $this->config->isCvvEnabled($storeId), + 'environment' => $this->config->getEnvironment($storeId), + 'kountMerchantId' => $this->config->getKountMerchantId($storeId), + 'hasFraudProtection' => $this->config->hasFraudProtection($storeId), + 'merchantId' => $this->config->getMerchantId($storeId), 'ccVaultCode' => self::CC_VAULT_CODE ], Config::CODE_3DSECURE => [ - 'enabled' => $this->config->isVerify3DSecure(), - 'thresholdAmount' => $this->config->getThresholdAmount(), - 'specificCountries' => $this->config->get3DSecureSpecificCountries() + 'enabled' => $this->config->isVerify3DSecure($storeId), + 'thresholdAmount' => $this->config->getThresholdAmount($storeId), + 'specificCountries' => $this->config->get3DSecureSpecificCountries($storeId) ], ] ]; @@ -89,12 +99,14 @@ public function getClientToken() if (empty($this->clientToken)) { $params = []; - $merchantAccountId = $this->config->getMerchantAccountId(); + $storeId = $this->session->getStoreId(); + $merchantAccountId = $this->config->getMerchantAccountId($storeId); if (!empty($merchantAccountId)) { $params[PaymentDataBuilder::MERCHANT_ACCOUNT_ID] = $merchantAccountId; } - $this->clientToken = $this->adapter->generate($params); + $this->clientToken = $this->adapterFactory->create($storeId) + ->generate($params); } return $this->clientToken; diff --git a/app/code/Magento/Braintree/Test/Unit/Block/FormTest.php b/app/code/Magento/Braintree/Test/Unit/Block/FormTest.php index 5b28e6d8aedcd..9d363c77f2b05 100644 --- a/app/code/Magento/Braintree/Test/Unit/Block/FormTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Block/FormTest.php @@ -13,8 +13,6 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Payment\Helper\Data; use Magento\Payment\Model\Config; -use Magento\Store\Api\Data\StoreInterface; -use Magento\Store\Model\StoreManagerInterface; use Magento\Vault\Model\VaultPaymentInterface; use PHPUnit_Framework_MockObject_MockObject as MockObject; @@ -57,11 +55,6 @@ class FormTest extends \PHPUnit\Framework\TestCase */ private $ccType; - /** - * @var StoreManagerInterface|MockObject - */ - private $storeManager; - /** * @var Data|MockObject */ @@ -72,8 +65,7 @@ protected function setUp() $this->initCcTypeMock(); $this->initSessionQuoteMock(); $this->initGatewayConfigMock(); - - $this->storeManager = $this->getMockForAbstractClass(StoreManagerInterface::class); + $this->paymentDataHelper = $this->getMockBuilder(Data::class) ->disableOriginalConstructor() ->setMethods(['getMethodInstance']) @@ -84,15 +76,13 @@ protected function setUp() 'paymentConfig' => $managerHelper->getObject(Config::class), 'sessionQuote' => $this->sessionQuote, 'gatewayConfig' => $this->gatewayConfig, - 'ccType' => $this->ccType, - 'storeManager' => $this->storeManager + 'ccType' => $this->ccType ]); $managerHelper->setBackwardCompatibleProperty($this->block, 'paymentDataHelper', $this->paymentDataHelper); } /** - * @covers \Magento\Braintree\Block\Form::getCcAvailableTypes * @param string $countryId * @param array $availableTypes * @param array $expected @@ -100,21 +90,18 @@ protected function setUp() */ public function testGetCcAvailableTypes($countryId, array $availableTypes, array $expected) { - $this->sessionQuote->expects(static::once()) - ->method('getCountryId') + $this->sessionQuote->method('getCountryId') ->willReturn($countryId); - $this->gatewayConfig->expects(static::once()) - ->method('getAvailableCardTypes') + $this->gatewayConfig->method('getAvailableCardTypes') ->willReturn(self::$configCardTypes); - $this->gatewayConfig->expects(static::once()) - ->method('getCountryAvailableCardTypes') + $this->gatewayConfig->method('getCountryAvailableCardTypes') ->with($countryId) ->willReturn($availableTypes); $result = $this->block->getCcAvailableTypes(); - static::assertEquals($expected, array_values($result)); + self::assertEquals($expected, array_values($result)); } /** @@ -131,33 +118,20 @@ public function countryCardTypesDataProvider() ]; } - /** - * @covers \Magento\Braintree\Block\Form::isVaultEnabled - */ public function testIsVaultEnabled() { $storeId = 1; - $store = $this->getMockForAbstractClass(StoreInterface::class); - $this->storeManager->expects(static::once()) - ->method('getStore') - ->willReturn($store); - - $store->expects(static::once()) - ->method('getId') - ->willReturn($storeId); $vaultPayment = $this->getMockForAbstractClass(VaultPaymentInterface::class); - $this->paymentDataHelper->expects(static::once()) - ->method('getMethodInstance') + $this->paymentDataHelper->method('getMethodInstance') ->with(ConfigProvider::CC_VAULT_CODE) ->willReturn($vaultPayment); - $vaultPayment->expects(static::once()) - ->method('isActive') - ->with($storeId) + $vaultPayment->method('isActive') + ->with(self::equalTo($storeId)) ->willReturn(true); - static::assertTrue($this->block->isVaultEnabled()); + self::assertTrue($this->block->isVaultEnabled()); } /** @@ -170,8 +144,7 @@ private function initCcTypeMock() ->setMethods(['getCcTypeLabelMap']) ->getMock(); - $this->ccType->expects(static::any()) - ->method('getCcTypeLabelMap') + $this->ccType->method('getCcTypeLabelMap') ->willReturn(self::$baseCardTypes); } @@ -182,15 +155,15 @@ private function initSessionQuoteMock() { $this->sessionQuote = $this->getMockBuilder(Quote::class) ->disableOriginalConstructor() - ->setMethods(['getQuote', 'getBillingAddress', 'getCountryId', '__wakeup']) + ->setMethods(['getQuote', 'getBillingAddress', 'getCountryId', 'getStoreId']) ->getMock(); - $this->sessionQuote->expects(static::any()) - ->method('getQuote') + $this->sessionQuote->method('getQuote') ->willReturnSelf(); - $this->sessionQuote->expects(static::any()) - ->method('getBillingAddress') + $this->sessionQuote->method('getBillingAddress') ->willReturnSelf(); + $this->sessionQuote->method('getStoreId') + ->willReturn(1); } /** diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/Payment/GetNonceTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/Payment/GetNonceTest.php index e78e54f011d44..723897491da63 100644 --- a/app/code/Magento/Braintree/Test/Unit/Controller/Payment/GetNonceTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Controller/Payment/GetNonceTest.php @@ -16,6 +16,7 @@ use Magento\Framework\Webapi\Exception; use Magento\Payment\Gateway\Command\ResultInterface as CommandResultInterface; use Psr\Log\LoggerInterface; +use PHPUnit_Framework_MockObject_MockObject as MockObject; /** * Class GetNonceTest @@ -30,37 +31,37 @@ class GetNonceTest extends \PHPUnit\Framework\TestCase private $action; /** - * @var GetPaymentNonceCommand|\PHPUnit_Framework_MockObject_MockObject + * @var GetPaymentNonceCommand|MockObject */ private $command; /** - * @var Session|\PHPUnit_Framework_MockObject_MockObject + * @var Session|MockObject */ private $session; /** - * @var LoggerInterface|\PHPUnit_Framework_MockObject_MockObject + * @var LoggerInterface|MockObject */ private $logger; /** - * @var ResultFactory|\PHPUnit_Framework_MockObject_MockObject + * @var ResultFactory|MockObject */ private $resultFactory; /** - * @var ResultInterface|\PHPUnit_Framework_MockObject_MockObject + * @var ResultInterface|MockObject */ private $result; /** - * @var Http|\PHPUnit_Framework_MockObject_MockObject + * @var Http|MockObject */ private $request; /** - * @var CommandResultInterface|\PHPUnit_Framework_MockObject_MockObject + * @var CommandResultInterface|MockObject */ private $commandResult; @@ -84,7 +85,7 @@ protected function setUp() $this->session = $this->getMockBuilder(Session::class) ->disableOriginalConstructor() - ->setMethods(['getCustomerId']) + ->setMethods(['getCustomerId', 'getStoreId']) ->getMock(); $this->logger = $this->createMock(LoggerInterface::class); @@ -92,11 +93,9 @@ protected function setUp() $context = $this->getMockBuilder(Context::class) ->disableOriginalConstructor() ->getMock(); - $context->expects(static::any()) - ->method('getRequest') + $context->method('getRequest') ->willReturn($this->request); - $context->expects(static::any()) - ->method('getResultFactory') + $context->method('getResultFactory') ->willReturn($this->resultFactory); $managerHelper = new ObjectManager($this); @@ -108,81 +107,68 @@ protected function setUp() ]); } - /** - * @covers \Magento\Braintree\Controller\Payment\GetNonce::execute - */ public function testExecuteWithException() { - $this->request->expects(static::once()) - ->method('getParam') + $this->request->method('getParam') ->with('public_hash') ->willReturn(null); - $this->session->expects(static::once()) - ->method('getCustomerId') + $this->session->method('getCustomerId') + ->willReturn(null); + $this->session->method('getStoreId') ->willReturn(null); $exception = new \Exception('The "publicHash" field does not exists'); - $this->command->expects(static::once()) - ->method('execute') + $this->command->method('execute') ->willThrowException($exception); - $this->logger->expects(static::once()) - ->method('critical') + $this->logger->method('critical') ->with($exception); - $this->result->expects(static::once()) - ->method('setHttpResponseCode') + $this->result->method('setHttpResponseCode') ->with(Exception::HTTP_BAD_REQUEST); - $this->result->expects(static::once()) - ->method('setData') + $this->result->method('setData') ->with(['message' => 'Sorry, but something went wrong']); $this->action->execute(); } - /** - * @covers \Magento\Braintree\Controller\Payment\GetNonce::execute - */ public function testExecute() { $customerId = 1; $publicHash = '65b7bae0dcb690d93'; $nonce = 'f1hc45'; - $this->request->expects(static::once()) - ->method('getParam') + $this->request->method('getParam') ->with('public_hash') ->willReturn($publicHash); - $this->session->expects(static::once()) - ->method('getCustomerId') + $this->session->method('getCustomerId') ->willReturn($customerId); + $this->session->method('getStoreId') + ->willReturn(null); - $this->commandResult->expects(static::once()) - ->method('get') + $this->commandResult->method('get') ->willReturn([ 'paymentMethodNonce' => $nonce ]); - $this->command->expects(static::once()) - ->method('execute') + $this->command->method('execute') ->willReturn($this->commandResult); - $this->result->expects(static::once()) - ->method('setData') + $this->result->method('setData') ->with(['paymentMethodNonce' => $nonce]); - $this->logger->expects(static::never()) + $this->logger->expects(self::never()) ->method('critical'); - $this->result->expects(static::never()) + $this->result->expects(self::never()) ->method('setHttpResponseCode'); $this->action->execute(); } /** - * Create mock for result factory object + * Creates mock for result factory object */ private function initResultFactoryMock() { @@ -195,8 +181,7 @@ private function initResultFactoryMock() ->setMethods(['create']) ->getMock(); - $this->resultFactory->expects(static::once()) - ->method('create') + $this->resultFactory->method('create') ->willReturn($this->result); } } diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Command/CaptureStrategyCommandTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Command/CaptureStrategyCommandTest.php index 56ea1f97fa165..ede4bab8dfc56 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Command/CaptureStrategyCommandTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Command/CaptureStrategyCommandTest.php @@ -6,23 +6,22 @@ namespace Magento\Braintree\Test\Unit\Gateway\Command; use Braintree\IsNode; -use Braintree\MultipleValueNode; -use Braintree\TextNode; use Magento\Braintree\Gateway\Command\CaptureStrategyCommand; use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Model\Adapter\BraintreeAdapter; +use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; +use Magento\Braintree\Model\Adapter\BraintreeSearchAdapter; use Magento\Framework\Api\FilterBuilder; use Magento\Framework\Api\Search\SearchCriteria; use Magento\Framework\Api\SearchCriteriaBuilder; -use Magento\Payment\Gateway\Command; use Magento\Payment\Gateway\Command\CommandPoolInterface; use Magento\Payment\Gateway\Command\GatewayCommand; +use Magento\Payment\Gateway\Data\OrderAdapterInterface; use Magento\Payment\Gateway\Data\PaymentDataObject; use Magento\Sales\Api\TransactionRepositoryInterface; use Magento\Sales\Model\Order\Payment; -use Magento\Sales\Model\Order\Payment\Transaction; use Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory; -use Magento\Braintree\Model\Adapter\BraintreeAdapter; -use Magento\Braintree\Model\Adapter\BraintreeSearchAdapter; +use PHPUnit_Framework_MockObject_MockObject as MockObject; /** * Class CaptureStrategyCommandTest @@ -37,42 +36,42 @@ class CaptureStrategyCommandTest extends \PHPUnit\Framework\TestCase private $strategyCommand; /** - * @var CommandPoolInterface|\PHPUnit_Framework_MockObject_MockObject + * @var CommandPoolInterface|MockObject */ private $commandPool; /** - * @var TransactionRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject + * @var TransactionRepositoryInterface|MockObject */ private $transactionRepository; /** - * @var FilterBuilder|\PHPUnit_Framework_MockObject_MockObject + * @var FilterBuilder|MockObject */ private $filterBuilder; /** - * @var SearchCriteriaBuilder|\PHPUnit_Framework_MockObject_MockObject + * @var SearchCriteriaBuilder|MockObject */ private $searchCriteriaBuilder; /** - * @var Payment|\PHPUnit_Framework_MockObject_MockObject + * @var Payment|MockObject */ private $payment; /** - * @var GatewayCommand|\PHPUnit_Framework_MockObject_MockObject + * @var GatewayCommand|MockObject */ private $command; /** - * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject + * @var SubjectReader|MockObject */ - private $subjectReaderMock; + private $subjectReader; /** - * @var BraintreeAdapter|\PHPUnit_Framework_MockObject_MockObject + * @var BraintreeAdapter|MockObject */ private $braintreeAdapter; @@ -88,7 +87,7 @@ protected function setUp() ->setMethods(['get', '__wakeup']) ->getMock(); - $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class) + $this->subjectReader = $this->getMockBuilder(SubjectReader::class) ->disableOriginalConstructor() ->getMock(); @@ -100,6 +99,13 @@ protected function setUp() $this->braintreeAdapter = $this->getMockBuilder(BraintreeAdapter::class) ->disableOriginalConstructor() ->getMock(); + /** @var BraintreeAdapterFactory|MockObject $adapterFactory */ + $adapterFactory = $this->getMockBuilder(BraintreeAdapterFactory::class) + ->disableOriginalConstructor() + ->getMock(); + $adapterFactory->method('create') + ->willReturn($this->braintreeAdapter); + $this->braintreeSearchAdapter = new BraintreeSearchAdapter(); $this->strategyCommand = new CaptureStrategyCommand( @@ -107,86 +113,68 @@ protected function setUp() $this->transactionRepository, $this->filterBuilder, $this->searchCriteriaBuilder, - $this->subjectReaderMock, - $this->braintreeAdapter, + $this->subjectReader, + $adapterFactory, $this->braintreeSearchAdapter ); } - /** - * @covers \Magento\Braintree\Gateway\Command\CaptureStrategyCommand::execute - */ public function testSaleExecute() { $paymentData = $this->getPaymentDataObjectMock(); $subject['payment'] = $paymentData; - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') + $this->subjectReader->method('readPayment') ->with($subject) ->willReturn($paymentData); - $this->payment->expects(static::once()) - ->method('getAuthorizationTransaction') + $this->payment->method('getAuthorizationTransaction') ->willReturn(false); - $this->payment->expects(static::once()) - ->method('getId') + $this->payment->method('getId') ->willReturn(1); $this->buildSearchCriteria(); - $this->transactionRepository->expects(static::once()) - ->method('getTotalCount') + $this->transactionRepository->method('getTotalCount') ->willReturn(0); - $this->commandPool->expects(static::once()) - ->method('get') + $this->commandPool->method('get') ->with(CaptureStrategyCommand::SALE) ->willReturn($this->command); $this->strategyCommand->execute($subject); } - /** - * @covers \Magento\Braintree\Gateway\Command\CaptureStrategyCommand::execute - */ public function testCaptureExecute() { $paymentData = $this->getPaymentDataObjectMock(); $subject['payment'] = $paymentData; $lastTransId = 'txnds'; - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') + $this->subjectReader->method('readPayment') ->with($subject) ->willReturn($paymentData); - $this->payment->expects(static::once()) - ->method('getAuthorizationTransaction') + $this->payment->method('getAuthorizationTransaction') ->willReturn(true); - $this->payment->expects(static::once()) - ->method('getLastTransId') + $this->payment->method('getLastTransId') ->willReturn($lastTransId); - $this->payment->expects(static::once()) - ->method('getId') + $this->payment->method('getId') ->willReturn(1); $this->buildSearchCriteria(); - $this->transactionRepository->expects(static::once()) - ->method('getTotalCount') + $this->transactionRepository->method('getTotalCount') ->willReturn(0); // authorization transaction was not expired $collection = $this->getNotExpiredExpectedCollection($lastTransId); - $collection->expects(static::once()) - ->method('maximumCount') + $collection->method('maximumCount') ->willReturn(0); - $this->commandPool->expects(static::once()) - ->method('get') + $this->commandPool->method('get') ->with(CaptureStrategyCommand::CAPTURE) ->willReturn($this->command); @@ -195,7 +183,7 @@ public function testCaptureExecute() /** * @param string $lastTransactionId - * @return \Braintree\ResourceCollection|\PHPUnit_Framework_MockObject_MockObject + * @return \Braintree\ResourceCollection|MockObject */ private function getNotExpiredExpectedCollection($lastTransactionId) { @@ -208,10 +196,9 @@ private function getNotExpiredExpectedCollection($lastTransactionId) ->disableOriginalConstructor() ->getMock(); - $this->braintreeAdapter->expects(static::once()) - ->method('search') + $this->braintreeAdapter->method('search') ->with( - static::callback( + self::callback( function (array $filters) use ($isExpectations) { foreach ($filters as $filter) { /** @var IsNode $filter */ @@ -233,80 +220,62 @@ function (array $filters) use ($isExpectations) { return $collection; } - /** - * @covers \Magento\Braintree\Gateway\Command\CaptureStrategyCommand::execute - */ public function testExpiredAuthorizationPerformVaultCaptureExecute() { $paymentData = $this->getPaymentDataObjectMock(); $subject['payment'] = $paymentData; $lastTransId = 'txnds'; - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') + $this->subjectReader->method('readPayment') ->with($subject) ->willReturn($paymentData); - $this->payment->expects(static::once()) - ->method('getAuthorizationTransaction') + $this->payment->method('getAuthorizationTransaction') ->willReturn(true); - $this->payment->expects(static::once()) - ->method('getLastTransId') + $this->payment->method('getLastTransId') ->willReturn($lastTransId); - $this->payment->expects(static::once()) - ->method('getId') + $this->payment->method('getId') ->willReturn(1); $this->buildSearchCriteria(); - $this->transactionRepository->expects(static::once()) - ->method('getTotalCount') + $this->transactionRepository->method('getTotalCount') ->willReturn(0); // authorization transaction was expired $collection = $this->getNotExpiredExpectedCollection($lastTransId); - $collection->expects(static::once()) - ->method('maximumCount') + $collection->method('maximumCount') ->willReturn(1); - $this->commandPool->expects(static::once()) - ->method('get') + $this->commandPool->method('get') ->with(CaptureStrategyCommand::VAULT_CAPTURE) ->willReturn($this->command); $this->strategyCommand->execute($subject); } - /** - * @covers \Magento\Braintree\Gateway\Command\CaptureStrategyCommand::execute - */ public function testVaultCaptureExecute() { $paymentData = $this->getPaymentDataObjectMock(); $subject['payment'] = $paymentData; - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') + $this->subjectReader->method('readPayment') ->with($subject) ->willReturn($paymentData); - $this->payment->expects(static::once()) - ->method('getAuthorizationTransaction') + $this->payment->method('getAuthorizationTransaction') ->willReturn(true); - $this->payment->expects(static::once()) - ->method('getId') + $this->payment->method('getId') ->willReturn(1); $this->buildSearchCriteria(); - $this->transactionRepository->expects(static::once()) - ->method('getTotalCount') + $this->transactionRepository->method('getTotalCount') ->willReturn(1); - $this->commandPool->expects(static::once()) - ->method('get') + $this->commandPool->method('get') ->with(CaptureStrategyCommand::VAULT_CAPTURE) ->willReturn($this->command); @@ -314,8 +283,8 @@ public function testVaultCaptureExecute() } /** - * Create mock for payment data object and order payment - * @return \PHPUnit_Framework_MockObject_MockObject + * Creates mock for payment data object and order payment + * @return MockObject */ private function getPaymentDataObjectMock() { @@ -324,19 +293,25 @@ private function getPaymentDataObjectMock() ->getMock(); $mock = $this->getMockBuilder(PaymentDataObject::class) - ->setMethods(['getPayment']) + ->setMethods(['getPayment', 'getOrder']) ->disableOriginalConstructor() ->getMock(); - $mock->expects(static::once()) - ->method('getPayment') + $mock->method('getPayment') ->willReturn($this->payment); + $order = $this->getMockBuilder(OrderAdapterInterface::class) + ->disableOriginalConstructor() + ->getMock(); + + $mock->method('getOrder') + ->willReturn($order); + return $mock; } /** - * Create mock for gateway command object + * Creates mock for gateway command object */ private function initCommandMock() { @@ -345,13 +320,12 @@ private function initCommandMock() ->setMethods(['execute']) ->getMock(); - $this->command->expects(static::once()) - ->method('execute') + $this->command->method('execute') ->willReturn([]); } /** - * Create mock for filter object + * Creates mock for filter object */ private function initFilterBuilderMock() { @@ -362,27 +336,25 @@ private function initFilterBuilderMock() } /** - * Build search criteria + * Builds search criteria */ private function buildSearchCriteria() { - $this->filterBuilder->expects(static::exactly(2)) + $this->filterBuilder->expects(self::exactly(2)) ->method('setField') ->willReturnSelf(); - $this->filterBuilder->expects(static::exactly(2)) + $this->filterBuilder->expects(self::exactly(2)) ->method('setValue') ->willReturnSelf(); $searchCriteria = new SearchCriteria(); - $this->searchCriteriaBuilder->expects(static::exactly(2)) + $this->searchCriteriaBuilder->expects(self::exactly(2)) ->method('addFilters') ->willReturnSelf(); - $this->searchCriteriaBuilder->expects(static::once()) - ->method('create') + $this->searchCriteriaBuilder->method('create') ->willReturn($searchCriteria); - $this->transactionRepository->expects(static::once()) - ->method('getList') + $this->transactionRepository->method('getList') ->with($searchCriteria) ->willReturnSelf(); } diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Command/GetPaymentNonceCommandTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Command/GetPaymentNonceCommandTest.php index 333f29eb29136..1eeb785c13aa7 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Command/GetPaymentNonceCommandTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Command/GetPaymentNonceCommandTest.php @@ -9,12 +9,13 @@ use Magento\Braintree\Gateway\Helper\SubjectReader; use Magento\Braintree\Gateway\Validator\PaymentNonceResponseValidator; use Magento\Braintree\Model\Adapter\BraintreeAdapter; -use Magento\Payment\Gateway\Command; -use Magento\Payment\Gateway\Command\Result\ArrayResultFactory; +use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; use Magento\Payment\Gateway\Command\Result\ArrayResult; +use Magento\Payment\Gateway\Command\Result\ArrayResultFactory; use Magento\Payment\Gateway\Validator\ResultInterface; use Magento\Vault\Model\PaymentToken; use Magento\Vault\Model\PaymentTokenManagement; +use PHPUnit_Framework_MockObject_MockObject as MockObject; /** * Class GetPaymentNonceCommandTest @@ -29,37 +30,37 @@ class GetPaymentNonceCommandTest extends \PHPUnit\Framework\TestCase private $command; /** - * @var BraintreeAdapter|\PHPUnit_Framework_MockObject_MockObject + * @var BraintreeAdapter|MockObject */ private $adapter; /** - * @var PaymentTokenManagement|\PHPUnit_Framework_MockObject_MockObject + * @var PaymentTokenManagement|MockObject */ private $tokenManagement; /** - * @var PaymentToken|\PHPUnit_Framework_MockObject_MockObject + * @var PaymentToken|MockObject */ private $paymentToken; /** - * @var ArrayResultFactory|\PHPUnit_Framework_MockObject_MockObject + * @var ArrayResultFactory|MockObject */ private $resultFactory; /** - * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject + * @var SubjectReader|MockObject */ private $subjectReader; /** - * @var PaymentNonceResponseValidator|\PHPUnit_Framework_MockObject_MockObject + * @var PaymentNonceResponseValidator|MockObject */ private $responseValidator; /** - * @var ResultInterface|\PHPUnit_Framework_MockObject_MockObject + * @var ResultInterface|MockObject */ private $validationResult; @@ -79,6 +80,12 @@ protected function setUp() ->disableOriginalConstructor() ->setMethods(['createNonce']) ->getMock(); + /** @var BraintreeAdapterFactory|MockObject $adapterFactory */ + $adapterFactory = $this->getMockBuilder(BraintreeAdapterFactory::class) + ->disableOriginalConstructor() + ->getMock(); + $adapterFactory->method('create') + ->willReturn($this->adapter); $this->resultFactory = $this->getMockBuilder(ArrayResultFactory::class) ->disableOriginalConstructor() @@ -101,7 +108,7 @@ protected function setUp() $this->command = new GetPaymentNonceCommand( $this->tokenManagement, - $this->adapter, + $adapterFactory, $this->resultFactory, $this->subjectReader, $this->responseValidator @@ -109,7 +116,6 @@ protected function setUp() } /** - * @covers \Magento\Braintree\Gateway\Command\GetPaymentNonceCommand::execute * @expectedException \InvalidArgumentException * @expectedExceptionMessage The "publicHash" field does not exists */ @@ -117,18 +123,16 @@ public function testExecuteWithExceptionForPublicHash() { $exception = new \InvalidArgumentException('The "publicHash" field does not exists'); - $this->subjectReader->expects(static::once()) - ->method('readPublicHash') + $this->subjectReader->method('readPublicHash') ->willThrowException($exception); - $this->subjectReader->expects(static::never()) + $this->subjectReader->expects(self::never()) ->method('readCustomerId'); $this->command->execute([]); } /** - * @covers \Magento\Braintree\Gateway\Command\GetPaymentNonceCommand::execute * @expectedException \InvalidArgumentException * @expectedExceptionMessage The "customerId" field does not exists */ @@ -136,23 +140,20 @@ public function testExecuteWithExceptionForCustomerId() { $publicHash = '3wv2m24d2er3'; - $this->subjectReader->expects(static::once()) - ->method('readPublicHash') + $this->subjectReader->method('readPublicHash') ->willReturn($publicHash); $exception = new \InvalidArgumentException('The "customerId" field does not exists'); - $this->subjectReader->expects(static::once()) - ->method('readCustomerId') + $this->subjectReader->method('readCustomerId') ->willThrowException($exception); - $this->tokenManagement->expects(static::never()) + $this->tokenManagement->expects(self::never()) ->method('getByPublicHash'); $this->command->execute(['publicHash' => $publicHash]); } /** - * @covers \Magento\Braintree\Gateway\Command\GetPaymentNonceCommand::execute * @expectedException \Exception * @expectedExceptionMessage No available payment tokens */ @@ -161,27 +162,23 @@ public function testExecuteWithExceptionForTokenManagement() $publicHash = '3wv2m24d2er3'; $customerId = 1; - $this->subjectReader->expects(static::once()) - ->method('readPublicHash') + $this->subjectReader->method('readPublicHash') ->willReturn($publicHash); - $this->subjectReader->expects(static::once()) - ->method('readCustomerId') + $this->subjectReader->method('readCustomerId') ->willReturn($customerId); $exception = new \Exception('No available payment tokens'); - $this->tokenManagement->expects(static::once()) - ->method('getByPublicHash') + $this->tokenManagement->method('getByPublicHash') ->willThrowException($exception); - $this->paymentToken->expects(static::never()) + $this->paymentToken->expects(self::never()) ->method('getGatewayToken'); $this->command->execute(['publicHash' => $publicHash, 'customerId' => $customerId]); } /** - * @covers \Magento\Braintree\Gateway\Command\GetPaymentNonceCommand::execute * @expectedException \Exception * @expectedExceptionMessage Payment method nonce can't be retrieved. */ @@ -191,52 +188,41 @@ public function testExecuteWithFailedValidation() $customerId = 1; $token = 'jd2vnq'; - $this->subjectReader->expects(static::once()) - ->method('readPublicHash') + $this->subjectReader->method('readPublicHash') ->willReturn($publicHash); - $this->subjectReader->expects(static::once()) - ->method('readCustomerId') + $this->subjectReader->method('readCustomerId') ->willReturn($customerId); - $this->tokenManagement->expects(static::once()) - ->method('getByPublicHash') + $this->tokenManagement->method('getByPublicHash') ->with($publicHash, $customerId) ->willReturn($this->paymentToken); - $this->paymentToken->expects(static::once()) - ->method('getGatewayToken') + $this->paymentToken->method('getGatewayToken') ->willReturn($token); $obj = new \stdClass(); $obj->success = false; - $this->adapter->expects(static::once()) - ->method('createNonce') + $this->adapter->method('createNonce') ->with($token) ->willReturn($obj); - $this->responseValidator->expects(static::once()) - ->method('validate') + $this->responseValidator->method('validate') ->with(['response' => ['object' => $obj]]) ->willReturn($this->validationResult); - $this->validationResult->expects(static::once()) - ->method('isValid') + $this->validationResult->method('isValid') ->willReturn(false); - $this->validationResult->expects(static::once()) - ->method('getFailsDescription') + $this->validationResult->method('getFailsDescription') ->willReturn(['Payment method nonce can\'t be retrieved.']); - $this->resultFactory->expects(static::never()) + $this->resultFactory->expects(self::never()) ->method('create'); $this->command->execute(['publicHash' => $publicHash, 'customerId' => $customerId]); } - /** - * @covers \Magento\Braintree\Gateway\Command\GetPaymentNonceCommand::execute - */ public function testExecute() { $publicHash = '3wv2m24d2er3'; @@ -244,57 +230,48 @@ public function testExecute() $token = 'jd2vnq'; $nonce = 's1dj23'; - $this->subjectReader->expects(static::once()) - ->method('readPublicHash') + $this->subjectReader->method('readPublicHash') ->willReturn($publicHash); - $this->subjectReader->expects(static::once()) - ->method('readCustomerId') + $this->subjectReader->method('readCustomerId') ->willReturn($customerId); - $this->tokenManagement->expects(static::once()) - ->method('getByPublicHash') + $this->tokenManagement->method('getByPublicHash') ->with($publicHash, $customerId) ->willReturn($this->paymentToken); - $this->paymentToken->expects(static::once()) - ->method('getGatewayToken') + $this->paymentToken->method('getGatewayToken') ->willReturn($token); $obj = new \stdClass(); $obj->success = true; $obj->paymentMethodNonce = new \stdClass(); $obj->paymentMethodNonce->nonce = $nonce; - $this->adapter->expects(static::once()) - ->method('createNonce') + $this->adapter->method('createNonce') ->with($token) ->willReturn($obj); - $this->responseValidator->expects(static::once()) - ->method('validate') + $this->responseValidator->method('validate') ->with(['response' => ['object' => $obj]]) ->willReturn($this->validationResult); - $this->validationResult->expects(static::once()) - ->method('isValid') + $this->validationResult->method('isValid') ->willReturn(true); - $this->validationResult->expects(static::never()) + $this->validationResult->expects(self::never()) ->method('getFailsDescription'); $expected = $this->getMockBuilder(ArrayResult::class) ->disableOriginalConstructor() ->setMethods(['get']) ->getMock(); - $expected->expects(static::once()) - ->method('get') + $expected->method('get') ->willReturn(['paymentMethodNonce' => $nonce]); - $this->resultFactory->expects(static::once()) - ->method('create') + $this->resultFactory->method('create') ->willReturn($expected); $actual = $this->command->execute(['publicHash' => $publicHash, 'customerId' => $customerId]); - static::assertEquals($expected, $actual); - static::assertEquals($nonce, $actual->get()['paymentMethodNonce']); + self::assertEquals($expected, $actual); + self::assertEquals($nonce, $actual->get()['paymentMethodNonce']); } } diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Http/Client/TransactionSaleTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Http/Client/TransactionSaleTest.php index 5cbcfef8b6b9e..48889f1efd2e5 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Http/Client/TransactionSaleTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Http/Client/TransactionSaleTest.php @@ -7,8 +7,10 @@ use Magento\Braintree\Gateway\Http\Client\TransactionSale; use Magento\Braintree\Model\Adapter\BraintreeAdapter; +use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; use Magento\Payment\Gateway\Http\TransferInterface; use Magento\Payment\Model\Method\Logger; +use PHPUnit_Framework_MockObject_MockObject as MockObject; use Psr\Log\LoggerInterface; /** @@ -22,35 +24,41 @@ class TransactionSaleTest extends \PHPUnit\Framework\TestCase private $model; /** - * @var Logger|\PHPUnit_Framework_MockObject_MockObject + * @var Logger|MockObject */ - private $loggerMock; + private $logger; /** - * @var BraintreeAdapter|\PHPUnit_Framework_MockObject_MockObject + * @var BraintreeAdapter|MockObject */ private $adapter; /** - * Set up - * - * @return void + * @inheritdoc */ protected function setUp() { - $criticalLoggerMock = $this->getMockForAbstractClass(LoggerInterface::class); - $this->loggerMock = $this->getMockBuilder(Logger::class) + /** @var LoggerInterface|MockObject $criticalLogger */ + $criticalLogger = $this->getMockForAbstractClass(LoggerInterface::class); + $this->logger = $this->getMockBuilder(Logger::class) ->disableOriginalConstructor() ->getMock(); + $this->adapter = $this->getMockBuilder(BraintreeAdapter::class) ->disableOriginalConstructor() ->getMock(); + /** @var BraintreeAdapterFactory|MockObject $adapterFactory */ + $adapterFactory = $this->getMockBuilder(BraintreeAdapterFactory::class) + ->disableOriginalConstructor() + ->getMock(); + $adapterFactory->method('create') + ->willReturn($this->adapter); - $this->model = new TransactionSale($criticalLoggerMock, $this->loggerMock, $this->adapter); + $this->model = new TransactionSale($criticalLogger, $this->logger, $adapterFactory); } /** - * Run test placeRequest method (exception) + * Runs test placeRequest method (exception) * * @return void * @@ -59,8 +67,7 @@ protected function setUp() */ public function testPlaceRequestException() { - $this->loggerMock->expects($this->once()) - ->method('debug') + $this->logger->method('debug') ->with( [ 'request' => $this->getTransferData(), @@ -69,11 +76,10 @@ public function testPlaceRequestException() ] ); - $this->adapter->expects($this->once()) - ->method('sale') + $this->adapter->method('sale') ->willThrowException(new \Exception('Test messages')); - /** @var TransferInterface|\PHPUnit_Framework_MockObject_MockObject $transferObjectMock */ + /** @var TransferInterface|MockObject $transferObjectMock */ $transferObjectMock = $this->getTransferObjectMock(); $this->model->placeRequest($transferObjectMock); @@ -87,14 +93,11 @@ public function testPlaceRequestException() public function testPlaceRequestSuccess() { $response = $this->getResponseObject(); - $this->adapter->expects($this->once()) - ->method('sale') + $this->adapter->method('sale') ->with($this->getTransferData()) - ->willReturn($response) - ; + ->willReturn($response); - $this->loggerMock->expects($this->once()) - ->method('debug') + $this->logger->method('debug') ->with( [ 'request' => $this->getTransferData(), @@ -110,19 +113,22 @@ public function testPlaceRequestSuccess() } /** - * @return TransferInterface|\PHPUnit_Framework_MockObject_MockObject + * Creates mock object for TransferInterface. + * + * @return TransferInterface|MockObject */ private function getTransferObjectMock() { $transferObjectMock = $this->createMock(TransferInterface::class); - $transferObjectMock->expects($this->once()) - ->method('getBody') + $transferObjectMock->method('getBody') ->willReturn($this->getTransferData()); return $transferObjectMock; } /** + * Creates stub for a response. + * * @return \stdClass */ private function getResponseObject() @@ -134,6 +140,8 @@ private function getResponseObject() } /** + * Creates stub request data. + * * @return array */ private function getTransferData() diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Http/Client/TransactionSubmitForSettlementTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Http/Client/TransactionSubmitForSettlementTest.php index 86113c34ba218..09b0efc58f3fb 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Http/Client/TransactionSubmitForSettlementTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Http/Client/TransactionSubmitForSettlementTest.php @@ -8,8 +8,10 @@ use Braintree\Result\Successful; use Magento\Braintree\Gateway\Http\Client\TransactionSubmitForSettlement; use Magento\Braintree\Model\Adapter\BraintreeAdapter; +use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; use Magento\Payment\Gateway\Http\TransferInterface; use Magento\Payment\Model\Method\Logger; +use PHPUnit_Framework_MockObject_MockObject as MockObject; use Psr\Log\LoggerInterface; /** @@ -23,76 +25,79 @@ class TransactionSubmitForSettlementTest extends \PHPUnit\Framework\TestCase private $client; /** - * @var Logger|\PHPUnit_Framework_MockObject_MockObject + * @var Logger|MockObject */ private $logger; /** - * @var BraintreeAdapter|\PHPUnit_Framework_MockObject_MockObject + * @var BraintreeAdapter|MockObject */ private $adapter; protected function setUp() { - $criticalLoggerMock = $this->getMockForAbstractClass(LoggerInterface::class); + /** @var LoggerInterface|MockObject $criticalLogger */ + $criticalLogger = $this->getMockForAbstractClass(LoggerInterface::class); $this->logger = $this->getMockBuilder(Logger::class) ->disableOriginalConstructor() ->setMethods(['debug']) ->getMock(); + $this->adapter = $this->getMockBuilder(BraintreeAdapter::class) ->disableOriginalConstructor() ->setMethods(['submitForSettlement']) ->getMock(); + /** @var BraintreeAdapterFactory|MockObject $adapterFactory */ + $adapterFactory = $this->getMockBuilder(BraintreeAdapterFactory::class) + ->disableOriginalConstructor() + ->getMock(); + $adapterFactory->method('create') + ->willReturn($this->adapter); $this->client = new TransactionSubmitForSettlement( - $criticalLoggerMock, + $criticalLogger, $this->logger, - $this->adapter + $adapterFactory ); } /** - * @covers \Magento\Braintree\Gateway\Http\Client\TransactionSubmitForSettlement::placeRequest * @expectedException \Magento\Payment\Gateway\Http\ClientException * @expectedExceptionMessage Transaction has been declined */ public function testPlaceRequestWithException() { $exception = new \Exception('Transaction has been declined'); - $this->adapter->expects(static::once()) - ->method('submitForSettlement') + $this->adapter->method('submitForSettlement') ->willThrowException($exception); - /** @var TransferInterface|\PHPUnit_Framework_MockObject_MockObject $transferObjectMock */ - $transferObjectMock = $this->getTransferObjectMock(); - $this->client->placeRequest($transferObjectMock); + /** @var TransferInterface|MockObject $transferObject */ + $transferObject = $this->getTransferObjectMock(); + $this->client->placeRequest($transferObject); } - /** - * @covers \Magento\Braintree\Gateway\Http\Client\TransactionSubmitForSettlement::process - */ public function testPlaceRequest() { $data = new Successful(['success'], [true]); - $this->adapter->expects(static::once()) - ->method('submitForSettlement') + $this->adapter->method('submitForSettlement') ->willReturn($data); - /** @var TransferInterface|\PHPUnit_Framework_MockObject_MockObject $transferObjectMock */ - $transferObjectMock = $this->getTransferObjectMock(); - $response = $this->client->placeRequest($transferObjectMock); + /** @var TransferInterface|MockObject $transferObject */ + $transferObject = $this->getTransferObjectMock(); + $response = $this->client->placeRequest($transferObject); static::assertTrue(is_object($response['object'])); static::assertEquals(['object' => $data], $response); } /** - * @return TransferInterface|\PHPUnit_Framework_MockObject_MockObject + * Creates mock for TransferInterface + * + * @return TransferInterface|MockObject */ private function getTransferObjectMock() { $mock = $this->createMock(TransferInterface::class); - $mock->expects($this->once()) - ->method('getBody') + $mock->method('getBody') ->willReturn([ 'transaction_id' => 'vb4c6b', 'amount' => 124.00 diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/AddressDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/AddressDataBuilderTest.php index 3f05aed45da60..95bb73d27f23f 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/AddressDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/AddressDataBuilderTest.php @@ -5,11 +5,12 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Request; +use Magento\Braintree\Gateway\Helper\SubjectReader; use Magento\Braintree\Gateway\Request\AddressDataBuilder; -use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; -use Magento\Payment\Gateway\Data\OrderAdapterInterface; use Magento\Payment\Gateway\Data\AddressAdapterInterface; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Payment\Gateway\Data\OrderAdapterInterface; +use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; +use PHPUnit_Framework_MockObject_MockObject as MockObject; /** * Class AddressDataBuilderTest @@ -17,34 +18,26 @@ class AddressDataBuilderTest extends \PHPUnit\Framework\TestCase { /** - * @var PaymentDataObjectInterface|\PHPUnit_Framework_MockObject_MockObject + * @var PaymentDataObjectInterface|MockObject */ - private $paymentDOMock; + private $paymentDO; /** - * @var OrderAdapterInterface|\PHPUnit_Framework_MockObject_MockObject + * @var OrderAdapterInterface|MockObject */ - private $orderMock; + private $order; /** * @var AddressDataBuilder */ private $builder; - /** - * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject - */ - private $subjectReaderMock; - protected function setUp() { - $this->paymentDOMock = $this->createMock(PaymentDataObjectInterface::class); - $this->orderMock = $this->createMock(OrderAdapterInterface::class); - $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class) - ->disableOriginalConstructor() - ->getMock(); + $this->paymentDO = $this->createMock(PaymentDataObjectInterface::class); + $this->order = $this->createMock(OrderAdapterInterface::class); - $this->builder = new AddressDataBuilder($this->subjectReaderMock); + $this->builder = new AddressDataBuilder(new SubjectReader()); } /** @@ -56,37 +49,24 @@ public function testBuildReadPaymentException() 'payment' => null, ]; - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willThrowException(new \InvalidArgumentException()); - $this->builder->build($buildSubject); } public function testBuildNoAddresses() { - $this->paymentDOMock->expects(static::once()) - ->method('getOrder') - ->willReturn($this->orderMock); + $this->paymentDO->method('getOrder') + ->willReturn($this->order); - $this->orderMock->expects(static::once()) - ->method('getShippingAddress') + $this->order->method('getShippingAddress') ->willReturn(null); - $this->orderMock->expects(static::once()) - ->method('getBillingAddress') + $this->order->method('getBillingAddress') ->willReturn(null); $buildSubject = [ - 'payment' => $this->paymentDOMock, + 'payment' => $this->paymentDO, ]; - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($this->paymentDOMock); - - static::assertEquals([], $this->builder->build($buildSubject)); + self::assertEquals([], $this->builder->build($buildSubject)); } /** @@ -97,28 +77,20 @@ public function testBuildNoAddresses() */ public function testBuild($addressData, $expectedResult) { - $addressMock = $this->getAddressMock($addressData); + $address = $this->getAddressMock($addressData); - $this->paymentDOMock->expects(static::once()) - ->method('getOrder') - ->willReturn($this->orderMock); + $this->paymentDO->method('getOrder') + ->willReturn($this->order); - $this->orderMock->expects(static::once()) - ->method('getShippingAddress') - ->willReturn($addressMock); - $this->orderMock->expects(static::once()) - ->method('getBillingAddress') - ->willReturn($addressMock); + $this->order->method('getShippingAddress') + ->willReturn($address); + $this->order->method('getBillingAddress') + ->willReturn($address); $buildSubject = [ - 'payment' => $this->paymentDOMock, + 'payment' => $this->paymentDO, ]; - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($this->paymentDOMock); - self::assertEquals($expectedResult, $this->builder->build($buildSubject)); } @@ -171,37 +143,37 @@ public function dataProviderBuild() /** * @param array $addressData - * @return AddressAdapterInterface|\PHPUnit_Framework_MockObject_MockObject + * @return AddressAdapterInterface|MockObject */ private function getAddressMock($addressData) { $addressMock = $this->createMock(AddressAdapterInterface::class); - $addressMock->expects(static::exactly(2)) + $addressMock->expects(self::exactly(2)) ->method('getFirstname') ->willReturn($addressData['first_name']); - $addressMock->expects(static::exactly(2)) + $addressMock->expects(self::exactly(2)) ->method('getLastname') ->willReturn($addressData['last_name']); - $addressMock->expects(static::exactly(2)) + $addressMock->expects(self::exactly(2)) ->method('getCompany') ->willReturn($addressData['company']); - $addressMock->expects(static::exactly(2)) + $addressMock->expects(self::exactly(2)) ->method('getStreetLine1') ->willReturn($addressData['street_1']); - $addressMock->expects(static::exactly(2)) + $addressMock->expects(self::exactly(2)) ->method('getStreetLine2') ->willReturn($addressData['street_2']); - $addressMock->expects(static::exactly(2)) + $addressMock->expects(self::exactly(2)) ->method('getCity') ->willReturn($addressData['city']); - $addressMock->expects(static::exactly(2)) + $addressMock->expects(self::exactly(2)) ->method('getRegionCode') ->willReturn($addressData['region_code']); - $addressMock->expects(static::exactly(2)) + $addressMock->expects(self::exactly(2)) ->method('getPostcode') ->willReturn($addressData['post_code']); - $addressMock->expects(static::exactly(2)) + $addressMock->expects(self::exactly(2)) ->method('getCountryId') ->willReturn($addressData['country_id']); diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CaptureDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CaptureDataBuilderTest.php index 9799b6f18c639..afe6588f01944 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CaptureDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CaptureDataBuilderTest.php @@ -9,6 +9,7 @@ use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Sales\Model\Order\Payment; use Magento\Braintree\Gateway\Helper\SubjectReader; +use PHPUnit_Framework_MockObject_MockObject as MockObject; /** * Class CaptureDataBuilderTest @@ -21,35 +22,26 @@ class CaptureDataBuilderTest extends \PHPUnit\Framework\TestCase private $builder; /** - * @var Payment|\PHPUnit_Framework_MockObject_MockObject + * @var Payment|MockObject */ private $payment; /** - * @var \Magento\Sales\Model\Order\Payment|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Sales\Model\Order\Payment|MockObject */ private $paymentDO; - /** - * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject - */ - private $subjectReaderMock; - protected function setUp() { $this->paymentDO = $this->createMock(PaymentDataObjectInterface::class); $this->payment = $this->getMockBuilder(Payment::class) ->disableOriginalConstructor() ->getMock(); - $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class) - ->disableOriginalConstructor() - ->getMock(); - $this->builder = new CaptureDataBuilder($this->subjectReaderMock); + $this->builder = new CaptureDataBuilder(new SubjectReader()); } /** - * @covers \Magento\Braintree\Gateway\Request\CaptureDataBuilder::build * @expectedException \Magento\Framework\Exception\LocalizedException * @expectedExceptionMessage No authorization transaction to proceed capture. */ @@ -61,25 +53,15 @@ public function testBuildWithException() 'amount' => $amount ]; - $this->payment->expects(static::once()) - ->method('getCcTransId') + $this->payment->method('getCcTransId') ->willReturn(''); - $this->paymentDO->expects(static::once()) - ->method('getPayment') + $this->paymentDO->method('getPayment') ->willReturn($this->payment); - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($this->paymentDO); - $this->builder->build($buildSubject); } - /** - * @covers \Magento\Braintree\Gateway\Request\CaptureDataBuilder::build - */ public function testBuild() { $transactionId = 'b3b99d'; @@ -95,23 +77,12 @@ public function testBuild() 'amount' => $amount ]; - $this->payment->expects(static::once()) - ->method('getCcTransId') + $this->payment->method('getCcTransId') ->willReturn($transactionId); - $this->paymentDO->expects(static::once()) - ->method('getPayment') + $this->paymentDO->method('getPayment') ->willReturn($this->payment); - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($this->paymentDO); - $this->subjectReaderMock->expects(self::once()) - ->method('readAmount') - ->with($buildSubject) - ->willReturn($amount); - - static::assertEquals($expected, $this->builder->build($buildSubject)); + self::assertEquals($expected, $this->builder->build($buildSubject)); } } diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CustomerDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CustomerDataBuilderTest.php index 0f25b26fd2fa3..cac12f83051c1 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CustomerDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CustomerDataBuilderTest.php @@ -5,46 +5,36 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Request; +use Magento\Braintree\Gateway\Helper\SubjectReader; use Magento\Braintree\Gateway\Request\CustomerDataBuilder; -use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; -use Magento\Payment\Gateway\Data\OrderAdapterInterface; use Magento\Payment\Gateway\Data\AddressAdapterInterface; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Payment\Gateway\Data\OrderAdapterInterface; +use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; +use PHPUnit_Framework_MockObject_MockObject as MockObject; -/** - * Class CustomerDataBuilderTest - */ class CustomerDataBuilderTest extends \PHPUnit\Framework\TestCase { /** - * @var PaymentDataObjectInterface|\PHPUnit_Framework_MockObject_MockObject + * @var PaymentDataObjectInterface|MockObject */ - private $paymentDOMock; + private $paymentDO; /** - * @var OrderAdapterInterface|\PHPUnit_Framework_MockObject_MockObject + * @var OrderAdapterInterface|MockObject */ - private $orderMock; + private $order; /** * @var CustomerDataBuilder */ private $builder; - /** - * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject - */ - private $subjectReaderMock; - protected function setUp() { - $this->paymentDOMock = $this->createMock(PaymentDataObjectInterface::class); - $this->orderMock = $this->createMock(OrderAdapterInterface::class); - $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class) - ->disableOriginalConstructor() - ->getMock(); + $this->paymentDO = $this->createMock(PaymentDataObjectInterface::class); + $this->order = $this->createMock(OrderAdapterInterface::class); - $this->builder = new CustomerDataBuilder($this->subjectReaderMock); + $this->builder = new CustomerDataBuilder(new SubjectReader()); } /** @@ -56,11 +46,6 @@ public function testBuildReadPaymentException() 'payment' => null, ]; - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willThrowException(new \InvalidArgumentException()); - $this->builder->build($buildSubject); } @@ -74,22 +59,15 @@ public function testBuild($billingData, $expectedResult) { $billingMock = $this->getBillingMock($billingData); - $this->paymentDOMock->expects(static::once()) - ->method('getOrder') - ->willReturn($this->orderMock); - $this->orderMock->expects(static::once()) - ->method('getBillingAddress') + $this->paymentDO->method('getOrder') + ->willReturn($this->order); + $this->order->method('getBillingAddress') ->willReturn($billingMock); $buildSubject = [ - 'payment' => $this->paymentDOMock, + 'payment' => $this->paymentDO, ]; - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($this->paymentDOMock); - self::assertEquals($expectedResult, $this->builder->build($buildSubject)); } @@ -122,28 +100,23 @@ public function dataProviderBuild() /** * @param array $billingData - * @return AddressAdapterInterface|\PHPUnit_Framework_MockObject_MockObject + * @return AddressAdapterInterface|MockObject */ private function getBillingMock($billingData) { - $addressMock = $this->createMock(AddressAdapterInterface::class); + $address = $this->createMock(AddressAdapterInterface::class); - $addressMock->expects(static::once()) - ->method('getFirstname') + $address->method('getFirstname') ->willReturn($billingData['first_name']); - $addressMock->expects(static::once()) - ->method('getLastname') + $address->method('getLastname') ->willReturn($billingData['last_name']); - $addressMock->expects(static::once()) - ->method('getCompany') + $address->method('getCompany') ->willReturn($billingData['company']); - $addressMock->expects(static::once()) - ->method('getTelephone') + $address->method('getTelephone') ->willReturn($billingData['phone']); - $addressMock->expects(static::once()) - ->method('getEmail') + $address->method('getEmail') ->willReturn($billingData['email']); - return $addressMock; + return $address; } } diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/DescriptorDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/DescriptorDataBuilderTest.php index 761d88b636ed7..6b3b89832b250 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/DescriptorDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/DescriptorDataBuilderTest.php @@ -6,12 +6,12 @@ namespace Magento\Braintree\Test\Unit\Gateway\Request; use Magento\Braintree\Gateway\Config\Config; +use Magento\Braintree\Gateway\Helper\SubjectReader; use Magento\Braintree\Gateway\Request\DescriptorDataBuilder; +use Magento\Payment\Gateway\Data\OrderAdapterInterface; +use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use PHPUnit_Framework_MockObject_MockObject as MockObject; -/** - * Class DescriptorDataBuilderTest - */ class DescriptorDataBuilderTest extends \PHPUnit\Framework\TestCase { /** @@ -31,22 +31,25 @@ protected function setUp() ->setMethods(['getDynamicDescriptors']) ->getMock(); - $this->builder = new DescriptorDataBuilder($this->config); + $this->builder = new DescriptorDataBuilder($this->config, new SubjectReader()); } /** - * @covers \Magento\Braintree\Gateway\Request\DescriptorDataBuilder::build * @param array $descriptors * @param array $expected * @dataProvider buildDataProvider */ public function testBuild(array $descriptors, array $expected) { - $this->config->expects(static::once()) - ->method('getDynamicDescriptors') + $paymentDO = $this->createMock(PaymentDataObjectInterface::class); + $order = $this->createMock(OrderAdapterInterface::class); + $paymentDO->method('getOrder') + ->willReturn($order); + + $this->config->method('getDynamicDescriptors') ->willReturn($descriptors); - $actual = $this->builder->build([]); + $actual = $this->builder->build(['payment' => $paymentDO]); static::assertEquals($expected, $actual); } diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/KountPaymentDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/KountPaymentDataBuilderTest.php index ee0907a1ddbbb..a8db7f466131f 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/KountPaymentDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/KountPaymentDataBuilderTest.php @@ -5,12 +5,14 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Request; +use Magento\Payment\Gateway\Data\OrderAdapterInterface; use Magento\Sales\Model\Order\Payment; use Magento\Braintree\Gateway\Config\Config; use Magento\Braintree\Observer\DataAssignObserver; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Braintree\Gateway\Request\KountPaymentDataBuilder; use Magento\Braintree\Gateway\Helper\SubjectReader; +use PHPUnit_Framework_MockObject_MockObject as MockObject; /** * Class KountPaymentDataBuilderTest @@ -27,39 +29,31 @@ class KountPaymentDataBuilderTest extends \PHPUnit\Framework\TestCase private $builder; /** - * @var Config|\PHPUnit_Framework_MockObject_MockObject + * @var Config|MockObject */ - private $configMock; + private $config; /** - * @var Payment|\PHPUnit_Framework_MockObject_MockObject + * @var Payment|MockObject */ - private $paymentMock; + private $payment; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var MockObject */ private $paymentDO; - /** - * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject - */ - private $subjectReaderMock; - protected function setUp() { $this->paymentDO = $this->createMock(PaymentDataObjectInterface::class); - $this->configMock = $this->getMockBuilder(Config::class) - ->disableOriginalConstructor() - ->getMock(); - $this->paymentMock = $this->getMockBuilder(Payment::class) + $this->config = $this->getMockBuilder(Config::class) ->disableOriginalConstructor() ->getMock(); - $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class) + $this->payment = $this->getMockBuilder(Payment::class) ->disableOriginalConstructor() ->getMock(); - $this->builder = new KountPaymentDataBuilder($this->configMock, $this->subjectReaderMock); + $this->builder = new KountPaymentDataBuilder($this->config, new SubjectReader()); } /** @@ -69,15 +63,9 @@ public function testBuildReadPaymentException() { $buildSubject = []; - $this->configMock->expects(static::once()) - ->method('hasFraudProtection') + $this->config->method('hasFraudProtection') ->willReturn(true); - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willThrowException(new \InvalidArgumentException()); - $this->builder->build($buildSubject); } @@ -91,26 +79,23 @@ public function testBuild() KountPaymentDataBuilder::DEVICE_DATA => self::DEVICE_DATA, ]; + $order = $this->createMock(OrderAdapterInterface::class); + $this->paymentDO->method('getOrder') + ->willReturn($order); + $buildSubject = ['payment' => $this->paymentDO]; - $this->paymentMock->expects(static::exactly(count($additionalData))) + $this->payment->expects(self::exactly(count($additionalData))) ->method('getAdditionalInformation') ->willReturn($additionalData); - $this->configMock->expects(static::once()) - ->method('hasFraudProtection') + $this->config->method('hasFraudProtection') ->willReturn(true); - $this->paymentDO->expects(static::once()) - ->method('getPayment') - ->willReturn($this->paymentMock); - - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($this->paymentDO); + $this->paymentDO->method('getPayment') + ->willReturn($this->payment); - static::assertEquals( + self::assertEquals( $expectedResult, $this->builder->build($buildSubject) ); diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/DeviceDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/DeviceDataBuilderTest.php index fba65354d6095..c2e8d0f9335ce 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/DeviceDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/DeviceDataBuilderTest.php @@ -16,15 +16,10 @@ */ class DeviceDataBuilderTest extends \PHPUnit\Framework\TestCase { - /** - * @var SubjectReader|MockObject - */ - private $subjectReader; - /** * @var PaymentDataObjectInterface|MockObject */ - private $paymentDataObject; + private $paymentDO; /** * @var InfoInterface|MockObject @@ -38,16 +33,10 @@ class DeviceDataBuilderTest extends \PHPUnit\Framework\TestCase protected function setUp() { - $this->subjectReader = $this->getMockBuilder(SubjectReader::class) - ->disableOriginalConstructor() - ->setMethods(['readPayment']) - ->getMock(); - - $this->paymentDataObject = $this->createMock(PaymentDataObjectInterface::class); - + $this->paymentDO = $this->createMock(PaymentDataObjectInterface::class); $this->paymentInfo = $this->createMock(InfoInterface::class); - $this->builder = new DeviceDataBuilder($this->subjectReader); + $this->builder = new DeviceDataBuilder(new SubjectReader()); } /** @@ -59,24 +48,17 @@ protected function setUp() public function testBuild(array $paymentData, array $expected) { $subject = [ - 'payment' => $this->paymentDataObject + 'payment' => $this->paymentDO ]; - $this->subjectReader->expects(static::once()) - ->method('readPayment') - ->with($subject) - ->willReturn($this->paymentDataObject); - - $this->paymentDataObject->expects(static::once()) - ->method('getPayment') + $this->paymentDO->method('getPayment') ->willReturn($this->paymentInfo); - $this->paymentInfo->expects(static::once()) - ->method('getAdditionalInformation') + $this->paymentInfo->method('getAdditionalInformation') ->willReturn($paymentData); $actual = $this->builder->build($subject); - static::assertEquals($expected, $actual); + self::assertEquals($expected, $actual); } /** diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/VaultDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/VaultDataBuilderTest.php index 8e83254727bf7..f7a2b721df165 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/VaultDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/VaultDataBuilderTest.php @@ -17,15 +17,10 @@ */ class VaultDataBuilderTest extends \PHPUnit\Framework\TestCase { - /** - * @var SubjectReader|MockObject - */ - private $subjectReader; - /** * @var PaymentDataObjectInterface|MockObject */ - private $paymentDataObject; + private $paymentDO; /** * @var InfoInterface|MockObject @@ -39,16 +34,11 @@ class VaultDataBuilderTest extends \PHPUnit\Framework\TestCase protected function setUp() { - $this->paymentDataObject = $this->createMock(PaymentDataObjectInterface::class); + $this->paymentDO = $this->createMock(PaymentDataObjectInterface::class); $this->paymentInfo = $this->createMock(InfoInterface::class); - $this->subjectReader = $this->getMockBuilder(SubjectReader::class) - ->disableOriginalConstructor() - ->setMethods(['readPayment']) - ->getMock(); - - $this->builder = new VaultDataBuilder($this->subjectReader); + $this->builder = new VaultDataBuilder(new SubjectReader()); } /** @@ -60,24 +50,17 @@ protected function setUp() public function testBuild(array $additionalInfo, array $expected) { $subject = [ - 'payment' => $this->paymentDataObject + 'payment' => $this->paymentDO ]; - $this->subjectReader->expects(static::once()) - ->method('readPayment') - ->with($subject) - ->willReturn($this->paymentDataObject); - - $this->paymentDataObject->expects(static::once()) - ->method('getPayment') + $this->paymentDO->method('getPayment') ->willReturn($this->paymentInfo); - $this->paymentInfo->expects(static::once()) - ->method('getAdditionalInformation') + $this->paymentInfo->method('getAdditionalInformation') ->willReturn($additionalInfo); $actual = $this->builder->build($subject); - static::assertEquals($expected, $actual); + self::assertEquals($expected, $actual); } /** diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PaymentDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PaymentDataBuilderTest.php index 12c613b8f216b..665232592889c 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PaymentDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PaymentDataBuilderTest.php @@ -12,6 +12,7 @@ use Magento\Payment\Gateway\Data\OrderAdapterInterface; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Sales\Model\Order\Payment; +use PHPUnit_Framework_MockObject_MockObject as MockObject; /** * Class PaymentDataBuilderTest @@ -29,45 +30,37 @@ class PaymentDataBuilderTest extends \PHPUnit\Framework\TestCase private $builder; /** - * @var Config|\PHPUnit_Framework_MockObject_MockObject + * @var Config|MockObject */ - private $configMock; + private $config; /** - * @var Payment|\PHPUnit_Framework_MockObject_MockObject + * @var Payment|MockObject */ - private $paymentMock; + private $payment; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var MockObject */ private $paymentDO; /** - * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject + * @var OrderAdapterInterface|MockObject */ - private $subjectReaderMock; - - /** - * @var OrderAdapterInterface|\PHPUnit_Framework_MockObject_MockObject - */ - private $orderMock; + private $order; protected function setUp() { $this->paymentDO = $this->createMock(PaymentDataObjectInterface::class); - $this->configMock = $this->getMockBuilder(Config::class) - ->disableOriginalConstructor() - ->getMock(); - $this->paymentMock = $this->getMockBuilder(Payment::class) + $this->config = $this->getMockBuilder(Config::class) ->disableOriginalConstructor() ->getMock(); - $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class) + $this->payment = $this->getMockBuilder(Payment::class) ->disableOriginalConstructor() ->getMock(); - $this->orderMock = $this->createMock(OrderAdapterInterface::class); + $this->order = $this->createMock(OrderAdapterInterface::class); - $this->builder = new PaymentDataBuilder($this->configMock, $this->subjectReaderMock); + $this->builder = new PaymentDataBuilder($this->config, new SubjectReader()); } /** @@ -77,11 +70,6 @@ public function testBuildReadPaymentException() { $buildSubject = []; - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willThrowException(new \InvalidArgumentException()); - $this->builder->build($buildSubject); } @@ -95,15 +83,6 @@ public function testBuildReadAmountException() 'amount' => null ]; - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($this->paymentDO); - $this->subjectReaderMock->expects(self::once()) - ->method('readAmount') - ->with($buildSubject) - ->willThrowException(new \InvalidArgumentException()); - $this->builder->build($buildSubject); } @@ -128,36 +107,23 @@ public function testBuild() 'amount' => 10.00 ]; - $this->paymentMock->expects(static::exactly(count($additionalData))) + $this->payment->expects(self::exactly(count($additionalData))) ->method('getAdditionalInformation') ->willReturnMap($additionalData); - $this->configMock->expects(static::once()) - ->method('getMerchantAccountId') + $this->config->method('getMerchantAccountId') ->willReturn(self::MERCHANT_ACCOUNT_ID); - $this->paymentDO->expects(static::once()) - ->method('getPayment') - ->willReturn($this->paymentMock); - - $this->paymentDO->expects(static::once()) - ->method('getOrder') - ->willReturn($this->orderMock); - - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($this->paymentDO); - $this->subjectReaderMock->expects(self::once()) - ->method('readAmount') - ->with($buildSubject) - ->willReturn(10.00); - - $this->orderMock->expects(static::once()) - ->method('getOrderIncrementId') + $this->paymentDO->method('getPayment') + ->willReturn($this->payment); + + $this->paymentDO->method('getOrder') + ->willReturn($this->order); + + $this->order->method('getOrderIncrementId') ->willReturn('000000101'); - static::assertEquals( + self::assertEquals( $expectedResult, $this->builder->build($buildSubject) ); diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/RefundDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/RefundDataBuilderTest.php index 5aa383d095a1e..ada4c881b3e74 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/RefundDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/RefundDataBuilderTest.php @@ -14,11 +14,6 @@ class RefundDataBuilderTest extends \PHPUnit\Framework\TestCase { - /** - * @var SubjectReader | \PHPUnit_Framework_MockObject_MockObject - */ - private $subjectReader; - /** * @var RefundDataBuilder */ @@ -26,41 +21,25 @@ class RefundDataBuilderTest extends \PHPUnit\Framework\TestCase public function setUp() { - $this->subjectReader = $this->getMockBuilder( - SubjectReader::class - )->disableOriginalConstructor() - ->getMock(); - - $this->dataBuilder = new RefundDataBuilder($this->subjectReader); + $this->dataBuilder = new RefundDataBuilder(new SubjectReader()); } public function testBuild() { $paymentDO = $this->createMock(PaymentDataObjectInterface::class); - $paymentModel = $this->getMockBuilder( - Payment::class - )->disableOriginalConstructor() + $paymentModel = $this->getMockBuilder(Payment::class) + ->disableOriginalConstructor() ->getMock(); $buildSubject = ['payment' => $paymentDO, 'amount' => 12.358]; $transactionId = 'xsd7n'; - $this->subjectReader->expects(static::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($paymentDO); - $paymentDO->expects(static::once()) - ->method('getPayment') + $paymentDO->method('getPayment') ->willReturn($paymentModel); - $paymentModel->expects(static::once()) - ->method('getParentTransactionId') + $paymentModel->method('getParentTransactionId') ->willReturn($transactionId); - $this->subjectReader->expects(static::once()) - ->method('readAmount') - ->with($buildSubject) - ->willReturn($buildSubject['amount']); - static::assertEquals( + self::assertEquals( [ 'transaction_id' => $transactionId, PaymentDataBuilder::AMOUNT => '12.36' @@ -72,30 +51,19 @@ public function testBuild() public function testBuildNullAmount() { $paymentDO = $this->createMock(PaymentDataObjectInterface::class); - $paymentModel = $this->getMockBuilder( - Payment::class - )->disableOriginalConstructor() + $paymentModel = $this->getMockBuilder(Payment::class) + ->disableOriginalConstructor() ->getMock(); $buildSubject = ['payment' => $paymentDO]; $transactionId = 'xsd7n'; - $this->subjectReader->expects(static::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($paymentDO); - $paymentDO->expects(static::once()) - ->method('getPayment') + $paymentDO->method('getPayment') ->willReturn($paymentModel); - $paymentModel->expects(static::once()) - ->method('getParentTransactionId') + $paymentModel->method('getParentTransactionId') ->willReturn($transactionId); - $this->subjectReader->expects(static::once()) - ->method('readAmount') - ->with($buildSubject) - ->willThrowException(new \InvalidArgumentException()); - static::assertEquals( + self::assertEquals( [ 'transaction_id' => $transactionId, PaymentDataBuilder::AMOUNT => null @@ -107,31 +75,20 @@ public function testBuildNullAmount() public function testBuildCutOffLegacyTransactionIdPostfix() { $paymentDO = $this->createMock(PaymentDataObjectInterface::class); - $paymentModel = $this->getMockBuilder( - Payment::class - )->disableOriginalConstructor() + $paymentModel = $this->getMockBuilder(Payment::class) + ->disableOriginalConstructor() ->getMock(); $buildSubject = ['payment' => $paymentDO]; $legacyTxnId = 'xsd7n-' . TransactionInterface::TYPE_CAPTURE; $transactionId = 'xsd7n'; - $this->subjectReader->expects(static::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($paymentDO); - $paymentDO->expects(static::once()) - ->method('getPayment') + $paymentDO->method('getPayment') ->willReturn($paymentModel); - $paymentModel->expects(static::once()) - ->method('getParentTransactionId') + $paymentModel->method('getParentTransactionId') ->willReturn($legacyTxnId); - $this->subjectReader->expects(static::once()) - ->method('readAmount') - ->with($buildSubject) - ->willThrowException(new \InvalidArgumentException()); - static::assertEquals( + self::assertEquals( [ 'transaction_id' => $transactionId, PaymentDataBuilder::AMOUNT => null diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/SettlementDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/SettlementDataBuilderTest.php index 2f8f954243749..beccad6e9a045 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/SettlementDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/SettlementDataBuilderTest.php @@ -11,7 +11,7 @@ class SettlementDataBuilderTest extends \PHPUnit\Framework\TestCase { public function testBuild() { - $this->assertEquals( + self::assertEquals( [ 'options' => [ SettlementDataBuilder::SUBMIT_FOR_SETTLEMENT => true diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/ThreeDSecureDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/ThreeDSecureDataBuilderTest.php index c28ac0c3ac372..0a2617f95eb66 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/ThreeDSecureDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/ThreeDSecureDataBuilderTest.php @@ -6,68 +6,63 @@ namespace Magento\Braintree\Test\Unit\Gateway\Request; use Magento\Braintree\Gateway\Config\Config; +use Magento\Braintree\Gateway\Helper\SubjectReader; use Magento\Braintree\Gateway\Request\ThreeDSecureDataBuilder; -use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; -use Magento\Payment\Gateway\Data\Order\OrderAdapter; use Magento\Payment\Gateway\Data\Order\AddressAdapter; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Payment\Gateway\Data\Order\OrderAdapter; +use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; +use PHPUnit_Framework_MockObject_MockObject as MockObject; /** * Class ThreeDSecureDataBuilderTest */ class ThreeDSecureDataBuilderTest extends \PHPUnit\Framework\TestCase { + /** + * @var int + */ + private static $storeId = 1; + /** * @var ThreeDSecureDataBuilder */ private $builder; /** - * @var Config|\PHPUnit_Framework_MockObject_MockObject + * @var Config|MockObject */ - private $configMock; + private $config; /** - * @var PaymentDataObjectInterface|\PHPUnit_Framework_MockObject_MockObject + * @var PaymentDataObjectInterface|MockObject */ private $paymentDO; /** - * @var OrderAdapter|\PHPUnit_Framework_MockObject_MockObject + * @var OrderAdapter|MockObject */ private $order; /** - * @var \Magento\Payment\Gateway\Data\Order\AddressAdapter|\PHPUnit_Framework_MockObject_MockObject + * @var AddressAdapter|MockObject */ private $billingAddress; - /** - * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject - */ - private $subjectReaderMock; - protected function setUp() { $this->initOrderMock(); $this->paymentDO = $this->getMockBuilder(PaymentDataObjectInterface::class) ->disableOriginalConstructor() - ->setMethods(['getOrder', 'getPayment']) ->getMock(); - $this->paymentDO->expects(static::once()) - ->method('getOrder') + $this->paymentDO->method('getOrder') ->willReturn($this->order); - $this->configMock = $this->getMockBuilder(Config::class) - ->setMethods(['isVerify3DSecure', 'getThresholdAmount', 'get3DSecureSpecificCountries']) - ->disableOriginalConstructor() - ->getMock(); - $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class) + $this->config = $this->getMockBuilder(Config::class) ->disableOriginalConstructor() ->getMock(); - $this->builder = new ThreeDSecureDataBuilder($this->configMock, $this->subjectReaderMock); + $this->builder = new ThreeDSecureDataBuilder($this->config, new SubjectReader()); } /** @@ -76,7 +71,6 @@ protected function setUp() * @param string $countryId * @param array $countries * @param array $expected - * @covers \Magento\Braintree\Gateway\Request\ThreeDSecureDataBuilder::build * @dataProvider buildDataProvider */ public function testBuild($verify, $thresholdAmount, $countryId, array $countries, array $expected) @@ -86,37 +80,28 @@ public function testBuild($verify, $thresholdAmount, $countryId, array $countrie 'amount' => 25 ]; - $this->configMock->expects(static::once()) - ->method('isVerify3DSecure') + $this->config->method('isVerify3DSecure') + ->with(self::equalTo(self::$storeId)) ->willReturn($verify); - $this->configMock->expects(static::any()) - ->method('getThresholdAmount') + $this->config->method('getThresholdAmount') + ->with(self::equalTo(self::$storeId)) ->willReturn($thresholdAmount); - $this->configMock->expects(static::any()) - ->method('get3DSecureSpecificCountries') + $this->config->method('get3DSecureSpecificCountries') + ->with(self::equalTo(self::$storeId)) ->willReturn($countries); - $this->billingAddress->expects(static::any()) - ->method('getCountryId') + $this->billingAddress->method('getCountryId') ->willReturn($countryId); - $this->subjectReaderMock->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($this->paymentDO); - $this->subjectReaderMock->expects(self::once()) - ->method('readAmount') - ->with($buildSubject) - ->willReturn(25); - $result = $this->builder->build($buildSubject); - static::assertEquals($expected, $result); + self::assertEquals($expected, $result); } /** - * Get list of variations for build test + * Gets list of variations to build request data. + * * @return array */ public function buildDataProvider() @@ -144,22 +129,21 @@ public function buildDataProvider() } /** - * Create mock object for order adapter + * Creates mock object for order adapter. */ private function initOrderMock() { $this->billingAddress = $this->getMockBuilder(AddressAdapter::class) ->disableOriginalConstructor() - ->setMethods(['getCountryId']) ->getMock(); $this->order = $this->getMockBuilder(OrderAdapter::class) ->disableOriginalConstructor() - ->setMethods(['getBillingAddress']) ->getMock(); - $this->order->expects(static::any()) - ->method('getBillingAddress') + $this->order->method('getBillingAddress') ->willReturn($this->billingAddress); + $this->order->method('getStoreId') + ->willReturn(self::$storeId); } } diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/VaultCaptureDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/VaultCaptureDataBuilderTest.php index df11938ddba70..94c889159b516 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/VaultCaptureDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/VaultCaptureDataBuilderTest.php @@ -11,6 +11,7 @@ use Magento\Sales\Api\Data\OrderPaymentExtension; use Magento\Sales\Model\Order\Payment; use Magento\Vault\Model\PaymentToken; +use PHPUnit_Framework_MockObject_MockObject as MockObject; class VaultCaptureDataBuilderTest extends \PHPUnit\Framework\TestCase { @@ -20,35 +21,25 @@ class VaultCaptureDataBuilderTest extends \PHPUnit\Framework\TestCase private $builder; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var PaymentDataObjectInterface|MockObject */ private $paymentDO; /** - * @var Payment|\PHPUnit_Framework_MockObject_MockObject + * @var Payment|MockObject */ private $payment; - /** - * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject - */ - private $subjectReader; - public function setUp() { $this->paymentDO = $this->createMock(PaymentDataObjectInterface::class); $this->payment = $this->getMockBuilder(Payment::class) ->disableOriginalConstructor() ->getMock(); - $this->paymentDO->expects(static::once()) - ->method('getPayment') + $this->paymentDO->method('getPayment') ->willReturn($this->payment); - $this->subjectReader = $this->getMockBuilder(SubjectReader::class) - ->disableOriginalConstructor() - ->getMock(); - - $this->builder = new VaultCaptureDataBuilder($this->subjectReader); + $this->builder = new VaultCaptureDataBuilder(new SubjectReader()); } /** @@ -68,15 +59,6 @@ public function testBuild() 'paymentMethodToken' => $token ]; - $this->subjectReader->expects(self::once()) - ->method('readPayment') - ->with($buildSubject) - ->willReturn($this->paymentDO); - $this->subjectReader->expects(self::once()) - ->method('readAmount') - ->with($buildSubject) - ->willReturn($amount); - $paymentExtension = $this->getMockBuilder(OrderPaymentExtension::class) ->setMethods(['getVaultPaymentToken']) ->disableOriginalConstructor() @@ -86,18 +68,15 @@ public function testBuild() ->disableOriginalConstructor() ->getMock(); - $paymentExtension->expects(static::once()) - ->method('getVaultPaymentToken') + $paymentExtension->method('getVaultPaymentToken') ->willReturn($paymentToken); - $this->payment->expects(static::once()) - ->method('getExtensionAttributes') + $this->payment->method('getExtensionAttributes') ->willReturn($paymentExtension); - $paymentToken->expects(static::once()) - ->method('getGatewayToken') + $paymentToken->method('getGatewayToken') ->willReturn($token); $result = $this->builder->build($buildSubject); - static::assertEquals($expected, $result); + self::assertEquals($expected, $result); } } diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/VaultDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/VaultDataBuilderTest.php index 08b5526daeb04..c4bd047a06bb8 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/VaultDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/VaultDataBuilderTest.php @@ -20,7 +20,7 @@ public function testBuild() $buildSubject = []; $builder = new VaultDataBuilder(); - static::assertEquals( + self::assertEquals( $expectedResult, $builder->build($buildSubject) ); diff --git a/app/code/Magento/Braintree/Test/Unit/Model/Report/TransactionsCollectionTest.php b/app/code/Magento/Braintree/Test/Unit/Model/Report/TransactionsCollectionTest.php index e43e67c18744f..5fcb6a89244b5 100644 --- a/app/code/Magento/Braintree/Test/Unit/Model/Report/TransactionsCollectionTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Model/Report/TransactionsCollectionTest.php @@ -6,10 +6,12 @@ namespace Magento\Braintree\Test\Unit\Model\Report; use Magento\Braintree\Model\Adapter\BraintreeAdapter; +use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; use Magento\Braintree\Model\Report\FilterMapper; use Magento\Braintree\Model\Report\TransactionsCollection; use Magento\Framework\Api\Search\DocumentInterface; use Magento\Framework\Data\Collection\EntityFactoryInterface; +use PHPUnit_Framework_MockObject_MockObject as MockObject; /** * Class TransactionsCollectionTest @@ -19,48 +21,58 @@ class TransactionsCollectionTest extends \PHPUnit\Framework\TestCase { /** - * @var BraintreeAdapter|\PHPUnit_Framework_MockObject_MockObject + * @var BraintreeAdapter|MockObject */ - private $braintreeAdapterMock; + private $braintreeAdapter; /** - * @var EntityFactoryInterface|\PHPUnit_Framework_MockObject_MockObject + * @var BraintreeAdapterFactory|MockObject */ - private $entityFactoryMock; + private $adapterFactory; /** - * @var FilterMapper|\PHPUnit_Framework_MockObject_MockObject + * @var EntityFactoryInterface|MockObject */ - private $filterMapperMock; + private $entityFactory; /** - * @var DocumentInterface|\PHPUnit_Framework_MockObject_MockObject + * @var FilterMapper|MockObject */ - private $transactionMapMock; + private $filterMapper; + + /** + * @var DocumentInterface|MockObject + */ + private $transactionMap; /** * Setup */ protected function setUp() { - $this->transactionMapMock = $this->getMockBuilder(DocumentInterface::class) + $this->transactionMap = $this->getMockBuilder(DocumentInterface::class) ->disableOriginalConstructor() ->getMock(); - $this->entityFactoryMock = $this->getMockBuilder(EntityFactoryInterface::class) + $this->entityFactory = $this->getMockBuilder(EntityFactoryInterface::class) ->setMethods(['create']) ->disableOriginalConstructor() ->getMock(); - $this->filterMapperMock = $this->getMockBuilder(FilterMapper::class) + $this->filterMapper = $this->getMockBuilder(FilterMapper::class) ->setMethods(['getFilter']) ->disableOriginalConstructor() ->getMock(); - $this->braintreeAdapterMock = $this->getMockBuilder(BraintreeAdapter::class) + $this->braintreeAdapter = $this->getMockBuilder(BraintreeAdapter::class) ->setMethods(['search']) ->disableOriginalConstructor() ->getMock(); + $this->adapterFactory = $this->getMockBuilder(BraintreeAdapterFactory::class) + ->disableOriginalConstructor() + ->getMock(); + $this->adapterFactory->method('create') + ->willReturn($this->braintreeAdapter); } /** @@ -68,28 +80,26 @@ protected function setUp() */ public function testGetItems() { - $this->filterMapperMock->expects($this->once()) - ->method('getFilter') + $this->filterMapper->method('getFilter') ->willReturn(new BraintreeSearchNodeStub()); - $this->braintreeAdapterMock->expects($this->once()) - ->method('search') + $this->braintreeAdapter->method('search') ->willReturn(['transaction1', 'transaction2']); - $this->entityFactoryMock->expects($this->exactly(2)) + $this->entityFactory->expects(self::exactly(2)) ->method('create') - ->willReturn($this->transactionMapMock); + ->willReturn($this->transactionMap); $collection = new TransactionsCollection( - $this->entityFactoryMock, - $this->braintreeAdapterMock, - $this->filterMapperMock + $this->entityFactory, + $this->adapterFactory, + $this->filterMapper ); $collection->addFieldToFilter('orderId', ['like' => '0']); $items = $collection->getItems(); - $this->assertEquals(2, count($items)); - $this->assertInstanceOf(DocumentInterface::class, $items[1]); + self::assertEquals(2, count($items)); + self::assertInstanceOf(DocumentInterface::class, $items[1]); } /** @@ -97,27 +107,25 @@ public function testGetItems() */ public function testGetItemsEmptyCollection() { - $this->filterMapperMock->expects($this->once()) - ->method('getFilter') + $this->filterMapper->method('getFilter') ->willReturn(new BraintreeSearchNodeStub()); - $this->braintreeAdapterMock->expects($this->once()) - ->method('search') + $this->braintreeAdapter->method('search') ->willReturn(null); - $this->entityFactoryMock->expects($this->never()) + $this->entityFactory->expects(self::never()) ->method('create') - ->willReturn($this->transactionMapMock); + ->willReturn($this->transactionMap); $collection = new TransactionsCollection( - $this->entityFactoryMock, - $this->braintreeAdapterMock, - $this->filterMapperMock + $this->entityFactory, + $this->adapterFactory, + $this->filterMapper ); $collection->addFieldToFilter('orderId', ['like' => '0']); $items = $collection->getItems(); - $this->assertEquals(0, count($items)); + self::assertEquals(0, count($items)); } /** @@ -127,29 +135,27 @@ public function testGetItemsWithLimit() { $transations = range(1, TransactionsCollection::TRANSACTION_MAXIMUM_COUNT + 10); - $this->filterMapperMock->expects($this->once()) - ->method('getFilter') + $this->filterMapper->method('getFilter') ->willReturn(new BraintreeSearchNodeStub()); - $this->braintreeAdapterMock->expects($this->once()) - ->method('search') + $this->braintreeAdapter->method('search') ->willReturn($transations); - $this->entityFactoryMock->expects($this->exactly(TransactionsCollection::TRANSACTION_MAXIMUM_COUNT)) + $this->entityFactory->expects(self::exactly(TransactionsCollection::TRANSACTION_MAXIMUM_COUNT)) ->method('create') - ->willReturn($this->transactionMapMock); + ->willReturn($this->transactionMap); $collection = new TransactionsCollection( - $this->entityFactoryMock, - $this->braintreeAdapterMock, - $this->filterMapperMock + $this->entityFactory, + $this->adapterFactory, + $this->filterMapper ); $collection->setPageSize(TransactionsCollection::TRANSACTION_MAXIMUM_COUNT); $collection->addFieldToFilter('orderId', ['like' => '0']); $items = $collection->getItems(); - $this->assertEquals(TransactionsCollection::TRANSACTION_MAXIMUM_COUNT, count($items)); - $this->assertInstanceOf(DocumentInterface::class, $items[1]); + self::assertEquals(TransactionsCollection::TRANSACTION_MAXIMUM_COUNT, count($items)); + self::assertInstanceOf(DocumentInterface::class, $items[1]); } /** @@ -159,29 +165,27 @@ public function testGetItemsWithNullLimit() { $transations = range(1, TransactionsCollection::TRANSACTION_MAXIMUM_COUNT + 10); - $this->filterMapperMock->expects($this->once()) - ->method('getFilter') + $this->filterMapper->method('getFilter') ->willReturn(new BraintreeSearchNodeStub()); - $this->braintreeAdapterMock->expects($this->once()) - ->method('search') + $this->braintreeAdapter->method('search') ->willReturn($transations); - $this->entityFactoryMock->expects($this->exactly(TransactionsCollection::TRANSACTION_MAXIMUM_COUNT)) + $this->entityFactory->expects(self::exactly(TransactionsCollection::TRANSACTION_MAXIMUM_COUNT)) ->method('create') - ->willReturn($this->transactionMapMock); + ->willReturn($this->transactionMap); $collection = new TransactionsCollection( - $this->entityFactoryMock, - $this->braintreeAdapterMock, - $this->filterMapperMock + $this->entityFactory, + $this->adapterFactory, + $this->filterMapper ); $collection->setPageSize(null); $collection->addFieldToFilter('orderId', ['like' => '0']); $items = $collection->getItems(); - $this->assertEquals(TransactionsCollection::TRANSACTION_MAXIMUM_COUNT, count($items)); - $this->assertInstanceOf(DocumentInterface::class, $items[1]); + self::assertEquals(TransactionsCollection::TRANSACTION_MAXIMUM_COUNT, count($items)); + self::assertInstanceOf(DocumentInterface::class, $items[1]); } /** @@ -191,18 +195,18 @@ public function testGetItemsWithNullLimit() */ public function testAddToFilter($field, $condition, $filterMapperCall, $expectedCondition) { - $this->filterMapperMock->expects(static::exactly($filterMapperCall)) + $this->filterMapper->expects(self::exactly($filterMapperCall)) ->method('getFilter') ->with($field, $expectedCondition) ->willReturn(new BraintreeSearchNodeStub()); $collection = new TransactionsCollection( - $this->entityFactoryMock, - $this->braintreeAdapterMock, - $this->filterMapperMock + $this->entityFactory, + $this->adapterFactory, + $this->filterMapper ); - static::assertInstanceOf( + self::assertInstanceOf( TransactionsCollection::class, $collection->addFieldToFilter($field, $condition) ); diff --git a/app/code/Magento/Braintree/Test/Unit/Model/Ui/ConfigProviderTest.php b/app/code/Magento/Braintree/Test/Unit/Model/Ui/ConfigProviderTest.php index 6c85ae68eb7af..dca22c26c11da 100644 --- a/app/code/Magento/Braintree/Test/Unit/Model/Ui/ConfigProviderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Model/Ui/ConfigProviderTest.php @@ -7,7 +7,9 @@ use Magento\Braintree\Gateway\Config\Config; use Magento\Braintree\Model\Adapter\BraintreeAdapter; +use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; use Magento\Braintree\Model\Ui\ConfigProvider; +use Magento\Customer\Model\Session; use PHPUnit_Framework_MockObject_MockObject as MockObject; /** @@ -31,6 +33,11 @@ class ConfigProviderTest extends \PHPUnit\Framework\TestCase */ private $braintreeAdapter; + /** + * @var Session|MockObject + */ + private $session; + /** * @var ConfigProvider */ @@ -45,10 +52,24 @@ protected function setUp() $this->braintreeAdapter = $this->getMockBuilder(BraintreeAdapter::class) ->disableOriginalConstructor() ->getMock(); + /** @var BraintreeAdapterFactory|MockObject $adapterFactory */ + $adapterFactory = $this->getMockBuilder(BraintreeAdapterFactory::class) + ->disableOriginalConstructor() + ->getMock(); + $adapterFactory->method('create') + ->willReturn($this->braintreeAdapter); + + $this->session = $this->getMockBuilder(Session::class) + ->disableOriginalConstructor() + ->setMethods(['getStoreId']) + ->getMock(); + $this->session->method('getStoreId') + ->willReturn(null); $this->configProvider = new ConfigProvider( $this->config, - $this->braintreeAdapter + $adapterFactory, + $this->session ); } @@ -61,35 +82,30 @@ protected function setUp() */ public function testGetConfig($config, $expected) { - $this->braintreeAdapter->expects(static::once()) - ->method('generate') + $this->braintreeAdapter->method('generate') ->willReturn(self::CLIENT_TOKEN); foreach ($config as $method => $value) { - $this->config->expects(static::once()) - ->method($method) + $this->config->method($method) ->willReturn($value); } - static::assertEquals($expected, $this->configProvider->getConfig()); + self::assertEquals($expected, $this->configProvider->getConfig()); } /** - * @covers \Magento\Braintree\Model\Ui\ConfigProvider::getClientToken * @dataProvider getClientTokenDataProvider */ public function testGetClientToken($merchantAccountId, $params) { - $this->config->expects(static::once()) - ->method('getMerchantAccountId') + $this->config->method('getMerchantAccountId') ->willReturn($merchantAccountId); - $this->braintreeAdapter->expects(static::once()) - ->method('generate') + $this->braintreeAdapter->method('generate') ->with($params) ->willReturn(self::CLIENT_TOKEN); - static::assertEquals(self::CLIENT_TOKEN, $this->configProvider->getClientToken()); + self::assertEquals(self::CLIENT_TOKEN, $this->configProvider->getClientToken()); } /** diff --git a/app/code/Magento/Braintree/etc/adminhtml/di.xml b/app/code/Magento/Braintree/etc/adminhtml/di.xml index d0469ded83b67..90fc927ed4f80 100644 --- a/app/code/Magento/Braintree/etc/adminhtml/di.xml +++ b/app/code/Magento/Braintree/etc/adminhtml/di.xml @@ -28,6 +28,7 @@ Magento\Braintree\Gateway\Request\AddressDataBuilder Magento\Braintree\Gateway\Request\VaultDataBuilder Magento\Braintree\Gateway\Request\DescriptorDataBuilder + Magento\Braintree\Gateway\Request\StoreConfigBuilder @@ -39,6 +40,7 @@ Magento\Braintree\Gateway\Request\ChannelDataBuilder Magento\Braintree\Gateway\Request\AddressDataBuilder Magento\Braintree\Gateway\Request\DescriptorDataBuilder + Magento\Braintree\Gateway\Request\StoreConfigBuilder @@ -57,4 +59,9 @@ Magento\Backend\Model\Session\Quote + + + Magento\Backend\Model\Session\Quote + + diff --git a/app/code/Magento/Braintree/etc/di.xml b/app/code/Magento/Braintree/etc/di.xml index 2a451e132eab0..86c2911815754 100644 --- a/app/code/Magento/Braintree/etc/di.xml +++ b/app/code/Magento/Braintree/etc/di.xml @@ -214,6 +214,7 @@ Magento\Braintree\Gateway\Request\ThreeDSecureDataBuilder Magento\Braintree\Gateway\Request\KountPaymentDataBuilder Magento\Braintree\Gateway\Request\DescriptorDataBuilder + Magento\Braintree\Gateway\Request\StoreConfigBuilder @@ -245,6 +246,7 @@ Magento\Braintree\Gateway\Request\CaptureDataBuilder + Magento\Braintree\Gateway\Request\StoreConfigBuilder @@ -268,6 +270,7 @@ Magento\Braintree\Gateway\Request\ThreeDSecureDataBuilder Magento\Braintree\Gateway\Request\KountPaymentDataBuilder Magento\Braintree\Gateway\Request\DescriptorDataBuilder + Magento\Braintree\Gateway\Request\StoreConfigBuilder @@ -300,6 +303,7 @@ Magento\Braintree\Gateway\Request\VaultCaptureDataBuilder Magento\Braintree\Gateway\Request\SettlementDataBuilder + Magento\Braintree\Gateway\Request\StoreConfigBuilder @@ -321,6 +325,7 @@ Magento\Braintree\Gateway\Request\PayPal\VaultDataBuilder Magento\Braintree\Gateway\Request\PayPal\DeviceDataBuilder Magento\Braintree\Gateway\Request\DescriptorDataBuilder + Magento\Braintree\Gateway\Request\StoreConfigBuilder @@ -353,6 +358,7 @@ Magento\Braintree\Gateway\Request\ChannelDataBuilder Magento\Braintree\Gateway\Request\AddressDataBuilder Magento\Braintree\Gateway\Request\DescriptorDataBuilder + Magento\Braintree\Gateway\Request\StoreConfigBuilder @@ -463,23 +469,41 @@ Magento\Braintree\Gateway\Http\Client\TransactionVoid - Magento\Braintree\Gateway\Request\VoidDataBuilder + BraintreeVoidRequestBuilder Magento\Braintree\Gateway\Response\VoidHandler Magento\Braintree\Gateway\Validator\GeneralResponseValidator Magento\Braintree\Gateway\Http\TransferFactory + + + + Magento\Braintree\Gateway\Request\VoidDataBuilder + Magento\Braintree\Gateway\Request\StoreConfigBuilder + + + + Magento\Braintree\Gateway\Http\Client\TransactionRefund - Magento\Braintree\Gateway\Request\RefundDataBuilder + BraintreeRefundBuilder Magento\Braintree\Gateway\Validator\GeneralResponseValidator Magento\Braintree\Gateway\Response\RefundHandler Magento\Braintree\Gateway\Http\TransferFactory + + + + Magento\Braintree\Gateway\Request\RefundDataBuilder + Magento\Braintree\Gateway\Request\StoreConfigBuilder + + + + @@ -494,7 +518,7 @@ - + diff --git a/app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js b/app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js index 8324cfe463bdb..5e1e85e6a3c48 100644 --- a/app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js +++ b/app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js @@ -116,7 +116,7 @@ define([ }, /** - * Setup Braintree SDK + * Retrieves client token and setup Braintree SDK */ initBraintree: function () { var self = this; @@ -124,35 +124,14 @@ define([ try { $('body').trigger('processStart'); - self.braintree.setup(self.clientToken, 'custom', { - id: self.selector, - hostedFields: self.getHostedFields(), - - /** - * Triggered when sdk was loaded - */ - onReady: function () { - $('body').trigger('processStop'); - }, + $.getJSON(self.clientTokenUrl).done(function (response) { + self.clientToken = response.clientToken; + self._initBraintree(); + }).fail(function (response) { + var failed = JSON.parse(response.responseText); - /** - * Callback for success response - * @param {Object} response - */ - onPaymentMethodReceived: function (response) { - if (self.validateCardType()) { - self.setPaymentDetails(response.nonce); - self.placeOrder(); - } - }, - - /** - * Error callback - * @param {Object} response - */ - onError: function (response) { - self.error(response.message); - } + $('body').trigger('processStop'); + self.error(failed.message); }); } catch (e) { $('body').trigger('processStop'); @@ -160,6 +139,44 @@ define([ } }, + /** + * Setup Braintree SDK + */ + _initBraintree: function () { + var self = this; + + self.braintree.setup(self.clientToken, 'custom', { + id: self.selector, + hostedFields: self.getHostedFields(), + + /** + * Triggered when sdk was loaded + */ + onReady: function () { + $('body').trigger('processStop'); + }, + + /** + * Callback for success response + * @param {Object} response + */ + onPaymentMethodReceived: function (response) { + if (self.validateCardType()) { + self.setPaymentDetails(response.nonce); + self.placeOrder(); + } + }, + + /** + * Error callback + * @param {Object} response + */ + onError: function (response) { + self.error(response.message); + } + }); + }, + /** * Get hosted fields configuration * @returns {Object} diff --git a/dev/tests/integration/testsuite/Magento/Braintree/Controller/Adminhtml/Payment/GetClientTokenTest.php b/dev/tests/integration/testsuite/Magento/Braintree/Controller/Adminhtml/Payment/GetClientTokenTest.php new file mode 100644 index 0000000000000..7546f20a42de9 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Braintree/Controller/Adminhtml/Payment/GetClientTokenTest.php @@ -0,0 +1,151 @@ +quoteSession = $this->_objectManager->get(Quote::class); + + $this->stubObjectManager = $this->getMockBuilder(ObjectManager::class) + ->disableOriginalConstructor() + ->getMock(); + + $adapterFactory = new BraintreeAdapterFactory( + $this->stubObjectManager, + $this->_objectManager->get(Config::class) + ); + + $this->_objectManager->addSharedInstance($adapterFactory, BraintreeAdapterFactory::class); + } + + /** + * @inheritdoc + */ + protected function tearDown() + { + $this->_objectManager->removeSharedInstance(BraintreeAdapterFactory::class); + parent::tearDown(); + } + + /** + * Checks if client token will retrieved from Braintree initialized with default scope. + * + * @magentoDataFixture Magento/Braintree/_files/payment_configuration.php + * @magentoAppArea adminhtml + */ + public function testExecute() + { + $this->perform( + 'def_merchant_id', + 'def_public_key', + 'def_private_key' + ); + } + + /** + * Checks if client token will be retrieved from Braintree initialized per store. + * + * @magentoDataFixture Magento/Braintree/_files/payment_configuration.php + * @magentoAppArea adminhtml + */ + public function testExecuteWithStoreConfiguration() + { + /** @var StoreRepositoryInterface $storeRepository */ + $storeRepository = $this->_objectManager->get(StoreRepositoryInterface::class); + $store = $storeRepository->get('test'); + $this->quoteSession->setStoreId($store->getId()); + + $this->perform( + 'store_merchant_id', + 'store_public_key', + 'def_private_key' // should be read from default scope + ); + } + + /** + * Checks if client token will be retrieved from Braintree initialized per website. + * + * @magentoDataFixture Magento/Braintree/_files/payment_configuration.php + * @magentoAppArea adminhtml + */ + public function testExecuteWithWebsiteConfiguration() + { + /** @var StoreRepositoryInterface $storeRepository */ + $storeRepository = $this->_objectManager->get(StoreRepositoryInterface::class); + $store = $storeRepository->get('fixture_second_store'); + $this->quoteSession->setStoreId($store->getId()); + + $this->perform( + 'website_merchant_id', + 'def_public_key', // should be read from default scope + 'website_private_key' + ); + } + + private function perform($merchantId, $publicKey, $privateKey) + { + $args = [ + 'merchantId' => $merchantId, + 'publicKey' => $publicKey, + 'privateKey' => $privateKey, + 'environment' => 'sandbox' + ]; + + $adapter = $this->getMockBuilder(BraintreeAdapter::class) + ->setConstructorArgs($args) + ->setMethods(['generate']) + ->getMock(); + $adapter->method('generate') + ->willReturn('client_token'); + + $this->stubObjectManager->method('create') + ->with(BraintreeAdapter::class, $args) + ->willReturn($adapter); + + $this->dispatch('backend/braintree/payment/getClientToken'); + + /** @var SerializerInterface $serializer */ + $serializer = $this->_objectManager->get(SerializerInterface::class); + $decoded = $serializer->unserialize($this->getResponse()->getBody()); + $this->performAsserts($decoded['clientToken'], $merchantId, $publicKey, $privateKey); + } + + private function performAsserts($clientToken, $merchantId, $publicKey, $privateKey) + { + self::assertEquals('client_token', $clientToken); + self::assertEquals(Configuration::merchantId(), $merchantId); + self::assertEquals(Configuration::publicKey(), $publicKey); + self::assertEquals(Configuration::privateKey(), $privateKey); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Braintree/_files/payment_configuration.php b/dev/tests/integration/testsuite/Magento/Braintree/_files/payment_configuration.php new file mode 100644 index 0000000000000..da87ad5311d92 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Braintree/_files/payment_configuration.php @@ -0,0 +1,58 @@ +get(EncryptorInterface::class); + +$processConfigData = function (Config $config, array $data) { + foreach ($data as $key => $value) { + $config->setDataByPath($key, $value); + $config->save(); + } +}; + +// save payment configuration for the default scope +$configData = [ + 'payment/braintree/merchant_id' => 'def_merchant_id', + 'payment/braintree/public_key' => $encryptor->encrypt('def_public_key'), + 'payment/braintree/private_key' => $encryptor->encrypt('def_private_key'), +]; +/** @var Config $defConfig */ +$defConfig = $objectManager->create(Config::class); +$defConfig->setScope(ScopeConfigInterface::SCOPE_TYPE_DEFAULT); +$processConfigData($defConfig, $configData); + +// save payment configuration per store +require __DIR__ . '/../../Store/_files/store.php'; +$storeConfigData = [ + 'payment/braintree/merchant_id' => 'store_merchant_id', + 'payment/braintree/public_key' => $encryptor->encrypt('store_public_key'), +]; +/** @var Config $storeConfig */ +$storeConfig = $objectManager->create(Config::class); +$storeConfig->setScope(ScopeInterface::SCOPE_STORES); +$storeConfig->setStore('test'); +$processConfigData($storeConfig, $storeConfigData); + +// save payment website config data +require __DIR__ . '/../../Store/_files/second_website_with_two_stores.php'; +$websiteConfigData = [ + 'payment/braintree/merchant_id' => 'website_merchant_id', + 'payment/braintree/private_key' => $encryptor->encrypt('website_private_key'), +]; +/** @var Config $websiteConfig */ +$websiteConfig = $objectManager->create(Config::class); +$websiteConfig->setScope(ScopeInterface::SCOPE_WEBSITES); +$websiteConfig->setWebsite($websiteId); +$processConfigData($websiteConfig, $websiteConfigData); diff --git a/dev/tests/integration/testsuite/Magento/Braintree/_files/payment_configuration_rollback.php b/dev/tests/integration/testsuite/Magento/Braintree/_files/payment_configuration_rollback.php new file mode 100644 index 0000000000000..0c0391769b093 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Braintree/_files/payment_configuration_rollback.php @@ -0,0 +1,42 @@ +delete($path, $scope, $scopeId); + } +}; + +/** @var WriterInterface $configWriter */ +$configWriter = $objectManager->get(WriterInterface::class); +$deleteConfigData($configWriter, ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null); + +/** @var StoreRepositoryInterface $storeRepository */ +$storeRepository = $objectManager->get(StoreRepositoryInterface::class); +$store = $storeRepository->get('test'); +$deleteConfigData($configWriter, ScopeInterface::SCOPE_STORES, $store->getId()); + +/** @var WebsiteRepositoryInterface $websiteRepository */ +$websiteRepository = $objectManager->get(WebsiteRepositoryInterface::class); +$website = $websiteRepository->get('test'); +$deleteConfigData($configWriter, ScopeInterface::SCOPE_WEBSITES, $website->getId()); + +require __DIR__ . '/../../Store/_files/second_website_with_two_stores_rollback.php'; +require __DIR__ . '/../../Store/_files/store_rollback.php'; From f103832dbdc3582f60725b3e7cbcc2e138d860dd Mon Sep 17 00:00:00 2001 From: Volodymyr Zaets Date: Wed, 4 Oct 2017 16:14:40 +0300 Subject: [PATCH 011/653] MAGETWO-80207: [2.2.x] - Modified Bundle.js because of breaking Encoding in Production Mode. #10563 --- app/code/Magento/Deploy/Package/Bundle/RequireJs.php | 9 ++++++--- lib/internal/Magento/Framework/View/Asset/Bundle.php | 6 +++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Deploy/Package/Bundle/RequireJs.php b/app/code/Magento/Deploy/Package/Bundle/RequireJs.php index 73a15554f8b78..c7c9e5315c7ab 100644 --- a/app/code/Magento/Deploy/Package/Bundle/RequireJs.php +++ b/app/code/Magento/Deploy/Package/Bundle/RequireJs.php @@ -240,9 +240,12 @@ private function endBundleFile(WriteInterface $bundleFile, array $contents) private function getFileContent($sourcePath) { if (!isset($this->fileContent[$sourcePath])) { - $this->fileContent[$sourcePath] = utf8_encode( - $this->staticDir->readFile($this->minification->addMinifiedSign($sourcePath)) - ); + $content = $this->staticDir->readFile($this->minification->addMinifiedSign($sourcePath)); + if (mb_detect_encoding($content) !== "UTF-8") { + $content = mb_convert_encoding($content, "UTF-8"); + } + + $this->fileContent[$sourcePath] = $content; } return $this->fileContent[$sourcePath]; } diff --git a/lib/internal/Magento/Framework/View/Asset/Bundle.php b/lib/internal/Magento/Framework/View/Asset/Bundle.php index bdaf13ddbbb27..80f35f9d57075 100644 --- a/lib/internal/Magento/Framework/View/Asset/Bundle.php +++ b/lib/internal/Magento/Framework/View/Asset/Bundle.php @@ -212,7 +212,11 @@ protected function getAssetContent(LocalInterface $asset) $assetContentType = $asset->getContentType(); $assetKey = $this->getAssetKey($asset); if (!isset($this->assetsContent[$assetContextCode][$assetContentType][$assetKey])) { - $this->assetsContent[$assetContextCode][$assetContentType][$assetKey] = utf8_encode($asset->getContent()); + $content = $asset->getContent(); + if (mb_detect_encoding($content) !== "UTF-8") { + $content = mb_convert_encoding($content, "UTF-8"); + } + $this->assetsContent[$assetContextCode][$assetContentType][$assetKey] = $content; } return $this->assetsContent[$assetContextCode][$assetContentType][$assetKey]; From f5db6a86dd63a0ca400f080a4dca503d1b5f935c Mon Sep 17 00:00:00 2001 From: Ievgen Sentiabov Date: Thu, 5 Oct 2017 09:34:18 +0300 Subject: [PATCH 012/653] MAGETWO-71966: [2.2.x] Braintree online refund not working for two websites using individual Braintree accounts - Updated controller URL --- app/code/Magento/Braintree/Block/Payment.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Braintree/Block/Payment.php b/app/code/Magento/Braintree/Block/Payment.php index aa5b3b07fb23c..1ba2f862e2fe5 100644 --- a/app/code/Magento/Braintree/Block/Payment.php +++ b/app/code/Magento/Braintree/Block/Payment.php @@ -49,7 +49,7 @@ public function getPaymentConfig() $config = $payment[$this->getCode()]; $config['code'] = $this->getCode(); $config['clientTokenUrl'] = $this->_urlBuilder->getUrl( - ConfigProvider::CODE . '/payment/getClientToken', + 'braintree/payment/getClientToken', ['_secure' => true] ); return json_encode($config, JSON_UNESCAPED_SLASHES); From c2b7513c03ca0dee00e5e924d5542042536d7db7 Mon Sep 17 00:00:00 2001 From: Dmytro Horytskyi Date: Thu, 5 Oct 2017 18:02:24 +0300 Subject: [PATCH 013/653] MAGETWO-80188: [2.2.x] - Prevent change log entry when nothing has changed #4893 --- app/etc/di.xml | 7 +++ .../Framework/Mview/View/Subscription.php | 62 ++++++++++++++----- 2 files changed, 55 insertions(+), 14 deletions(-) diff --git a/app/etc/di.xml b/app/etc/di.xml index 71168ab5220f7..e17505e78da31 100755 --- a/app/etc/di.xml +++ b/app/etc/di.xml @@ -1337,4 +1337,11 @@ Magento\Framework\Message\ExceptionMessageFactory + + + + updated_at + + + diff --git a/lib/internal/Magento/Framework/Mview/View/Subscription.php b/lib/internal/Magento/Framework/Mview/View/Subscription.php index e621909ec99b6..f2019d6f8c3df 100644 --- a/lib/internal/Magento/Framework/Mview/View/Subscription.php +++ b/lib/internal/Magento/Framework/Mview/View/Subscription.php @@ -57,6 +57,14 @@ class Subscription implements SubscriptionInterface */ protected $resource; + /** + * List of columns that can be updated in a subscribed table + * without creating a new change log entry + * + * @var array + */ + private $ignoredUpdateColumns = []; + /** * @param ResourceConnection $resource * @param \Magento\Framework\DB\Ddl\TriggerFactory $triggerFactory @@ -64,6 +72,7 @@ class Subscription implements SubscriptionInterface * @param \Magento\Framework\Mview\ViewInterface $view * @param string $tableName * @param string $columnName + * @param array $ignoredUpdateColumns */ public function __construct( ResourceConnection $resource, @@ -71,7 +80,8 @@ public function __construct( \Magento\Framework\Mview\View\CollectionInterface $viewCollection, \Magento\Framework\Mview\ViewInterface $view, $tableName, - $columnName + $columnName, + $ignoredUpdateColumns = [] ) { $this->connection = $resource->getConnection(); $this->triggerFactory = $triggerFactory; @@ -80,6 +90,7 @@ public function __construct( $this->tableName = $tableName; $this->columnName = $columnName; $this->resource = $resource; + $this->ignoredUpdateColumns = $ignoredUpdateColumns; } /** @@ -175,7 +186,7 @@ protected function getLinkedViews() } /** - * Build trigger statement for INSER, UPDATE, DELETE events + * Build trigger statement for INSERT, UPDATE, DELETE events * * @param string $event * @param \Magento\Framework\Mview\View\ChangelogInterface $changelog @@ -185,25 +196,48 @@ protected function buildStatement($event, $changelog) { switch ($event) { case Trigger::EVENT_INSERT: + $trigger = "INSERT IGNORE INTO %s (%s) VALUES (NEW.%s);"; + break; + case Trigger::EVENT_UPDATE: - return sprintf( - "INSERT IGNORE INTO %s (%s) VALUES (NEW.%s);", - $this->connection->quoteIdentifier($this->resource->getTableName($changelog->getName())), - $this->connection->quoteIdentifier($changelog->getColumnName()), - $this->connection->quoteIdentifier($this->getColumnName()) - ); + $trigger = "INSERT IGNORE INTO %s (%s) VALUES (NEW.%s);"; + + if ($this->connection->isTableExists($this->getTableName()) + && $describe = $this->connection->describeTable($this->getTableName()) + ) { + $columnNames = array_column($describe, 'COLUMN_NAME'); + $columnNames = array_diff($columnNames, $this->ignoredUpdateColumns); + if ($columnNames) { + $columns = []; + foreach ($columnNames as $columnName) { + $columns[] = sprintf( + 'NEW.%1$s != OLD.%1$s', + $this->connection->quoteIdentifier($columnName) + ); + } + $trigger = sprintf( + "IF (%s) THEN %s END IF;", + implode(' OR ', $columns), + $trigger + ); + } + } + break; case Trigger::EVENT_DELETE: - return sprintf( - "INSERT IGNORE INTO %s (%s) VALUES (OLD.%s);", - $this->connection->quoteIdentifier($this->resource->getTableName($changelog->getName())), - $this->connection->quoteIdentifier($changelog->getColumnName()), - $this->connection->quoteIdentifier($this->getColumnName()) - ); + $trigger = "INSERT IGNORE INTO %s (%s) VALUES (OLD.%s);"; + break; default: return ''; } + + return sprintf( + $trigger, + $this->connection->quoteIdentifier($this->resource->getTableName($changelog->getName())), + $this->connection->quoteIdentifier($changelog->getColumnName()), + $this->connection->quoteIdentifier($this->getColumnName()) + ); } /** From ae0af893a3e39a4a98c12136dddad92de3eef93b Mon Sep 17 00:00:00 2001 From: Iurii Ivashchenko Date: Fri, 6 Oct 2017 16:44:27 +0300 Subject: [PATCH 014/653] MAGETWO-80209: [2.2.x] - Static versioning and styles minification break email fonts styles #8241 #10638 --- .../Test/Unit/Model/Template/FilterTest.php | 2 +- composer.json | 2 +- composer.lock | 114 +++++++++--------- .../PreProcessor/Adapter/CssInlinerTest.php | 8 +- .../Css/PreProcessor/Adapter/CssInliner.php | 8 +- 5 files changed, 65 insertions(+), 69 deletions(-) diff --git a/app/code/Magento/Email/Test/Unit/Model/Template/FilterTest.php b/app/code/Magento/Email/Test/Unit/Model/Template/FilterTest.php index 8bfa2fc7d64cc..2eb8f582c54fa 100644 --- a/app/code/Magento/Email/Test/Unit/Model/Template/FilterTest.php +++ b/app/code/Magento/Email/Test/Unit/Model/Template/FilterTest.php @@ -369,7 +369,7 @@ public function applyInlineCssDataProvider() '

', 'p { color: #000 }', [ - '', + '', '

', ], ], diff --git a/composer.json b/composer.json index 106e1657cb8ff..f87dfae22c08d 100644 --- a/composer.json +++ b/composer.json @@ -42,7 +42,7 @@ "composer/composer": "1.4.1", "monolog/monolog": "^1.17", "oyejorge/less.php": "~1.7.0", - "pelago/emogrifier": "0.1.1", + "pelago/emogrifier": "1.2.0", "tubalmartin/cssmin": "4.1.0", "magento/magento-composer-installer": ">=0.1.11", "braintree/braintree_php": "3.22.0", diff --git a/composer.lock b/composer.lock index 65b5d6f561190..abd5bde659598 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "0018e7db581f83ff881d4c21d19cda3b", + "content-hash": "2a0540e2c6b29c9b81806dcc434940ce", "packages": [ { "name": "braintree/braintree_php", @@ -493,16 +493,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "5.2.2", + "version": "5.2.4", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "b80053b620826810b38211b3c5f935ba9cddf6b3" + "reference": "7ccb0e67ea8ace0f84c40900ca3c8a234467628c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/b80053b620826810b38211b3c5f935ba9cddf6b3", - "reference": "b80053b620826810b38211b3c5f935ba9cddf6b3", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/7ccb0e67ea8ace0f84c40900ca3c8a234467628c", + "reference": "7ccb0e67ea8ace0f84c40900ca3c8a234467628c", "shasum": "" }, "require": { @@ -555,7 +555,7 @@ "json", "schema" ], - "time": "2017-10-03T00:49:49+00:00" + "time": "2017-10-04T20:57:36+00:00" }, { "name": "league/climate", @@ -958,27 +958,31 @@ }, { "name": "pelago/emogrifier", - "version": "v0.1.1", + "version": "V1.2.0", "source": { "type": "git", "url": "https://github.com/jjriv/emogrifier.git", - "reference": "ed72bcd6a3c7014862ff86d026193667a172fedf" + "reference": "a1db453bb504597d821efcc04b21c79a6021e00c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jjriv/emogrifier/zipball/ed72bcd6a3c7014862ff86d026193667a172fedf", - "reference": "ed72bcd6a3c7014862ff86d026193667a172fedf", + "url": "https://api.github.com/repos/jjriv/emogrifier/zipball/a1db453bb504597d821efcc04b21c79a6021e00c", + "reference": "a1db453bb504597d821efcc04b21c79a6021e00c", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=5.4.0" + "php": ">=5.4.0,<=7.1.99" }, "require-dev": { - "phpunit/phpunit": "~4.6.0", - "squizlabs/php_codesniffer": "~2.3.0" + "phpunit/phpunit": "4.8.27", + "squizlabs/php_codesniffer": "2.6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, "autoload": { "psr-4": { "Pelago\\": "Classes/" @@ -1010,7 +1014,7 @@ ], "description": "Converts CSS styles into inline style attributes in your HTML code", "homepage": "http://www.pelagodesign.com/sidecar/emogrifier/", - "time": "2015-05-15T11:37:51+00:00" + "time": "2017-03-02T12:51:48+00:00" }, { "name": "phpseclib/phpseclib", @@ -1478,16 +1482,16 @@ }, { "name": "symfony/console", - "version": "v2.8.27", + "version": "v2.8.28", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c0807a2ca978e64d8945d373a9221a5c35d1a253" + "reference": "f81549d2c5fdee8d711c9ab3c7e7362353ea5853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c0807a2ca978e64d8945d373a9221a5c35d1a253", - "reference": "c0807a2ca978e64d8945d373a9221a5c35d1a253", + "url": "https://api.github.com/repos/symfony/console/zipball/f81549d2c5fdee8d711c9ab3c7e7362353ea5853", + "reference": "f81549d2c5fdee8d711c9ab3c7e7362353ea5853", "shasum": "" }, "require": { @@ -1535,7 +1539,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-08-27T14:29:03+00:00" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "symfony/debug", @@ -1596,16 +1600,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v2.8.27", + "version": "v2.8.28", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "1377400fd641d7d1935981546aaef780ecd5bf6d" + "reference": "7fe089232554357efb8d4af65ce209fc6e5a2186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1377400fd641d7d1935981546aaef780ecd5bf6d", - "reference": "1377400fd641d7d1935981546aaef780ecd5bf6d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7fe089232554357efb8d4af65ce209fc6e5a2186", + "reference": "7fe089232554357efb8d4af65ce209fc6e5a2186", "shasum": "" }, "require": { @@ -1652,20 +1656,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-06-02T07:47:27+00:00" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "symfony/filesystem", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b32a0e5f928d0fa3d1dd03c78d020777e50c10cb" + "reference": "90bc45abf02ae6b7deb43895c1052cb0038506f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b32a0e5f928d0fa3d1dd03c78d020777e50c10cb", - "reference": "b32a0e5f928d0fa3d1dd03c78d020777e50c10cb", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/90bc45abf02ae6b7deb43895c1052cb0038506f1", + "reference": "90bc45abf02ae6b7deb43895c1052cb0038506f1", "shasum": "" }, "require": { @@ -1701,20 +1705,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2017-10-03T13:33:10+00:00" }, { "name": "symfony/finder", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b2260dbc80f3c4198f903215f91a1ac7fe9fe09e" + "reference": "773e19a491d97926f236942484cb541560ce862d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b2260dbc80f3c4198f903215f91a1ac7fe9fe09e", - "reference": "b2260dbc80f3c4198f903215f91a1ac7fe9fe09e", + "url": "https://api.github.com/repos/symfony/finder/zipball/773e19a491d97926f236942484cb541560ce862d", + "reference": "773e19a491d97926f236942484cb541560ce862d", "shasum": "" }, "require": { @@ -1750,7 +1754,7 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2017-10-02T06:42:24+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -1813,16 +1817,16 @@ }, { "name": "symfony/process", - "version": "v2.8.27", + "version": "v2.8.28", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "57e52a0a6a80ea0aec4fc1b785a7920a95cb88a8" + "reference": "26c9fb02bf06bd6b90f661a5bd17e510810d0176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/57e52a0a6a80ea0aec4fc1b785a7920a95cb88a8", - "reference": "57e52a0a6a80ea0aec4fc1b785a7920a95cb88a8", + "url": "https://api.github.com/repos/symfony/process/zipball/26c9fb02bf06bd6b90f661a5bd17e510810d0176", + "reference": "26c9fb02bf06bd6b90f661a5bd17e510810d0176", "shasum": "" }, "require": { @@ -1858,7 +1862,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-07-03T08:04:30+00:00" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "tedivm/jshrink", @@ -5527,16 +5531,16 @@ }, { "name": "symfony/config", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "f9f19a39ee178f61bb2190f51ff7c517c2159315" + "reference": "4ab62407bff9cd97c410a7feaef04c375aaa5cfd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/f9f19a39ee178f61bb2190f51ff7c517c2159315", - "reference": "f9f19a39ee178f61bb2190f51ff7c517c2159315", + "url": "https://api.github.com/repos/symfony/config/zipball/4ab62407bff9cd97c410a7feaef04c375aaa5cfd", + "reference": "4ab62407bff9cd97c410a7feaef04c375aaa5cfd", "shasum": "" }, "require": { @@ -5585,20 +5589,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2017-09-04T16:28:07+00:00" + "time": "2017-10-04T18:56:58+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "e593f06dd90a81c7b70ac1c49862a061b0ec06d2" + "reference": "8ebad929aee3ca185b05f55d9cc5521670821ad1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e593f06dd90a81c7b70ac1c49862a061b0ec06d2", - "reference": "e593f06dd90a81c7b70ac1c49862a061b0ec06d2", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8ebad929aee3ca185b05f55d9cc5521670821ad1", + "reference": "8ebad929aee3ca185b05f55d9cc5521670821ad1", "shasum": "" }, "require": { @@ -5655,7 +5659,7 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-09-05T20:39:38+00:00" + "time": "2017-10-04T17:15:30+00:00" }, { "name": "symfony/polyfill-php54", @@ -5935,16 +5939,16 @@ }, { "name": "symfony/stopwatch", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "9a5610a8d6a50985a7be485c0ba745c22607beeb" + "reference": "170edf8b3247d7b6779eb6fa7428f342702ca184" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/9a5610a8d6a50985a7be485c0ba745c22607beeb", - "reference": "9a5610a8d6a50985a7be485c0ba745c22607beeb", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/170edf8b3247d7b6779eb6fa7428f342702ca184", + "reference": "170edf8b3247d7b6779eb6fa7428f342702ca184", "shasum": "" }, "require": { @@ -5980,7 +5984,7 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2017-10-02T06:42:24+00:00" }, { "name": "theseer/fdomdocument", diff --git a/dev/tests/integration/testsuite/Magento/Framework/Css/PreProcessor/Adapter/CssInlinerTest.php b/dev/tests/integration/testsuite/Magento/Framework/Css/PreProcessor/Adapter/CssInlinerTest.php index f1468f718df61..63c14b4293f7b 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Css/PreProcessor/Adapter/CssInlinerTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Css/PreProcessor/Adapter/CssInlinerTest.php @@ -76,12 +76,10 @@ public function testGetFilesEmogrifier($htmlFilePath, $cssFilePath, $cssExpected $emogrifier->setHtml($html); $result = $emogrifier->emogrify(); /** - * Tests a bug in the library where there's no spaces to CSS string before passing to Emogrifier - * to fix known parsing issue with library. - * This test should will fail when this bug is fixed in the library and we should fix the adapter. - * https://github.com/jjriv/emogrifier/issues/370 + * This test was implemented for the issue which existed in the older version of Emogrifier. + * Test was updated, as the library got updated as well. */ - $this->assertNotContains($cssExpected, $result); + $this->assertContains($cssExpected, $result); } /** diff --git a/lib/internal/Magento/Framework/Css/PreProcessor/Adapter/CssInliner.php b/lib/internal/Magento/Framework/Css/PreProcessor/Adapter/CssInliner.php index 342283c312293..7164e68c709fb 100644 --- a/lib/internal/Magento/Framework/Css/PreProcessor/Adapter/CssInliner.php +++ b/lib/internal/Magento/Framework/Css/PreProcessor/Adapter/CssInliner.php @@ -41,13 +41,7 @@ public function setHtml($html) */ public function setCss($css) { - /** - * Adds space to CSS string before passing to Emogrifier to fix known parsing issue with library. - * https://github.com/jjriv/emogrifier/issues/370 - */ - $cssWithAddedSpaces = preg_replace('#([\{\}>])#i', ' $1 ', $css); - - $this->emogrifier->setCss($cssWithAddedSpaces); + $this->emogrifier->setCss($css); } /** From ae9f2050e0cb5dad500d39be9fd42e1116b9f60e Mon Sep 17 00:00:00 2001 From: marina Date: Fri, 6 Oct 2017 17:03:42 +0300 Subject: [PATCH 015/653] Check cart rule subselect conditions against quote item children too The subselect condition only checked the visible quote items and this proved to be a problem in the case of configurable and bundle products. The quote item children are now checked against the validation too, and an item will be considered valid and added to the subselect total if either it, or at least one of it's children is validated. In the case of bundle products, the children items data will be used and added to the subselect total, when the match is on a child item. In the case of configurable products, the parent item data will be used in the subselect total, just like for all the other product types. Resolves: #10477 --- .../Model/Rule/Condition/Product/Subselect.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/SalesRule/Model/Rule/Condition/Product/Subselect.php b/app/code/Magento/SalesRule/Model/Rule/Condition/Product/Subselect.php index 108cc341253ae..51b5aea31143f 100644 --- a/app/code/Magento/SalesRule/Model/Rule/Condition/Product/Subselect.php +++ b/app/code/Magento/SalesRule/Model/Rule/Condition/Product/Subselect.php @@ -145,8 +145,22 @@ public function validate(\Magento\Framework\Model\AbstractModel $model) $attr = $this->getAttribute(); $total = 0; foreach ($model->getQuote()->getAllVisibleItems() as $item) { - if (parent::validate($item)) { - $total += $item->getData($attr); + $hasValidChild = false; + $useChildrenTotal = ($item->getProductType() == \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE); + $childrenAttrTotal = 0; + $children = $item->getChildren(); + if (!empty($children)) { + foreach ($children as $child) { + if (parent::validate($child)) { + $hasValidChild = true; + if ($useChildrenTotal) { + $childrenAttrTotal += $child->getData($attr); + } + } + } + } + if ($hasValidChild || parent::validate($item)) { + $total += (($hasValidChild && $useChildrenTotal) ? $childrenAttrTotal : $item->getData($attr)); } } return $this->validateAttribute($total); From 0888e8ce84d9f29c97e7c1997b7ff243990c5201 Mon Sep 17 00:00:00 2001 From: marina Date: Mon, 9 Oct 2017 23:57:23 +0300 Subject: [PATCH 016/653] Stop throwing exception in order to send sitemap errors by email --- app/code/Magento/Sitemap/Model/Observer.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/Sitemap/Model/Observer.php b/app/code/Magento/Sitemap/Model/Observer.php index 3ae3061310a0b..54f91bebea744 100644 --- a/app/code/Magento/Sitemap/Model/Observer.php +++ b/app/code/Magento/Sitemap/Model/Observer.php @@ -113,7 +113,6 @@ public function scheduledGenerateSitemaps() $sitemap->generateXml(); } catch (\Exception $e) { $errors[] = $e->getMessage(); - throw $e; } } From 3fc3c1dc76bf643915b752dbe13b064e3cbc858e Mon Sep 17 00:00:00 2001 From: marina Date: Tue, 10 Oct 2017 00:06:27 +0300 Subject: [PATCH 017/653] Remove undefined _translateModel property The lines were a reminiscence from when the translation logic was in the core module. The logic was replaced with the correct use of the inlineTranslation property that is also present at the end of the method. --- app/code/Magento/Sitemap/Model/Observer.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/code/Magento/Sitemap/Model/Observer.php b/app/code/Magento/Sitemap/Model/Observer.php index 54f91bebea744..840a6a1858fae 100644 --- a/app/code/Magento/Sitemap/Model/Observer.php +++ b/app/code/Magento/Sitemap/Model/Observer.php @@ -121,8 +121,7 @@ public function scheduledGenerateSitemaps() \Magento\Store\Model\ScopeInterface::SCOPE_STORE ) ) { - $translate = $this->_translateModel->getTranslateInline(); - $this->_translateModel->setTranslateInline(false); + $this->inlineTranslation->suspend(); $this->_transportBuilder->setTemplateIdentifier( $this->_scopeConfig->getValue( From 836cb3042c77d7b5899b4ed48373490da678be8b Mon Sep 17 00:00:00 2001 From: Ben Robie Date: Mon, 9 Oct 2017 22:59:05 -0500 Subject: [PATCH 018/653] Defaulting missing alt-text for a product to use the product name. https://github.com/magento/magento2/issues/9931 --- app/code/Magento/Catalog/Block/Product/View/Gallery.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php index 44dd3b9f97cbf..661132457b97e 100644 --- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php +++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php @@ -116,7 +116,7 @@ public function getGalleryImagesJson() 'thumb' => $image->getData('small_image_url'), 'img' => $image->getData('medium_image_url'), 'full' => $image->getData('large_image_url'), - 'caption' => $image->getLabel(), + 'caption' => ($image->getLabel() ?: $this->getProduct()->getName()), 'position' => $image->getPosition(), 'isMain' => $this->isMainImage($image), 'type' => str_replace('external-', '', $image->getMediaType()), From 3381ec061baa7cdc4710ab2d025b046e06eb0f57 Mon Sep 17 00:00:00 2001 From: Ben Robie Date: Tue, 10 Oct 2017 08:58:16 -0500 Subject: [PATCH 019/653] Adding unit test coverage for Catalog/Block/Product/View/Gallery's getGalleryImagesJson() function https://github.com/magento/magento2/issues/9931 --- .../Unit/Block/Product/View/GalleryTest.php | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php index ec7779fcbb781..b3fbe7d040eef 100644 --- a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php @@ -77,6 +77,83 @@ protected function mockContext() ->willReturn($this->registry); } + public function testGetGalleryImagesJsonWithLabel(){ + $this->prepareGetGalleryImagesJsonMocks(); + $json = $this->model->getGalleryImagesJson(); + $decodedJson = json_decode($json, true); + $this->assertEquals('product_page_image_small_url', $decodedJson[0]['thumb']); + $this->assertEquals('product_page_image_medium_url', $decodedJson[0]['img']); + $this->assertEquals('product_page_image_large_url', $decodedJson[0]['full']); + $this->assertEquals('test_label', $decodedJson[0]['caption']); + $this->assertEquals('2', $decodedJson[0]['position']); + $this->assertEquals(false, $decodedJson[0]['isMain']); + $this->assertEquals('test_media_type', $decodedJson[0]['type']); + $this->assertEquals('test_video_url', $decodedJson[0]['videoUrl']); + } + + public function testGetGalleryImagesJsonWithoutLabel(){ + $this->prepareGetGalleryImagesJsonMocks(false); + $json = $this->model->getGalleryImagesJson(); + $decodedJson = json_decode($json, true); + $this->assertEquals('test_product_name', $decodedJson[0]['caption']); + + } + + private function prepareGetGalleryImagesJsonMocks($hasLabel = true){ + $storeMock = $this->getMockBuilder(\Magento\Store\Model\Store::class) + ->disableOriginalConstructor() + ->getMock(); + + $productMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class) + ->disableOriginalConstructor() + ->getMock(); + + $productTypeMock = $this->getMockBuilder(\Magento\Catalog\Model\Product\Type\AbstractType::class) + ->disableOriginalConstructor() + ->getMock(); + $productTypeMock->expects($this->any()) + ->method('getStoreFilter') + ->with($productMock) + ->willReturn($storeMock); + + $productMock->expects($this->any()) + ->method('getTypeInstance') + ->willReturn($productTypeMock); + $productMock->expects($this->any()) + ->method('getMediaGalleryImages') + ->willReturn($this->getImagesCollectionWithPopulatedDataObject($hasLabel)); + $productMock->expects($this->any()) + ->method('getName') + ->willReturn('test_product_name'); + + $this->registry->expects($this->any()) + ->method('registry') + ->with('product') + ->willReturn($productMock); + + $this->imageHelper->expects($this->any()) + ->method('init') + ->willReturnMap([ + [$productMock, 'product_page_image_small', [], $this->imageHelper], + [$productMock, 'product_page_image_medium_no_frame', [], $this->imageHelper], + [$productMock, 'product_page_image_large_no_frame', [], $this->imageHelper], + ]) + ->willReturnSelf(); + $this->imageHelper->expects($this->any()) + ->method('setImageFile') + ->with('test_file') + ->willReturnSelf(); + $this->imageHelper->expects($this->at(2)) + ->method('getUrl') + ->willReturn('product_page_image_small_url'); + $this->imageHelper->expects($this->at(5)) + ->method('getUrl') + ->willReturn('product_page_image_medium_url'); + $this->imageHelper->expects($this->at(8)) + ->method('getUrl') + ->willReturn('product_page_image_large_url'); + } + public function testGetGalleryImages() { $storeMock = $this->getMockBuilder(\Magento\Store\Model\Store::class) @@ -154,4 +231,30 @@ private function getImagesCollection() return $collectionMock; } + + /** + * @return \Magento\Framework\Data\Collection + */ + private function getImagesCollectionWithPopulatedDataObject($hasLabel) + { + $collectionMock = $this->getMockBuilder(\Magento\Framework\Data\Collection::class) + ->disableOriginalConstructor() + ->getMock(); + + $items = [ + new \Magento\Framework\DataObject([ + 'file' => 'test_file', + 'label' => ($hasLabel ? 'test_label' : ''), + 'position' => '2', + 'media_type' => 'external-test_media_type', + "video_url" => 'test_video_url' + ]), + ]; + + $collectionMock->expects($this->any()) + ->method('getIterator') + ->willReturn(new \ArrayIterator($items)); + + return $collectionMock; + } } From 0f1b58f99d2eec7226b4cb1af8c099f901353b2b Mon Sep 17 00:00:00 2001 From: Ben Robie Date: Tue, 10 Oct 2017 10:01:21 -0500 Subject: [PATCH 020/653] Correcting code to conform with static code testing. https://github.com/magento/magento2/issues/9931 --- .../Catalog/Test/Unit/Block/Product/View/GalleryTest.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php index b3fbe7d040eef..707cc00d1a9cc 100644 --- a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php @@ -77,7 +77,8 @@ protected function mockContext() ->willReturn($this->registry); } - public function testGetGalleryImagesJsonWithLabel(){ + public function testGetGalleryImagesJsonWithLabel() + { $this->prepareGetGalleryImagesJsonMocks(); $json = $this->model->getGalleryImagesJson(); $decodedJson = json_decode($json, true); @@ -91,7 +92,8 @@ public function testGetGalleryImagesJsonWithLabel(){ $this->assertEquals('test_video_url', $decodedJson[0]['videoUrl']); } - public function testGetGalleryImagesJsonWithoutLabel(){ + public function testGetGalleryImagesJsonWithoutLabel() + { $this->prepareGetGalleryImagesJsonMocks(false); $json = $this->model->getGalleryImagesJson(); $decodedJson = json_decode($json, true); @@ -99,7 +101,8 @@ public function testGetGalleryImagesJsonWithoutLabel(){ } - private function prepareGetGalleryImagesJsonMocks($hasLabel = true){ + private function prepareGetGalleryImagesJsonMocks($hasLabel = true) + { $storeMock = $this->getMockBuilder(\Magento\Store\Model\Store::class) ->disableOriginalConstructor() ->getMock(); From 7f44e668c0bb6119514f544b63e16db19a072ccb Mon Sep 17 00:00:00 2001 From: Ben Robie Date: Tue, 10 Oct 2017 21:41:20 -0500 Subject: [PATCH 021/653] Correcting code to conform with static code testing. https://github.com/magento/magento2/issues/9931 --- .../Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php index 707cc00d1a9cc..e0ba6531c8ab2 100644 --- a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php @@ -98,7 +98,6 @@ public function testGetGalleryImagesJsonWithoutLabel() $json = $this->model->getGalleryImagesJson(); $decodedJson = json_decode($json, true); $this->assertEquals('test_product_name', $decodedJson[0]['caption']); - } private function prepareGetGalleryImagesJsonMocks($hasLabel = true) From 64e6854dc15c280cdd8e845a17952df722730f35 Mon Sep 17 00:00:00 2001 From: Dmytro Horytskyi Date: Wed, 11 Oct 2017 12:36:40 +0300 Subject: [PATCH 022/653] MAGETWO-80188: [2.2.x] - Prevent change log entry when nothing has changed #4893 --- .../Framework/Mview/View/Subscription.php | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/lib/internal/Magento/Framework/Mview/View/Subscription.php b/lib/internal/Magento/Framework/Mview/View/Subscription.php index f2019d6f8c3df..797968eae0eb1 100644 --- a/lib/internal/Magento/Framework/Mview/View/Subscription.php +++ b/lib/internal/Magento/Framework/Mview/View/Subscription.php @@ -10,6 +10,8 @@ use Magento\Framework\App\ResourceConnection; use Magento\Framework\DB\Ddl\Trigger; +use Magento\Framework\DB\Ddl\TriggerFactory; +use Magento\Framework\Mview\ViewInterface; class Subscription implements SubscriptionInterface { @@ -21,12 +23,12 @@ class Subscription implements SubscriptionInterface protected $connection; /** - * @var \Magento\Framework\DB\Ddl\TriggerFactory + * @var TriggerFactory */ protected $triggerFactory; /** - * @var \Magento\Framework\Mview\View\CollectionInterface + * @var CollectionInterface */ protected $viewCollection; @@ -67,21 +69,21 @@ class Subscription implements SubscriptionInterface /** * @param ResourceConnection $resource - * @param \Magento\Framework\DB\Ddl\TriggerFactory $triggerFactory - * @param \Magento\Framework\Mview\View\CollectionInterface $viewCollection - * @param \Magento\Framework\Mview\ViewInterface $view + * @param TriggerFactory $triggerFactory + * @param CollectionInterface $viewCollection + * @param ViewInterface $view * @param string $tableName * @param string $columnName * @param array $ignoredUpdateColumns */ public function __construct( ResourceConnection $resource, - \Magento\Framework\DB\Ddl\TriggerFactory $triggerFactory, - \Magento\Framework\Mview\View\CollectionInterface $viewCollection, - \Magento\Framework\Mview\ViewInterface $view, + TriggerFactory $triggerFactory, + CollectionInterface $viewCollection, + ViewInterface $view, $tableName, $columnName, - $ignoredUpdateColumns = [] + array $ignoredUpdateColumns = [] ) { $this->connection = $resource->getConnection(); $this->triggerFactory = $triggerFactory; @@ -94,9 +96,9 @@ public function __construct( } /** - * Create subsciption + * Create subscription * - * @return \Magento\Framework\Mview\View\SubscriptionInterface + * @return SubscriptionInterface */ public function create() { @@ -113,7 +115,7 @@ public function create() // Add statements for linked views foreach ($this->getLinkedViews() as $view) { - /** @var \Magento\Framework\Mview\ViewInterface $view */ + /** @var ViewInterface $view */ $trigger->addStatement($this->buildStatement($event, $view->getChangelog())); } @@ -127,7 +129,7 @@ public function create() /** * Remove subscription * - * @return \Magento\Framework\Mview\View\SubscriptionInterface + * @return SubscriptionInterface */ public function remove() { @@ -142,7 +144,7 @@ public function remove() // Add statements for linked views foreach ($this->getLinkedViews() as $view) { - /** @var \Magento\Framework\Mview\ViewInterface $view */ + /** @var ViewInterface $view */ $trigger->addStatement($this->buildStatement($event, $view->getChangelog())); } @@ -165,10 +167,10 @@ public function remove() protected function getLinkedViews() { if (!$this->linkedViews) { - $viewList = $this->viewCollection->getViewsByStateMode(\Magento\Framework\Mview\View\StateInterface::MODE_ENABLED); + $viewList = $this->viewCollection->getViewsByStateMode(StateInterface::MODE_ENABLED); foreach ($viewList as $view) { - /** @var \Magento\Framework\Mview\ViewInterface $view */ + /** @var ViewInterface $view */ // Skip the current view if ($view->getId() == $this->getView()->getId()) { continue; @@ -189,10 +191,10 @@ protected function getLinkedViews() * Build trigger statement for INSERT, UPDATE, DELETE events * * @param string $event - * @param \Magento\Framework\Mview\View\ChangelogInterface $changelog + * @param ChangelogInterface $changelog * @return string */ - protected function buildStatement($event, $changelog) + protected function buildStatement(string $event, ChangelogInterface $changelog) { switch ($event) { case Trigger::EVENT_INSERT: @@ -259,7 +261,7 @@ private function getAfterEventTriggerName($event) /** * Retrieve View related to subscription * - * @return \Magento\Framework\Mview\ViewInterface + * @return ViewInterface * @codeCoverageIgnore */ public function getView() From 4f4e95e99ed4761ea982660889f26f940c6123bb Mon Sep 17 00:00:00 2001 From: Dmytro Horytskyi Date: Wed, 11 Oct 2017 16:55:39 +0300 Subject: [PATCH 023/653] MAGETWO-80188: [2.2.x] - Prevent change log entry when nothing has changed #4893 --- lib/internal/Magento/Framework/Mview/View/Subscription.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/Mview/View/Subscription.php b/lib/internal/Magento/Framework/Mview/View/Subscription.php index 797968eae0eb1..4f5c65c799be8 100644 --- a/lib/internal/Magento/Framework/Mview/View/Subscription.php +++ b/lib/internal/Magento/Framework/Mview/View/Subscription.php @@ -194,7 +194,7 @@ protected function getLinkedViews() * @param ChangelogInterface $changelog * @return string */ - protected function buildStatement(string $event, ChangelogInterface $changelog) + protected function buildStatement($event, $changelog) { switch ($event) { case Trigger::EVENT_INSERT: From ccb38abcb7b4db5691fadca76da71211b223846b Mon Sep 17 00:00:00 2001 From: Danny Verkade Date: Wed, 11 Oct 2017 22:13:05 +0200 Subject: [PATCH 024/653] Fix #11236: - Changed side-menu.phtml to have naming in line with the naming in home.phtml. Component was the name in < Magento 2.2 - Updated the less files to reflect these changes and switched the icons in the menu - Updated compiled setup.css file --- .../web/app/updater/styles/less/components/_menu.less | 5 +++-- setup/pub/styles/setup.css | 2 +- setup/view/magento/setup/navigation/side-menu.phtml | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_menu.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_menu.less index 2c7939e80648b..25f411f6f1b38 100644 --- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_menu.less +++ b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_menu.less @@ -56,7 +56,8 @@ } } - .item-component { + .item-component, + .item-extension { > a { &:before { content: @icon-lego__content; @@ -64,7 +65,7 @@ } } - .item-extension { + .item-module { > a { &:before { content: @icon-module__content; diff --git a/setup/pub/styles/setup.css b/setup/pub/styles/setup.css index 71a96f8e5bb48..13dc7b2a043d2 100644 --- a/setup/pub/styles/setup.css +++ b/setup/pub/styles/setup.css @@ -3,4 +3,4 @@ * See COPYING.txt for license details. */ -.abs-action-delete,.abs-icon,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .action-delete:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__field-fallback-reset:before,.admin__menu .level-0>a:before,.admin__page-nav-item-message .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.extensions-information .list .extension-delete,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;font-style:normal;font-weight:400;line-height:1;speak:none}.validation-symbol:after{color:#e22626;content:'*';font-weight:400;margin-left:3px}.abs-modal-overlay,.modals-overlay{background:rgba(0,0,0,.35);bottom:0;left:0;position:fixed;right:0;top:0}.abs-action-delete>span,.abs-visually-hidden,.action-multicheck-wrap .action-multicheck-toggle>span,.admin__actions-switch-checkbox,.admin__control-fields .admin__field:nth-child(n+2):not(.admin__field-option):not(.admin__field-group-show-label)>.admin__field-label,.admin__field-tooltip .admin__field-tooltip-action span,.customize-your-store .customize-your-store-default .legend,.extensions-information .list .extension-delete>span,.form-el-checkbox,.form-el-radio,.selectmenu .action-delete>span,.selectmenu .action-edit>span,.selectmenu .action-save>span,.selectmenu-toggle span,.tooltip .help a span,.tooltip .help span span,[class*=admin__control-grouped]>.admin__field:nth-child(n+2):not(.admin__field-option):not(.admin__field-group-show-label):not(.admin__field-date)>.admin__field-label{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.abs-visually-hidden-reset,.admin__field-group-columns>.admin__field:nth-child(n+2):not(.admin__field-option):not(.admin__field-group-show-label):not(.admin__field-date)>.admin__field-label[class]{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.abs-clearfix:after,.abs-clearfix:before,.action-multicheck-wrap:after,.action-multicheck-wrap:before,.actions-split:after,.actions-split:before,.admin__control-table-pagination:after,.admin__control-table-pagination:before,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:before,.admin__data-grid-filters-footer:after,.admin__data-grid-filters-footer:before,.admin__data-grid-filters:after,.admin__data-grid-filters:before,.admin__data-grid-header-row:after,.admin__data-grid-header-row:before,.admin__field-complex:after,.admin__field-complex:before,.modal-slide .magento-message .insert-title-inner:after,.modal-slide .magento-message .insert-title-inner:before,.modal-slide .main-col .insert-title-inner:after,.modal-slide .main-col .insert-title-inner:before,.page-actions._fixed:after,.page-actions._fixed:before,.page-content:after,.page-content:before,.page-header-actions:after,.page-header-actions:before,.page-main-actions:not(._hidden):after,.page-main-actions:not(._hidden):before{content:'';display:table}.abs-clearfix:after,.action-multicheck-wrap:after,.actions-split:after,.admin__control-table-pagination:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-filters-footer:after,.admin__data-grid-filters:after,.admin__data-grid-header-row:after,.admin__field-complex:after,.modal-slide .magento-message .insert-title-inner:after,.modal-slide .main-col .insert-title-inner:after,.page-actions._fixed:after,.page-content:after,.page-header-actions:after,.page-main-actions:not(._hidden):after{clear:both}.abs-list-reset-styles{margin:0;padding:0;list-style:none}.abs-draggable-handle,.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .draggable-handle,.admin__control-table .draggable-handle,.data-grid .data-grid-draggable-row-cell .draggable-handle{cursor:-webkit-grab;cursor:move;font-size:0;margin-top:-4px;padding:0 1rem 0 0;vertical-align:middle;display:inline-block;text-decoration:none}.abs-draggable-handle:before,.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .draggable-handle:before,.admin__control-table .draggable-handle:before,.data-grid .data-grid-draggable-row-cell .draggable-handle:before{-webkit-font-smoothing:antialiased;font-size:1.8rem;line-height:inherit;color:#9e9e9e;content:'\e617';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.abs-draggable-handle:hover:before,.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .draggable-handle:hover:before,.admin__control-table .draggable-handle:hover:before,.data-grid .data-grid-draggable-row-cell .draggable-handle:hover:before{color:#858585}.abs-config-scope-label,.admin__field:not(.admin__field-option)>.admin__field-label span[data-config-scope]:before{bottom:-1.3rem;color:gray;content:attr(data-config-scope);font-size:1.1rem;font-weight:400;min-width:15rem;position:absolute;right:0;text-transform:lowercase}.abs-word-wrap,.admin__field:not(.admin__field-option)>.admin__field-label{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;box-sizing:border-box}*,:after,:before{box-sizing:inherit}:focus{box-shadow:none;outline:0}._keyfocus :focus{box-shadow:0 0 0 1px #008bdb}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}embed,img,object,video{max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/light/opensans-300.eot);src:url(../fonts/opensans/light/opensans-300.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/light/opensans-300.woff2) format('woff2'),url(../fonts/opensans/light/opensans-300.woff) format('woff'),url(../fonts/opensans/light/opensans-300.ttf) format('truetype'),url('../fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/regular/opensans-400.eot);src:url(../fonts/opensans/regular/opensans-400.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/regular/opensans-400.woff2) format('woff2'),url(../fonts/opensans/regular/opensans-400.woff) format('woff'),url(../fonts/opensans/regular/opensans-400.ttf) format('truetype'),url('../fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');font-weight:400;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/semibold/opensans-600.eot);src:url(../fonts/opensans/semibold/opensans-600.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/semibold/opensans-600.woff2) format('woff2'),url(../fonts/opensans/semibold/opensans-600.woff) format('woff'),url(../fonts/opensans/semibold/opensans-600.ttf) format('truetype'),url('../fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');font-weight:600;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/bold/opensans-700.eot);src:url(../fonts/opensans/bold/opensans-700.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/bold/opensans-700.woff2) format('woff2'),url(../fonts/opensans/bold/opensans-700.woff) format('woff'),url(../fonts/opensans/bold/opensans-700.ttf) format('truetype'),url('../fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');font-weight:700;font-style:normal}html{font-size:62.5%}body{color:#333;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.36;font-size:1.4rem}h1{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2.8rem}h2{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2rem}h3{margin:0 0 2rem;color:#41362f;font-weight:600;line-height:1.2;font-size:1.7rem}h4,h5,h6{font-weight:600;margin-top:0}p{margin:0 0 1em}small{font-size:1.2rem}a{color:#008bdb;text-decoration:none}a:hover{color:#0fa7ff;text-decoration:underline}dl,ol,ul{padding-left:0}nav ol,nav ul{list-style:none;margin:0;padding:0}html{height:100%}body{background-color:#fff;min-height:100%;min-width:102.4rem}.page-wrapper{background-color:#fff;display:inline-block;margin-left:-4px;vertical-align:top;width:calc(100% - 8.8rem)}.page-content{padding-bottom:3rem;padding-left:3rem;padding-right:3rem}.notices-wrapper{margin:0 3rem}.notices-wrapper .messages{margin-bottom:0}.row{margin-left:0;margin-right:0}.row:after{clear:both;content:'';display:table}.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9,.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{min-height:1px;padding-left:0;padding-right:0;position:relative}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}.row-gutter{margin-left:-1.5rem;margin-right:-1.5rem}.row-gutter>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.abs-clearer:after,.extension-manager-content:after,.extension-manager-title:after,.form-row:after,.header:after,.nav:after,body:after{clear:both;content:'';display:table}.ng-cloak{display:none!important}.hide.hide{display:none}.show.show{display:block}.text-center{text-align:center}.text-right{text-align:right}@font-face{font-family:Icons;src:url(../fonts/icons/icons.eot);src:url(../fonts/icons/icons.eot?#iefix) format('embedded-opentype'),url(../fonts/icons/icons.woff2) format('woff2'),url(../fonts/icons/icons.woff) format('woff'),url(../fonts/icons/icons.ttf) format('truetype'),url(../fonts/icons/icons.svg#Icons) format('svg');font-weight:400;font-style:normal}[class*=icon-]{display:inline-block;line-height:1}.icon-failed:before,.icon-success:before,[class*=icon-]:after{font-family:Icons}.icon-success{color:#79a22e}.icon-success:before{content:'\e62d'}.icon-failed{color:#e22626}.icon-failed:before{content:'\e632'}.icon-success-thick:after{content:'\e62d'}.icon-collapse:after{content:'\e615'}.icon-failed-thick:after{content:'\e632'}.icon-expand:after{content:'\e616'}.icon-warning:after{content:'\e623'}.icon-failed-round,.icon-success-round{border-radius:100%;color:#fff;font-size:2.5rem;height:1em;position:relative;text-align:center;width:1em}.icon-failed-round:after,.icon-success-round:after{bottom:0;font-size:.5em;left:0;position:absolute;right:0;top:.45em}.icon-success-round{background-color:#79a22e}.icon-success-round:after{content:'\e62d'}.icon-failed-round{background-color:#e22626}.icon-failed-round:after{content:'\e632'}dl,ol,ul{margin-top:0}.list{padding-left:0}.list>li{display:block;margin-bottom:.75em;position:relative}.list>li>.icon-failed,.list>li>.icon-success{font-size:1.6em;left:-.1em;position:absolute;top:0}.list>li>.icon-success{color:#79a22e}.list>li>.icon-failed{color:#e22626}.list-item-failed,.list-item-icon,.list-item-success,.list-item-warning{padding-left:3.5rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{left:-.1em;position:absolute}.list-item-success:before{color:#79a22e}.list-item-failed:before{color:#e22626}.list-item-warning:before{color:#ef672f}.list-definition{margin:0 0 3rem;padding:0}.list-definition>dt{clear:left;float:left}.list-definition>dd{margin-bottom:1em;margin-left:20rem}.btn-wrap{margin:0 auto}.btn-wrap .btn{width:100%}.btn{background:#e3e3e3;border:none;color:#514943;display:inline-block;font-size:1.6rem;font-weight:600;padding:.45em .9em;text-align:center}.btn:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.btn:active{background-color:#d6d6d6}.btn.disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.ie9 .btn.disabled,.ie9 .btn[disabled]{background-color:#f0f0f0;opacity:1;text-shadow:none}.btn-large{padding:.75em 1.25em}.btn-medium{font-size:1.4rem;padding:.5em 1.5em .6em}.btn-link{background-color:transparent;border:none;color:#008bdb;font-family:1.6rem;font-size:1.5rem}.btn-link:active,.btn-link:focus,.btn-link:hover{background-color:transparent;color:#0fa7ff}.btn-prime{background-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.btn-prime:focus,.btn-prime:hover{background-color:#f65405;background-repeat:repeat-x;background-image:linear-gradient(to right,#e04f00 0,#f65405 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e04f00', endColorstr='#f65405', GradientType=1);color:#fff}.btn-prime:active{background-color:#e04f00;background-repeat:repeat-x;background-image:linear-gradient(to right,#f65405 0,#e04f00 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f65405', endColorstr='#e04f00', GradientType=1);color:#fff}.ie9 .btn-prime.disabled,.ie9 .btn-prime[disabled]{background-color:#fd6e23}.ie9 .btn-prime.disabled:active,.ie9 .btn-prime.disabled:hover,.ie9 .btn-prime[disabled]:active,.ie9 .btn-prime[disabled]:hover{background-color:#fd6e23;-webkit-filter:none;filter:none}.btn-secondary{background-color:#514943;color:#fff}.btn-secondary:hover{background-color:#5f564f;color:#fff}.btn-secondary:active,.btn-secondary:focus{background-color:#574e48;color:#fff}.ie9 .btn-secondary.disabled,.ie9 .btn-secondary[disabled]{background-color:#514943}.ie9 .btn-secondary.disabled:active,.ie9 .btn-secondary[disabled]:active{background-color:#514943;-webkit-filter:none;filter:none}[class*=btn-wrap-triangle]{overflow:hidden;position:relative}[class*=btn-wrap-triangle] .btn:after{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.btn-wrap-triangle-right{display:inline-block;padding-right:1.74rem;position:relative}.btn-wrap-triangle-right .btn{text-indent:.92rem}.btn-wrap-triangle-right .btn:after{border-color:transparent transparent transparent #e3e3e3;border-width:1.84rem 0 1.84rem 1.84rem;left:100%;margin-left:-1.74rem}.btn-wrap-triangle-right .btn:focus:after,.btn-wrap-triangle-right .btn:hover:after{border-left-color:#dbdbdb}.btn-wrap-triangle-right .btn:active:after{border-left-color:#d6d6d6}.btn-wrap-triangle-right .btn:not(.disabled):active,.btn-wrap-triangle-right .btn:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn.disabled:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:after{border-color:transparent transparent transparent #f0f0f0}.ie9 .btn-wrap-triangle-right .btn.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn.disabled:focus:after,.ie9 .btn-wrap-triangle-right .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:focus:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:hover:after{border-left-color:#f0f0f0}.btn-wrap-triangle-right .btn-prime:after{border-color:transparent transparent transparent #eb5202}.btn-wrap-triangle-right .btn-prime:focus:after,.btn-wrap-triangle-right .btn-prime:hover:after{border-left-color:#f65405}.btn-wrap-triangle-right .btn-prime:active:after{border-left-color:#e04f00}.btn-wrap-triangle-right .btn-prime:not(.disabled):active,.btn-wrap-triangle-right .btn-prime:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:after{border-color:transparent transparent transparent #fd6e23}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:hover:after{border-left-color:#fd6e23}.btn-wrap-triangle-left{display:inline-block;padding-left:1.74rem}.btn-wrap-triangle-left .btn{text-indent:-.92rem}.btn-wrap-triangle-left .btn:after{border-color:transparent #e3e3e3 transparent transparent;border-width:1.84rem 1.84rem 1.84rem 0;margin-right:-1.74rem;right:100%}.btn-wrap-triangle-left .btn:focus:after,.btn-wrap-triangle-left .btn:hover:after{border-right-color:#dbdbdb}.btn-wrap-triangle-left .btn:active:after{border-right-color:#d6d6d6}.btn-wrap-triangle-left .btn:not(.disabled):active,.btn-wrap-triangle-left .btn:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn.disabled:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:after{border-color:transparent #f0f0f0 transparent transparent}.ie9 .btn-wrap-triangle-left .btn.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:hover:after{border-right-color:#f0f0f0}.btn-wrap-triangle-left .btn-prime:after{border-color:transparent #eb5202 transparent transparent}.btn-wrap-triangle-left .btn-prime:focus:after,.btn-wrap-triangle-left .btn-prime:hover:after{border-right-color:#e04f00}.btn-wrap-triangle-left .btn-prime:active:after{border-right-color:#f65405}.btn-wrap-triangle-left .btn-prime:not(.disabled):active,.btn-wrap-triangle-left .btn-prime:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:after{border-color:transparent #fd6e23 transparent transparent}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:hover:after{border-right-color:#fd6e23}.btn-expand{background-color:transparent;border:none;color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700;padding:0;position:relative}.btn-expand.expanded:after{border-color:transparent transparent #303030;border-width:0 .285em .36em}.btn-expand.expanded:hover:after{border-color:transparent transparent #3d3d3d}.btn-expand:hover{background-color:transparent;border:none;color:#3d3d3d}.btn-expand:hover:after{border-color:#3d3d3d transparent transparent}.btn-expand:after{border-color:#303030 transparent transparent;border-style:solid;border-width:.36em .285em 0;content:'';height:0;left:100%;margin-left:.5em;margin-top:-.18em;position:absolute;top:50%;width:0}[class*=col-] .form-el-input,[class*=col-] .form-el-select{width:100%}.form-fieldset{border:none;margin:0 0 1em;padding:0}.form-row{margin-bottom:2.2rem}.form-row .form-row{margin-bottom:.4rem}.form-row .form-label{display:block;font-weight:600;padding:.6rem 2.1em 0 0;text-align:right}.form-row .form-label.required{position:relative}.form-row .form-label.required:after{color:#eb5202;content:'*';font-size:1.15em;position:absolute;right:.7em;top:.5em}.form-row .form-el-checkbox+.form-label:before,.form-row .form-el-radio+.form-label:before{top:.7rem}.form-row .form-el-checkbox+.form-label:after,.form-row .form-el-radio+.form-label:after{top:1.1rem}.form-row.form-row-text{padding-top:.6rem}.form-row.form-row-text .action-sign-out{font-size:1.2rem;margin-left:1rem}.form-note{font-size:1.2rem;font-weight:600;margin-top:1rem}.form-el-dummy{display:none}.fieldset{border:0;margin:0;min-width:0;padding:0}input:not([disabled]):focus,textarea:not([disabled]):focus{box-shadow:none}.form-el-input{border:1px solid #adadad;color:#303030;padding:.35em .55em .5em}.form-el-input:hover{border-color:#949494}.form-el-input:focus{border-color:#008bdb}.form-el-input:required{box-shadow:none}.form-label{margin-bottom:.5em}[class*=form-label][for]{cursor:pointer}.form-el-insider-wrap{display:table;width:100%}.form-el-insider-input{display:table-cell;width:100%}.form-el-insider{border-radius:2px;display:table-cell;padding:.43em .55em .5em 0;vertical-align:top}.form-legend,.form-legend-expand,.form-legend-light{display:block;margin:0}.form-legend,.form-legend-expand{font-size:1.25em;font-weight:600;margin-bottom:2.5em;padding-top:1.5em}.form-legend{border-top:1px solid #ccc;width:100%}.form-legend-light{font-size:1em;margin-bottom:1.5em}.form-legend-expand{cursor:pointer;transition:opacity .2s linear}.form-legend-expand:hover{opacity:.85}.form-legend-expand.expanded:after{content:'\e615'}.form-legend-expand:after{content:'\e616';font-family:Icons;font-size:1.15em;font-weight:400;margin-left:.5em;vertical-align:sub}.form-el-checkbox.disabled+.form-label,.form-el-checkbox.disabled+.form-label:before,.form-el-checkbox[disabled]+.form-label,.form-el-checkbox[disabled]+.form-label:before,.form-el-radio.disabled+.form-label,.form-el-radio.disabled+.form-label:before,.form-el-radio[disabled]+.form-label,.form-el-radio[disabled]+.form-label:before{cursor:default;opacity:.5;pointer-events:none}.form-el-checkbox:not(.disabled)+.form-label:hover:before,.form-el-checkbox:not([disabled])+.form-label:hover:before,.form-el-radio:not(.disabled)+.form-label:hover:before,.form-el-radio:not([disabled])+.form-label:hover:before{border-color:#514943}.form-el-checkbox+.form-label,.form-el-radio+.form-label{font-weight:400;padding-left:2em;padding-right:0;position:relative;text-align:left;transition:border-color .1s linear}.form-el-checkbox+.form-label:before,.form-el-radio+.form-label:before{border:1px solid;content:'';left:0;position:absolute;top:.1rem;transition:border-color .1s linear}.form-el-checkbox+.form-label:before{background-color:#fff;border-color:#adadad;border-radius:2px;font-size:1.2rem;height:1.6rem;line-height:1.2;width:1.6rem}.form-el-checkbox:checked+.form-label::before{content:'\e62d';font-family:Icons}.form-el-radio+.form-label:before{background-color:#fff;border:1px solid #adadad;border-radius:100%;height:1.8rem;width:1.8rem}.form-el-radio+.form-label:after{background:0 0;border:.5rem solid transparent;border-radius:100%;content:'';height:0;left:.4rem;position:absolute;top:.5rem;transition:background .3s linear;width:0}.form-el-radio:checked+.form-label{cursor:default}.form-el-radio:checked+.form-label:after{border-color:#514943}.form-select-label{border:1px solid #adadad;color:#303030;cursor:pointer;display:block;overflow:hidden;position:relative;z-index:0}.form-select-label:hover,.form-select-label:hover:after{border-color:#949494}.form-select-label:active,.form-select-label:active:after,.form-select-label:focus,.form-select-label:focus:after{border-color:#008bdb}.form-select-label:after{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:2.36em;z-index:-2}.ie9 .form-select-label:after{display:none}.form-select-label:before{border-color:#303030 transparent transparent;border-style:solid;border-width:5px 4px 0;content:'';height:0;margin-right:-4px;margin-top:-2.5px;position:absolute;right:1.18em;top:50%;width:0;z-index:-1}.ie9 .form-select-label:before{display:none}.form-select-label .form-el-select{background:0 0;border:none;border-radius:0;content:'';display:block;margin:0;padding:.35em calc(2.36em + 10%) .5em .55em;width:110%}.ie9 .form-select-label .form-el-select{padding-right:.55em;width:100%}.form-select-label .form-el-select::-ms-expand{display:none}.form-el-select{background:#fff;border:1px solid #adadad;border-radius:2px;color:#303030;display:block;padding:.35em .55em}.multiselect-custom{border:1px solid #adadad;height:45.2rem;margin:0 0 1.5rem;overflow:auto;position:relative}.multiselect-custom ul{margin:0;padding:0;list-style:none;min-width:29rem}.multiselect-custom .item{padding:1rem 1.4rem}.multiselect-custom .selected{background-color:#e0f6fe}.multiselect-custom .form-label{margin-bottom:0}[class*=form-el-].invalid{border-color:#e22626}[class*=form-el-].invalid+.error-container{display:block}.error-container{background-color:#fffbbb;border:1px solid #ee7d7d;color:#514943;display:none;font-size:1.19rem;margin-top:.2rem;padding:.8rem 1rem .9rem}.check-result-message{margin-left:.5em;min-height:3.68rem;-ms-align-items:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.check-result-text{margin-left:.5em}body:not([class]){min-width:0}.container{display:block;margin:0 auto 4rem;max-width:100rem;padding:0}.abs-action-delete,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .action-delete:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__field-fallback-reset:before,.admin__menu .level-0>a:before,.admin__page-nav-item-message .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.extensions-information .list .extension-delete,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;font-style:normal;font-weight:400;line-height:1;speak:none}.text-stretch{margin-bottom:1.5em}.page-title-jumbo{font-size:4rem;font-weight:300;letter-spacing:-.05em;margin-bottom:2.9rem}.page-title-jumbo-success:before{color:#79a22e;content:'\e62d';font-size:3.9rem;margin-left:-.3rem;margin-right:2.4rem}.list{margin-bottom:3rem}.list-dot .list-item{display:list-item;list-style-position:inside;margin-bottom:1.2rem}.list-title{color:#333;font-size:1.4rem;font-weight:700;letter-spacing:.025em;margin-bottom:1.2rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{font-family:Icons;font-size:1.6rem;top:0}.list-item-success:before{content:'\e62d';font-size:1.6rem}.list-item-failed:before{content:'\e632';font-size:1.4rem;left:.1rem;top:.2rem}.list-item-warning:before{content:'\e623';font-size:1.3rem;left:.2rem}.form-wrap{margin-bottom:3.6rem;padding-top:2.1rem}.form-el-label-horizontal{display:inline-block;font-size:1.3rem;font-weight:600;letter-spacing:.025em;margin-bottom:.4rem;margin-left:.4rem}.app-updater{min-width:768px}body._has-modal{height:100%;overflow:hidden;width:100%}.modals-overlay{z-index:899}.modal-popup,.modal-slide{bottom:0;min-width:0;position:fixed;right:0;top:0;visibility:hidden}.modal-popup._show,.modal-slide._show{visibility:visible}.modal-popup._show .modal-inner-wrap,.modal-slide._show .modal-inner-wrap{-ms-transform:translate(0,0);transform:translate(0,0)}.modal-popup .modal-inner-wrap,.modal-slide .modal-inner-wrap{background-color:#fff;box-shadow:0 0 12px 2px rgba(0,0,0,.35);opacity:1;pointer-events:auto}.modal-slide{left:14.8rem;z-index:900}.modal-slide._show .modal-inner-wrap{-ms-transform:translateX(0);transform:translateX(0)}.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto}.modal-slide._inner-scroll .modal-inner-wrap{overflow-y:visible;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.modal-slide._inner-scroll .modal-footer,.modal-slide._inner-scroll .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.modal-slide._inner-scroll .modal-content{overflow-y:auto}.modal-slide._inner-scroll .modal-footer{margin-top:auto}.modal-slide .modal-content,.modal-slide .modal-footer,.modal-slide .modal-header{padding:0 2.6rem 2.6rem}.modal-slide .modal-header{padding-bottom:2.1rem;padding-top:2.1rem}.modal-popup{z-index:900;left:0;overflow-y:auto}.modal-popup._show .modal-inner-wrap{-ms-transform:translateY(0);transform:translateY(0)}.modal-popup .modal-inner-wrap{margin:5rem auto;width:75%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;box-sizing:border-box;height:auto;left:0;position:absolute;right:0;-ms-transform:translateY(-200%);transform:translateY(-200%);transition-duration:.2s;transition-property:transform,visibility;transition-timing-function:ease}.modal-popup._inner-scroll{overflow-y:visible}.ie10 .modal-popup._inner-scroll,.ie9 .modal-popup._inner-scroll{overflow-y:auto}.modal-popup._inner-scroll .modal-inner-wrap{max-height:90%}.ie10 .modal-popup._inner-scroll .modal-inner-wrap,.ie9 .modal-popup._inner-scroll .modal-inner-wrap{max-height:none}.modal-popup._inner-scroll .modal-content{overflow-y:auto}.modal-popup .modal-content,.modal-popup .modal-footer,.modal-popup .modal-header{padding-left:3rem;padding-right:3rem}.modal-popup .modal-footer,.modal-popup .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.modal-popup .modal-header{padding-bottom:1.2rem;padding-top:3rem}.modal-popup .modal-footer{margin-top:auto;padding-bottom:3rem}.modal-popup .modal-footer-actions{text-align:right}.admin__action-dropdown-wrap{display:inline-block;position:relative}.admin__action-dropdown-wrap .admin__action-dropdown-text:after{left:-6px;right:0}.admin__action-dropdown-wrap .admin__action-dropdown-menu{left:auto;right:0}.admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__action-dropdown-wrap.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin__action-dropdown-wrap._active .admin__action-dropdown-text:after,.admin__action-dropdown-wrap.active .admin__action-dropdown-text:after{background-color:#fff;content:'';height:6px;position:absolute;top:100%}.admin__action-dropdown-wrap._active .admin__action-dropdown-menu,.admin__action-dropdown-wrap.active .admin__action-dropdown-menu{display:block}.admin__action-dropdown-wrap._disabled .admin__action-dropdown{cursor:default}.admin__action-dropdown-wrap._disabled:hover .admin__action-dropdown{color:#333}.admin__action-dropdown{background-color:#fff;border:1px solid transparent;border-bottom:none;border-radius:0;box-shadow:none;color:#333;display:inline-block;font-size:1.3rem;font-weight:400;letter-spacing:-.025em;padding:.7rem 3.3rem .8rem 1.5rem;position:relative;vertical-align:baseline;z-index:2}.admin__action-dropdown._active:after,.admin__action-dropdown.active:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .admin__action-dropdown:after,.active .admin__action-dropdown:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin__action-dropdown:focus,.admin__action-dropdown:hover{background-color:#fff;color:#000;text-decoration:none}.admin__action-dropdown:after{right:1.5rem}.admin__action-dropdown:before{margin-right:1rem}.admin__action-dropdown-menu{background-color:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;line-height:1.36;margin-top:-1px;min-width:120%;padding:.5rem 1rem;position:absolute;top:100%;transition:all .15s ease;z-index:1}.admin__action-dropdown-menu>li{display:block}.admin__action-dropdown-menu>li>a{color:#333;display:block;text-decoration:none;padding:.6rem .5rem}.selectmenu{display:inline-block;position:relative;text-align:left;z-index:1}.selectmenu._active{border-color:#007bdb;z-index:500}.selectmenu .action-delete,.selectmenu .action-edit,.selectmenu .action-save{background-color:transparent;border-color:transparent;box-shadow:none;padding:0 1rem}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover,.selectmenu .action-save:hover{background-color:transparent;border-color:transparent;box-shadow:none}.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before{content:'\e630'}.selectmenu .action-delete,.selectmenu .action-edit{border:0 solid #fff;border-left-width:1px;bottom:0;position:absolute;right:0;top:0;z-index:1}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover{border:0 solid #fff;border-left-width:1px}.selectmenu .action-save:before{content:'\e625'}.selectmenu .action-edit:before{content:'\e631'}.selectmenu-value{display:inline-block}.selectmenu-value input[type=text]{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;border:0;display:inline;margin:0;width:6rem}body._keyfocus .selectmenu-value input[type=text]:focus{box-shadow:none}.selectmenu-toggle{padding-right:3rem;background:0 0;border-width:0;bottom:0;float:right;position:absolute;right:0;top:0;width:0}.selectmenu-toggle._active:after,.selectmenu-toggle.active:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.1rem;top:50%;transition:all .2s linear;width:0}._active .selectmenu-toggle:after,.active .selectmenu-toggle:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:hover:after{border-color:#000 transparent transparent}.selectmenu-toggle:active,.selectmenu-toggle:focus,.selectmenu-toggle:hover{background:0 0}.selectmenu._active .selectmenu-toggle:before{border-color:#007bdb}body._keyfocus .selectmenu-toggle:focus{box-shadow:none}.selectmenu-toggle:before{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';display:block;position:absolute;right:0;top:0;width:3.2rem}.selectmenu-items{background:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;float:left;left:-1px;margin-top:3px;max-width:20rem;min-width:calc(100% + 2px);position:absolute;top:100%}.selectmenu-items._active{display:block}.selectmenu-items ul{float:left;list-style-type:none;margin:0;min-width:100%;padding:0}.selectmenu-items li{-webkit-flex-direction:row;display:flex;-ms-flex-direction:row;flex-direction:row;transition:background .2s linear}.selectmenu-items li:hover{background:#e3e3e3}.selectmenu-items li:last-child .selectmenu-item-action,.selectmenu-items li:last-child .selectmenu-item-action:visited{color:#008bdb;text-decoration:none}.selectmenu-items li:last-child .selectmenu-item-action:hover{color:#0fa7ff;text-decoration:underline}.selectmenu-items li:last-child .selectmenu-item-action:active{color:#ff5501;text-decoration:underline}.selectmenu-item{position:relative;width:100%;z-index:1}li._edit>.selectmenu-item{display:none}.selectmenu-item-edit{display:none;padding:.3rem 4rem .3rem .4rem;position:relative;white-space:nowrap;z-index:1}li:last-child .selectmenu-item-edit{padding-right:.4rem}.selectmenu-item-edit .admin__control-text{margin:0;width:5.4rem}li._edit .selectmenu-item-edit{display:block}.selectmenu-item-action{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background:0 0;border:0;color:#333;display:block;font-size:1.4rem;font-weight:400;min-width:100%;padding:1rem 6rem 1rem 1.5rem;text-align:left;transition:background .2s linear;width:5rem}.selectmenu-item-action:focus,.selectmenu-item-action:hover{background:#e3e3e3}.abs-actions-split-xl .action-default,.page-actions .actions-split .action-default{margin-right:4rem}.abs-actions-split-xl .action-toggle,.page-actions .actions-split .action-toggle{padding-right:4rem}.abs-actions-split-xl .action-toggle:after,.page-actions .actions-split .action-toggle:after{border-width:.9rem .6rem 0;margin-top:-.3rem;right:1.4rem}.actions-split{position:relative;z-index:400}.actions-split._active,.actions-split.active,.actions-split:hover{box-shadow:0 0 0 1px #007bdb}.actions-split._active .action-toggle.action-primary,.actions-split._active .action-toggle.primary,.actions-split.active .action-toggle.action-primary,.actions-split.active .action-toggle.primary{background-color:#ba4000;border-color:#ba4000}.actions-split._active .dropdown-menu,.actions-split.active .dropdown-menu{opacity:1;visibility:visible;display:block}.actions-split .action-default,.actions-split .action-toggle{float:left;margin:0}.actions-split .action-default._active,.actions-split .action-default.active,.actions-split .action-default:hover,.actions-split .action-toggle._active,.actions-split .action-toggle.active,.actions-split .action-toggle:hover{box-shadow:none}.actions-split .action-default{margin-right:3.2rem;min-width:9.3rem}.actions-split .action-toggle{padding-right:3.2rem;border-left-color:rgba(0,0,0,.2);bottom:0;padding-left:0;position:absolute;right:0;top:0}.actions-split .action-toggle._active:after,.actions-split .action-toggle.active:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .actions-split .action-toggle:after,.active .actions-split .action-toggle:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:hover:after{border-color:#000 transparent transparent}.actions-split .action-toggle.action-primary:after,.actions-split .action-toggle.action-secondary:after,.actions-split .action-toggle.primary:after,.actions-split .action-toggle.secondary:after{border-color:#fff transparent transparent}.actions-split .action-toggle>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-select-wrap{display:inline-block;position:relative}.action-select-wrap .action-select{padding-right:3.2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#fff;font-weight:400;text-align:left}.action-select-wrap .action-select._active:after,.action-select-wrap .action-select.active:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .action-select-wrap .action-select:after,.active .action-select-wrap .action-select:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:hover:after{border-color:#000 transparent transparent}.action-select-wrap .action-select:hover,.action-select-wrap .action-select:hover:before{border-color:#878787}.action-select-wrap .action-select:before{background-color:#e3e3e3;border:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:3.2rem}.action-select-wrap .action-select._active{border-color:#007bdb}.action-select-wrap .action-select._active:before{border-color:#007bdb #007bdb #007bdb #adadad}.action-select-wrap .action-select[disabled]{color:#333}.action-select-wrap .action-select[disabled]:after{border-color:#333 transparent transparent}.action-select-wrap._active{z-index:500}.action-select-wrap._active .action-select,.action-select-wrap._active .action-select:before{border-color:#007bdb}.action-select-wrap._active .action-select:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .abs-action-menu .action-submenu,.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu,.action-select-wrap .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:45rem;overflow-y:auto}.action-select-wrap .abs-action-menu .action-submenu ._disabled:hover,.action-select-wrap .abs-action-menu .action-submenu .action-submenu ._disabled:hover,.action-select-wrap .action-menu ._disabled:hover,.action-select-wrap .action-menu .action-submenu ._disabled:hover,.action-select-wrap .actions-split .action-menu .action-submenu ._disabled:hover,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu ._disabled:hover,.action-select-wrap .actions-split .dropdown-menu .action-submenu ._disabled:hover,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu ._disabled:hover{background:#fff}.action-select-wrap .abs-action-menu .action-submenu ._disabled .action-menu-item,.action-select-wrap .abs-action-menu .action-submenu .action-submenu ._disabled .action-menu-item,.action-select-wrap .action-menu ._disabled .action-menu-item,.action-select-wrap .action-menu .action-submenu ._disabled .action-menu-item,.action-select-wrap .actions-split .action-menu .action-submenu ._disabled .action-menu-item,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu ._disabled .action-menu-item,.action-select-wrap .actions-split .dropdown-menu .action-submenu ._disabled .action-menu-item,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu ._disabled .action-menu-item{cursor:default;opacity:.5}.action-select-wrap .action-menu-items{left:0;position:absolute;right:0;top:100%}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu{min-width:100%;position:static}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{position:absolute}.action-multicheck-wrap{display:inline-block;height:1.6rem;padding-top:1px;position:relative;width:3.1rem;z-index:200}.action-multicheck-wrap:hover .action-multicheck-toggle,.action-multicheck-wrap:hover .admin__control-checkbox+label:before{border-color:#878787}.action-multicheck-wrap._active .action-multicheck-toggle,.action-multicheck-wrap._active .admin__control-checkbox+label:before{border-color:#007bdb}.action-multicheck-wrap._active .abs-action-menu .action-submenu,.action-multicheck-wrap._active .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .action-menu,.action-multicheck-wrap._active .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu .action-submenu{opacity:1;visibility:visible;display:block}.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{background-color:#fff}.action-multicheck-wrap._disabled .action-multicheck-toggle,.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{border-color:#adadad;opacity:1}.action-multicheck-wrap .action-multicheck-toggle,.action-multicheck-wrap .admin__control-checkbox,.action-multicheck-wrap .admin__control-checkbox+label{float:left}.action-multicheck-wrap .action-multicheck-toggle{border-radius:0 1px 1px 0;height:1.6rem;margin-left:-1px;padding:0;position:relative;transition:border-color .1s linear;width:1.6rem}.action-multicheck-wrap .action-multicheck-toggle._active:after,.action-multicheck-wrap .action-multicheck-toggle.active:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .action-multicheck-wrap .action-multicheck-toggle:after,.active .action-multicheck-wrap .action-multicheck-toggle:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:hover:after{border-color:#000 transparent transparent}.action-multicheck-wrap .action-multicheck-toggle:focus{border-color:#007bdb}.action-multicheck-wrap .action-multicheck-toggle:after{right:.3rem}.action-multicheck-wrap .abs-action-menu .action-submenu,.action-multicheck-wrap .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap .action-menu,.action-multicheck-wrap .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{left:-1.1rem;margin-top:1px;right:auto;text-align:left}.action-multicheck-wrap .action-menu-item{white-space:nowrap}.admin__action-multiselect-wrap{display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.admin__action-multiselect-wrap.action-select-wrap:focus{box-shadow:none}.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .action-menu,.admin__action-multiselect-wrap.action-select-wrap .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:none;overflow-y:inherit}.admin__action-multiselect-wrap .action-menu-item{transition:background-color .1s linear}.admin__action-multiselect-wrap .action-menu-item._selected{background-color:#e0f6fe}.admin__action-multiselect-wrap .action-menu-item._hover{background-color:#e3e3e3}.admin__action-multiselect-wrap .action-menu-item._unclickable{cursor:default}.admin__action-multiselect-wrap .admin__action-multiselect{border:1px solid #adadad;cursor:pointer;display:block;min-height:3.2rem;padding-right:3.6rem;white-space:normal}.admin__action-multiselect-wrap .admin__action-multiselect:after{bottom:1.25rem;top:auto}.admin__action-multiselect-wrap .admin__action-multiselect:before{height:3.3rem;top:auto}.admin__control-table-wrapper .admin__action-multiselect-wrap{position:static}.admin__control-table-wrapper .admin__action-multiselect-wrap .admin__action-multiselect{position:relative}.admin__control-table-wrapper .admin__action-multiselect-wrap .admin__action-multiselect:before{right:-1px;top:-1px}.admin__control-table-wrapper .admin__action-multiselect-wrap .abs-action-menu .action-submenu,.admin__control-table-wrapper .admin__action-multiselect-wrap .abs-action-menu .action-submenu .action-submenu,.admin__control-table-wrapper .admin__action-multiselect-wrap .action-menu,.admin__control-table-wrapper .admin__action-multiselect-wrap .action-menu .action-submenu,.admin__control-table-wrapper .admin__action-multiselect-wrap .actions-split .action-menu .action-submenu,.admin__control-table-wrapper .admin__action-multiselect-wrap .actions-split .action-menu .action-submenu .action-submenu,.admin__control-table-wrapper .admin__action-multiselect-wrap .actions-split .dropdown-menu .action-submenu,.admin__control-table-wrapper .admin__action-multiselect-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{left:auto;min-width:34rem;right:auto;top:auto;z-index:1}.admin__action-multiselect-wrap .admin__action-multiselect-item-path{color:#a79d95;font-size:1.2rem;font-weight:400;padding-left:1rem}.admin__action-multiselect-actions-wrap{border-top:1px solid #e3e3e3;margin:0 1rem;padding:1rem 0;text-align:center}.admin__action-multiselect-actions-wrap .action-default{font-size:1.3rem;min-width:13rem}.admin__action-multiselect-text{padding:.6rem 1rem}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{text-align:left}.admin__action-multiselect-label{cursor:pointer;position:relative;z-index:1}.admin__action-multiselect-label:before{margin-right:.5rem}._unclickable .admin__action-multiselect-label{cursor:default;font-weight:700}.admin__action-multiselect-search-wrap{border-bottom:1px solid #e3e3e3;margin:0 1rem;padding:1rem 0;position:relative}.admin__action-multiselect-search{padding-right:3rem;width:100%}.admin__action-multiselect-search-label{display:block;font-size:1.5rem;height:1em;overflow:hidden;position:absolute;right:2.2rem;top:1.7rem;width:1em}.admin__action-multiselect-search-label:before{content:'\e60c'}.admin__action-multiselect-search-count{color:#a79d95;margin-top:1rem}.admin__action-multiselect-menu-inner{margin-bottom:0;max-height:46rem;overflow-y:auto}.admin__action-multiselect-menu-inner .admin__action-multiselect-menu-inner{list-style:none;max-height:none;overflow:hidden;padding-left:2.2rem}.admin__action-multiselect-menu-inner ._hidden{display:none}.admin__action-multiselect-crumb{background-color:#f5f5f5;border:1px solid #a79d95;border-radius:1px;display:inline-block;font-size:1.2rem;margin:.3rem -4px .3rem .3rem;padding:.3rem 2.4rem .4rem 1rem;position:relative;transition:border-color .1s linear}.admin__action-multiselect-crumb:hover{border-color:#908379}.admin__action-multiselect-crumb .action-close{bottom:0;font-size:.5em;position:absolute;right:0;top:0;width:2rem}.admin__action-multiselect-crumb .action-close:hover{color:#000}.admin__action-multiselect-crumb .action-close:active,.admin__action-multiselect-crumb .action-close:focus{background-color:transparent}.admin__action-multiselect-crumb .action-close:active{-ms-transform:scale(0.9);transform:scale(0.9)}.admin__action-multiselect-tree .abs-action-menu .action-submenu,.admin__action-multiselect-tree .abs-action-menu .action-submenu .action-submenu,.admin__action-multiselect-tree .action-menu,.admin__action-multiselect-tree .action-menu .action-submenu,.admin__action-multiselect-tree .actions-split .action-menu .action-submenu,.admin__action-multiselect-tree .actions-split .action-menu .action-submenu .action-submenu,.admin__action-multiselect-tree .actions-split .dropdown-menu .action-submenu,.admin__action-multiselect-tree .actions-split .dropdown-menu .action-submenu .action-submenu{min-width:34.7rem}.admin__action-multiselect-tree .abs-action-menu .action-submenu .action-menu-item,.admin__action-multiselect-tree .abs-action-menu .action-submenu .action-submenu .action-menu-item,.admin__action-multiselect-tree .action-menu .action-menu-item,.admin__action-multiselect-tree .action-menu .action-submenu .action-menu-item,.admin__action-multiselect-tree .actions-split .action-menu .action-submenu .action-menu-item,.admin__action-multiselect-tree .actions-split .action-menu .action-submenu .action-submenu .action-menu-item,.admin__action-multiselect-tree .actions-split .dropdown-menu .action-submenu .action-menu-item,.admin__action-multiselect-tree .actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item{margin-top:.1rem}.admin__action-multiselect-tree .action-menu-item{margin-left:4.2rem;position:relative}.admin__action-multiselect-tree .action-menu-item._expended:before{border-left:1px dashed #a79d95;bottom:0;content:'';left:-1rem;position:absolute;top:1rem;width:1px}.admin__action-multiselect-tree .action-menu-item._expended .admin__action-multiselect-dropdown:before{content:'\e615'}.admin__action-multiselect-tree .action-menu-item._with-checkbox .admin__action-multiselect-label{padding-left:2.6rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner{position:relative}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner .admin__action-multiselect-menu-inner{padding-left:3.2rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner .admin__action-multiselect-menu-inner:before{left:4.3rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item{position:relative}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item:last-child:before{height:2.1rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item:after,.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item:before{content:'';left:0;position:absolute}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item:after{border-top:1px dashed #a79d95;height:1px;top:2.1rem;width:5.2rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item:before{border-left:1px dashed #a79d95;height:100%;top:0;width:1px}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._parent:after{width:4.2rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._root{margin-left:-1rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._root:after{left:3.2rem;width:2.2rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._root:before{left:3.2rem;top:1rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._root._parent:after{display:none}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._root:first-child:before{top:2.1rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._root:last-child:before{height:1rem}.admin__action-multiselect-tree .admin__action-multiselect-label{line-height:2.2rem;vertical-align:middle;word-break:break-all}.admin__action-multiselect-tree .admin__action-multiselect-label:before{left:0;position:absolute;top:.4rem}.admin__action-multiselect-dropdown{border-radius:50%;height:2.2rem;left:-2.2rem;position:absolute;top:1rem;width:2.2rem;z-index:1}.admin__action-multiselect-dropdown:before{background:#fff;color:#a79d95;content:'\e616';font-size:2.2rem}.admin__actions-switch{display:inline-block;position:relative;vertical-align:middle}.admin__field-control .admin__actions-switch{line-height:3.2rem}.admin__actions-switch+.admin__field-service{min-width:34rem}._disabled .admin__actions-switch-checkbox+.admin__actions-switch-label,.admin__actions-switch-checkbox.disabled+.admin__actions-switch-label{cursor:not-allowed;opacity:.5;pointer-events:none}.admin__actions-switch-checkbox:checked+.admin__actions-switch-label:before{left:15px}.admin__actions-switch-checkbox:checked+.admin__actions-switch-label:after{background:#79a22e}.admin__actions-switch-checkbox:checked+.admin__actions-switch-label .admin__actions-switch-text:before{content:attr(data-text-on)}.admin__actions-switch-checkbox:focus+.admin__actions-switch-label:after,.admin__actions-switch-checkbox:focus+.admin__actions-switch-label:before{border-color:#007bdb}._error .admin__actions-switch-checkbox+.admin__actions-switch-label:after,._error .admin__actions-switch-checkbox+.admin__actions-switch-label:before{border-color:#e22626}.admin__actions-switch-label{cursor:pointer;display:inline-block;height:22px;line-height:22px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.admin__actions-switch-label:after,.admin__actions-switch-label:before{left:0;position:absolute;right:auto;top:0}.admin__actions-switch-label:before{background:#fff;border:1px solid #aaa6a0;border-radius:100%;content:'';display:block;height:22px;transition:left .2s ease-in 0s;width:22px;z-index:1}.admin__actions-switch-label:after{background:#e3e3e3;border:1px solid #aaa6a0;border-radius:12px;content:'';display:block;height:22px;transition:background .2s ease-in 0s;vertical-align:middle;width:37px;z-index:0}.admin__actions-switch-text:before{content:attr(data-text-off);padding-left:47px;white-space:nowrap}.abs-action-delete,.abs-action-reset,.action-close,.admin__field-fallback-reset,.extensions-information .list .extension-delete,.notifications-close,.search-global-field._active .search-global-action{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0}.abs-action-delete:hover,.abs-action-reset:hover,.action-close:hover,.admin__field-fallback-reset:hover,.extensions-information .list .extension-delete:hover,.notifications-close:hover,.search-global-field._active .search-global-action:hover{background-color:transparent;border:none;box-shadow:none}.abs-action-default,.abs-action-pattern,.abs-action-primary,.abs-action-quaternary,.abs-action-secondary,.abs-action-tertiary,.action-default,.action-primary,.action-quaternary,.action-secondary,.action-tertiary,.modal-popup .modal-footer .action-primary,.modal-popup .modal-footer .action-secondary,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.action-secondary,.page-actions .page-actions-buttons>button.primary,.page-actions>button,.page-actions>button.action-primary,.page-actions>button.action-secondary,.page-actions>button.primary,button,button.primary,button.secondary,button.tertiary{border:1px solid;border-radius:0;display:inline-block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:1.36;padding:.6rem 1em;text-align:center;vertical-align:baseline}.abs-action-default.disabled,.abs-action-default[disabled],.abs-action-pattern.disabled,.abs-action-pattern[disabled],.abs-action-primary.disabled,.abs-action-primary[disabled],.abs-action-quaternary.disabled,.abs-action-quaternary[disabled],.abs-action-secondary.disabled,.abs-action-secondary[disabled],.abs-action-tertiary.disabled,.abs-action-tertiary[disabled],.action-default.disabled,.action-default[disabled],.action-primary.disabled,.action-primary[disabled],.action-quaternary.disabled,.action-quaternary[disabled],.action-secondary.disabled,.action-secondary[disabled],.action-tertiary.disabled,.action-tertiary[disabled],.modal-popup .modal-footer .action-primary.disabled,.modal-popup .modal-footer .action-primary[disabled],.modal-popup .modal-footer .action-secondary.disabled,.modal-popup .modal-footer .action-secondary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.action-secondary.disabled,.page-actions .page-actions-buttons>button.action-secondary[disabled],.page-actions .page-actions-buttons>button.disabled,.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions .page-actions-buttons>button[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.action-secondary.disabled,.page-actions>button.action-secondary[disabled],.page-actions>button.disabled,.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],.page-actions>button[disabled],button.disabled,button.primary.disabled,button.primary[disabled],button.secondary.disabled,button.secondary[disabled],button.tertiary.disabled,button.tertiary[disabled],button[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-l,.modal-popup .modal-footer .action-primary,.modal-popup .modal-footer .action-secondary,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.action-secondary,.page-actions .page-actions-buttons>button.primary,.page-actions button,.page-actions>button.action-primary,.page-actions>button.action-secondary,.page-actions>button.primary{font-size:1.6rem;letter-spacing:.025em;padding-bottom:.6875em;padding-top:.6875em}.abs-action-delete,.extensions-information .list .extension-delete{display:inline-block;font-size:1.6rem;margin-left:1.2rem;padding-top:.7rem;text-decoration:none;vertical-align:middle}.abs-action-delete:after,.extensions-information .list .extension-delete:after{color:#666;content:'\e630'}.abs-action-delete:hover:after,.extensions-information .list .extension-delete:hover:after{color:#35302c}.abs-action-button-as-link,.action-advanced,.data-grid .action-delete{line-height:1.36;padding:0;color:#008bdb;text-decoration:none;background:0 0;border:0;display:inline;font-weight:400;border-radius:0}.abs-action-button-as-link:visited,.action-advanced:visited,.data-grid .action-delete:visited{color:#008bdb;text-decoration:none}.abs-action-button-as-link:hover,.action-advanced:hover,.data-grid .action-delete:hover{text-decoration:underline}.abs-action-button-as-link:active,.action-advanced:active,.data-grid .action-delete:active{color:#ff5501;text-decoration:underline}.abs-action-button-as-link:hover,.action-advanced:hover,.data-grid .action-delete:hover{color:#0fa7ff}.abs-action-button-as-link:active,.abs-action-button-as-link:focus,.abs-action-button-as-link:hover,.action-advanced:active,.action-advanced:focus,.action-advanced:hover,.data-grid .action-delete:active,.data-grid .action-delete:focus,.data-grid .action-delete:hover{background:0 0;border:0}.abs-action-button-as-link.disabled,.abs-action-button-as-link[disabled],.action-advanced.disabled,.action-advanced[disabled],.data-grid .action-delete.disabled,.data-grid .action-delete[disabled],fieldset[disabled] .abs-action-button-as-link,fieldset[disabled] .action-advanced,fieldset[disabled] .data-grid .action-delete{color:#008bdb;opacity:.5;cursor:default;pointer-events:none;text-decoration:underline}.abs-action-button-as-link:active,.abs-action-button-as-link:not(:focus),.action-advanced:active,.action-advanced:not(:focus),.data-grid .action-delete:active,.data-grid .action-delete:not(:focus){box-shadow:none}.abs-action-button-as-link:focus,.action-advanced:focus,.data-grid .action-delete:focus{color:#0fa7ff}.abs-action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.abs-action-default:active,.abs-action-default:focus,.abs-action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.abs-action-primary,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary,button.primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.abs-action-primary:active,.abs-action-primary:focus,.abs-action-primary:hover,.page-actions .page-actions-buttons>button.action-primary:active,.page-actions .page-actions-buttons>button.action-primary:focus,.page-actions .page-actions-buttons>button.action-primary:hover,.page-actions .page-actions-buttons>button.primary:active,.page-actions .page-actions-buttons>button.primary:focus,.page-actions .page-actions-buttons>button.primary:hover,.page-actions>button.action-primary:active,.page-actions>button.action-primary:focus,.page-actions>button.action-primary:hover,.page-actions>button.primary:active,.page-actions>button.primary:focus,.page-actions>button.primary:hover,button.primary:active,button.primary:focus,button.primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-primary.disabled,.abs-action-primary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],button.primary.disabled,button.primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-secondary,.modal-popup .modal-footer .action-primary,.page-actions .page-actions-buttons>button.action-secondary,.page-actions>button.action-secondary,button.secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.abs-action-secondary:active,.abs-action-secondary:focus,.abs-action-secondary:hover,.modal-popup .modal-footer .action-primary:active,.modal-popup .modal-footer .action-primary:focus,.modal-popup .modal-footer .action-primary:hover,.page-actions .page-actions-buttons>button.action-secondary:active,.page-actions .page-actions-buttons>button.action-secondary:focus,.page-actions .page-actions-buttons>button.action-secondary:hover,.page-actions>button.action-secondary:active,.page-actions>button.action-secondary:focus,.page-actions>button.action-secondary:hover,button.secondary:active,button.secondary:focus,button.secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-secondary:active,.modal-popup .modal-footer .action-primary:active,.page-actions .page-actions-buttons>button.action-secondary:active,.page-actions>button.action-secondary:active,button.secondary:active{background-color:#35302c}.abs-action-tertiary,.modal-popup .modal-footer .action-secondary,button.tertiary{background-color:transparent;border-color:transparent;text-shadow:none;color:#008bdb}.abs-action-tertiary:active,.abs-action-tertiary:focus,.abs-action-tertiary:hover,.modal-popup .modal-footer .action-secondary:active,.modal-popup .modal-footer .action-secondary:focus,.modal-popup .modal-footer .action-secondary:hover,button.tertiary:active,button.tertiary:focus,button.tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#0fa7ff;text-decoration:underline}.abs-action-quaternary,.page-actions .page-actions-buttons>button,.page-actions>button{background-color:transparent;border-color:transparent;text-shadow:none;color:#333}.abs-action-quaternary:active,.abs-action-quaternary:focus,.abs-action-quaternary:hover,.page-actions .page-actions-buttons>button:active,.page-actions .page-actions-buttons>button:focus,.page-actions .page-actions-buttons>button:hover,.page-actions>button:active,.page-actions>button:focus,.page-actions>button:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#1a1a1a}.abs-action-menu,.actions-split .abs-action-menu .action-submenu,.actions-split .abs-action-menu .action-submenu .action-submenu,.actions-split .action-menu,.actions-split .action-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.actions-split .dropdown-menu{text-align:left;background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu._active,.actions-split .abs-action-menu .action-submenu .action-submenu._active,.actions-split .abs-action-menu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .action-menu._active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .actions-split .dropdown-menu .action-submenu._active,.actions-split .dropdown-menu._active{display:block}.abs-action-menu>li,.actions-split .abs-action-menu .action-submenu .action-submenu>li,.actions-split .abs-action-menu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .action-menu>li,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .actions-split .dropdown-menu .action-submenu>li,.actions-split .dropdown-menu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu>li>a:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .abs-action-menu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .action-menu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu>li>a:hover{text-decoration:none}.abs-action-menu>li._visible,.abs-action-menu>li:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu .action-submenu>li:hover,.actions-split .abs-action-menu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .action-menu>li._visible,.actions-split .action-menu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu>li:hover,.actions-split .dropdown-menu>li._visible,.actions-split .dropdown-menu>li:hover{background-color:#e3e3e3}.abs-action-menu>li:active,.actions-split .abs-action-menu .action-submenu .action-submenu>li:active,.actions-split .abs-action-menu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .action-menu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu>li:active,.actions-split .dropdown-menu>li:active{background-color:#cacaca}.abs-action-menu>li._parent,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent,.actions-split .abs-action-menu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .action-menu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent,.actions-split .dropdown-menu>li._parent{-webkit-flex-direction:row;display:flex;-ms-flex-direction:row;flex-direction:row}.abs-action-menu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-menu-item,.abs-action-menu .item,.actions-split .abs-action-menu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .item,.actions-split .abs-action-menu .action-submenu .item,.actions-split .action-menu .action-menu-item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .item,.actions-split .action-menu .item,.actions-split .actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .actions-split .dropdown-menu .action-submenu .item,.actions-split .dropdown-menu .action-menu-item,.actions-split .dropdown-menu .item{cursor:pointer;display:block;padding:.6875em 1em}.abs-action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu a.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .abs-action-menu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .action-menu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu a.action-menu-item{color:#333}.abs-action-menu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.abs-action-wrap-triangle{position:relative}.abs-action-wrap-triangle .action-default{width:100%}.abs-action-wrap-triangle .action-default:after,.abs-action-wrap-triangle .action-default:before{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.abs-action-wrap-triangle .action-default:active,.abs-action-wrap-triangle .action-default:focus,.abs-action-wrap-triangle .action-default:hover{box-shadow:none}._keyfocus .abs-action-wrap-triangle .action-default:focus{box-shadow:0 0 0 1px #007bdb}.ie10 .abs-action-wrap-triangle .action-default.disabled,.ie10 .abs-action-wrap-triangle .action-default[disabled],.ie9 .abs-action-wrap-triangle .action-default.disabled,.ie9 .abs-action-wrap-triangle .action-default[disabled]{background-color:#fcfcfc;opacity:1;text-shadow:none}.abs-action-wrap-triangle-right{display:inline-block;padding-right:1.6rem;position:relative}.abs-action-wrap-triangle-right .action-default:after,.abs-action-wrap-triangle-right .action-default:before{border-color:transparent transparent transparent #e3e3e3;border-width:1.7rem 0 1.6rem 1.7rem;left:100%;margin-left:-1.7rem}.abs-action-wrap-triangle-right .action-default:before{border-left-color:#949494;right:-1px}.abs-action-wrap-triangle-right .action-default:active:after,.abs-action-wrap-triangle-right .action-default:focus:after,.abs-action-wrap-triangle-right .action-default:hover:after{border-left-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-right .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-right .action-default[disabled]:after{border-color:transparent transparent transparent #fcfcfc}.abs-action-wrap-triangle-right .action-primary:after{border-color:transparent transparent transparent #eb5202}.abs-action-wrap-triangle-right .action-primary:active:after,.abs-action-wrap-triangle-right .action-primary:focus:after,.abs-action-wrap-triangle-right .action-primary:hover:after{border-left-color:#ba4000}.abs-action-wrap-triangle-left{display:inline-block;padding-left:1.6rem}.abs-action-wrap-triangle-left .action-default{text-indent:-.85rem}.abs-action-wrap-triangle-left .action-default:after,.abs-action-wrap-triangle-left .action-default:before{border-color:transparent #e3e3e3 transparent transparent;border-width:1.7rem 1.7rem 1.6rem 0;margin-right:-1.7rem;right:100%}.abs-action-wrap-triangle-left .action-default:before{border-right-color:#949494;left:-1px}.abs-action-wrap-triangle-left .action-default:active:after,.abs-action-wrap-triangle-left .action-default:focus:after,.abs-action-wrap-triangle-left .action-default:hover:after{border-right-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-left .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-left .action-default[disabled]:after{border-color:transparent #fcfcfc transparent transparent}.abs-action-wrap-triangle-left .action-primary:after{border-color:transparent #eb5202 transparent transparent}.abs-action-wrap-triangle-left .action-primary:active:after,.abs-action-wrap-triangle-left .action-primary:focus:after,.abs-action-wrap-triangle-left .action-primary:hover:after{border-right-color:#ba4000}.action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.action-default:active,.action-default:focus,.action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.action-primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.action-primary:active,.action-primary:focus,.action-primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-primary.disabled,.action-primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.action-secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.action-secondary:active,.action-secondary:focus,.action-secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-secondary:active{background-color:#35302c}.action-quaternary,.action-tertiary{background-color:transparent;border-color:transparent;text-shadow:none}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover,.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none}.action-tertiary{color:#008bdb}.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{color:#0fa7ff;text-decoration:underline}.action-quaternary{color:#333}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover{color:#1a1a1a}.action-close>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-close:active{-ms-transform:scale(0.9);transform:scale(0.9)}.action-close:before{content:'\e62f';transition:color .1s linear}.action-close:hover{cursor:pointer;text-decoration:none}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu .action-submenu .action-submenu._active,.abs-action-menu .action-submenu._active,.action-menu .action-submenu._active,.action-menu._active,.actions-split .action-menu .action-submenu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .dropdown-menu .action-submenu._active{display:block}.abs-action-menu .action-submenu .action-submenu>li,.abs-action-menu .action-submenu>li,.action-menu .action-submenu>li,.action-menu>li,.actions-split .action-menu .action-submenu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .dropdown-menu .action-submenu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu .action-submenu .action-submenu>li>a:hover,.abs-action-menu .action-submenu>li>a:hover,.action-menu .action-submenu>li>a:hover,.action-menu>li>a:hover,.actions-split .action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu>li>a:hover{text-decoration:none}.abs-action-menu .action-submenu .action-submenu>li._visible,.abs-action-menu .action-submenu .action-submenu>li:hover,.abs-action-menu .action-submenu>li._visible,.abs-action-menu .action-submenu>li:hover,.action-menu .action-submenu>li._visible,.action-menu .action-submenu>li:hover,.action-menu>li._visible,.action-menu>li:hover,.actions-split .action-menu .action-submenu .action-submenu>li._visible,.actions-split .action-menu .action-submenu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu>li:hover{background-color:#e3e3e3}.abs-action-menu .action-submenu .action-submenu>li:active,.abs-action-menu .action-submenu>li:active,.action-menu .action-submenu>li:active,.action-menu>li:active,.actions-split .action-menu .action-submenu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu>li:active{background-color:#cacaca}.abs-action-menu .action-submenu .action-submenu>li._parent,.abs-action-menu .action-submenu>li._parent,.action-menu .action-submenu>li._parent,.action-menu>li._parent,.actions-split .action-menu .action-submenu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu>li._parent{-webkit-flex-direction:row;display:flex;-ms-flex-direction:row;flex-direction:row}.abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.abs-action-menu .action-submenu>li._parent>.action-menu-item,.action-menu .action-submenu>li._parent>.action-menu-item,.action-menu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .item,.abs-action-menu .action-submenu .item,.action-menu .action-menu-item,.action-menu .action-submenu .action-menu-item,.action-menu .action-submenu .item,.action-menu .item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .item,.actions-split .action-menu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .item{cursor:pointer;display:block;padding:.6875em 1em}.abs-action-menu .action-submenu .action-submenu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu .action-submenu,.ie9 .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .action-menu .action-submenu,.ie9 .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu .action-submenu .action-submenu a.action-menu-item,.abs-action-menu .action-submenu a.action-menu-item,.action-menu .action-submenu a.action-menu-item,.action-menu a.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu a.action-menu-item{color:#333}.abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.abs-action-menu .action-submenu a.action-menu-item:focus,.action-menu .action-submenu a.action-menu-item:focus,.action-menu a.action-menu-item:focus,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.messages .message:last-child{margin:0 0 2rem}.message{background:#fffbbb;border:none;border-radius:0;color:#333;font-size:1.4rem;margin:0 0 1px;padding:1.8rem 4rem 1.8rem 5.5rem;position:relative;text-shadow:none}.message:before{background:0 0;border:0;color:#007bdb;content:'\e61a';font-family:Icons;font-size:1.9rem;font-style:normal;font-weight:400;height:auto;left:1.9rem;line-height:inherit;margin-top:-1.3rem;position:absolute;speak:none;text-shadow:none;top:50%;width:auto}.message-notice:before{color:#007bdb;content:'\e61a'}.message-warning:before{color:#eb5202;content:'\e623'}.message-error{background:#fcc}.message-error:before{color:#e22626;content:'\e632';font-size:1.5rem;left:2.2rem;margin-top:-1rem}.message-success:before{color:#79a22e;content:'\e62d'}.message-spinner:before{display:none}.message-spinner .spinner{font-size:2.5rem;left:1.5rem;position:absolute;top:1.5rem}.message-in-rating-edit{margin-left:1.8rem;margin-right:1.8rem}.modal-popup .action-close,.modal-slide .action-close{color:#736963;position:absolute;right:0;top:0;z-index:1}.modal-popup .action-close:active,.modal-slide .action-close:active{-ms-transform:none;transform:none}.modal-popup .action-close:active:before,.modal-slide .action-close:active:before{font-size:1.8rem}.modal-popup .action-close:hover:before,.modal-slide .action-close:hover:before{color:#58504b}.modal-popup .action-close:before,.modal-slide .action-close:before{font-size:2rem}.modal-popup .action-close:focus,.modal-slide .action-close:focus{background-color:transparent}.modal-popup.prompt .prompt-message{padding:2rem 0}.modal-popup.prompt .prompt-message input{width:100%}.modal-popup.confirm .modal-inner-wrap .message,.modal-popup.prompt .modal-inner-wrap .message{background:#fff}.modal-popup.modal-system-messages .modal-inner-wrap{background:#fffbbb}.modal-popup._image-box .modal-inner-wrap{margin:5rem auto;max-width:78rem;position:static}.modal-popup._image-box .thumbnail-preview{padding-bottom:3rem;text-align:center}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image-block{border:1px solid #ccc;margin:0 auto 2rem;max-width:58rem;padding:2rem}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image{max-height:54rem}.modal-popup .modal-title{font-size:2.4rem;margin-right:6.4rem}.modal-popup .modal-footer{padding-top:2.6rem;text-align:right}.modal-popup .action-close{padding:3rem}.modal-popup .action-close:active,.modal-popup .action-close:focus{background:0 0;padding-right:3.1rem;padding-top:3.1rem}.modal-slide .modal-content-new-attribute{-webkit-overflow-scrolling:touch;overflow:auto;padding-bottom:0}.modal-slide .modal-content-new-attribute iframe{margin-bottom:-2.5rem}.modal-slide .modal-title{font-size:2.1rem;margin-right:5.7rem}.modal-slide .action-close{padding:2.1rem 2.6rem}.modal-slide .action-close:active{padding-right:2.7rem;padding-top:2.2rem}.modal-slide .page-main-actions{margin-bottom:.6rem;margin-top:2.1rem}.modal-slide .magento-message{padding:0 3rem 3rem;position:relative}.modal-slide .magento-message .insert-title-inner,.modal-slide .main-col .insert-title-inner{border-bottom:1px solid #adadad;margin:0 0 2rem;padding-bottom:.5rem}.modal-slide .magento-message .insert-actions,.modal-slide .main-col .insert-actions{float:right}.modal-slide .magento-message .title,.modal-slide .main-col .title{font-size:1.6rem;padding-top:.5rem}.modal-slide .main-col,.modal-slide .side-col{float:left;padding-bottom:0}.modal-slide .main-col:after,.modal-slide .side-col:after{display:none}.modal-slide .side-col{width:20%}.modal-slide .main-col{padding-right:0;width:80%}.modal-slide .content-footer .form-buttons{float:right}.modal-title{font-weight:400;margin-bottom:0;min-height:1em}.modal-title span{font-size:1.4rem;font-style:italic;margin-left:1rem}.spinner{display:inline-block;font-size:4rem;height:1em;margin-right:1.5rem;position:relative;width:1em}.spinner>span:nth-child(1){animation-delay:.27s;-ms-transform:rotate(-315deg);transform:rotate(-315deg)}.spinner>span:nth-child(2){animation-delay:.36s;-ms-transform:rotate(-270deg);transform:rotate(-270deg)}.spinner>span:nth-child(3){animation-delay:.45s;-ms-transform:rotate(-225deg);transform:rotate(-225deg)}.spinner>span:nth-child(4){animation-delay:.54s;-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.spinner>span:nth-child(5){animation-delay:.63s;-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.spinner>span:nth-child(6){animation-delay:.72s;-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.spinner>span:nth-child(7){animation-delay:.81s;-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.spinner>span:nth-child(8){animation-delay:.9;-ms-transform:rotate(0deg);transform:rotate(0deg)}@keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}.spinner>span{-ms-transform:scale(0.4);transform:scale(0.4);animation-name:fade;animation-duration:.72s;animation-iteration-count:infinite;animation-direction:linear;background-color:#fff;border-radius:6px;clip:rect(0 .28571429em .1em 0);height:.1em;margin-top:.5em;position:absolute;width:1em}.ie9 .spinner{background:url(../images/ajax-loader.gif) center no-repeat}.ie9 .spinner>span{display:none}.popup-loading{background:rgba(255,255,255,.8);border-color:#ef672f;color:#ef672f;font-size:14px;font-weight:700;left:50%;margin-left:-100px;padding:100px 0 10px;position:fixed;text-align:center;top:40%;width:200px;z-index:1003}.popup-loading:after{background-image:url(../images/loader-1.gif);content:'';height:64px;left:50%;margin:-32px 0 0 -32px;position:absolute;top:40%;width:64px;z-index:2}.loading-mask,.loading-old{background:rgba(255,255,255,.4);bottom:0;left:0;position:fixed;right:0;top:0;z-index:2003}.loading-mask img,.loading-old img{display:none}.loading-mask p,.loading-old p{margin-top:118px}.loading-mask .loader,.loading-old .loader{background:url(../images/loader-1.gif) 50% 30% no-repeat #f7f3eb;border-radius:5px;bottom:0;color:#575757;font-size:14px;font-weight:700;height:160px;left:0;margin:auto;opacity:.95;position:absolute;right:0;text-align:center;top:0;width:160px}.admin-user{float:right;line-height:1.36;margin-left:.3rem;z-index:490}.admin-user._active .admin__action-dropdown,.admin-user.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin-user .admin__action-dropdown{height:3.3rem;padding:.7rem 2.8rem .4rem 4rem}.admin-user .admin__action-dropdown._active:after,.admin-user .admin__action-dropdown.active:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:after{border-color:#777 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.3rem;top:50%;transition:all .2s linear;width:0}._active .admin-user .admin__action-dropdown:after,.active .admin-user .admin__action-dropdown:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin-user .admin__action-dropdown:before{color:#777;content:'\e600';font-size:2rem;left:1.1rem;margin-top:-1.1rem;position:absolute;top:50%}.admin-user .admin__action-dropdown:hover:before{color:#333}.admin-user .admin__action-dropdown-menu{min-width:20rem;padding-left:1rem;padding-right:1rem}.admin-user .admin__action-dropdown-menu>li>a{padding-left:.5em;padding-right:1.8rem;transition:background-color .1s linear;white-space:nowrap}.admin-user .admin__action-dropdown-menu>li>a:hover{background-color:#e0f6fe;color:#333}.admin-user .admin__action-dropdown-menu>li>a:active{background-color:#c7effd;bottom:-1px;position:relative}.admin-user .admin__action-dropdown-menu .admin-user-name{text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:20rem;overflow:hidden;vertical-align:top}.admin-user-account-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:11.2rem}.search-global{float:right;margin-right:-.3rem;position:relative;z-index:480}.search-global-field{min-width:5rem}.search-global-field._active .search-global-input{background-color:#fff;border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);padding-right:4rem;width:25rem}.search-global-field._active .search-global-action{display:block;height:3.3rem;position:absolute;right:0;text-indent:-100%;top:0;width:5rem;z-index:3}.search-global-field .autocomplete-results{height:3.3rem;position:absolute;right:0;top:0;width:25rem}.search-global-field .search-global-menu{border:1px solid #007bdb;border-top-color:transparent;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin-top:-2px;padding:0;position:absolute;right:0;top:100%;z-index:2}.search-global-field .search-global-menu:after{background-color:#fff;content:'';height:5px;left:0;position:absolute;right:0;top:-5px}.search-global-field .search-global-menu>li{background-color:#fff;border-top:1px solid #ddd;display:block;font-size:1.2rem;padding:.75rem 1.4rem .55rem}.search-global-field .search-global-menu>li._active{background-color:#e0f6fe}.search-global-field .search-global-menu .title{display:block;font-size:1.4rem}.search-global-field .search-global-menu .type{color:#1a1a1a;display:block}.search-global-label{cursor:pointer;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;z-index:2}.search-global-label:active{-ms-transform:scale(0.9);transform:scale(0.9)}.search-global-label:hover:before{color:#000}.search-global-label:before{color:#777;content:'\e60c';font-size:2rem}.search-global-input{background-color:transparent;border:1px solid transparent;font-size:1.4rem;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;transition:all .1s linear,width .3s linear;width:5rem;z-index:1}.search-global-action{display:none}.notifications-wrapper{float:right;line-height:1;position:relative}.notifications-wrapper.active{z-index:500}.notifications-wrapper.active .notifications-action{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.notifications-wrapper.active .notifications-action:after{background-color:#fff;border:none;content:'';display:block;height:6px;left:-6px;margin-top:0;position:absolute;right:0;top:100%;width:auto}.notifications-wrapper .admin__action-dropdown-menu{padding:1rem 0 0;width:32rem}.notifications-action{color:#777;height:3.3rem;padding:.75rem 2rem .65rem}.notifications-action:after{display:none}.notifications-action:before{content:'\e607';font-size:1.9rem;margin-right:0}.notifications-action:active:before{position:relative;top:1px}.notifications-action .notifications-counter{background-color:#e22626;border-radius:1em;color:#fff;display:inline-block;font-size:1.1rem;font-weight:700;left:50%;margin-left:.3em;margin-top:-1.1em;padding:.3em .5em;position:absolute;top:50%}.notifications-entry{line-height:1.36;padding:.6rem 2rem .8rem;position:relative;transition:background-color .1s linear}.notifications-entry:hover{background-color:#e0f6fe}.notifications-entry.notifications-entry-last{margin:0 2rem;padding:.3rem 0 1.3rem;text-align:center}.notifications-entry.notifications-entry-last:hover{background-color:transparent}.notifications-entry+.notifications-entry-last{border-top:1px solid #ddd;padding-bottom:.6rem}.notifications-entry ._cutted{cursor:pointer}.notifications-entry ._cutted .notifications-entry-description-start:after{content:'...'}.notifications-entry-title{color:#ef672f;display:block;font-size:1.1rem;font-weight:700;margin-bottom:.7rem;margin-right:1em}.notifications-entry-description{color:#333;font-size:1.1rem;margin-bottom:.8rem}.notifications-entry-description-end{display:none}.notifications-entry-description-end._show{display:inline}.notifications-entry-time{color:#777;font-size:1.1rem}.notifications-close{line-height:1;padding:1rem;position:absolute;right:0;top:.6rem}.notifications-close:before{color:#ccc;content:'\e620';transition:color .1s linear}.notifications-close:hover:before{color:#b3b3b3}.notifications-close:active{-ms-transform:scale(0.95);transform:scale(0.95)}.page-header-actions{padding-top:1.1rem}.page-header-hgroup{padding-right:1.5rem}.page-title{color:#333;font-size:2.8rem}.page-header{padding:1.5rem 3rem}.menu-wrapper{display:inline-block;position:relative;width:8.8rem;z-index:700}.menu-wrapper:before{background-color:#373330;bottom:0;content:'';left:0;position:fixed;top:0;width:8.8rem;z-index:699}.menu-wrapper._fixed{left:0;position:fixed;top:0}.menu-wrapper._fixed~.page-wrapper{margin-left:8.8rem}.menu-wrapper .logo{display:block;height:8.8rem;padding:2.4rem 0 2.2rem;position:relative;text-align:center;z-index:700}._keyfocus .menu-wrapper .logo:focus{background-color:#4a4542;box-shadow:none}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a{background-color:#373330}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a:after{display:none}.menu-wrapper .logo:hover .logo-img{-webkit-filter:brightness(1.1);filter:brightness(1.1)}.menu-wrapper .logo:active .logo-img{-ms-transform:scale(0.95);transform:scale(0.95)}.menu-wrapper .logo .logo-img{height:4.2rem;transition:-webkit-filter .2s linear,filter .2s linear,transform .1s linear;width:3.5rem}.abs-menu-separator,.admin__menu .item-partners>a:after,.admin__menu .level-0:first-child>a:after{background-color:#736963;content:'';display:block;height:1px;left:0;margin-left:16%;position:absolute;top:0;width:68%}.admin__menu li{display:block}.admin__menu .level-0:first-child>a{position:relative}.admin__menu .level-0._active>a,.admin__menu .level-0:hover>a{color:#f7f3eb}.admin__menu .level-0._active>a{background-color:#524d49}.admin__menu .level-0:hover>a{background-color:#4a4542}.admin__menu .level-0>a{color:#aaa6a0;display:block;font-size:1rem;letter-spacing:.025em;min-height:6.2rem;padding:1.2rem .5rem .5rem;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;transition:background-color .1s linear;word-wrap:break-word;z-index:700}.admin__menu .level-0>a:focus{box-shadow:none}.admin__menu .level-0>a:before{content:'\e63a';display:block;font-size:2.2rem;height:2.2rem}.admin__menu .level-0>.submenu{background-color:#4a4542;box-shadow:0 0 3px #000;left:100%;min-height:calc(8.8rem + 2rem + 100%);padding:2rem 0 0;position:absolute;top:0;-ms-transform:translateX(-100%);transform:translateX(-100%);transition-duration:.3s;transition-property:transform,visibility;transition-timing-function:ease-in-out;visibility:hidden;z-index:697}.ie10 .admin__menu .level-0>.submenu,.ie11 .admin__menu .level-0>.submenu{height:100%}.admin__menu .level-0._show>.submenu{-ms-transform:translateX(0);transform:translateX(0);visibility:visible;z-index:698}.admin__menu .level-1{margin-left:1.5rem;margin-right:1.5rem}.admin__menu [class*=level-]:not(.level-0) a{display:block;padding:1.25rem 1.5rem}.admin__menu [class*=level-]:not(.level-0) a:hover{background-color:#403934}.admin__menu [class*=level-]:not(.level-0) a:active{background-color:#322c29;padding-bottom:1.15rem;padding-top:1.35rem}.admin__menu .submenu li{min-width:23.8rem}.admin__menu .submenu a{color:#fcfcfc;transition:background-color .1s linear}.admin__menu .submenu a:focus,.admin__menu .submenu a:hover{box-shadow:none;text-decoration:none}._keyfocus .admin__menu .submenu a:focus{background-color:#403934}._keyfocus .admin__menu .submenu a:active{background-color:#322c29}.admin__menu .submenu .parent{margin-bottom:4.5rem}.admin__menu .submenu .parent .submenu-group-title{color:#a79d95;display:block;font-size:1.6rem;font-weight:600;margin-bottom:.7rem;padding:1.25rem 1.5rem;pointer-events:none}.admin__menu .submenu .column{display:table-cell}.admin__menu .submenu-title{color:#fff;display:block;font-size:2.2rem;font-weight:600;margin-bottom:4.2rem;margin-left:3rem;margin-right:5.8rem}.admin__menu .submenu-sub-title{color:#fff;display:block;font-size:1.2rem;margin:-3.8rem 5.8rem 3.8rem 3rem}.admin__menu .action-close{padding:2.4rem 2.8rem;position:absolute;right:0;top:0}.admin__menu .action-close:before{color:#a79d95;font-size:1.7rem}.admin__menu .action-close:hover:before{color:#fff}.admin__menu .item-dashboard>a:before{content:'\e604';font-size:1.8rem;padding-top:.4rem}.admin__menu .item-sales>a:before{content:'\e60b'}.admin__menu .item-catalog>a:before{content:'\e608'}.admin__menu .item-customer>a:before{content:'\e603';font-size:2.6rem;position:relative;top:-.4rem}.admin__menu .item-marketing>a:before{content:'\e609';font-size:2rem;padding-top:.2rem}.admin__menu .item-content>a:before{content:'\e602';font-size:2.4rem;position:relative;top:-.2rem}.admin__menu .item-report>a:before{content:'\e60a'}.admin__menu .item-stores>a:before{content:'\e60d';font-size:1.9rem;padding-top:.3rem}.admin__menu .item-system>a:before{content:'\e610'}.admin__menu .item-partners._active>a:after,.admin__menu .item-system._current+.item-partners>a:after{display:none}.admin__menu .item-partners>a{padding-bottom:1rem}.admin__menu .item-partners>a:before{content:'\e612'}.admin__menu .level-0>.submenu>ul>.level-1:only-of-type>.submenu-group-title,.admin__menu .submenu .column:only-of-type .submenu-group-title{display:none}.admin__menu-overlay{bottom:0;left:0;position:fixed;right:0;top:0;z-index:697}.store-switcher{color:#333;float:left;font-size:1.3rem;margin-top:.7rem}.store-switcher .admin__action-dropdown{background-color:#f8f8f8;margin-left:.5em}.store-switcher .dropdown{display:inline-block;position:relative}.store-switcher .dropdown:after,.store-switcher .dropdown:before{content:'';display:table}.store-switcher .dropdown:after{clear:both}.store-switcher .dropdown .action.toggle{cursor:pointer;display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e607';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle:active:after,.store-switcher .dropdown .action.toggle:hover:after{color:#333}.store-switcher .dropdown .action.toggle.active{display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle.active:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e618';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle.active:active:after,.store-switcher .dropdown .action.toggle.active:hover:after{color:#333}.store-switcher .dropdown .dropdown-menu{margin:4px 0 0;padding:0;list-style:none;background:#fff;border:1px solid #aaa6a0;min-width:19.5rem;z-index:100;box-sizing:border-box;display:none;position:absolute;top:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.store-switcher .dropdown .dropdown-menu li{margin:0;padding:0}.store-switcher .dropdown .dropdown-menu li:hover{background:0 0;cursor:pointer}.store-switcher .dropdown.active{overflow:visible}.store-switcher .dropdown.active .dropdown-menu{display:block}.store-switcher .dropdown-menu{left:0;margin-top:.5em;max-height:250px;overflow-y:auto;padding-top:.25em}.store-switcher .dropdown-menu li{border:0;cursor:default}.store-switcher .dropdown-menu li:hover{cursor:default}.store-switcher .dropdown-menu li a,.store-switcher .dropdown-menu li span{color:#333;display:block;padding:.5rem 1.3rem}.store-switcher .dropdown-menu li a{text-decoration:none}.store-switcher .dropdown-menu li a:hover{background:#e9e9e9}.store-switcher .dropdown-menu li span{color:#adadad;cursor:default}.store-switcher .dropdown-menu li.current span{background:#eee;color:#333}.store-switcher .dropdown-menu .store-switcher-store a,.store-switcher .dropdown-menu .store-switcher-store span{padding-left:2.6rem}.store-switcher .dropdown-menu .store-switcher-store-view a,.store-switcher .dropdown-menu .store-switcher-store-view span{padding-left:3.9rem}.store-switcher .dropdown-menu .dropdown-toolbar{border-top:1px solid #ebebeb;margin-top:1rem}.store-switcher .dropdown-menu .dropdown-toolbar a:before{content:'\e610';margin-right:.25em;position:relative;top:1px}.store-switcher-label{font-weight:700}.store-switcher-alt{display:inline-block;position:relative}.store-switcher-alt.active .dropdown-menu{display:block}.store-switcher-alt .dropdown-menu{margin-top:2px;white-space:nowrap}.store-switcher-alt .dropdown-menu ul{list-style:none;margin:0;padding:0}.store-switcher-alt strong{color:#a79d95;display:block;font-size:14px;font-weight:500;line-height:1.333;padding:5px 10px}.store-switcher-alt .store-selected{color:#676056;cursor:pointer;font-size:12px;font-weight:400;line-height:1.333}.store-switcher-alt .store-selected:after{-webkit-font-smoothing:antialiased;color:#afadac;content:'\e02c';font-style:normal;font-weight:400;margin:0 0 0 3px;speak:none;vertical-align:text-top}.store-switcher-alt .store-switcher-store,.store-switcher-alt .store-switcher-website{padding:0}.store-switcher-alt .store-switcher-store:hover,.store-switcher-alt .store-switcher-website:hover{background:0 0}.store-switcher-alt .manage-stores,.store-switcher-alt .store-switcher-all,.store-switcher-alt .store-switcher-store-view{padding:0}.store-switcher-alt .manage-stores>a,.store-switcher-alt .store-switcher-all>a{color:#676056;display:block;font-size:12px;padding:8px 15px;text-decoration:none}.store-switcher-website{margin:5px 0 0}.store-switcher-website>strong{padding-left:13px}.store-switcher-store{margin:1px 0 0}.store-switcher-store>strong{padding-left:20px}.store-switcher-store>ul{margin-top:1px}.store-switcher-store-view:first-child{border-top:1px solid #e5e5e5}.store-switcher-store-view>a{color:#333;display:block;font-size:13px;padding:5px 15px 5px 24px;text-decoration:none}.store-view:not(.store-switcher){float:left}.store-view .store-switcher-label{display:inline-block;margin-top:1rem}.tooltip{margin-left:.5em}.tooltip .help a,.tooltip .help span{cursor:pointer;display:inline-block;height:22px;position:relative;vertical-align:middle;width:22px;z-index:2}.tooltip .help a:before,.tooltip .help span:before{color:#333;content:'\e633';font-size:1.7rem}.tooltip .help a:hover{text-decoration:none}.tooltip .tooltip-content{background:#000;border-radius:3px;color:#fff;display:none;margin-left:-19px;margin-top:10px;max-width:200px;padding:4px 8px;position:absolute;text-shadow:none;z-index:20}.tooltip .tooltip-content:before{border-bottom:5px solid #000;border-left:5px solid transparent;border-right:5px solid transparent;content:'';height:0;left:20px;opacity:.8;position:absolute;top:-5px;width:0}.tooltip .tooltip-content.loading{position:absolute}.tooltip .tooltip-content.loading:before{border-bottom-color:rgba(0,0,0,.3)}.tooltip:hover>.tooltip-content{display:block}.page-actions._fixed,.page-main-actions:not(._hidden){background:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;padding:1.5rem}.page-main-actions{margin:0 0 3rem}.page-main-actions._hidden .store-switcher{display:none}.page-main-actions._hidden .page-actions-placeholder{min-height:50px}.page-actions{float:right}.page-main-actions .page-actions._fixed{left:8.8rem;position:fixed;right:0;top:0;z-index:501}.page-main-actions .page-actions._fixed .page-actions-inner:before{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333;content:attr(data-title);float:left;font-size:2.8rem;margin-top:.3rem;max-width:50%}.page-actions .page-actions-buttons>button,.page-actions>button{float:right;margin-left:1.3rem}.page-actions .page-actions-buttons>button.action-back,.page-actions .page-actions-buttons>button.back,.page-actions>button.action-back,.page-actions>button.back{float:left;-ms-flex-order:-1;order:-1}.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before{content:'\e626';margin-right:.5em;position:relative;top:1px}.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary{-ms-flex-order:2;order:2}.page-actions .page-actions-buttons>button.save:not(.primary),.page-actions>button.save:not(.primary){-ms-flex-order:1;order:1}.page-actions .page-actions-buttons>button.delete,.page-actions>button.delete{-ms-flex-order:-1;order:-1}.page-actions .actions-split{float:right;margin-left:1.3rem;-ms-flex-order:2;order:2}.page-actions .actions-split .dropdown-menu .item{display:block}.page-actions-buttons{float:right;-ms-flex-pack:end;justify-content:flex-end;display:-ms-flexbox;display:flex}.customer-index-edit .page-actions-buttons{background-color:transparent}.admin__page-nav{background:#f1f1f1;border:1px solid #e3e3e3}.admin__page-nav._collapsed:first-child{border-bottom:none}.admin__page-nav._collapsed._show{border-bottom:1px solid #e3e3e3}.admin__page-nav._collapsed._show ._collapsible{background:#f1f1f1}.admin__page-nav._collapsed._show ._collapsible:after{content:'\e62b'}.admin__page-nav._collapsed._show ._collapsible+.admin__page-nav-items{display:block}.admin__page-nav._collapsed._hide .admin__page-nav-title-messages,.admin__page-nav._collapsed._hide .admin__page-nav-title-messages ._active{display:inline-block}.admin__page-nav+._collapsed{border-bottom:none;border-top:none}.admin__page-nav-title{border-bottom:1px solid #e3e3e3;color:#303030;display:block;font-size:1.4rem;line-height:1.2;margin:0 0 -1px;padding:1.8rem 1.5rem;position:relative;text-transform:uppercase}.admin__page-nav-title._collapsible{background:#fff;cursor:pointer;margin:0;padding-right:3.5rem;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-title._collapsible+.admin__page-nav-items{display:none;margin-top:-1px}.admin__page-nav-title._collapsible:after{content:'\e628';font-size:1.3rem;font-weight:700;position:absolute;right:1.8rem;top:2rem}.admin__page-nav-title._collapsible:hover{background:#f1f1f1}.admin__page-nav-title._collapsible:last-child{margin:0 0 -1px}.admin__page-nav-title strong{font-weight:700}.admin__page-nav-title .admin__page-nav-title-messages{display:none}.admin__page-nav-items{list-style-type:none;margin:0;padding:1rem 0 1.3rem}.admin__page-nav-item{border-left:3px solid transparent;margin-left:.7rem;padding:0;position:relative;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-item:hover{border-color:#e4e4e4}.admin__page-nav-item:hover .admin__page-nav-link{background:#e4e4e4;color:#303030;text-decoration:none}.admin__page-nav-item._active,.admin__page-nav-item.ui-state-active{border-color:#eb5202}.admin__page-nav-item._active .admin__page-nav-link,.admin__page-nav-item.ui-state-active .admin__page-nav-link{background:#fff;border-color:#e3e3e3;border-right:1px solid #fff;color:#303030;margin-right:-1px;font-weight:600}.admin__page-nav-item._loading:before,.admin__page-nav-item.ui-tabs-loading:before{display:none}.admin__page-nav-item._loading .admin__page-nav-item-message-loader,.admin__page-nav-item.ui-tabs-loading .admin__page-nav-item-message-loader{display:inline-block}.admin__page-nav-link{border:1px solid transparent;border-width:1px 0;color:#303030;display:block;font-weight:500;line-height:1.2;margin:0 0 -1px;padding:2rem 4rem 2rem 1rem;transition:border-color .1s ease-out,background-color .1s ease-out;word-wrap:break-word}.admin__page-nav-item-messages{display:inline-block}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:3.7rem;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-size:1.4rem;font-weight:400;left:-1rem;line-height:1.36;padding:1.5rem;position:absolute;text-transform:none;width:27rem;word-break:normal;z-index:2}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after,.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border:15px solid transparent;height:0;width:0;border-top-color:#f1f1f1;content:'';display:block;left:2rem;position:absolute;top:100%;z-index:3}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after{border-top-color:#f1f1f1;margin-top:-1px;z-index:4}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border-top-color:#bfbfbf;margin-top:1px}.admin__page-nav-item-message-loader{display:none;margin-top:-1rem;position:absolute;right:0;top:50%}.admin__page-nav-item-message-loader .spinner{font-size:2rem;margin-right:1.5rem}._loading>.admin__page-nav-item-messages .admin__page-nav-item-message-loader{display:inline-block}.admin__page-nav-item-message{position:relative}.admin__page-nav-item-message:hover{z-index:500}.admin__page-nav-item-message:hover .admin__page-nav-item-message-tooltip{display:block}.admin__page-nav-item-message._changed,.admin__page-nav-item-message._error{display:none}.admin__page-nav-item-message .admin__page-nav-item-message-icon{display:inline-block;font-size:1.4rem;padding-left:.8em;vertical-align:baseline}.admin__page-nav-item-message .admin__page-nav-item-message-icon:after{color:#666;content:'\e631'}._changed:not(._error)>.admin__page-nav-item-messages ._changed{display:inline-block}._error .admin__page-nav-item-message-icon:after{color:#eb5202;content:'\e623'}._error>.admin__page-nav-item-messages ._error{display:inline-block}._error>.admin__page-nav-item-messages ._error .spinner{font-size:2rem;margin-right:1.5rem}._error .admin__page-nav-item-message-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:3.7rem;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;left:-1rem;line-height:1.36;padding:2rem;position:absolute;text-transform:none;width:27rem;word-break:normal;z-index:2}._error .admin__page-nav-item-message-tooltip:after,._error .admin__page-nav-item-message-tooltip:before{border:15px solid transparent;height:0;width:0;border-top-color:#f1f1f1;content:'';display:block;left:2rem;position:absolute;top:100%;z-index:3}._error .admin__page-nav-item-message-tooltip:after{border-top-color:#f1f1f1;margin-top:-1px;z-index:4}._error .admin__page-nav-item-message-tooltip:before{border-top-color:#bfbfbf}.admin__data-grid-wrap-static .data-grid{box-sizing:border-box}.admin__data-grid-wrap-static .data-grid thead{color:#333}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td{background-color:#f5f5f5}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td._dragging{background-color:rgba(245,245,245,.95)}.admin__data-grid-wrap-static .data-grid ul{margin-left:1rem;padding-left:1rem}.admin__data-grid-wrap-static .admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:0;position:absolute;right:0;top:0;z-index:399}.admin__data-grid-wrap-static .admin__data-grid-loading-mask .grid-loader{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-filters-actions-wrap{float:right}.data-grid-search-control-wrap{float:left;max-width:45.5rem;position:relative;width:35%}.data-grid-search-control-wrap :-ms-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-webkit-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-moz-placeholder{font-style:italic}.data-grid-search-control-wrap .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:.6rem 2rem .2rem;position:absolute;right:0;top:1px}.data-grid-search-control-wrap .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.data-grid-search-control-wrap .action-submit:active{-ms-transform:scale(0.9);transform:scale(0.9)}.data-grid-search-control-wrap .action-submit:hover:before{color:#1a1a1a}._keyfocus .data-grid-search-control-wrap .action-submit:focus{box-shadow:0 0 0 1px #008bdb}.data-grid-search-control-wrap .action-submit:before{content:'\e60c';font-size:2rem;transition:color .1s linear}.data-grid-search-control-wrap .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.data-grid-search-control-wrap .abs-action-menu .action-submenu,.data-grid-search-control-wrap .abs-action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .action-menu,.data-grid-search-control-wrap .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:19.25rem;overflow-y:auto;z-index:398}.data-grid-search-control-wrap .action-menu-item._selected{background-color:#e0f6fe}.data-grid-search-control-wrap .data-grid-search-label{display:none}.data-grid-search-control{padding-right:6rem;width:100%}.data-grid-filters-action-wrap{float:left;padding-left:2rem}.data-grid-filters-action-wrap .action-default{font-size:1.3rem;margin-bottom:1rem;padding-left:1.7rem;padding-right:2.1rem;padding-top:.7rem}.data-grid-filters-action-wrap .action-default._active{background-color:#fff;border-bottom-color:#fff;border-right-color:#ccc;font-weight:600;margin:-.1rem 0 0;padding-bottom:1.6rem;padding-top:.8rem;position:relative;z-index:281}.data-grid-filters-action-wrap .action-default._active:after{background-color:#eb5202;bottom:100%;content:'';height:3px;left:-1px;position:absolute;right:-1px}.data-grid-filters-action-wrap .action-default:before{color:#333;content:'\e605';font-size:1.8rem;margin-right:.4rem;position:relative;top:-1px;vertical-align:top}.data-grid-filters-action-wrap .filters-active{display:none}.admin__action-grid-select .admin__control-select{margin:-.5rem .5rem 0 0;padding-bottom:.6rem;padding-top:.6rem}.admin__data-grid-filters-wrap{opacity:0;visibility:hidden;clear:both;font-size:1.3rem;transition:opacity .3s ease}.admin__data-grid-filters-wrap._show{opacity:1;visibility:visible;border-bottom:1px solid #ccc;border-top:1px solid #ccc;margin-bottom:.7rem;padding:3.6rem 0 3rem;position:relative;top:-1px;z-index:280}.admin__data-grid-filters-wrap._show .admin__data-grid-filters,.admin__data-grid-filters-wrap._show .admin__data-grid-filters-footer{display:block}.admin__data-grid-filters-wrap .admin__form-field-label,.admin__data-grid-filters-wrap .admin__form-field-legend{display:block;font-weight:700;margin:0 0 .3rem;text-align:left}.admin__data-grid-filters-wrap .admin__form-field{display:inline-block;margin-bottom:2em;margin-left:0;padding-left:2rem;padding-right:2rem;vertical-align:top;width:calc(100% / 4 - 4px)}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field{display:block;float:none;margin-bottom:1.5rem;padding-left:0;padding-right:0;width:auto}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field:last-child{margin-bottom:0}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-label{border:1px solid transparent;float:left;font-weight:400;line-height:1.36;margin-bottom:0;padding-bottom:.6rem;padding-right:1em;padding-top:.6rem;width:25%}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-control{margin-left:25%}.admin__data-grid-filters-wrap .admin__action-multiselect,.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text,.admin__data-grid-filters-wrap .admin__form-field-label{font-size:1.3rem}.admin__data-grid-filters-wrap .admin__control-select{height:3.2rem;padding-top:.5rem}.admin__data-grid-filters-wrap .admin__action-multiselect:before{height:3.2rem;width:3.2rem}.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text._has-datepicker{width:100%}.admin__data-grid-filters{display:none;margin-left:-2rem;margin-right:-2rem}.admin__filters-legend{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-filters-footer{display:none;font-size:1.4rem}.admin__data-grid-filters-footer .admin__footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-filters-footer .admin__footer-secondary-actions{float:left;width:50%}.admin__data-grid-filters-current{border-bottom:.1rem solid #ccc;border-top:.1rem solid #ccc;display:none;font-size:1.3rem;margin-bottom:.9rem;padding-bottom:.8rem;padding-top:1.1rem;width:100%}.admin__data-grid-filters-current._show{display:table;position:relative;top:-1px;z-index:3}.admin__data-grid-filters-current._show+.admin__data-grid-filters-wrap._show{margin-top:-1rem}.admin__current-filters-actions-wrap,.admin__current-filters-list-wrap,.admin__current-filters-title-wrap{display:table-cell;vertical-align:top}.admin__current-filters-title{margin-right:1em;white-space:nowrap}.admin__current-filters-list-wrap{width:100%}.admin__current-filters-list{margin-bottom:0}.admin__current-filters-list>li{display:inline-block;font-weight:600;margin:0 1rem .5rem;padding-right:2.6rem;position:relative}.admin__current-filters-list .action-remove{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0;line-height:1;position:absolute;right:0;top:1px}.admin__current-filters-list .action-remove:hover{background-color:transparent;border:none;box-shadow:none}.admin__current-filters-list .action-remove:hover:before{color:#949494}.admin__current-filters-list .action-remove:active{-ms-transform:scale(0.9);transform:scale(0.9)}.admin__current-filters-list .action-remove:before{color:#adadad;content:'\e620';font-size:1.6rem;transition:color .1s linear}.admin__current-filters-list .action-remove>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__current-filters-actions-wrap .action-clear{border:none;padding-bottom:0;padding-top:0;white-space:nowrap}.admin__data-grid-pager-wrap{float:right;text-align:right}.admin__data-grid-pager{display:inline-block;margin-left:3rem}.admin__data-grid-pager .admin__control-text::-webkit-inner-spin-button,.admin__data-grid-pager .admin__control-text::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.admin__data-grid-pager .admin__control-text{-moz-appearance:textfield;text-align:center;width:4.4rem}.action-next,.action-previous{width:4.4rem}.action-next:before,.action-previous:before{font-weight:700}.action-next>span,.action-previous>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-previous{margin-right:2.5rem;text-indent:-.25em}.action-previous:before{content:'\e629'}.action-next{margin-left:1.5rem;text-indent:.1em}.action-next:before{content:'\e62a'}.admin__data-grid-action-bookmarks{opacity:.98}.admin__data-grid-action-bookmarks .admin__action-dropdown-text:after{left:0;right:-6px}.admin__data-grid-action-bookmarks._active{z-index:290}.admin__data-grid-action-bookmarks .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;max-width:15rem;min-width:4.9rem;vertical-align:top;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown:before{content:'\e60f'}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu{font-size:1.3rem;left:0;padding:1rem 0;right:auto}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li{padding:0 5rem 0 0;position:relative;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action){transition:background-color .1s linear}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action):hover{background-color:#e3e3e3}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item{max-width:23rem;min-width:18rem;white-space:normal;word-break:break-all}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit{display:none;padding-bottom:1rem;padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit .action-dropdown-menu-item-actions{padding-bottom:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action{padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action+.action-dropdown-menu-item-last{padding-top:.5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a{color:#008bdb;text-decoration:none;display:inline-block;padding-left:1.1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a:hover{color:#0fa7ff;text-decoration:underline}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-last{padding-bottom:0}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item{display:none}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item-edit{display:block}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._active .action-dropdown-menu-link{font-weight:600}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{font-size:1.3rem;min-width:15rem;width:calc(100% - 4rem)}.ie9 .admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{width:15rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-actions{border-left:1px solid #fff;bottom:0;position:absolute;right:0;top:0;width:5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-link{color:#333;display:block;text-decoration:none;padding:1rem 1rem 1rem 2.1rem}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit,.admin__data-grid-action-bookmarks .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;vertical-align:top}.admin__data-grid-action-bookmarks .action-delete:hover,.admin__data-grid-action-bookmarks .action-edit:hover,.admin__data-grid-action-bookmarks .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before{font-size:1.7rem}.admin__data-grid-action-bookmarks .action-delete>span,.admin__data-grid-action-bookmarks .action-edit>span,.admin__data-grid-action-bookmarks .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit{padding:.6rem 1.4rem}.admin__data-grid-action-bookmarks .action-delete:active,.admin__data-grid-action-bookmarks .action-edit:active{-ms-transform:scale(0.9);transform:scale(0.9)}.admin__data-grid-action-bookmarks .action-submit{padding:.6rem 1rem .6rem .8rem}.admin__data-grid-action-bookmarks .action-submit:active{position:relative;right:-1px}.admin__data-grid-action-bookmarks .action-submit:before{content:'\e625'}.admin__data-grid-action-bookmarks .action-delete:before{content:'\e630'}.admin__data-grid-action-bookmarks .action-edit{padding-top:.8rem}.admin__data-grid-action-bookmarks .action-edit:before{content:'\e631'}.admin__data-grid-action-columns._active{opacity:.98;z-index:290}.admin__data-grid-action-columns .admin__action-dropdown:before{content:'\e610';font-size:1.8rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-columns-menu{color:#303030;font-size:1.3rem;overflow:hidden;padding:2.2rem 3.5rem 1rem;z-index:1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-header{border-bottom:1px solid #d1d1d1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-content{width:49.2rem}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-footer{border-top:1px solid #d1d1d1;padding-top:2.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content{max-height:22.85rem;overflow-y:auto;padding-top:1.5rem;position:relative;width:47.4rem}.admin__data-grid-action-columns-menu .admin__field-option{float:left;height:1.9rem;margin-bottom:1.5rem;padding:0 1rem 0 0;width:15.8rem}.admin__data-grid-action-columns-menu .admin__field-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-header{padding-bottom:1.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-footer{padding:1rem 0 2rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-secondary-actions{float:left;margin-left:-1em}.admin__data-grid-action-export._active{opacity:.98;z-index:290}.admin__data-grid-action-export .admin__action-dropdown:before{content:'\e635';font-size:1.7rem;left:.3rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-export-menu{padding-left:2rem;padding-right:2rem;padding-top:1rem}.admin__data-grid-action-export-menu .admin__action-dropdown-footer-main-actions{padding-bottom:2rem;padding-top:2.5rem;white-space:nowrap}.sticky-header{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:8.8rem;margin-top:-1px;padding:.5rem 3rem 0;position:fixed;right:0;top:77px;z-index:398}.sticky-header .admin__data-grid-wrap{margin-bottom:0;overflow-x:visible;padding-bottom:0}.sticky-header .admin__data-grid-header-row{position:relative;text-align:right}.sticky-header .admin__data-grid-header-row:last-child{margin:0}.sticky-header .admin__data-grid-actions-wrap,.sticky-header .admin__data-grid-filters-wrap,.sticky-header .admin__data-grid-pager-wrap,.sticky-header .data-grid-filters-actions-wrap,.sticky-header .data-grid-search-control-wrap{display:inline-block;float:none;vertical-align:top}.sticky-header .action-select-wrap{float:left;margin-right:1.5rem;width:16.66666667%}.sticky-header .admin__control-support-text{float:left}.sticky-header .data-grid-search-control-wrap{margin:-.5rem 0 0 1.1rem;width:auto}.sticky-header .data-grid-search-control-wrap .data-grid-search-label{box-sizing:border-box;cursor:pointer;display:block;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;position:relative;text-align:center}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before{color:#333;content:'\e60c';font-size:2rem;transition:color .1s linear}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:hover:before{color:#000}.sticky-header .data-grid-search-control-wrap .data-grid-search-label span{display:none}.sticky-header .data-grid-filters-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-left:0;position:relative}.sticky-header .data-grid-filters-actions-wrap .action-default{background-color:transparent;border:1px solid transparent;box-sizing:border-box;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;text-align:center;transition:all .15s ease}.sticky-header .data-grid-filters-actions-wrap .action-default span{display:none}.sticky-header .data-grid-filters-actions-wrap .action-default:before{margin:0}.sticky-header .data-grid-filters-actions-wrap .action-default._active{background-color:#fff;border-color:#adadad #adadad #fff;box-shadow:1px 1px 5px rgba(0,0,0,.5);z-index:210}.sticky-header .data-grid-filters-actions-wrap .action-default._active:after{background-color:#fff;content:'';height:6px;left:-2px;position:absolute;right:-6px;top:100%}.sticky-header .data-grid-filters-action-wrap{padding:0}.sticky-header .admin__data-grid-filters-wrap{background-color:#fff;border:1px solid #adadad;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:0;padding-left:3.5rem;padding-right:3.5rem;position:absolute;top:100%;width:100%;z-index:209}.sticky-header .admin__data-grid-filters-current+.admin__data-grid-filters-wrap._show{margin-top:-6px}.sticky-header .filters-active{background-color:#e04f00;border-radius:10px;color:#fff;display:block;font-size:1.4rem;font-weight:700;padding:.1rem .7rem;position:absolute;right:-7px;top:0;z-index:211}.sticky-header .filters-active:empty{padding-bottom:0;padding-top:0}.sticky-header .admin__data-grid-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-right:.3rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown{background-color:transparent;box-sizing:border-box;min-width:3.8rem;padding-left:.6rem;padding-right:.6rem;text-align:center}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;max-width:0;min-width:0;overflow:hidden}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:before{margin:0}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap{margin-right:1.1rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after,.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:after{display:none}.sticky-header .admin__data-grid-actions-wrap ._active .admin__action-dropdown{background-color:#fff}.sticky-header .admin__data-grid-action-bookmarks .admin__action-dropdown:before{position:relative;top:-3px}.sticky-header .admin__data-grid-filters-current{border-bottom:0;border-top:0;margin-bottom:0;padding-bottom:0;padding-top:0}.sticky-header .admin__data-grid-pager .admin__control-text,.sticky-header .admin__data-grid-pager-wrap .admin__control-support-text,.sticky-header .data-grid-search-control-wrap .action-submit,.sticky-header .data-grid-search-control-wrap .data-grid-search-control{display:none}.sticky-header .action-next{margin:0}.sticky-header .data-grid{margin-bottom:-1px}.data-grid-cap-left,.data-grid-cap-right{background-color:#f8f8f8;bottom:-2px;position:absolute;top:6rem;width:3rem;z-index:201}.data-grid-cap-left{left:0}.admin__data-grid-header{font-size:1.4rem}.admin__data-grid-header-row+.admin__data-grid-header-row{margin-top:1.1rem}.admin__data-grid-header-row:last-child{margin-bottom:0}.admin__data-grid-header-row .action-select-wrap{display:block}.admin__data-grid-header-row .action-select{width:100%}.admin__data-grid-actions-wrap{float:right;margin-left:1.1rem;margin-top:-.5rem;text-align:right}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap{position:relative;text-align:left;vertical-align:middle}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._hide+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:first-child:after{display:none}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown-menu{border-color:#adadad}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after{border-left:1px solid #ccc;content:'';height:3.2rem;left:0;position:absolute;top:.5rem;z-index:3}.admin__data-grid-actions-wrap .admin__action-dropdown{padding-bottom:1.7rem;padding-top:1.2rem}.admin__data-grid-actions-wrap .admin__action-dropdown:after{margin-top:-.4rem}.admin__data-grid-outer-wrap{min-height:8rem;position:relative}.admin__data-grid-wrap{margin-bottom:2rem;max-width:100%;overflow-x:auto;padding-bottom:1rem;padding-top:2rem}.admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:0;position:absolute;right:0;top:0;z-index:399}.admin__data-grid-loading-mask .spinner{font-size:4rem;left:50%;margin-left:-2rem;margin-top:-2rem;position:absolute;top:50%}.ie9 .admin__data-grid-loading-mask .spinner{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-cell-content{display:inline-block;overflow:hidden;width:100%}body._in-resize{cursor:col-resize;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body._in-resize *,body._in-resize .data-grid-th,body._in-resize .data-grid-th._draggable,body._in-resize .data-grid-th._sortable{cursor:col-resize!important}._layout-fixed{table-layout:fixed}.data-grid{border:none;font-size:1.3rem;margin-bottom:0;width:100%}.data-grid:not(._dragging-copy) ._odd-row td._dragging{background-color:#d0d0d0}.data-grid:not(._dragging-copy) ._dragging{background-color:#d9d9d9;color:rgba(48,48,48,.95)}.data-grid:not(._dragging-copy) ._dragging a{color:rgba(0,139,219,.95)}.data-grid:not(._dragging-copy) ._dragging a:hover{color:rgba(15,167,255,.95)}.data-grid._dragged{outline:#007bdb solid 1px}.data-grid thead{background-color:transparent}.data-grid tfoot th{padding:1rem}.data-grid tr._odd-row td{background-color:#f5f5f5}.data-grid tr._odd-row td._update-status-active{background:#89e1ff}.data-grid tr._odd-row td._update-status-upcoming{background:#b7ee63}.data-grid tr:hover td._update-status-active,.data-grid tr:hover td._update-status-upcoming{background-color:#e5f7fe}.data-grid tr.data-grid-tr-no-data td{font-size:1.6rem;padding:3rem;text-align:center}.data-grid tr.data-grid-tr-no-data:hover td{background-color:#fff;cursor:default}.data-grid tr:active td{background-color:#e0f6fe}.data-grid tr:hover td{background-color:#e5f7fe}.data-grid tr._dragged td{background:#d0d0d0}.data-grid tr._dragover-top td{box-shadow:inset 0 3px 0 0 #008bdb}.data-grid tr._dragover-bottom td{box-shadow:inset 0 -3px 0 0 #008bdb}.data-grid tr:not(.data-grid-editable-row):last-child td{border-bottom:.1rem solid #d6d6d6}.data-grid tr ._clickable,.data-grid tr._clickable{cursor:pointer}.data-grid tr._disabled{pointer-events:none}.data-grid td,.data-grid th{font-size:1.3rem;line-height:1.36;transition:background-color .1s linear;vertical-align:top}.data-grid td._resizing,.data-grid th._resizing{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid td._hidden,.data-grid th._hidden{display:none}.data-grid td._fit,.data-grid th._fit{width:1%}.data-grid td{background-color:#fff;border-left:.1rem dashed #d6d6d6;border-right:.1rem dashed #d6d6d6;color:#303030;padding:1rem}.data-grid td:first-child{border-left-style:solid}.data-grid td:last-child{border-right-style:solid}.data-grid td .action-select-wrap{position:static}.data-grid td .action-select{color:#008bdb;text-decoration:none;background-color:transparent;border:none;font-size:1.3rem;padding:0 3rem 0 0;position:relative}.data-grid td .action-select:hover{color:#0fa7ff;text-decoration:underline}.data-grid td .action-select:hover:after{border-color:#0fa7ff transparent transparent}.data-grid td .action-select:after{border-color:#008bdb transparent transparent;margin:.6rem 0 0 .7rem;right:auto;top:auto}.data-grid td .action-select:before{display:none}.data-grid td .abs-action-menu .action-submenu,.data-grid td .abs-action-menu .action-submenu .action-submenu,.data-grid td .action-menu,.data-grid td .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu .action-submenu{left:auto;min-width:10rem;right:0;text-align:left;top:auto;z-index:1}.data-grid td._update-status-active{background:#bceeff}.data-grid td._update-status-upcoming{background:#ccf391}.data-grid th{background-color:#514943;border:.1rem solid #8a837f;border-left-color:transparent;color:#fff;font-weight:600;padding:0;text-align:left}.data-grid th:first-child{border-left-color:#8a837f}.data-grid th._dragover-left{box-shadow:inset 3px 0 0 0 #fff;z-index:2}.data-grid th._dragover-right{box-shadow:inset -3px 0 0 0 #fff}.data-grid .shadow-div{cursor:col-resize;height:100%;margin-right:-5px;position:absolute;right:0;top:0;width:10px}.data-grid .data-grid-th{background-clip:padding-box;color:#fff;padding:1rem;position:relative;vertical-align:middle}.data-grid .data-grid-th._resize-visible .shadow-div{cursor:auto;display:none}.data-grid .data-grid-th._draggable{cursor:grab}.data-grid .data-grid-th._sortable{cursor:pointer;transition:background-color .1s linear;z-index:1}.data-grid .data-grid-th._sortable:focus,.data-grid .data-grid-th._sortable:hover{background-color:#5f564f}.data-grid .data-grid-th._sortable:active{padding-bottom:.9rem;padding-top:1.1rem}.data-grid .data-grid-th.required>span:after{color:#f38a5e;content:'*';margin-left:.3rem}.data-grid .data-grid-checkbox-cell{overflow:hidden;padding:0;vertical-align:top;width:5.2rem}.data-grid .data-grid-checkbox-cell:hover{cursor:default}.data-grid .data-grid-thumbnail-cell{text-align:center;width:7rem}.data-grid .data-grid-thumbnail-cell img{border:1px solid #d6d6d6;width:5rem}.data-grid .data-grid-multicheck-cell{padding:1rem 1rem .9rem;text-align:center;vertical-align:middle}.data-grid .data-grid-onoff-cell{text-align:center;width:12rem}.data-grid .data-grid-actions-cell{padding-left:2rem;padding-right:2rem;text-align:center;width:1%}.data-grid._hidden{display:none}.data-grid._dragging-copy{box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;opacity:.95;position:fixed;top:0;z-index:1000}.data-grid._dragging-copy .data-grid-th{border:1px solid #007bdb;border-bottom:none}.data-grid._dragging-copy .data-grid-th,.data-grid._dragging-copy .data-grid-th._sortable{cursor:grabbing}.data-grid._dragging-copy tr:last-child td{border-bottom:1px solid #007bdb}.data-grid._dragging-copy td{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:rgba(255,251,230,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td,.data-grid._dragging-copy._in-edit .data-grid-editable-row:hover td{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:after,.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{left:0;right:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:only-child{border-left:1px solid #007bdb;border-right:1px solid #007bdb;left:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-select,.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-text{opacity:.5}.data-grid .data-grid-controls-row td{padding-top:1.6rem}.data-grid .data-grid-controls-row td.data-grid-checkbox-cell{padding-top:.6rem}.data-grid .data-grid-controls-row td [class*=admin__control-],.data-grid .data-grid-controls-row td button{margin-top:-1.7rem}.data-grid._in-edit tr:hover td{background-color:#e6e6e6}.data-grid._in-edit ._odd-row.data-grid-editable-row td,.data-grid._in-edit ._odd-row.data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit ._odd-row td,.data-grid._in-edit ._odd-row:hover td{background-color:#dcdcdc}.data-grid._in-edit .data-grid-editable-row-actions td,.data-grid._in-edit .data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid._in-edit td{background-color:#e6e6e6;pointer-events:none}.data-grid._in-edit .data-grid-checkbox-cell{pointer-events:auto}.data-grid._in-edit .data-grid-editable-row{border:.1rem solid #adadad;border-bottom-color:#c2c2c2}.data-grid._in-edit .data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit .data-grid-editable-row td{background-color:#fff;border-bottom-color:#fff;border-left-style:hidden;border-right-style:hidden;border-top-color:#fff;pointer-events:auto;vertical-align:middle}.data-grid._in-edit .data-grid-editable-row td:first-child{border-left-color:#adadad;border-left-style:solid}.data-grid._in-edit .data-grid-editable-row td:first-child:after,.data-grid._in-edit .data-grid-editable-row td:first-child:before{left:0}.data-grid._in-edit .data-grid-editable-row td:last-child{border-right-color:#adadad;border-right-style:solid;left:-.1rem}.data-grid._in-edit .data-grid-editable-row td:last-child:after,.data-grid._in-edit .data-grid-editable-row td:last-child:before{right:0}.data-grid._in-edit .data-grid-editable-row .admin__control-select,.data-grid._in-edit .data-grid-editable-row .admin__control-text{width:100%}.data-grid._in-edit .data-grid-bulk-edit-panel td{vertical-align:bottom}.data-grid .data-grid-editable-row td{border-left-color:#fff;border-left-style:solid;position:relative;z-index:1}.data-grid .data-grid-editable-row td:after{bottom:0;box-shadow:0 5px 5px rgba(0,0,0,.25);content:'';height:.9rem;left:0;margin-top:-1rem;position:absolute;right:0}.data-grid .data-grid-editable-row td:before{background-color:#fff;bottom:0;content:'';height:1rem;left:-10px;position:absolute;right:-10px;z-index:1}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td,.data-grid .data-grid-editable-row.data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:first-child{border-left-color:#fff;border-right-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:last-child{left:0}.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:#fffbe6}.data-grid .data-grid-editable-row-actions{left:50%;margin-left:-12.5rem;margin-top:-2px;position:absolute;text-align:center}.data-grid .data-grid-editable-row-actions td{width:25rem}.data-grid .data-grid-editable-row-actions [class*=action-]{min-width:9rem}.data-grid .data-grid-draggable-row-cell{width:1%}.data-grid .data-grid-draggable-row-cell .draggable-handle{padding:0}.data-grid-th._sortable._ascend,.data-grid-th._sortable._descend{padding-right:2.7rem}.data-grid-th._sortable._ascend:before,.data-grid-th._sortable._descend:before{margin-top:-1em;position:absolute;right:1rem;top:50%}.data-grid-th._sortable._ascend:before{content:'\2193'}.data-grid-th._sortable._descend:before{content:'\2191'}.data-grid-checkbox-cell-inner{display:block;padding:1.1rem 1.8rem .9rem;text-align:right}.data-grid-checkbox-cell-inner:hover{cursor:pointer}.data-grid-state-cell-inner{display:block;padding:1.1rem 1.8rem .9rem;text-align:center}.data-grid-state-cell-inner>span{display:inline-block;font-style:italic;padding:.6rem 0}.data-grid-row-parent._active>td .data-grid-checkbox-cell-inner:before{content:'\e62b'}.data-grid-row-parent>td .data-grid-checkbox-cell-inner{padding-left:3.7rem;position:relative}.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before{content:'\e628';font-size:1rem;font-weight:700;left:1.35rem;position:absolute;top:1.6rem}.data-grid-th._col-xs{width:1%}.data-grid-info-panel{box-shadow:0 0 5px rgba(0,0,0,.5);margin:2rem .1rem -2rem}.data-grid-info-panel .messages{overflow:hidden}.data-grid-info-panel .messages .message{margin:1rem}.data-grid-info-panel .messages .message:last-child{margin-bottom:1rem}.data-grid-info-panel-actions{padding:1rem;text-align:right}.data-grid-editable-row .admin__field-control{position:relative}.data-grid-editable-row .admin__field-control._error:after{border-color:transparent #ee7d7d transparent transparent;border-style:solid;border-width:0 12px 12px 0;content:'';position:absolute;right:0;top:0}.data-grid-editable-row .admin__field-control._error .admin__control-text{border-color:#ee7d7d}.data-grid-editable-row .admin__field-control._focus:after{display:none}.data-grid-editable-row .admin__field-error{bottom:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin:0 auto 1.5rem;max-width:32rem;position:absolute;right:0}.data-grid-editable-row .admin__field-error:after,.data-grid-editable-row .admin__field-error:before{border-style:solid;content:'';left:50%;position:absolute;top:100%}.data-grid-editable-row .admin__field-error:after{border-color:#fffbbb transparent transparent;border-width:10px 10px 0;margin-left:-10px;z-index:1}.data-grid-editable-row .admin__field-error:before{border-color:#ee7d7d transparent transparent;border-width:11px 12px 0;margin-left:-12px}.data-grid-bulk-edit-panel .admin__field-label-vertical{display:block;font-size:1.2rem;margin-bottom:.5rem;text-align:left}.data-grid-row-changed{cursor:default;display:block;opacity:.5;position:relative;width:100%;z-index:1}.data-grid-row-changed:after{content:'\e631';display:inline-block}.data-grid-row-changed .data-grid-row-changed-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:100%;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;line-height:1.36;margin-bottom:1.5rem;padding:1rem;position:absolute;right:-1rem;text-transform:none;width:27rem;word-break:normal;z-index:2}.data-grid-row-changed._changed{opacity:1;z-index:3}.data-grid-row-changed._changed:hover .data-grid-row-changed-tooltip{display:block}.data-grid-row-changed._changed:hover:before{background:#f1f1f1;border:1px solid #f1f1f1;bottom:100%;box-shadow:4px 4px 3px -1px rgba(0,0,0,.15);content:'';display:block;height:1.6rem;left:50%;margin:0 0 .7rem -.8rem;position:absolute;-ms-transform:rotate(45deg);transform:rotate(45deg);width:1.6rem;z-index:3}.ie9 .data-grid-row-changed._changed:hover:before{display:none}.admin__data-grid-outer-wrap .data-grid-checkbox-cell{overflow:hidden}.admin__data-grid-outer-wrap .data-grid-checkbox-cell-inner{position:relative}.admin__data-grid-outer-wrap .data-grid-checkbox-cell-inner:before{bottom:0;content:'';height:500%;left:0;position:absolute;right:0;top:0}.admin__data-grid-wrap-static .data-grid-checkbox-cell:hover{cursor:pointer}.admin__data-grid-wrap-static .data-grid-checkbox-cell-inner{margin:1.1rem 1.8rem .9rem;padding:0}.adminhtml-cms-hierarchy-index .admin__data-grid-wrap-static .data-grid-actions-cell:first-child{padding:0}.adminhtml-export-index .admin__data-grid-wrap-static .data-grid-checkbox-cell-inner{margin:0;padding:1.1rem 1.8rem 1.9rem}.admin__control-addon [class*=admin__control-][class]~[class*=admin__addon-]:last-child:before,.admin__control-file-label:before,.admin__control-multiselect,.admin__control-select,.admin__control-text,.admin__control-textarea,.selectmenu{-webkit-appearance:none;background-color:#fff;border:1px solid #adadad;border-radius:1px;box-shadow:none;color:#303030;font-size:1.4rem;font-weight:400;height:auto;line-height:1.36;padding:.6rem 1rem;transition:border-color .1s linear;vertical-align:baseline;width:auto}.admin__control-addon [class*=admin__control-][class]:hover~[class*=admin__addon-]:last-child:before,.admin__control-multiselect:hover,.admin__control-select:hover,.admin__control-text:hover,.admin__control-textarea:hover,.selectmenu:hover,.selectmenu:hover .selectmenu-toggle:before{border-color:#878787}.admin__control-addon [class*=admin__control-][class]:focus~[class*=admin__addon-]:last-child:before,.admin__control-file:active+.admin__control-file-label:before,.admin__control-file:focus+.admin__control-file-label:before,.admin__control-multiselect:focus,.admin__control-select:focus,.admin__control-text:focus,.admin__control-textarea:focus,.selectmenu._focus,.selectmenu._focus .selectmenu-toggle:before{border-color:#007bdb;box-shadow:none;outline:0}.admin__control-addon [class*=admin__control-][class][disabled]~[class*=admin__addon-]:last-child:before,.admin__control-file[disabled]+.admin__control-file-label:before,.admin__control-multiselect[disabled],.admin__control-select[disabled],.admin__control-text[disabled],.admin__control-textarea[disabled]{background-color:#e9e9e9;border-color:#adadad;color:#303030;cursor:not-allowed;opacity:.5}.admin__field-row[class]>.admin__field-control,.admin__fieldset>.admin__field.admin__field-wide[class]>.admin__field-control{clear:left;float:none;text-align:left;width:auto}.admin__field-row[class]:not(.admin__field-option)>.admin__field-label,.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label{display:block;line-height:1.4rem;margin-bottom:.86rem;margin-top:-.14rem;text-align:left;width:auto}.admin__field-row[class]:not(.admin__field-option)>.admin__field-label:before,.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label:before{display:none}.admin__field-row[class]:not(.admin__field-option)._required>.admin__field-label span,.admin__field-row[class]:not(.admin__field-option).required>.admin__field-label span,.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span,.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option).required>.admin__field-label span{padding-left:1.5rem}.admin__field-row[class]:not(.admin__field-option)._required>.admin__field-label span:after,.admin__field-row[class]:not(.admin__field-option).required>.admin__field-label span:after,.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span:after,.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option).required>.admin__field-label span:after{left:0;margin-left:30px}.admin__legend{font-size:1.8rem;font-weight:600;margin-bottom:3rem}.admin__control-checkbox,.admin__control-radio{cursor:pointer;opacity:.01;overflow:hidden;position:absolute;vertical-align:top}.admin__control-checkbox:after,.admin__control-radio:after{display:none}.admin__control-checkbox+label,.admin__control-radio+label{cursor:pointer;display:inline-block}.admin__control-checkbox+label:before,.admin__control-radio+label:before{background-color:#fff;border:1px solid #adadad;color:transparent;float:left;height:1.6rem;text-align:center;vertical-align:top;width:1.6rem}.admin__control-checkbox+.admin__field-label,.admin__control-radio+.admin__field-label{padding-left:2.6rem}.admin__control-checkbox+.admin__field-label:before,.admin__control-radio+.admin__field-label:before{margin:1px 1rem 0 -2.6rem}.admin__control-checkbox:checked+label:before,.admin__control-radio:checked+label:before{color:#514943}.admin__control-checkbox.disabled+label,.admin__control-checkbox[disabled]+label,.admin__control-radio.disabled+label,.admin__control-radio[disabled]+label{color:#303030;cursor:default;opacity:.5}.admin__control-checkbox.disabled+label:before,.admin__control-checkbox[disabled]+label:before,.admin__control-radio.disabled+label:before,.admin__control-radio[disabled]+label:before{background-color:#e9e9e9;border-color:#adadad;cursor:default}._keyfocus .admin__control-checkbox:not(.disabled):focus+label:before,._keyfocus .admin__control-checkbox:not([disabled]):focus+label:before,._keyfocus .admin__control-radio:not(.disabled):focus+label:before,._keyfocus .admin__control-radio:not([disabled]):focus+label:before{border-color:#007bdb}.admin__control-checkbox:not(.disabled):hover+label:before,.admin__control-checkbox:not([disabled]):hover+label:before,.admin__control-radio:not(.disabled):hover+label:before,.admin__control-radio:not([disabled]):hover+label:before{border-color:#878787}.admin__control-radio+label:before{border-radius:1.6rem;content:'';transition:border-color .1s linear,color .1s ease-in}.admin__control-radio.admin__control-radio+label:before{line-height:140%}.admin__control-radio:checked+label{position:relative}.admin__control-radio:checked+label:after{background-color:#514943;border-radius:50%;content:'';height:10px;left:3px;position:absolute;top:4px;width:10px}.admin__control-radio:checked:not(.disabled):hover,.admin__control-radio:checked:not(.disabled):hover+label,.admin__control-radio:checked:not([disabled]):hover,.admin__control-radio:checked:not([disabled]):hover+label{cursor:default}.admin__control-radio:checked:not(.disabled):hover+label:before,.admin__control-radio:checked:not([disabled]):hover+label:before{border-color:#adadad}.admin__control-checkbox+label:before{border-radius:1px;content:'';font-size:0;transition:font-size .1s ease-out,color .1s ease-out,border-color .1s linear}.admin__control-checkbox:checked+label:before{content:'\e62d';font-size:1.1rem;line-height:125%}.admin__control-checkbox:not(:checked)._indeterminate+label:before,.admin__control-checkbox:not(:checked):indeterminate+label:before{color:#514943;content:'-';font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700}input[type=checkbox].admin__control-checkbox,input[type=radio].admin__control-checkbox{margin:0;position:absolute}.admin__control-text{min-width:4rem}.admin__control-select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#adadad,#adadad);background-position:calc(100% - 12px) -34px,100%,calc(100% - 3.2rem) 0;background-size:auto,3.2rem 100%,1px 100%;background-repeat:no-repeat;max-width:100%;min-width:8.5rem;padding-bottom:.5rem;padding-right:4.4rem;padding-top:.5rem;transition:border-color .1s linear}.admin__control-select:hover{border-color:#878787;cursor:pointer}.admin__control-select:focus{background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#007bdb,#007bdb);background-position:calc(100% - 12px) 13px,100%,calc(100% - 3.2rem) 0;border-color:#007bdb}.admin__control-select::-ms-expand{display:none}.ie9 .admin__control-select{background-image:none;padding-right:1rem}option:empty{display:none}.admin__control-multiselect{height:auto;max-width:100%;min-width:15rem;overflow:auto;padding:0;resize:both}.admin__control-multiselect optgroup,.admin__control-multiselect option{padding:.5rem 1rem}.admin__control-file-wrapper{display:inline-block;padding:.5rem 1rem;position:relative;z-index:1}.admin__control-file-label:before{content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__control-file{background:0 0;border:0;padding-top:.7rem;position:relative;width:auto;z-index:1}.admin__control-support-text{border:1px solid transparent;display:inline-block;font-size:1.4rem;line-height:1.36;padding-bottom:.6rem;padding-top:.6rem}.admin__control-support-text+[class*=admin__control-],[class*=admin__control-]+.admin__control-support-text{margin-left:.7rem}.admin__control-service{float:left;margin:.8rem 0 0 3rem}.admin__control-textarea{height:8.48rem;line-height:1.18;padding-top:.8rem;resize:vertical}.admin__control-addon{-ms-flex-direction:row;flex-direction:row;display:inline-flex;-ms-flex-flow:row nowrap;flex-flow:row nowrap;position:relative;width:100%;z-index:1}.admin__control-addon>[class*=admin__addon-],.admin__control-addon>[class*=admin__control-]{-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative;z-index:1}.admin__control-addon .admin__control-select{width:auto}.admin__control-addon .admin__control-text{margin:.1rem;padding:.5rem .9rem;width:100%}.admin__control-addon [class*=admin__control-][class]{appearence:none;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-order:1;order:1;-ms-flex-negative:1;flex-shrink:1;background-color:transparent;border-color:transparent;box-shadow:none;vertical-align:top}.admin__control-addon [class*=admin__control-][class]+[class*=admin__control-]{border-left-color:#adadad}.admin__control-addon [class*=admin__control-][class] :focus{box-shadow:0}.admin__control-addon [class*=admin__control-][class]~[class*=admin__addon-]:last-child{padding-left:1rem;position:static!important;z-index:0}.admin__control-addon [class*=admin__control-][class]~[class*=admin__addon-]:last-child>*{position:relative;vertical-align:top;z-index:1}.admin__control-addon [class*=admin__control-][class]~[class*=admin__addon-]:last-child:empty{padding:0}.admin__control-addon [class*=admin__control-][class]~[class*=admin__addon-]:last-child:before{bottom:0;box-sizing:border-box;content:'';left:0;position:absolute;top:0;width:100%;z-index:-1}.admin__addon-prefix,.admin__addon-suffix{border:0;box-sizing:border-box;color:#858585;display:inline-block;font-size:1.4rem;font-weight:400;height:3.2rem;line-height:3.2rem;padding:0}.admin__addon-suffix{-ms-flex-order:3;order:3}.admin__addon-suffix:last-child{padding-right:1rem}.admin__addon-prefix{-ms-flex-order:0;order:0}.ie9 .admin__control-addon:after{clear:both;content:'';display:block;height:0;overflow:hidden}.ie9 .admin__addon{min-width:0;overflow:hidden;text-align:right;white-space:nowrap;width:auto}.ie9 .admin__addon [class*=admin__control-]{display:inline}.ie9 .admin__addon-prefix{float:left}.ie9 .admin__addon-suffix{float:right}.admin__control-collapsible{width:100%}.admin__control-collapsible ._dragged .admin__collapsible-block-wrapper .admin__collapsible-title{background:#d0d0d0}.admin__control-collapsible ._dragover-bottom .admin__collapsible-block-wrapper:before,.admin__control-collapsible ._dragover-top .admin__collapsible-block-wrapper:before{background:#008bdb;content:'';display:block;height:3px;left:0;position:absolute;right:0}.admin__control-collapsible ._dragover-top .admin__collapsible-block-wrapper:before{top:-3px}.admin__control-collapsible ._dragover-bottom .admin__collapsible-block-wrapper:before{bottom:-3px}.admin__control-collapsible .admin__collapsible-block-wrapper.fieldset-wrapper{border:0;margin:0;position:relative}.admin__control-collapsible .admin__collapsible-block-wrapper.fieldset-wrapper .fieldset-wrapper-title{background:#f8f8f8;border:2px solid #ccc}.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .admin__collapsible-title{font-size:1.4rem;font-weight:400;line-height:1;padding:1.6rem 4rem 1.6rem 3.8rem}.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .admin__collapsible-title:before{left:1rem;right:auto;top:1.4rem}.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .action-delete{background-color:transparent;border-color:transparent;box-shadow:none;padding:0;position:absolute;right:1rem;top:1.4rem}.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .action-delete:hover{background-color:transparent;border-color:transparent;box-shadow:none}.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .action-delete:before{content:'\e630';font-size:2rem}.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .action-delete>span{display:none}.admin__control-collapsible .admin__collapsible-content{background-color:#fff;margin-bottom:1rem}.admin__control-collapsible .admin__collapsible-content>.fieldset-wrapper{border:1px solid #ccc;margin-top:-1px;padding:1rem}.admin__control-collapsible .admin__collapsible-content .admin__fieldset{padding:0}.admin__control-collapsible .admin__collapsible-content .admin__field:last-child{margin-bottom:0}.admin__control-table-wrapper{max-width:100%;overflow-x:auto;overflow-y:hidden}.admin__control-table{width:100%}.admin__control-table thead{background-color:transparent}.admin__control-table tbody td{vertical-align:top}.admin__control-table tfoot th{padding-bottom:1.3rem}.admin__control-table tfoot th.validation{padding-bottom:0;padding-top:0}.admin__control-table tfoot td{border-top:1px solid #fff}.admin__control-table tfoot .admin__control-table-pagination{float:right;padding-bottom:0}.admin__control-table tfoot .action-previous{margin-right:.5rem}.admin__control-table tfoot .action-next{margin-left:.9rem}.admin__control-table tr:last-child td{border-bottom:none}.admin__control-table tr._dragover-top td{box-shadow:inset 0 3px 0 0 #008bdb}.admin__control-table tr._dragover-bottom td{box-shadow:inset 0 -3px 0 0 #008bdb}.admin__control-table tr._dragged td,.admin__control-table tr._dragged th{background:#d0d0d0}.admin__control-table td,.admin__control-table th{background-color:#efefef;border:0;border-bottom:1px solid #fff;padding:1.3rem 1rem 1.3rem 0;text-align:left;vertical-align:top}.admin__control-table td:first-child,.admin__control-table th:first-child{padding-left:1rem}.admin__control-table td>.admin__control-select,.admin__control-table td>.admin__control-text,.admin__control-table th>.admin__control-select,.admin__control-table th>.admin__control-text{width:100%}.admin__control-table td._hidden,.admin__control-table th._hidden{display:none}.admin__control-table td._fit,.admin__control-table th._fit{width:1px}.admin__control-table th{color:#303030;font-size:1.4rem;font-weight:600;vertical-align:bottom}.admin__control-table th._required span:after{color:#eb5202;content:'*'}.admin__control-table .control-table-actions-th{white-space:nowrap}.admin__control-table .control-table-actions-cell{padding-top:1.8rem;text-align:center;width:1%}.admin__control-table .control-table-options-th{text-align:center;width:10rem}.admin__control-table .control-table-options-cell{text-align:center}.admin__control-table .control-table-text{line-height:3.2rem}.admin__control-table .col-draggable{padding-top:2.2rem;width:1%}.admin__control-table .action-delete{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.admin__control-table .action-delete:hover{background-color:transparent;border-color:transparent;box-shadow:none}.admin__control-table .action-delete:before{content:'\e630';font-size:2rem}.admin__control-table .action-delete>span{display:none}.admin__control-table .draggable-handle{padding:0}.admin__control-table._dragged{outline:#007bdb solid 1px}.admin__control-table-action{background-color:#efefef;border-top:1px solid #fff;padding:1.3rem 1rem}.admin__dynamic-rows._dragged{opacity:.95;position:absolute;z-index:999}.admin__dynamic-rows.admin__control-table .admin__control-fields>.admin__field{border:0;padding:0}.admin__dynamic-rows td>.admin__field{border:0;margin:0;padding:0}.admin__control-table-pagination{padding-bottom:1rem}.admin__control-table-pagination .admin__data-grid-pager{float:right}.admin__field-tooltip{display:inline-block;margin-top:.5rem;max-width:45px;overflow:visible;vertical-align:top;width:0}.admin__field-tooltip:hover{position:relative;z-index:500}.admin__field-option .admin__field-tooltip{margin-top:.5rem}.admin__field-tooltip .admin__field-tooltip-action{margin-left:2rem;position:relative;z-index:2;display:inline-block;text-decoration:none}.admin__field-tooltip .admin__field-tooltip-action:before{-webkit-font-smoothing:antialiased;font-size:2.2rem;line-height:1;color:#514943;content:'\e633';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.admin__field-tooltip .admin__control-text:focus+.admin__field-tooltip-content,.admin__field-tooltip:hover .admin__field-tooltip-content{display:block}.admin__field-tooltip .admin__field-tooltip-content{bottom:3.8rem;display:none;right:-2.3rem}.admin__field-tooltip .admin__field-tooltip-content:after,.admin__field-tooltip .admin__field-tooltip-content:before{border:1.6rem solid transparent;height:0;width:0;border-top-color:#afadac;content:'';display:block;position:absolute;right:2rem;top:100%;z-index:3}.admin__field-tooltip .admin__field-tooltip-content:after{border-top-color:#fffbbb;margin-top:-1px;z-index:4}.abs-admin__field-tooltip-content,.admin__field-tooltip .admin__field-tooltip-content{box-shadow:0 2px 8px 0 rgba(0,0,0,.3);background:#fffbbb;border:1px solid #afadac;border-radius:1px;padding:1.5rem 2.5rem;position:absolute;width:32rem;z-index:1}.admin__field-fallback-reset{font-size:1.25rem;white-space:nowrap;width:30px}.admin__field-fallback-reset>span{margin-left:.5rem;position:relative}.admin__field-fallback-reset:active{-ms-transform:scale(0.98);transform:scale(0.98)}.admin__field-fallback-reset:before{transition:color .1s linear;content:'\e642';font-size:1.3rem;margin-left:.5rem}.admin__field-fallback-reset:hover{cursor:pointer;text-decoration:none}.admin__field-fallback-reset:focus{background:0 0}.abs-field-size-x-small,.abs-field-sizes.admin__field-x-small>.admin__field-control,.admin__field.admin__field-x-small>.admin__field-control,.admin__fieldset>.admin__field.admin__field-x-small>.admin__field-control,[class*=admin__control-grouped]>.admin__field.admin__field-x-small>.admin__field-control{width:8rem}.abs-field-size-small,.abs-field-sizes.admin__field-small>.admin__field-control,.admin__control-grouped-date>.admin__field-date.admin__field>.admin__field-control,.admin__field.admin__field-small>.admin__field-control,.admin__fieldset>.admin__field.admin__field-small>.admin__field-control,[class*=admin__control-grouped]>.admin__field.admin__field-small>.admin__field-control{width:15rem}.abs-field-size-medium,.abs-field-sizes.admin__field-medium>.admin__field-control,.admin__field.admin__field-medium>.admin__field-control,.admin__fieldset>.admin__field.admin__field-medium>.admin__field-control,[class*=admin__control-grouped]>.admin__field.admin__field-medium>.admin__field-control{width:34rem}.abs-field-size-large,.abs-field-sizes.admin__field-large>.admin__field-control,.admin__field.admin__field-large>.admin__field-control,.admin__fieldset>.admin__field.admin__field-large>.admin__field-control,[class*=admin__control-grouped]>.admin__field.admin__field-large>.admin__field-control{width:64rem}.abs-field-no-label,.admin__field-group-additional,.admin__field-no-label,.admin__fieldset>.admin__field.admin__field-no-label>.admin__field-control{margin-left:calc((100%) * .25 + 30px)}.admin__fieldset{border:0;margin:0;min-width:0;padding:0}.admin__fieldset .fieldset-wrapper.admin__fieldset-section>.fieldset-wrapper-title{padding-left:1rem}.admin__fieldset .fieldset-wrapper.admin__fieldset-section>.fieldset-wrapper-title strong{font-size:1.7rem;font-weight:600}.admin__fieldset .fieldset-wrapper.admin__fieldset-section .admin__fieldset-wrapper-content>.admin__fieldset{padding-top:1rem}.admin__fieldset .fieldset-wrapper.admin__fieldset-section:last-child .admin__fieldset-wrapper-content>.admin__fieldset{padding-bottom:0}.admin__fieldset>.admin__field{border:0;margin:0 0 0 -30px;padding:0}.admin__fieldset>.admin__field:after{clear:both;content:'';display:table}.admin__fieldset>.admin__field>.admin__field-control{width:calc((100%) * .5 - 30px);float:left;margin-left:30px}.admin__fieldset>.admin__field>.admin__field-label{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}.admin__fieldset>.admin__field.admin__field-no-label>.admin__field-label{display:none}.admin__fieldset>.admin__field+.admin__field._empty._no-header{margin-top:-3rem}.admin__fieldset-product-websites{position:relative;z-index:300}.admin__fieldset-note{margin-bottom:2rem}.admin__form-field{border:0;margin:0;padding:0}.admin__field-control .admin__control-text,.admin__field-control .admin__control-textarea,.admin__form-field-control .admin__control-text,.admin__form-field-control .admin__control-textarea{width:100%}.admin__field-label{color:#303030;cursor:pointer;margin:0;text-align:right}.admin__field-label+br{display:none}.admin__field:not(.admin__field-option)>.admin__field-label{font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:3.2rem;padding:0;white-space:nowrap}.admin__field:not(.admin__field-option)>.admin__field-label:before{opacity:0;visibility:hidden;content:'.';margin-left:-7px;overflow:hidden}.admin__field:not(.admin__field-option)>.admin__field-label span{display:inline-block;line-height:1.2;vertical-align:middle;white-space:normal}.admin__field:not(.admin__field-option)>.admin__field-label span[data-config-scope]{position:relative}._required>.admin__field-label>span:after,.required>.admin__field-label>span:after{color:#eb5202;content:'*';display:inline-block;font-size:1.6rem;font-weight:500;line-height:1;margin-left:10px;margin-top:.2rem;position:absolute;z-index:1}._disabled>.admin__field-label{color:#999;cursor:default}.admin__field{margin-bottom:0}.admin__field+.admin__field{margin-top:1.5rem}.admin__field:not(.admin__field-option)~.admin__field-option{margin-top:.5rem}.admin__field.admin__field-option~.admin__field-option{margin-top:.9rem}.admin__field~.admin__field-option:last-child{margin-bottom:.8rem}.admin__fieldset>.admin__field{margin-bottom:3rem;position:relative}.admin__field legend.admin__field-label{opacity:0}.admin__field[data-config-scope]:before{color:gray;content:attr(data-config-scope);display:inline-block;font-size:1.2rem;left:calc((100%) * .75 - 30px);line-height:3.2rem;margin-left:60px;position:absolute;width:calc((100%) * .25 - 30px)}.admin__field-control .admin__field[data-config-scope]:nth-child(n+2):before{content:''}.admin__field._error .admin__field-control [class*=admin__addon-]:before,.admin__field._error .admin__field-control [class*=admin__control-] [class*=admin__addon-]:before,.admin__field._error .admin__field-control>[class*=admin__control-]{border-color:#e22626}.admin__field._disabled,.admin__field._disabled:hover{box-shadow:inherit;cursor:inherit;opacity:1;outline:inherit}.admin__field._hidden{display:none}.admin__field-control+.admin__field-control{margin-top:1.5rem}.admin__field-control._with-tooltip>.admin__control-addon,.admin__field-control._with-tooltip>.admin__control-select,.admin__field-control._with-tooltip>.admin__control-text,.admin__field-control._with-tooltip>.admin__control-textarea,.admin__field-control._with-tooltip>.admin__field-option{max-width:calc(100% - 45px - 4px)}.admin__field-control._with-tooltip .admin__field-tooltip{width:auto}.admin__field-control._with-tooltip .admin__field-option{display:inline-block}.admin__field-control._with-reset>.admin__control-addon,.admin__field-control._with-reset>.admin__control-text,.admin__field-control._with-reset>.admin__control-textarea{width:calc(100% - 30px - .5rem - 4px)}.admin__field-control._with-reset .admin__field-fallback-reset{margin-left:.5rem;margin-top:1rem;vertical-align:top}.admin__field-control._with-reset._with-tooltip>.admin__control-addon,.admin__field-control._with-reset._with-tooltip>.admin__control-text,.admin__field-control._with-reset._with-tooltip>.admin__control-textarea{width:calc(100% - 30px - .5rem - 45px - 8px)}.admin__fieldset>.admin__field-collapsible{margin-bottom:0}.admin__fieldset>.admin__field-collapsible .admin__field-control{border-top:1px solid #ccc;display:block;font-size:1.7rem;font-weight:700;padding:1.7rem 0;width:calc(97%)}.admin__fieldset>.admin__field-collapsible .admin__field-option{padding-top:0}.admin__field-collapsible+div{margin-top:2.5rem}.admin__field-collapsible .admin__control-radio+label:before{height:1.8rem;width:1.8rem}.admin__field-collapsible .admin__control-radio:checked+label:after{left:4px;top:5px}.admin__field-error{background:#fffbbb;border:1px solid #ee7d7d;box-sizing:border-box;color:#555;display:block;font-size:1.2rem;font-weight:400;line-height:1.2;margin:.2rem 0 0;padding:.8rem 1rem .9rem}.admin__field-note{color:#303030;font-size:1.2rem;margin:10px 0 0;padding:0}.admin__additional-info{padding-top:1rem}.admin__field-option{padding-top:.7rem}.admin__field-option .admin__field-label{text-align:left}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2),.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1){display:inline-block}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option{display:inline-block;margin-left:41px;margin-top:0}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option:before,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option:before{background:#cacaca;content:'';display:inline-block;height:20px;margin-left:-20px;position:absolute;width:1px}.admin__field-value{display:inline-block;padding-top:.7rem}.admin__field-service{padding-top:1rem}.admin__control-fields>.admin__field:first-child,[class*=admin__control-grouped]>.admin__field:first-child{position:static}.admin__control-fields>.admin__field:first-child>.admin__field-label,[class*=admin__control-grouped]>.admin__field:first-child>.admin__field-label{width:calc((100%) * .25 - 30px);float:left;margin-left:30px;background:#fff;cursor:pointer;left:0;position:absolute;top:0}.admin__control-fields>.admin__field:first-child>.admin__field-label span:before,[class*=admin__control-grouped]>.admin__field:first-child>.admin__field-label span:before{display:block}.admin__control-fields>.admin__field._disabled>.admin__field-label,[class*=admin__control-grouped]>.admin__field._disabled>.admin__field-label{cursor:default}.admin__control-fields>.admin__field>.admin__field-label span:before,[class*=admin__control-grouped]>.admin__field>.admin__field-label span:before{display:none}.admin__control-fields .admin__field-label~.admin__field-control{width:100%}.admin__control-fields .admin__field-option{padding-top:0}[class*=admin__control-grouped]{box-sizing:border-box;display:table;width:100%}[class*=admin__control-grouped]>.admin__field{display:table-cell;vertical-align:top}[class*=admin__control-grouped]>.admin__field>.admin__field-control{float:none;width:100%}[class*=admin__control-grouped]>.admin__field.admin__field-default,[class*=admin__control-grouped]>.admin__field.admin__field-large,[class*=admin__control-grouped]>.admin__field.admin__field-medium,[class*=admin__control-grouped]>.admin__field.admin__field-small,[class*=admin__control-grouped]>.admin__field.admin__field-x-small{width:1px}[class*=admin__control-grouped]>.admin__field.admin__field-default+.admin__field:last-child,[class*=admin__control-grouped]>.admin__field.admin__field-large+.admin__field:last-child,[class*=admin__control-grouped]>.admin__field.admin__field-medium+.admin__field:last-child,[class*=admin__control-grouped]>.admin__field.admin__field-small+.admin__field:last-child,[class*=admin__control-grouped]>.admin__field.admin__field-x-small+.admin__field:last-child{width:auto}[class*=admin__control-grouped]>.admin__field:nth-child(n+2){padding-left:20px}.admin__control-group-equal{table-layout:fixed}.admin__control-group-equal>.admin__field{width:50%}.admin__field-control-group{margin-top:.8rem}.admin__field-control-group>.admin__field{padding:0}.admin__control-grouped-date>.admin__field-date{white-space:nowrap;width:1px}.admin__control-grouped-date>.admin__field-date.admin__field>.admin__field-control{float:left;position:relative}.admin__control-grouped-date>.admin__field-date+.admin__field:last-child{width:auto}.admin__control-grouped-date>.admin__field-date+.admin__field-date>.admin__field-label{float:left;padding-right:20px}.admin__control-grouped-date .ui-datepicker-trigger{left:100%;top:0}.admin__field-group-columns.admin__field-control.admin__control-grouped{width:calc((100%) * 1 - 30px);float:left;margin-left:30px}.admin__field-group-columns>.admin__field:first-child>.admin__field-label{float:none;margin:0;opacity:1;position:static;text-align:left}.admin__field-group-columns .admin__control-select{width:100%}.admin__field-group-additional{clear:both}.admin__field-group-additional .action-advanced{margin-top:1rem}.admin__field-group-additional .action-secondary{width:100%}.admin__field-group-show-label{white-space:nowrap}.admin__field-group-show-label>.admin__field-control,.admin__field-group-show-label>.admin__field-label{display:inline-block;vertical-align:top}.admin__field-group-show-label>.admin__field-label{margin-right:20px}.admin__field-complex{margin:1rem 0 3rem;padding-left:1rem}.admin__field:not(._hidden)+.admin__field-complex{margin-top:3rem}.admin__field-complex .admin__field-complex-title{clear:both;color:#303030;font-size:1.7rem;font-weight:600;letter-spacing:.025em;margin-bottom:1rem}.admin__field-complex .admin__field-complex-elements{float:right;max-width:40%}.admin__field-complex .admin__field-complex-elements button{margin-left:1rem}.admin__field-complex .admin__field-complex-content{max-width:60%;overflow:hidden}.admin__field-complex .admin__field-complex-text{margin-left:-1rem}.admin__field-complex+.admin__field._empty._no-header{margin-top:-3rem}.admin__legend{float:left;position:static;width:100%}.admin__legend+br{clear:left;display:block;height:0;overflow:hidden}.message{margin-bottom:3rem}.message-icon-top:before{margin-top:0;top:1.8rem}.nav{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;display:none;margin-bottom:3rem;padding:2.2rem 1.5rem 0 0}.nav .btn-group,.nav-bar-outer-actions{float:right;margin-bottom:1.7rem}.nav .btn-group .btn-wrap,.nav-bar-outer-actions .btn-wrap{float:right;margin-left:.5rem;margin-right:.5rem}.nav .btn-group .btn-wrap .btn,.nav-bar-outer-actions .btn-wrap .btn{padding-left:.5rem;padding-right:.5rem}.nav-bar-outer-actions{margin-top:-10.6rem;padding-right:1.5rem}.btn-wrap-try-again{width:9.5rem}.btn-wrap-next,.btn-wrap-prev{width:8.5rem}.nav-bar{counter-reset:i;float:left;margin:0 1rem 1.7rem 0;padding:0;position:relative;white-space:nowrap}.nav-bar:before{background-color:#d4d4d4;background-repeat:repeat-x;background-image:linear-gradient(to bottom,#d1d1d1 0,#d4d4d4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#d4d4d4', GradientType=0);border-bottom:1px solid #d9d9d9;border-top:1px solid #bfbfbf;content:'';height:1rem;left:5.15rem;position:absolute;right:5.15rem;top:.7rem}.nav-bar>li{display:inline-block;font-size:0;position:relative;vertical-align:top;width:10.3rem}.nav-bar>li:first-child:after{display:none}.nav-bar>li:after{background-color:#514943;content:'';height:.5rem;left:calc(-50% + .25rem);position:absolute;right:calc(50% + .7rem);top:.9rem}.nav-bar>li.disabled:before,.nav-bar>li.ui-state-disabled:before{bottom:0;content:'';left:0;position:absolute;right:0;top:0;z-index:1}.nav-bar>li.active~li:after,.nav-bar>li.ui-state-active~li:after{display:none}.nav-bar>li.active~li a:after,.nav-bar>li.ui-state-active~li a:after{background-color:transparent;border-color:transparent;color:#a6a6a6}.nav-bar>li.active a,.nav-bar>li.ui-state-active a{color:#000}.nav-bar>li.active a:hover,.nav-bar>li.ui-state-active a:hover{cursor:default}.nav-bar>li.active a:after,.nav-bar>li.ui-state-active a:after{background-color:#fff;content:''}.nav-bar a{color:#514943;display:block;font-size:1.2rem;font-weight:600;line-height:1.2;overflow:hidden;padding:3rem .5em 0;position:relative;text-align:center;text-overflow:ellipsis}.nav-bar a:hover{text-decoration:none}.nav-bar a:after{background-color:#514943;border:.4rem solid #514943;border-radius:100%;color:#fff;content:counter(i);counter-increment:i;height:1.5rem;left:50%;line-height:.6;margin-left:-.8rem;position:absolute;right:auto;text-align:center;top:.4rem;width:1.5rem}.nav-bar a:before{background-color:#d6d6d6;border:1px solid transparent;border-bottom-color:#d9d9d9;border-radius:100%;border-top-color:#bfbfbf;content:'';height:2.3rem;left:50%;line-height:1;margin-left:-1.2rem;position:absolute;top:0;width:2.3rem}.tooltip{display:block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.19rem;font-weight:400;line-height:1.4;opacity:0;position:absolute;visibility:visible;z-index:10}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-4px;padding:8px 0}.tooltip.right{margin-left:4px;padding:0 8px}.tooltip.bottom{margin-top:4px;padding:8px 0}.tooltip.left{margin-left:-4px;padding:0 8px}.tooltip p:last-child{margin-bottom:0}.tooltip-inner{background-color:#fff;border:1px solid #adadad;border-radius:0;box-shadow:1px 1px 1px #ccc;color:#41362f;max-width:31rem;padding:.5em 1em;text-decoration:none}.tooltip-arrow,.tooltip-arrow:after{border:solid transparent;height:0;position:absolute;width:0}.tooltip-arrow:after{content:'';position:absolute}.tooltip.top .tooltip-arrow,.tooltip.top .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:50%;margin-left:-8px}.tooltip.top-left .tooltip-arrow,.tooltip.top-left .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;margin-bottom:-8px;right:8px}.tooltip.top-right .tooltip-arrow,.tooltip.top-right .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:8px;margin-bottom:-8px}.tooltip.right .tooltip-arrow,.tooltip.right .tooltip-arrow:after{border-right-color:#949494;border-width:8px 8px 8px 0;left:1px;margin-top:-8px;top:50%}.tooltip.right .tooltip-arrow:after{border-right-color:#fff;border-width:6px 7px 6px 0;margin-left:0;margin-top:-6px}.tooltip.left .tooltip-arrow,.tooltip.left .tooltip-arrow:after{border-left-color:#949494;border-width:8px 0 8px 8px;margin-top:-8px;right:0;top:50%}.tooltip.bottom .tooltip-arrow,.tooltip.bottom .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:50%;margin-left:-8px;top:0}.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;margin-top:-8px;right:8px;top:0}.tooltip.bottom-right .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:8px;margin-top:-8px;top:0}.password-strength{display:block;margin:0 -.3rem 1em;white-space:nowrap}.password-strength.password-strength-too-short .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child+.password-strength-item{background-color:#e22626}.password-strength.password-strength-fair .password-strength-item:first-child,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item+.password-strength-item{background-color:#ef672f}.password-strength.password-strength-good .password-strength-item:first-child,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item+.password-strength-item,.password-strength.password-strength-strong .password-strength-item{background-color:#79a22e}.password-strength .password-strength-item{background-color:#ccc;display:inline-block;font-size:0;height:1.4rem;margin-right:.3rem;width:calc(20% - .6rem)}@keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}.progress{background-color:#fafafa;border:1px solid #ccc;clear:left;height:3rem;margin-bottom:3rem;overflow:hidden}.progress-bar{background-color:#79a22e;color:#fff;float:left;font-size:1.19rem;height:100%;line-height:3rem;text-align:center;transition:width .6s ease;width:0}.progress-bar.active{animation:progress-bar-stripes 2s linear infinite}.progress-bar-text-description{margin-bottom:1.6rem}.progress-bar-text-progress{text-align:right}.page-columns .page-inner-sidebar{margin:0 0 3rem}.page-header{margin-bottom:2.7rem;padding-bottom:2rem;position:relative}.page-header:before{border-bottom:1px solid #e3e3e3;bottom:0;content:'';display:block;height:1px;left:3rem;position:absolute;right:3rem}.container .page-header:before{content:normal}.page-header .message{margin-bottom:1.8rem}.page-header .message+.message{margin-top:-1.5rem}.page-header .admin__action-dropdown,.page-header .search-global-input{transition:none}.container .page-header{margin-bottom:0}.page-title-wrapper{margin-top:1.1rem}.container .page-title-wrapper{background:url(../../pub/images/logo.svg) no-repeat;min-height:41px;padding:4px 0 0 45px}.admin__menu .level-0:first-child>a{margin-top:1.6rem}.admin__menu .level-0:first-child>a:after{top:-1.6rem}.admin__menu .level-0:first-child._active>a:after{display:block}.admin__menu .level-0>a{padding-bottom:1.3rem;padding-top:1.3rem}.admin__menu .level-0>a:before{margin-bottom:.7rem}.admin__menu .item-home>a:before{content:'\e611';font-size:2.3rem;padding-top:-.1rem}.admin__menu .item-component>a:before{content:'\e612'}.admin__menu .item-extension>a:before{content:'\e647'}.admin__menu .item-upgrade>a:before{content:'\e614'}.admin__menu .item-system-config>a:before{content:'\e610'}.admin__menu .item-tools>a:before{content:'\e613'}.modal-sub-title{font-size:1.7rem;font-weight:600}.modal-connect-signin .modal-inner-wrap{max-width:80rem}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog{-webkit-overflow-scrolling:touch;bottom:0;box-sizing:border-box;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:999}.ngdialog *,.ngdialog:after,.ngdialog:before{box-sizing:inherit}.ngdialog.ngdialog-disabled-animation *{animation:none!important}.ngdialog.ngdialog-closing .ngdialog-content,.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-animation:ngdialog-fadeout .5s;-webkit-backface-visibility:hidden;animation:ngdialog-fadeout .5s}.ngdialog-overlay{-webkit-animation:ngdialog-fadein .5s;-webkit-backface-visibility:hidden;animation:ngdialog-fadein .5s;background:rgba(0,0,0,.4);bottom:0;left:0;position:fixed;right:0;top:0}.ngdialog-content{-webkit-animation:ngdialog-fadein .5s;-webkit-backface-visibility:hidden;animation:ngdialog-fadein .5s}body.ngdialog-open{overflow:hidden}.component-indicator{border-radius:50%;cursor:help;display:inline-block;height:16px;text-align:center;vertical-align:middle;width:16px}.component-indicator::after,.component-indicator::before{background:#fff;display:block;opacity:0;position:absolute;transition:opacity .2s linear .1s;visibility:hidden}.component-indicator::before{border:1px solid #adadad;border-radius:1px;box-shadow:0 0 2px rgba(0,0,0,.4);content:attr(data-label);font-size:1.2rem;margin:30px 0 0 -10px;min-width:50px;padding:4px 5px}.component-indicator::after{border-color:#999;border-style:solid;border-width:1px 0 0 1px;box-shadow:-1px -1px 1px rgba(0,0,0,.1);content:'';height:10px;margin:9px 0 0 5px;-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.component-indicator:hover::after,.component-indicator:hover::before{opacity:1;transition:opacity .2s linear;visibility:visible}.component-indicator span{display:block;height:16px;overflow:hidden;width:16px}.component-indicator span:before{content:'';display:block;font-family:Icons;font-size:16px;height:100%;line-height:16px;width:100%}.component-indicator._on{background:#79a22e}.component-indicator._off{background:#e22626}.component-indicator._off span:before{background:#fff;height:4px;margin:8px auto 20px;width:12px}.component-indicator._info{background:0 0}.component-indicator._info span{width:21px}.component-indicator._info span:before{color:#008bdb;content:'\e648';font-family:Icons;font-size:16px}.component-indicator._tooltip{background:0 0;margin:0 0 8px 5px}.component-indicator._tooltip a{width:21px}.component-indicator._tooltip a:hover{text-decoration:none}.component-indicator._tooltip a:before{color:#514943;content:'\e633';font-family:Icons;font-size:16px}.col-manager-item-name .data-grid-data{padding-left:5px}.col-manager-item-name .ng-hide+.data-grid-data{padding-left:24px}.col-manager-item-name ._hide-dependencies,.col-manager-item-name ._show-dependencies{cursor:pointer;padding-left:24px;position:relative}.col-manager-item-name ._hide-dependencies:before,.col-manager-item-name ._show-dependencies:before{display:block;font-family:Icons;font-size:12px;left:0;position:absolute;top:1px}.col-manager-item-name ._show-dependencies:before{content:'\e62b'}.col-manager-item-name ._hide-dependencies:before{content:'\e628'}.col-manager-item-name ._no-dependencies{padding-left:24px}.product-modules-block{font-size:1.2rem;padding:15px 0 0}.col-manager-item-name .product-modules-block{padding-left:1rem}.product-modules-descriprion,.product-modules-title{font-weight:700;margin:0 0 7px}.product-modules-list{font-size:1.1rem;list-style:none;margin:0}.col-manager-item-name .product-modules-list{margin-left:15px}.col-manager-item-name .product-modules-list li{padding:0 0 0 15px;position:relative}.product-modules-list li{margin:0 0 .5rem}.product-modules-list .component-indicator{height:10px;left:0;position:absolute;top:3px;width:10px}.module-summary{white-space:nowrap}.module-summary-title{font-size:2.1rem;margin-right:1rem}.app-updater .nav{display:block;margin-bottom:3.1rem;margin-top:-2.8rem}.app-updater .nav-bar-outer-actions{margin-top:1rem;padding-right:0}.app-updater .nav-bar-outer-actions .btn-wrap-cancel{margin-right:2.6rem}.main{padding-bottom:2rem;padding-top:3rem}.menu-wrapper .logo-static{pointer-events:none}.header{display:none}.header .logo{float:left;height:4.1rem;width:3.5rem}.header-title{font-size:2.8rem;letter-spacing:.02em;line-height:1.4;margin:2.5rem 0 3.5rem 5rem}.page-title{margin-bottom:1rem}.page-sub-title{font-size:2rem}.accent-box{margin-bottom:2rem}.accent-box .btn-prime{margin-top:1.5rem}.spinner.side{float:left;font-size:2.4rem;margin-left:2rem;margin-top:-5px}.page-landing{margin:7.6% auto 0;max-width:44rem;text-align:center}.page-landing .logo{height:5.6rem;margin-bottom:2rem;width:19.2rem}.page-landing .text-version{margin-bottom:3rem}.page-landing .text-welcome{margin-bottom:6.5rem}.page-landing .text-terms{margin-bottom:2.5rem;text-align:center}.page-landing .btn-submit,.page-license .license-text{margin-bottom:2rem}.page-license .page-license-footer{text-align:right}.readiness-check-item{margin-bottom:4rem;min-height:2.5rem}.readiness-check-item .spinner{float:left;font-size:2.5rem;margin:-.4rem 0 0 1.7rem}.readiness-check-title{font-size:1.4rem;font-weight:700;margin-bottom:.1rem;margin-left:5.7rem}.readiness-check-content{margin-left:5.7rem;margin-right:22rem;position:relative}.readiness-check-content .readiness-check-title{margin-left:0}.readiness-check-content .list{margin-top:-.3rem}.readiness-check-side{left:100%;padding-left:2.4rem;position:absolute;top:0;width:22rem}.readiness-check-side .side-title{margin-bottom:0}.readiness-check-icon{float:left;margin-left:1.7rem;margin-top:.3rem}.extensions-information{margin-bottom:5rem}.extensions-information h3{font-size:1.4rem;margin-bottom:1.3rem}.extensions-information .message{margin-bottom:2.5rem}.extensions-information .message:before{margin-top:0;top:1.8rem}.extensions-information .extensions-container{padding:0 2rem}.extensions-information .list{margin-bottom:1rem}.extensions-information .list select{cursor:pointer}.extensions-information .list select:disabled{background:#ccc;cursor:default}.extensions-information .list .extension-delete{font-size:1.7rem;padding-top:0}.delete-modal-wrap{padding:0 4% 4rem}.delete-modal-wrap h3{font-size:3.4rem;display:inline-block;font-weight:300;margin:0 0 2rem;padding:.9rem 0 0;vertical-align:top}.delete-modal-wrap .actions{padding:3rem 0 0}.page-web-configuration .form-el-insider-wrap{width:auto}.page-web-configuration .form-el-insider{width:15.4rem}.page-web-configuration .form-el-insider-input .form-el-input{width:16.5rem}.customize-your-store .advanced-modules-count,.customize-your-store .advanced-modules-select{padding-left:1.5rem}.customize-your-store .customize-your-store-advanced{min-width:0}.customize-your-store .message-error:before{margin-top:0;top:1.8rem}.customize-your-store .message-error a{color:#333;text-decoration:underline}.customize-your-store .message-error .form-label:before{background:#fff}.customize-your-store .customize-database-clean p{margin-top:2.5rem}.content-install{margin-bottom:2rem}.console{border:1px solid #ccc;font-family:'Courier New',Courier,monospace;font-weight:300;height:20rem;margin:1rem 0 2rem;overflow-y:auto;padding:1.5rem 2rem 2rem;resize:vertical}.console .text-danger{color:#e22626}.console .text-success{color:#090}.console .hidden{display:none}.content-success .btn-prime{margin-top:1.5rem}.jumbo-title{font-size:3.6rem}.jumbo-title .jumbo-icon{font-size:3.8rem;margin-right:.25em;position:relative;top:.15em}.install-database-clean{margin-top:4rem}.install-database-clean .btn{margin-right:1rem}.page-sub-title{margin-bottom:2.1rem;margin-top:3rem}.multiselect-custom{max-width:71.1rem}.content-install{margin-top:3.7rem}.home-page-inner-wrap{margin:0 auto;max-width:91rem}.setup-home-title{margin-bottom:3.9rem;padding-top:1.8rem;text-align:center}.setup-home-item{background-color:#fafafa;border:1px solid #ccc;color:#333;display:block;margin-bottom:2rem;margin-left:1.3rem;margin-right:1.3rem;min-height:30rem;padding:2rem;text-align:center}.setup-home-item:hover{border-color:#8c8c8c;color:#333;text-decoration:none;transition:border-color .1s linear}.setup-home-item:active{-ms-transform:scale(0.99);transform:scale(0.99)}.setup-home-item:before{display:block;font-size:7rem;margin-bottom:3.3rem;margin-top:4rem}.setup-home-item-component:before,.setup-home-item-extension:before{content:'\e612'}.setup-home-item-module:before{content:'\e647'}.setup-home-item-upgrade:before{content:'\e614'}.setup-home-item-configuration:before{content:'\e610'}.setup-home-item-title{display:block;font-size:1.8rem;letter-spacing:.025em;margin-bottom:1rem}.setup-home-item-description{display:block}.extension-manager-wrap{border:1px solid #bbb;margin:0 0 4rem}.extension-manager-account{font-size:2.1rem;display:inline-block;font-weight:400}.extension-manager-title{font-size:3.2rem;background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;color:#41362f;font-weight:600;line-height:1.2;padding:2rem}.extension-manager-content{padding:2.5rem 2rem 2rem}.extension-manager-items{list-style:none;margin:0;text-align:center}.extension-manager-items .btn{border:1px solid #adadad;display:block;margin:1rem auto 0}.extension-manager-items .item-title{font-size:2.1rem;display:inline-block;text-align:left}.extension-manager-items .item-number{font-size:4.1rem;display:inline-block;line-height:.8;margin:0 5px 1.5rem 0;vertical-align:top}.extension-manager-items .item-date{font-size:2.6rem;margin-top:1px}.extension-manager-items .item-date-title{font-size:1.5rem}.extension-manager-items .item-install{margin:0 0 2rem}.sync-login-wrap{padding:0 10% 4rem}.sync-login-wrap .legend{font-size:2.6rem;color:#eb5202;float:left;font-weight:300;line-height:1.2;margin:-1rem 0 2.5rem;position:static;width:100%}.sync-login-wrap .legend._hidden{display:none}.sync-login-wrap .login-header{font-size:3.4rem;font-weight:300;margin:0 0 2rem}.sync-login-wrap .login-header span{display:inline-block;padding:.9rem 0 0;vertical-align:top}.sync-login-wrap h4{font-size:1.4rem;margin:0 0 2rem}.sync-login-wrap .sync-login-steps{margin:0 0 2rem 1.5rem}.sync-login-wrap .sync-login-steps li{padding:0 0 0 1rem}.sync-login-wrap .form-row .form-label{display:inline-block}.sync-login-wrap .form-row .form-label.required{padding-left:1.5rem}.sync-login-wrap .form-row .form-label.required:after{left:0;position:absolute;right:auto}.sync-login-wrap .form-row{max-width:28rem}.sync-login-wrap .form-actions{display:table;margin-top:-1.3rem}.sync-login-wrap .form-actions .links{display:table-header-group}.sync-login-wrap .form-actions .actions{padding:3rem 0 0}@media all and (max-width:1047px){.admin__menu .submenu li{min-width:19.8rem}.nav{padding-bottom:5.38rem;padding-left:1.5rem;text-align:center}.nav-bar{display:inline-block;float:none;margin-right:0;vertical-align:top}.nav .btn-group,.nav-bar-outer-actions{display:inline-block;float:none;margin-top:-8.48rem;text-align:center;vertical-align:top;width:100%}.nav-bar-outer-actions{padding-right:0}.nav-bar-outer-actions .outer-actions-inner-wrap{display:inline-block}.app-updater .nav{padding-bottom:1.7rem}.app-updater .nav-bar-outer-actions{margin-top:2rem}}@media all and (min-width:768px){.page-layout-admin-2columns-left .page-columns{margin-left:-30px}.page-layout-admin-2columns-left .page-columns:after{clear:both;content:'';display:table}.page-layout-admin-2columns-left .page-columns .main-col{width:calc((100%) * .75 - 30px);float:right}.page-layout-admin-2columns-left .page-columns .side-col{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9{float:left}.col-m-12{width:100%}.col-m-11{width:91.66666667%}.col-m-10{width:83.33333333%}.col-m-9{width:75%}.col-m-8{width:66.66666667%}.col-m-7{width:58.33333333%}.col-m-6{width:50%}.col-m-5{width:41.66666667%}.col-m-4{width:33.33333333%}.col-m-3{width:25%}.col-m-2{width:16.66666667%}.col-m-1{width:8.33333333%}.col-m-pull-12{right:100%}.col-m-pull-11{right:91.66666667%}.col-m-pull-10{right:83.33333333%}.col-m-pull-9{right:75%}.col-m-pull-8{right:66.66666667%}.col-m-pull-7{right:58.33333333%}.col-m-pull-6{right:50%}.col-m-pull-5{right:41.66666667%}.col-m-pull-4{right:33.33333333%}.col-m-pull-3{right:25%}.col-m-pull-2{right:16.66666667%}.col-m-pull-1{right:8.33333333%}.col-m-pull-0{right:auto}.col-m-push-12{left:100%}.col-m-push-11{left:91.66666667%}.col-m-push-10{left:83.33333333%}.col-m-push-9{left:75%}.col-m-push-8{left:66.66666667%}.col-m-push-7{left:58.33333333%}.col-m-push-6{left:50%}.col-m-push-5{left:41.66666667%}.col-m-push-4{left:33.33333333%}.col-m-push-3{left:25%}.col-m-push-2{left:16.66666667%}.col-m-push-1{left:8.33333333%}.col-m-push-0{left:auto}.col-m-offset-12{margin-left:100%}.col-m-offset-11{margin-left:91.66666667%}.col-m-offset-10{margin-left:83.33333333%}.col-m-offset-9{margin-left:75%}.col-m-offset-8{margin-left:66.66666667%}.col-m-offset-7{margin-left:58.33333333%}.col-m-offset-6{margin-left:50%}.col-m-offset-5{margin-left:41.66666667%}.col-m-offset-4{margin-left:33.33333333%}.col-m-offset-3{margin-left:25%}.col-m-offset-2{margin-left:16.66666667%}.col-m-offset-1{margin-left:8.33333333%}.col-m-offset-0{margin-left:0}.page-columns{margin-left:-30px}.page-columns:after{clear:both;content:'';display:table}.page-columns .page-inner-content{width:calc((100%) * .75 - 30px);float:right}.page-columns .page-inner-sidebar{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}}@media all and (min-width:1048px){.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9{float:left}.col-l-12{width:100%}.col-l-11{width:91.66666667%}.col-l-10{width:83.33333333%}.col-l-9{width:75%}.col-l-8{width:66.66666667%}.col-l-7{width:58.33333333%}.col-l-6{width:50%}.col-l-5{width:41.66666667%}.col-l-4{width:33.33333333%}.col-l-3{width:25%}.col-l-2{width:16.66666667%}.col-l-1{width:8.33333333%}.col-l-pull-12{right:100%}.col-l-pull-11{right:91.66666667%}.col-l-pull-10{right:83.33333333%}.col-l-pull-9{right:75%}.col-l-pull-8{right:66.66666667%}.col-l-pull-7{right:58.33333333%}.col-l-pull-6{right:50%}.col-l-pull-5{right:41.66666667%}.col-l-pull-4{right:33.33333333%}.col-l-pull-3{right:25%}.col-l-pull-2{right:16.66666667%}.col-l-pull-1{right:8.33333333%}.col-l-pull-0{right:auto}.col-l-push-12{left:100%}.col-l-push-11{left:91.66666667%}.col-l-push-10{left:83.33333333%}.col-l-push-9{left:75%}.col-l-push-8{left:66.66666667%}.col-l-push-7{left:58.33333333%}.col-l-push-6{left:50%}.col-l-push-5{left:41.66666667%}.col-l-push-4{left:33.33333333%}.col-l-push-3{left:25%}.col-l-push-2{left:16.66666667%}.col-l-push-1{left:8.33333333%}.col-l-push-0{left:auto}.col-l-offset-12{margin-left:100%}.col-l-offset-11{margin-left:91.66666667%}.col-l-offset-10{margin-left:83.33333333%}.col-l-offset-9{margin-left:75%}.col-l-offset-8{margin-left:66.66666667%}.col-l-offset-7{margin-left:58.33333333%}.col-l-offset-6{margin-left:50%}.col-l-offset-5{margin-left:41.66666667%}.col-l-offset-4{margin-left:33.33333333%}.col-l-offset-3{margin-left:25%}.col-l-offset-2{margin-left:16.66666667%}.col-l-offset-1{margin-left:8.33333333%}.col-l-offset-0{margin-left:0}}@media all and (min-width:1440px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-pull-12{right:100%}.col-xl-pull-11{right:91.66666667%}.col-xl-pull-10{right:83.33333333%}.col-xl-pull-9{right:75%}.col-xl-pull-8{right:66.66666667%}.col-xl-pull-7{right:58.33333333%}.col-xl-pull-6{right:50%}.col-xl-pull-5{right:41.66666667%}.col-xl-pull-4{right:33.33333333%}.col-xl-pull-3{right:25%}.col-xl-pull-2{right:16.66666667%}.col-xl-pull-1{right:8.33333333%}.col-xl-pull-0{right:auto}.col-xl-push-12{left:100%}.col-xl-push-11{left:91.66666667%}.col-xl-push-10{left:83.33333333%}.col-xl-push-9{left:75%}.col-xl-push-8{left:66.66666667%}.col-xl-push-7{left:58.33333333%}.col-xl-push-6{left:50%}.col-xl-push-5{left:41.66666667%}.col-xl-push-4{left:33.33333333%}.col-xl-push-3{left:25%}.col-xl-push-2{left:16.66666667%}.col-xl-push-1{left:8.33333333%}.col-xl-push-0{left:auto}.col-xl-offset-12{margin-left:100%}.col-xl-offset-11{margin-left:91.66666667%}.col-xl-offset-10{margin-left:83.33333333%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-8{margin-left:66.66666667%}.col-xl-offset-7{margin-left:58.33333333%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-5{margin-left:41.66666667%}.col-xl-offset-4{margin-left:33.33333333%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-2{margin-left:16.66666667%}.col-xl-offset-1{margin-left:8.33333333%}.col-xl-offset-0{margin-left:0}}@media all and (max-width:767px){.abs-clearer-mobile:after,.nav-bar:after{clear:both;content:'';display:table}.list-definition>dt{float:none}.list-definition>dd{margin-left:0}.form-row .form-label{text-align:left}.form-row .form-label.required:after{position:static}.nav{padding-bottom:0;padding-left:0;padding-right:0}.nav-bar-outer-actions{margin-top:0}.nav-bar{display:block;margin-bottom:0;margin-left:auto;margin-right:auto;width:30.9rem}.nav-bar:before{display:none}.nav-bar>li{float:left;min-height:9rem}.nav-bar>li:after{display:none}.nav-bar>li:nth-child(4n){clear:both}.nav-bar a{line-height:1.4}.tooltip{display:none!important}.readiness-check-content{margin-right:2rem}.readiness-check-side{padding:2rem 0;position:static}.form-el-insider,.form-el-insider-wrap,.page-web-configuration .form-el-insider-input,.page-web-configuration .form-el-insider-input .form-el-input{display:block;width:100%}}@media all and (max-width:479px){.nav-bar{width:23.175rem}.nav-bar>li{width:7.725rem}.nav .btn-group .btn-wrap-try-again,.nav-bar-outer-actions .btn-wrap-try-again{clear:both;display:block;float:none;margin-left:auto;margin-right:auto;margin-top:1rem;padding-top:1rem}} +.abs-action-delete,.abs-icon,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .action-delete:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__field-fallback-reset:before,.admin__menu .level-0>a:before,.admin__page-nav-item-message .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.extensions-information .list .extension-delete,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;font-style:normal;font-weight:400;line-height:1;speak:none}.validation-symbol:after{color:#e22626;content:'*';font-weight:400;margin-left:3px}.abs-modal-overlay,.modals-overlay{background:rgba(0,0,0,.35);bottom:0;left:0;position:fixed;right:0;top:0}.abs-action-delete>span,.abs-visually-hidden,.action-multicheck-wrap .action-multicheck-toggle>span,.admin__actions-switch-checkbox,.admin__control-fields .admin__field:nth-child(n+2):not(.admin__field-option):not(.admin__field-group-show-label)>.admin__field-label,.admin__field-tooltip .admin__field-tooltip-action span,.customize-your-store .customize-your-store-default .legend,.extensions-information .list .extension-delete>span,.form-el-checkbox,.form-el-radio,.selectmenu .action-delete>span,.selectmenu .action-edit>span,.selectmenu .action-save>span,.selectmenu-toggle span,.tooltip .help a span,.tooltip .help span span,[class*=admin__control-grouped]>.admin__field:nth-child(n+2):not(.admin__field-option):not(.admin__field-group-show-label):not(.admin__field-date)>.admin__field-label{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.abs-visually-hidden-reset,.admin__field-group-columns>.admin__field:nth-child(n+2):not(.admin__field-option):not(.admin__field-group-show-label):not(.admin__field-date)>.admin__field-label[class]{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.abs-clearfix:after,.abs-clearfix:before,.action-multicheck-wrap:after,.action-multicheck-wrap:before,.actions-split:after,.actions-split:before,.admin__control-table-pagination:after,.admin__control-table-pagination:before,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:before,.admin__data-grid-filters-footer:after,.admin__data-grid-filters-footer:before,.admin__data-grid-filters:after,.admin__data-grid-filters:before,.admin__data-grid-header-row:after,.admin__data-grid-header-row:before,.admin__field-complex:after,.admin__field-complex:before,.modal-slide .magento-message .insert-title-inner:after,.modal-slide .magento-message .insert-title-inner:before,.modal-slide .main-col .insert-title-inner:after,.modal-slide .main-col .insert-title-inner:before,.page-actions._fixed:after,.page-actions._fixed:before,.page-content:after,.page-content:before,.page-header-actions:after,.page-header-actions:before,.page-main-actions:not(._hidden):after,.page-main-actions:not(._hidden):before{content:'';display:table}.abs-clearfix:after,.action-multicheck-wrap:after,.actions-split:after,.admin__control-table-pagination:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-filters-footer:after,.admin__data-grid-filters:after,.admin__data-grid-header-row:after,.admin__field-complex:after,.modal-slide .magento-message .insert-title-inner:after,.modal-slide .main-col .insert-title-inner:after,.page-actions._fixed:after,.page-content:after,.page-header-actions:after,.page-main-actions:not(._hidden):after{clear:both}.abs-list-reset-styles{margin:0;padding:0;list-style:none}.abs-draggable-handle,.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .draggable-handle,.admin__control-table .draggable-handle,.data-grid .data-grid-draggable-row-cell .draggable-handle{cursor:-webkit-grab;cursor:move;font-size:0;margin-top:-4px;padding:0 1rem 0 0;vertical-align:middle;display:inline-block;text-decoration:none}.abs-draggable-handle:before,.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .draggable-handle:before,.admin__control-table .draggable-handle:before,.data-grid .data-grid-draggable-row-cell .draggable-handle:before{-webkit-font-smoothing:antialiased;font-size:1.8rem;line-height:inherit;color:#9e9e9e;content:'\e617';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.abs-draggable-handle:hover:before,.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .draggable-handle:hover:before,.admin__control-table .draggable-handle:hover:before,.data-grid .data-grid-draggable-row-cell .draggable-handle:hover:before{color:#858585}.abs-config-scope-label,.admin__field:not(.admin__field-option)>.admin__field-label span[data-config-scope]:before{bottom:-1.3rem;color:gray;content:attr(data-config-scope);font-size:1.1rem;font-weight:400;min-width:15rem;position:absolute;right:0;text-transform:lowercase}.abs-word-wrap,.admin__field:not(.admin__field-option)>.admin__field-label{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;box-sizing:border-box}*,:after,:before{box-sizing:inherit}:focus{box-shadow:none;outline:0}._keyfocus :focus{box-shadow:0 0 0 1px #008bdb}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}embed,img,object,video{max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/light/opensans-300.eot);src:url(../fonts/opensans/light/opensans-300.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/light/opensans-300.woff2) format('woff2'),url(../fonts/opensans/light/opensans-300.woff) format('woff'),url(../fonts/opensans/light/opensans-300.ttf) format('truetype'),url('../fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/regular/opensans-400.eot);src:url(../fonts/opensans/regular/opensans-400.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/regular/opensans-400.woff2) format('woff2'),url(../fonts/opensans/regular/opensans-400.woff) format('woff'),url(../fonts/opensans/regular/opensans-400.ttf) format('truetype'),url('../fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');font-weight:400;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/semibold/opensans-600.eot);src:url(../fonts/opensans/semibold/opensans-600.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/semibold/opensans-600.woff2) format('woff2'),url(../fonts/opensans/semibold/opensans-600.woff) format('woff'),url(../fonts/opensans/semibold/opensans-600.ttf) format('truetype'),url('../fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');font-weight:600;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/bold/opensans-700.eot);src:url(../fonts/opensans/bold/opensans-700.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/bold/opensans-700.woff2) format('woff2'),url(../fonts/opensans/bold/opensans-700.woff) format('woff'),url(../fonts/opensans/bold/opensans-700.ttf) format('truetype'),url('../fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');font-weight:700;font-style:normal}html{font-size:62.5%}body{color:#333;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.36;font-size:1.4rem}h1{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2.8rem}h2{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2rem}h3{margin:0 0 2rem;color:#41362f;font-weight:600;line-height:1.2;font-size:1.7rem}h4,h5,h6{font-weight:600;margin-top:0}p{margin:0 0 1em}small{font-size:1.2rem}a{color:#008bdb;text-decoration:none}a:hover{color:#0fa7ff;text-decoration:underline}dl,ol,ul{padding-left:0}nav ol,nav ul{list-style:none;margin:0;padding:0}html{height:100%}body{background-color:#fff;min-height:100%;min-width:102.4rem}.page-wrapper{background-color:#fff;display:inline-block;margin-left:-4px;vertical-align:top;width:calc(100% - 8.8rem)}.page-content{padding-bottom:3rem;padding-left:3rem;padding-right:3rem}.notices-wrapper{margin:0 3rem}.notices-wrapper .messages{margin-bottom:0}.row{margin-left:0;margin-right:0}.row:after{clear:both;content:'';display:table}.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9,.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{min-height:1px;padding-left:0;padding-right:0;position:relative}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}.row-gutter{margin-left:-1.5rem;margin-right:-1.5rem}.row-gutter>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.abs-clearer:after,.extension-manager-content:after,.extension-manager-title:after,.form-row:after,.header:after,.nav:after,body:after{clear:both;content:'';display:table}.ng-cloak{display:none!important}.hide.hide{display:none}.show.show{display:block}.text-center{text-align:center}.text-right{text-align:right}@font-face{font-family:Icons;src:url(../fonts/icons/icons.eot);src:url(../fonts/icons/icons.eot?#iefix) format('embedded-opentype'),url(../fonts/icons/icons.woff2) format('woff2'),url(../fonts/icons/icons.woff) format('woff'),url(../fonts/icons/icons.ttf) format('truetype'),url(../fonts/icons/icons.svg#Icons) format('svg');font-weight:400;font-style:normal}[class*=icon-]{display:inline-block;line-height:1}.icon-failed:before,.icon-success:before,[class*=icon-]:after{font-family:Icons}.icon-success{color:#79a22e}.icon-success:before{content:'\e62d'}.icon-failed{color:#e22626}.icon-failed:before{content:'\e632'}.icon-success-thick:after{content:'\e62d'}.icon-collapse:after{content:'\e615'}.icon-failed-thick:after{content:'\e632'}.icon-expand:after{content:'\e616'}.icon-warning:after{content:'\e623'}.icon-failed-round,.icon-success-round{border-radius:100%;color:#fff;font-size:2.5rem;height:1em;position:relative;text-align:center;width:1em}.icon-failed-round:after,.icon-success-round:after{bottom:0;font-size:.5em;left:0;position:absolute;right:0;top:.45em}.icon-success-round{background-color:#79a22e}.icon-success-round:after{content:'\e62d'}.icon-failed-round{background-color:#e22626}.icon-failed-round:after{content:'\e632'}dl,ol,ul{margin-top:0}.list{padding-left:0}.list>li{display:block;margin-bottom:.75em;position:relative}.list>li>.icon-failed,.list>li>.icon-success{font-size:1.6em;left:-.1em;position:absolute;top:0}.list>li>.icon-success{color:#79a22e}.list>li>.icon-failed{color:#e22626}.list-item-failed,.list-item-icon,.list-item-success,.list-item-warning{padding-left:3.5rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{left:-.1em;position:absolute}.list-item-success:before{color:#79a22e}.list-item-failed:before{color:#e22626}.list-item-warning:before{color:#ef672f}.list-definition{margin:0 0 3rem;padding:0}.list-definition>dt{clear:left;float:left}.list-definition>dd{margin-bottom:1em;margin-left:20rem}.btn-wrap{margin:0 auto}.btn-wrap .btn{width:100%}.btn{background:#e3e3e3;border:none;color:#514943;display:inline-block;font-size:1.6rem;font-weight:600;padding:.45em .9em;text-align:center}.btn:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.btn:active{background-color:#d6d6d6}.btn.disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.ie9 .btn.disabled,.ie9 .btn[disabled]{background-color:#f0f0f0;opacity:1;text-shadow:none}.btn-large{padding:.75em 1.25em}.btn-medium{font-size:1.4rem;padding:.5em 1.5em .6em}.btn-link{background-color:transparent;border:none;color:#008bdb;font-family:1.6rem;font-size:1.5rem}.btn-link:active,.btn-link:focus,.btn-link:hover{background-color:transparent;color:#0fa7ff}.btn-prime{background-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.btn-prime:focus,.btn-prime:hover{background-color:#f65405;background-repeat:repeat-x;background-image:linear-gradient(to right,#e04f00 0,#f65405 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e04f00', endColorstr='#f65405', GradientType=1);color:#fff}.btn-prime:active{background-color:#e04f00;background-repeat:repeat-x;background-image:linear-gradient(to right,#f65405 0,#e04f00 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f65405', endColorstr='#e04f00', GradientType=1);color:#fff}.ie9 .btn-prime.disabled,.ie9 .btn-prime[disabled]{background-color:#fd6e23}.ie9 .btn-prime.disabled:active,.ie9 .btn-prime.disabled:hover,.ie9 .btn-prime[disabled]:active,.ie9 .btn-prime[disabled]:hover{background-color:#fd6e23;-webkit-filter:none;filter:none}.btn-secondary{background-color:#514943;color:#fff}.btn-secondary:hover{background-color:#5f564f;color:#fff}.btn-secondary:active,.btn-secondary:focus{background-color:#574e48;color:#fff}.ie9 .btn-secondary.disabled,.ie9 .btn-secondary[disabled]{background-color:#514943}.ie9 .btn-secondary.disabled:active,.ie9 .btn-secondary[disabled]:active{background-color:#514943;-webkit-filter:none;filter:none}[class*=btn-wrap-triangle]{overflow:hidden;position:relative}[class*=btn-wrap-triangle] .btn:after{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.btn-wrap-triangle-right{display:inline-block;padding-right:1.74rem;position:relative}.btn-wrap-triangle-right .btn{text-indent:.92rem}.btn-wrap-triangle-right .btn:after{border-color:transparent transparent transparent #e3e3e3;border-width:1.84rem 0 1.84rem 1.84rem;left:100%;margin-left:-1.74rem}.btn-wrap-triangle-right .btn:focus:after,.btn-wrap-triangle-right .btn:hover:after{border-left-color:#dbdbdb}.btn-wrap-triangle-right .btn:active:after{border-left-color:#d6d6d6}.btn-wrap-triangle-right .btn:not(.disabled):active,.btn-wrap-triangle-right .btn:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn.disabled:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:after{border-color:transparent transparent transparent #f0f0f0}.ie9 .btn-wrap-triangle-right .btn.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn.disabled:focus:after,.ie9 .btn-wrap-triangle-right .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:focus:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:hover:after{border-left-color:#f0f0f0}.btn-wrap-triangle-right .btn-prime:after{border-color:transparent transparent transparent #eb5202}.btn-wrap-triangle-right .btn-prime:focus:after,.btn-wrap-triangle-right .btn-prime:hover:after{border-left-color:#f65405}.btn-wrap-triangle-right .btn-prime:active:after{border-left-color:#e04f00}.btn-wrap-triangle-right .btn-prime:not(.disabled):active,.btn-wrap-triangle-right .btn-prime:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:after{border-color:transparent transparent transparent #fd6e23}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:hover:after{border-left-color:#fd6e23}.btn-wrap-triangle-left{display:inline-block;padding-left:1.74rem}.btn-wrap-triangle-left .btn{text-indent:-.92rem}.btn-wrap-triangle-left .btn:after{border-color:transparent #e3e3e3 transparent transparent;border-width:1.84rem 1.84rem 1.84rem 0;margin-right:-1.74rem;right:100%}.btn-wrap-triangle-left .btn:focus:after,.btn-wrap-triangle-left .btn:hover:after{border-right-color:#dbdbdb}.btn-wrap-triangle-left .btn:active:after{border-right-color:#d6d6d6}.btn-wrap-triangle-left .btn:not(.disabled):active,.btn-wrap-triangle-left .btn:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn.disabled:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:after{border-color:transparent #f0f0f0 transparent transparent}.ie9 .btn-wrap-triangle-left .btn.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:hover:after{border-right-color:#f0f0f0}.btn-wrap-triangle-left .btn-prime:after{border-color:transparent #eb5202 transparent transparent}.btn-wrap-triangle-left .btn-prime:focus:after,.btn-wrap-triangle-left .btn-prime:hover:after{border-right-color:#e04f00}.btn-wrap-triangle-left .btn-prime:active:after{border-right-color:#f65405}.btn-wrap-triangle-left .btn-prime:not(.disabled):active,.btn-wrap-triangle-left .btn-prime:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:after{border-color:transparent #fd6e23 transparent transparent}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:hover:after{border-right-color:#fd6e23}.btn-expand{background-color:transparent;border:none;color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700;padding:0;position:relative}.btn-expand.expanded:after{border-color:transparent transparent #303030;border-width:0 .285em .36em}.btn-expand.expanded:hover:after{border-color:transparent transparent #3d3d3d}.btn-expand:hover{background-color:transparent;border:none;color:#3d3d3d}.btn-expand:hover:after{border-color:#3d3d3d transparent transparent}.btn-expand:after{border-color:#303030 transparent transparent;border-style:solid;border-width:.36em .285em 0;content:'';height:0;left:100%;margin-left:.5em;margin-top:-.18em;position:absolute;top:50%;width:0}[class*=col-] .form-el-input,[class*=col-] .form-el-select{width:100%}.form-fieldset{border:none;margin:0 0 1em;padding:0}.form-row{margin-bottom:2.2rem}.form-row .form-row{margin-bottom:.4rem}.form-row .form-label{display:block;font-weight:600;padding:.6rem 2.1em 0 0;text-align:right}.form-row .form-label.required{position:relative}.form-row .form-label.required:after{color:#eb5202;content:'*';font-size:1.15em;position:absolute;right:.7em;top:.5em}.form-row .form-el-checkbox+.form-label:before,.form-row .form-el-radio+.form-label:before{top:.7rem}.form-row .form-el-checkbox+.form-label:after,.form-row .form-el-radio+.form-label:after{top:1.1rem}.form-row.form-row-text{padding-top:.6rem}.form-row.form-row-text .action-sign-out{font-size:1.2rem;margin-left:1rem}.form-note{font-size:1.2rem;font-weight:600;margin-top:1rem}.form-el-dummy{display:none}.fieldset{border:0;margin:0;min-width:0;padding:0}input:not([disabled]):focus,textarea:not([disabled]):focus{box-shadow:none}.form-el-input{border:1px solid #adadad;color:#303030;padding:.35em .55em .5em}.form-el-input:hover{border-color:#949494}.form-el-input:focus{border-color:#008bdb}.form-el-input:required{box-shadow:none}.form-label{margin-bottom:.5em}[class*=form-label][for]{cursor:pointer}.form-el-insider-wrap{display:table;width:100%}.form-el-insider-input{display:table-cell;width:100%}.form-el-insider{border-radius:2px;display:table-cell;padding:.43em .55em .5em 0;vertical-align:top}.form-legend,.form-legend-expand,.form-legend-light{display:block;margin:0}.form-legend,.form-legend-expand{font-size:1.25em;font-weight:600;margin-bottom:2.5em;padding-top:1.5em}.form-legend{border-top:1px solid #ccc;width:100%}.form-legend-light{font-size:1em;margin-bottom:1.5em}.form-legend-expand{cursor:pointer;transition:opacity .2s linear}.form-legend-expand:hover{opacity:.85}.form-legend-expand.expanded:after{content:'\e615'}.form-legend-expand:after{content:'\e616';font-family:Icons;font-size:1.15em;font-weight:400;margin-left:.5em;vertical-align:sub}.form-el-checkbox.disabled+.form-label,.form-el-checkbox.disabled+.form-label:before,.form-el-checkbox[disabled]+.form-label,.form-el-checkbox[disabled]+.form-label:before,.form-el-radio.disabled+.form-label,.form-el-radio.disabled+.form-label:before,.form-el-radio[disabled]+.form-label,.form-el-radio[disabled]+.form-label:before{cursor:default;opacity:.5;pointer-events:none}.form-el-checkbox:not(.disabled)+.form-label:hover:before,.form-el-checkbox:not([disabled])+.form-label:hover:before,.form-el-radio:not(.disabled)+.form-label:hover:before,.form-el-radio:not([disabled])+.form-label:hover:before{border-color:#514943}.form-el-checkbox+.form-label,.form-el-radio+.form-label{font-weight:400;padding-left:2em;padding-right:0;position:relative;text-align:left;transition:border-color .1s linear}.form-el-checkbox+.form-label:before,.form-el-radio+.form-label:before{border:1px solid;content:'';left:0;position:absolute;top:.1rem;transition:border-color .1s linear}.form-el-checkbox+.form-label:before{background-color:#fff;border-color:#adadad;border-radius:2px;font-size:1.2rem;height:1.6rem;line-height:1.2;width:1.6rem}.form-el-checkbox:checked+.form-label::before{content:'\e62d';font-family:Icons}.form-el-radio+.form-label:before{background-color:#fff;border:1px solid #adadad;border-radius:100%;height:1.8rem;width:1.8rem}.form-el-radio+.form-label:after{background:0 0;border:.5rem solid transparent;border-radius:100%;content:'';height:0;left:.4rem;position:absolute;top:.5rem;transition:background .3s linear;width:0}.form-el-radio:checked+.form-label{cursor:default}.form-el-radio:checked+.form-label:after{border-color:#514943}.form-select-label{border:1px solid #adadad;color:#303030;cursor:pointer;display:block;overflow:hidden;position:relative;z-index:0}.form-select-label:hover,.form-select-label:hover:after{border-color:#949494}.form-select-label:active,.form-select-label:active:after,.form-select-label:focus,.form-select-label:focus:after{border-color:#008bdb}.form-select-label:after{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:2.36em;z-index:-2}.ie9 .form-select-label:after{display:none}.form-select-label:before{border-color:#303030 transparent transparent;border-style:solid;border-width:5px 4px 0;content:'';height:0;margin-right:-4px;margin-top:-2.5px;position:absolute;right:1.18em;top:50%;width:0;z-index:-1}.ie9 .form-select-label:before{display:none}.form-select-label .form-el-select{background:0 0;border:none;border-radius:0;content:'';display:block;margin:0;padding:.35em calc(2.36em + 10%) .5em .55em;width:110%}.ie9 .form-select-label .form-el-select{padding-right:.55em;width:100%}.form-select-label .form-el-select::-ms-expand{display:none}.form-el-select{background:#fff;border:1px solid #adadad;border-radius:2px;color:#303030;display:block;padding:.35em .55em}.multiselect-custom{border:1px solid #adadad;height:45.2rem;margin:0 0 1.5rem;overflow:auto;position:relative}.multiselect-custom ul{margin:0;padding:0;list-style:none;min-width:29rem}.multiselect-custom .item{padding:1rem 1.4rem}.multiselect-custom .selected{background-color:#e0f6fe}.multiselect-custom .form-label{margin-bottom:0}[class*=form-el-].invalid{border-color:#e22626}[class*=form-el-].invalid+.error-container{display:block}.error-container{background-color:#fffbbb;border:1px solid #ee7d7d;color:#514943;display:none;font-size:1.19rem;margin-top:.2rem;padding:.8rem 1rem .9rem}.check-result-message{margin-left:.5em;min-height:3.68rem;-ms-align-items:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.check-result-text{margin-left:.5em}body:not([class]){min-width:0}.container{display:block;margin:0 auto 4rem;max-width:100rem;padding:0}.abs-action-delete,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .action-delete:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__field-fallback-reset:before,.admin__menu .level-0>a:before,.admin__page-nav-item-message .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.extensions-information .list .extension-delete,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;font-style:normal;font-weight:400;line-height:1;speak:none}.text-stretch{margin-bottom:1.5em}.page-title-jumbo{font-size:4rem;font-weight:300;letter-spacing:-.05em;margin-bottom:2.9rem}.page-title-jumbo-success:before{color:#79a22e;content:'\e62d';font-size:3.9rem;margin-left:-.3rem;margin-right:2.4rem}.list{margin-bottom:3rem}.list-dot .list-item{display:list-item;list-style-position:inside;margin-bottom:1.2rem}.list-title{color:#333;font-size:1.4rem;font-weight:700;letter-spacing:.025em;margin-bottom:1.2rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{font-family:Icons;font-size:1.6rem;top:0}.list-item-success:before{content:'\e62d';font-size:1.6rem}.list-item-failed:before{content:'\e632';font-size:1.4rem;left:.1rem;top:.2rem}.list-item-warning:before{content:'\e623';font-size:1.3rem;left:.2rem}.form-wrap{margin-bottom:3.6rem;padding-top:2.1rem}.form-el-label-horizontal{display:inline-block;font-size:1.3rem;font-weight:600;letter-spacing:.025em;margin-bottom:.4rem;margin-left:.4rem}.app-updater{min-width:768px}body._has-modal{height:100%;overflow:hidden;width:100%}.modals-overlay{z-index:899}.modal-popup,.modal-slide{bottom:0;min-width:0;position:fixed;right:0;top:0;visibility:hidden}.modal-popup._show,.modal-slide._show{visibility:visible}.modal-popup._show .modal-inner-wrap,.modal-slide._show .modal-inner-wrap{-ms-transform:translate(0,0);transform:translate(0,0)}.modal-popup .modal-inner-wrap,.modal-slide .modal-inner-wrap{background-color:#fff;box-shadow:0 0 12px 2px rgba(0,0,0,.35);opacity:1;pointer-events:auto}.modal-slide{left:14.8rem;z-index:900}.modal-slide._show .modal-inner-wrap{-ms-transform:translateX(0);transform:translateX(0)}.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto}.modal-slide._inner-scroll .modal-inner-wrap{overflow-y:visible;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.modal-slide._inner-scroll .modal-footer,.modal-slide._inner-scroll .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.modal-slide._inner-scroll .modal-content{overflow-y:auto}.modal-slide._inner-scroll .modal-footer{margin-top:auto}.modal-slide .modal-content,.modal-slide .modal-footer,.modal-slide .modal-header{padding:0 2.6rem 2.6rem}.modal-slide .modal-header{padding-bottom:2.1rem;padding-top:2.1rem}.modal-popup{z-index:900;left:0;overflow-y:auto}.modal-popup._show .modal-inner-wrap{-ms-transform:translateY(0);transform:translateY(0)}.modal-popup .modal-inner-wrap{margin:5rem auto;width:75%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;box-sizing:border-box;height:auto;left:0;position:absolute;right:0;-ms-transform:translateY(-200%);transform:translateY(-200%);transition-duration:.2s;transition-property:transform,visibility;transition-timing-function:ease}.modal-popup._inner-scroll{overflow-y:visible}.ie10 .modal-popup._inner-scroll,.ie9 .modal-popup._inner-scroll{overflow-y:auto}.modal-popup._inner-scroll .modal-inner-wrap{max-height:90%}.ie10 .modal-popup._inner-scroll .modal-inner-wrap,.ie9 .modal-popup._inner-scroll .modal-inner-wrap{max-height:none}.modal-popup._inner-scroll .modal-content{overflow-y:auto}.modal-popup .modal-content,.modal-popup .modal-footer,.modal-popup .modal-header{padding-left:3rem;padding-right:3rem}.modal-popup .modal-footer,.modal-popup .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.modal-popup .modal-header{padding-bottom:1.2rem;padding-top:3rem}.modal-popup .modal-footer{margin-top:auto;padding-bottom:3rem}.modal-popup .modal-footer-actions{text-align:right}.admin__action-dropdown-wrap{display:inline-block;position:relative}.admin__action-dropdown-wrap .admin__action-dropdown-text:after{left:-6px;right:0}.admin__action-dropdown-wrap .admin__action-dropdown-menu{left:auto;right:0}.admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__action-dropdown-wrap.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin__action-dropdown-wrap._active .admin__action-dropdown-text:after,.admin__action-dropdown-wrap.active .admin__action-dropdown-text:after{background-color:#fff;content:'';height:6px;position:absolute;top:100%}.admin__action-dropdown-wrap._active .admin__action-dropdown-menu,.admin__action-dropdown-wrap.active .admin__action-dropdown-menu{display:block}.admin__action-dropdown-wrap._disabled .admin__action-dropdown{cursor:default}.admin__action-dropdown-wrap._disabled:hover .admin__action-dropdown{color:#333}.admin__action-dropdown{background-color:#fff;border:1px solid transparent;border-bottom:none;border-radius:0;box-shadow:none;color:#333;display:inline-block;font-size:1.3rem;font-weight:400;letter-spacing:-.025em;padding:.7rem 3.3rem .8rem 1.5rem;position:relative;vertical-align:baseline;z-index:2}.admin__action-dropdown._active:after,.admin__action-dropdown.active:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .admin__action-dropdown:after,.active .admin__action-dropdown:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin__action-dropdown:focus,.admin__action-dropdown:hover{background-color:#fff;color:#000;text-decoration:none}.admin__action-dropdown:after{right:1.5rem}.admin__action-dropdown:before{margin-right:1rem}.admin__action-dropdown-menu{background-color:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;line-height:1.36;margin-top:-1px;min-width:120%;padding:.5rem 1rem;position:absolute;top:100%;transition:all .15s ease;z-index:1}.admin__action-dropdown-menu>li{display:block}.admin__action-dropdown-menu>li>a{color:#333;display:block;text-decoration:none;padding:.6rem .5rem}.selectmenu{display:inline-block;position:relative;text-align:left;z-index:1}.selectmenu._active{border-color:#007bdb;z-index:500}.selectmenu .action-delete,.selectmenu .action-edit,.selectmenu .action-save{background-color:transparent;border-color:transparent;box-shadow:none;padding:0 1rem}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover,.selectmenu .action-save:hover{background-color:transparent;border-color:transparent;box-shadow:none}.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before{content:'\e630'}.selectmenu .action-delete,.selectmenu .action-edit{border:0 solid #fff;border-left-width:1px;bottom:0;position:absolute;right:0;top:0;z-index:1}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover{border:0 solid #fff;border-left-width:1px}.selectmenu .action-save:before{content:'\e625'}.selectmenu .action-edit:before{content:'\e631'}.selectmenu-value{display:inline-block}.selectmenu-value input[type=text]{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;border:0;display:inline;margin:0;width:6rem}body._keyfocus .selectmenu-value input[type=text]:focus{box-shadow:none}.selectmenu-toggle{padding-right:3rem;background:0 0;border-width:0;bottom:0;float:right;position:absolute;right:0;top:0;width:0}.selectmenu-toggle._active:after,.selectmenu-toggle.active:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.1rem;top:50%;transition:all .2s linear;width:0}._active .selectmenu-toggle:after,.active .selectmenu-toggle:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:hover:after{border-color:#000 transparent transparent}.selectmenu-toggle:active,.selectmenu-toggle:focus,.selectmenu-toggle:hover{background:0 0}.selectmenu._active .selectmenu-toggle:before{border-color:#007bdb}body._keyfocus .selectmenu-toggle:focus{box-shadow:none}.selectmenu-toggle:before{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';display:block;position:absolute;right:0;top:0;width:3.2rem}.selectmenu-items{background:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;float:left;left:-1px;margin-top:3px;max-width:20rem;min-width:calc(100% + 2px);position:absolute;top:100%}.selectmenu-items._active{display:block}.selectmenu-items ul{float:left;list-style-type:none;margin:0;min-width:100%;padding:0}.selectmenu-items li{-webkit-flex-direction:row;display:flex;-ms-flex-direction:row;flex-direction:row;transition:background .2s linear}.selectmenu-items li:hover{background:#e3e3e3}.selectmenu-items li:last-child .selectmenu-item-action,.selectmenu-items li:last-child .selectmenu-item-action:visited{color:#008bdb;text-decoration:none}.selectmenu-items li:last-child .selectmenu-item-action:hover{color:#0fa7ff;text-decoration:underline}.selectmenu-items li:last-child .selectmenu-item-action:active{color:#ff5501;text-decoration:underline}.selectmenu-item{position:relative;width:100%;z-index:1}li._edit>.selectmenu-item{display:none}.selectmenu-item-edit{display:none;padding:.3rem 4rem .3rem .4rem;position:relative;white-space:nowrap;z-index:1}li:last-child .selectmenu-item-edit{padding-right:.4rem}.selectmenu-item-edit .admin__control-text{margin:0;width:5.4rem}li._edit .selectmenu-item-edit{display:block}.selectmenu-item-action{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background:0 0;border:0;color:#333;display:block;font-size:1.4rem;font-weight:400;min-width:100%;padding:1rem 6rem 1rem 1.5rem;text-align:left;transition:background .2s linear;width:5rem}.selectmenu-item-action:focus,.selectmenu-item-action:hover{background:#e3e3e3}.abs-actions-split-xl .action-default,.page-actions .actions-split .action-default{margin-right:4rem}.abs-actions-split-xl .action-toggle,.page-actions .actions-split .action-toggle{padding-right:4rem}.abs-actions-split-xl .action-toggle:after,.page-actions .actions-split .action-toggle:after{border-width:.9rem .6rem 0;margin-top:-.3rem;right:1.4rem}.actions-split{position:relative;z-index:400}.actions-split._active,.actions-split.active,.actions-split:hover{box-shadow:0 0 0 1px #007bdb}.actions-split._active .action-toggle.action-primary,.actions-split._active .action-toggle.primary,.actions-split.active .action-toggle.action-primary,.actions-split.active .action-toggle.primary{background-color:#ba4000;border-color:#ba4000}.actions-split._active .dropdown-menu,.actions-split.active .dropdown-menu{opacity:1;visibility:visible;display:block}.actions-split .action-default,.actions-split .action-toggle{float:left;margin:0}.actions-split .action-default._active,.actions-split .action-default.active,.actions-split .action-default:hover,.actions-split .action-toggle._active,.actions-split .action-toggle.active,.actions-split .action-toggle:hover{box-shadow:none}.actions-split .action-default{margin-right:3.2rem;min-width:9.3rem}.actions-split .action-toggle{padding-right:3.2rem;border-left-color:rgba(0,0,0,.2);bottom:0;padding-left:0;position:absolute;right:0;top:0}.actions-split .action-toggle._active:after,.actions-split .action-toggle.active:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .actions-split .action-toggle:after,.active .actions-split .action-toggle:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:hover:after{border-color:#000 transparent transparent}.actions-split .action-toggle.action-primary:after,.actions-split .action-toggle.action-secondary:after,.actions-split .action-toggle.primary:after,.actions-split .action-toggle.secondary:after{border-color:#fff transparent transparent}.actions-split .action-toggle>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-select-wrap{display:inline-block;position:relative}.action-select-wrap .action-select{padding-right:3.2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#fff;font-weight:400;text-align:left}.action-select-wrap .action-select._active:after,.action-select-wrap .action-select.active:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .action-select-wrap .action-select:after,.active .action-select-wrap .action-select:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:hover:after{border-color:#000 transparent transparent}.action-select-wrap .action-select:hover,.action-select-wrap .action-select:hover:before{border-color:#878787}.action-select-wrap .action-select:before{background-color:#e3e3e3;border:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:3.2rem}.action-select-wrap .action-select._active{border-color:#007bdb}.action-select-wrap .action-select._active:before{border-color:#007bdb #007bdb #007bdb #adadad}.action-select-wrap .action-select[disabled]{color:#333}.action-select-wrap .action-select[disabled]:after{border-color:#333 transparent transparent}.action-select-wrap._active{z-index:500}.action-select-wrap._active .action-select,.action-select-wrap._active .action-select:before{border-color:#007bdb}.action-select-wrap._active .action-select:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .abs-action-menu .action-submenu,.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu,.action-select-wrap .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:45rem;overflow-y:auto}.action-select-wrap .abs-action-menu .action-submenu ._disabled:hover,.action-select-wrap .abs-action-menu .action-submenu .action-submenu ._disabled:hover,.action-select-wrap .action-menu ._disabled:hover,.action-select-wrap .action-menu .action-submenu ._disabled:hover,.action-select-wrap .actions-split .action-menu .action-submenu ._disabled:hover,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu ._disabled:hover,.action-select-wrap .actions-split .dropdown-menu .action-submenu ._disabled:hover,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu ._disabled:hover{background:#fff}.action-select-wrap .abs-action-menu .action-submenu ._disabled .action-menu-item,.action-select-wrap .abs-action-menu .action-submenu .action-submenu ._disabled .action-menu-item,.action-select-wrap .action-menu ._disabled .action-menu-item,.action-select-wrap .action-menu .action-submenu ._disabled .action-menu-item,.action-select-wrap .actions-split .action-menu .action-submenu ._disabled .action-menu-item,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu ._disabled .action-menu-item,.action-select-wrap .actions-split .dropdown-menu .action-submenu ._disabled .action-menu-item,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu ._disabled .action-menu-item{cursor:default;opacity:.5}.action-select-wrap .action-menu-items{left:0;position:absolute;right:0;top:100%}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu{min-width:100%;position:static}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{position:absolute}.action-multicheck-wrap{display:inline-block;height:1.6rem;padding-top:1px;position:relative;width:3.1rem;z-index:200}.action-multicheck-wrap:hover .action-multicheck-toggle,.action-multicheck-wrap:hover .admin__control-checkbox+label:before{border-color:#878787}.action-multicheck-wrap._active .action-multicheck-toggle,.action-multicheck-wrap._active .admin__control-checkbox+label:before{border-color:#007bdb}.action-multicheck-wrap._active .abs-action-menu .action-submenu,.action-multicheck-wrap._active .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .action-menu,.action-multicheck-wrap._active .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu .action-submenu{opacity:1;visibility:visible;display:block}.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{background-color:#fff}.action-multicheck-wrap._disabled .action-multicheck-toggle,.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{border-color:#adadad;opacity:1}.action-multicheck-wrap .action-multicheck-toggle,.action-multicheck-wrap .admin__control-checkbox,.action-multicheck-wrap .admin__control-checkbox+label{float:left}.action-multicheck-wrap .action-multicheck-toggle{border-radius:0 1px 1px 0;height:1.6rem;margin-left:-1px;padding:0;position:relative;transition:border-color .1s linear;width:1.6rem}.action-multicheck-wrap .action-multicheck-toggle._active:after,.action-multicheck-wrap .action-multicheck-toggle.active:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .action-multicheck-wrap .action-multicheck-toggle:after,.active .action-multicheck-wrap .action-multicheck-toggle:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:hover:after{border-color:#000 transparent transparent}.action-multicheck-wrap .action-multicheck-toggle:focus{border-color:#007bdb}.action-multicheck-wrap .action-multicheck-toggle:after{right:.3rem}.action-multicheck-wrap .abs-action-menu .action-submenu,.action-multicheck-wrap .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap .action-menu,.action-multicheck-wrap .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{left:-1.1rem;margin-top:1px;right:auto;text-align:left}.action-multicheck-wrap .action-menu-item{white-space:nowrap}.admin__action-multiselect-wrap{display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.admin__action-multiselect-wrap.action-select-wrap:focus{box-shadow:none}.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .action-menu,.admin__action-multiselect-wrap.action-select-wrap .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:none;overflow-y:inherit}.admin__action-multiselect-wrap .action-menu-item{transition:background-color .1s linear}.admin__action-multiselect-wrap .action-menu-item._selected{background-color:#e0f6fe}.admin__action-multiselect-wrap .action-menu-item._hover{background-color:#e3e3e3}.admin__action-multiselect-wrap .action-menu-item._unclickable{cursor:default}.admin__action-multiselect-wrap .admin__action-multiselect{border:1px solid #adadad;cursor:pointer;display:block;min-height:3.2rem;padding-right:3.6rem;white-space:normal}.admin__action-multiselect-wrap .admin__action-multiselect:after{bottom:1.25rem;top:auto}.admin__action-multiselect-wrap .admin__action-multiselect:before{height:3.3rem;top:auto}.admin__control-table-wrapper .admin__action-multiselect-wrap{position:static}.admin__control-table-wrapper .admin__action-multiselect-wrap .admin__action-multiselect{position:relative}.admin__control-table-wrapper .admin__action-multiselect-wrap .admin__action-multiselect:before{right:-1px;top:-1px}.admin__control-table-wrapper .admin__action-multiselect-wrap .abs-action-menu .action-submenu,.admin__control-table-wrapper .admin__action-multiselect-wrap .abs-action-menu .action-submenu .action-submenu,.admin__control-table-wrapper .admin__action-multiselect-wrap .action-menu,.admin__control-table-wrapper .admin__action-multiselect-wrap .action-menu .action-submenu,.admin__control-table-wrapper .admin__action-multiselect-wrap .actions-split .action-menu .action-submenu,.admin__control-table-wrapper .admin__action-multiselect-wrap .actions-split .action-menu .action-submenu .action-submenu,.admin__control-table-wrapper .admin__action-multiselect-wrap .actions-split .dropdown-menu .action-submenu,.admin__control-table-wrapper .admin__action-multiselect-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{left:auto;min-width:34rem;right:auto;top:auto;z-index:1}.admin__action-multiselect-wrap .admin__action-multiselect-item-path{color:#a79d95;font-size:1.2rem;font-weight:400;padding-left:1rem}.admin__action-multiselect-actions-wrap{border-top:1px solid #e3e3e3;margin:0 1rem;padding:1rem 0;text-align:center}.admin__action-multiselect-actions-wrap .action-default{font-size:1.3rem;min-width:13rem}.admin__action-multiselect-text{padding:.6rem 1rem}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{text-align:left}.admin__action-multiselect-label{cursor:pointer;position:relative;z-index:1}.admin__action-multiselect-label:before{margin-right:.5rem}._unclickable .admin__action-multiselect-label{cursor:default;font-weight:700}.admin__action-multiselect-search-wrap{border-bottom:1px solid #e3e3e3;margin:0 1rem;padding:1rem 0;position:relative}.admin__action-multiselect-search{padding-right:3rem;width:100%}.admin__action-multiselect-search-label{display:block;font-size:1.5rem;height:1em;overflow:hidden;position:absolute;right:2.2rem;top:1.7rem;width:1em}.admin__action-multiselect-search-label:before{content:'\e60c'}.admin__action-multiselect-search-count{color:#a79d95;margin-top:1rem}.admin__action-multiselect-menu-inner{margin-bottom:0;max-height:46rem;overflow-y:auto}.admin__action-multiselect-menu-inner .admin__action-multiselect-menu-inner{list-style:none;max-height:none;overflow:hidden;padding-left:2.2rem}.admin__action-multiselect-menu-inner ._hidden{display:none}.admin__action-multiselect-crumb{background-color:#f5f5f5;border:1px solid #a79d95;border-radius:1px;display:inline-block;font-size:1.2rem;margin:.3rem -4px .3rem .3rem;padding:.3rem 2.4rem .4rem 1rem;position:relative;transition:border-color .1s linear}.admin__action-multiselect-crumb:hover{border-color:#908379}.admin__action-multiselect-crumb .action-close{bottom:0;font-size:.5em;position:absolute;right:0;top:0;width:2rem}.admin__action-multiselect-crumb .action-close:hover{color:#000}.admin__action-multiselect-crumb .action-close:active,.admin__action-multiselect-crumb .action-close:focus{background-color:transparent}.admin__action-multiselect-crumb .action-close:active{-ms-transform:scale(0.9);transform:scale(0.9)}.admin__action-multiselect-tree .abs-action-menu .action-submenu,.admin__action-multiselect-tree .abs-action-menu .action-submenu .action-submenu,.admin__action-multiselect-tree .action-menu,.admin__action-multiselect-tree .action-menu .action-submenu,.admin__action-multiselect-tree .actions-split .action-menu .action-submenu,.admin__action-multiselect-tree .actions-split .action-menu .action-submenu .action-submenu,.admin__action-multiselect-tree .actions-split .dropdown-menu .action-submenu,.admin__action-multiselect-tree .actions-split .dropdown-menu .action-submenu .action-submenu{min-width:34.7rem}.admin__action-multiselect-tree .abs-action-menu .action-submenu .action-menu-item,.admin__action-multiselect-tree .abs-action-menu .action-submenu .action-submenu .action-menu-item,.admin__action-multiselect-tree .action-menu .action-menu-item,.admin__action-multiselect-tree .action-menu .action-submenu .action-menu-item,.admin__action-multiselect-tree .actions-split .action-menu .action-submenu .action-menu-item,.admin__action-multiselect-tree .actions-split .action-menu .action-submenu .action-submenu .action-menu-item,.admin__action-multiselect-tree .actions-split .dropdown-menu .action-submenu .action-menu-item,.admin__action-multiselect-tree .actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item{margin-top:.1rem}.admin__action-multiselect-tree .action-menu-item{margin-left:4.2rem;position:relative}.admin__action-multiselect-tree .action-menu-item._expended:before{border-left:1px dashed #a79d95;bottom:0;content:'';left:-1rem;position:absolute;top:1rem;width:1px}.admin__action-multiselect-tree .action-menu-item._expended .admin__action-multiselect-dropdown:before{content:'\e615'}.admin__action-multiselect-tree .action-menu-item._with-checkbox .admin__action-multiselect-label{padding-left:2.6rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner{position:relative}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner .admin__action-multiselect-menu-inner{padding-left:3.2rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner .admin__action-multiselect-menu-inner:before{left:4.3rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item{position:relative}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item:last-child:before{height:2.1rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item:after,.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item:before{content:'';left:0;position:absolute}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item:after{border-top:1px dashed #a79d95;height:1px;top:2.1rem;width:5.2rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item:before{border-left:1px dashed #a79d95;height:100%;top:0;width:1px}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._parent:after{width:4.2rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._root{margin-left:-1rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._root:after{left:3.2rem;width:2.2rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._root:before{left:3.2rem;top:1rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._root._parent:after{display:none}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._root:first-child:before{top:2.1rem}.admin__action-multiselect-tree .admin__action-multiselect-menu-inner-item._root:last-child:before{height:1rem}.admin__action-multiselect-tree .admin__action-multiselect-label{line-height:2.2rem;vertical-align:middle;word-break:break-all}.admin__action-multiselect-tree .admin__action-multiselect-label:before{left:0;position:absolute;top:.4rem}.admin__action-multiselect-dropdown{border-radius:50%;height:2.2rem;left:-2.2rem;position:absolute;top:1rem;width:2.2rem;z-index:1}.admin__action-multiselect-dropdown:before{background:#fff;color:#a79d95;content:'\e616';font-size:2.2rem}.admin__actions-switch{display:inline-block;position:relative;vertical-align:middle}.admin__field-control .admin__actions-switch{line-height:3.2rem}.admin__actions-switch+.admin__field-service{min-width:34rem}._disabled .admin__actions-switch-checkbox+.admin__actions-switch-label,.admin__actions-switch-checkbox.disabled+.admin__actions-switch-label{cursor:not-allowed;opacity:.5;pointer-events:none}.admin__actions-switch-checkbox:checked+.admin__actions-switch-label:before{left:15px}.admin__actions-switch-checkbox:checked+.admin__actions-switch-label:after{background:#79a22e}.admin__actions-switch-checkbox:checked+.admin__actions-switch-label .admin__actions-switch-text:before{content:attr(data-text-on)}.admin__actions-switch-checkbox:focus+.admin__actions-switch-label:after,.admin__actions-switch-checkbox:focus+.admin__actions-switch-label:before{border-color:#007bdb}._error .admin__actions-switch-checkbox+.admin__actions-switch-label:after,._error .admin__actions-switch-checkbox+.admin__actions-switch-label:before{border-color:#e22626}.admin__actions-switch-label{cursor:pointer;display:inline-block;height:22px;line-height:22px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.admin__actions-switch-label:after,.admin__actions-switch-label:before{left:0;position:absolute;right:auto;top:0}.admin__actions-switch-label:before{background:#fff;border:1px solid #aaa6a0;border-radius:100%;content:'';display:block;height:22px;transition:left .2s ease-in 0s;width:22px;z-index:1}.admin__actions-switch-label:after{background:#e3e3e3;border:1px solid #aaa6a0;border-radius:12px;content:'';display:block;height:22px;transition:background .2s ease-in 0s;vertical-align:middle;width:37px;z-index:0}.admin__actions-switch-text:before{content:attr(data-text-off);padding-left:47px;white-space:nowrap}.abs-action-delete,.abs-action-reset,.action-close,.admin__field-fallback-reset,.extensions-information .list .extension-delete,.notifications-close,.search-global-field._active .search-global-action{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0}.abs-action-delete:hover,.abs-action-reset:hover,.action-close:hover,.admin__field-fallback-reset:hover,.extensions-information .list .extension-delete:hover,.notifications-close:hover,.search-global-field._active .search-global-action:hover{background-color:transparent;border:none;box-shadow:none}.abs-action-default,.abs-action-pattern,.abs-action-primary,.abs-action-quaternary,.abs-action-secondary,.abs-action-tertiary,.action-default,.action-primary,.action-quaternary,.action-secondary,.action-tertiary,.modal-popup .modal-footer .action-primary,.modal-popup .modal-footer .action-secondary,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.action-secondary,.page-actions .page-actions-buttons>button.primary,.page-actions>button,.page-actions>button.action-primary,.page-actions>button.action-secondary,.page-actions>button.primary,button,button.primary,button.secondary,button.tertiary{border:1px solid;border-radius:0;display:inline-block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:1.36;padding:.6rem 1em;text-align:center;vertical-align:baseline}.abs-action-default.disabled,.abs-action-default[disabled],.abs-action-pattern.disabled,.abs-action-pattern[disabled],.abs-action-primary.disabled,.abs-action-primary[disabled],.abs-action-quaternary.disabled,.abs-action-quaternary[disabled],.abs-action-secondary.disabled,.abs-action-secondary[disabled],.abs-action-tertiary.disabled,.abs-action-tertiary[disabled],.action-default.disabled,.action-default[disabled],.action-primary.disabled,.action-primary[disabled],.action-quaternary.disabled,.action-quaternary[disabled],.action-secondary.disabled,.action-secondary[disabled],.action-tertiary.disabled,.action-tertiary[disabled],.modal-popup .modal-footer .action-primary.disabled,.modal-popup .modal-footer .action-primary[disabled],.modal-popup .modal-footer .action-secondary.disabled,.modal-popup .modal-footer .action-secondary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.action-secondary.disabled,.page-actions .page-actions-buttons>button.action-secondary[disabled],.page-actions .page-actions-buttons>button.disabled,.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions .page-actions-buttons>button[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.action-secondary.disabled,.page-actions>button.action-secondary[disabled],.page-actions>button.disabled,.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],.page-actions>button[disabled],button.disabled,button.primary.disabled,button.primary[disabled],button.secondary.disabled,button.secondary[disabled],button.tertiary.disabled,button.tertiary[disabled],button[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-l,.modal-popup .modal-footer .action-primary,.modal-popup .modal-footer .action-secondary,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.action-secondary,.page-actions .page-actions-buttons>button.primary,.page-actions button,.page-actions>button.action-primary,.page-actions>button.action-secondary,.page-actions>button.primary{font-size:1.6rem;letter-spacing:.025em;padding-bottom:.6875em;padding-top:.6875em}.abs-action-delete,.extensions-information .list .extension-delete{display:inline-block;font-size:1.6rem;margin-left:1.2rem;padding-top:.7rem;text-decoration:none;vertical-align:middle}.abs-action-delete:after,.extensions-information .list .extension-delete:after{color:#666;content:'\e630'}.abs-action-delete:hover:after,.extensions-information .list .extension-delete:hover:after{color:#35302c}.abs-action-button-as-link,.action-advanced,.data-grid .action-delete{line-height:1.36;padding:0;color:#008bdb;text-decoration:none;background:0 0;border:0;display:inline;font-weight:400;border-radius:0}.abs-action-button-as-link:visited,.action-advanced:visited,.data-grid .action-delete:visited{color:#008bdb;text-decoration:none}.abs-action-button-as-link:hover,.action-advanced:hover,.data-grid .action-delete:hover{text-decoration:underline}.abs-action-button-as-link:active,.action-advanced:active,.data-grid .action-delete:active{color:#ff5501;text-decoration:underline}.abs-action-button-as-link:hover,.action-advanced:hover,.data-grid .action-delete:hover{color:#0fa7ff}.abs-action-button-as-link:active,.abs-action-button-as-link:focus,.abs-action-button-as-link:hover,.action-advanced:active,.action-advanced:focus,.action-advanced:hover,.data-grid .action-delete:active,.data-grid .action-delete:focus,.data-grid .action-delete:hover{background:0 0;border:0}.abs-action-button-as-link.disabled,.abs-action-button-as-link[disabled],.action-advanced.disabled,.action-advanced[disabled],.data-grid .action-delete.disabled,.data-grid .action-delete[disabled],fieldset[disabled] .abs-action-button-as-link,fieldset[disabled] .action-advanced,fieldset[disabled] .data-grid .action-delete{color:#008bdb;opacity:.5;cursor:default;pointer-events:none;text-decoration:underline}.abs-action-button-as-link:active,.abs-action-button-as-link:not(:focus),.action-advanced:active,.action-advanced:not(:focus),.data-grid .action-delete:active,.data-grid .action-delete:not(:focus){box-shadow:none}.abs-action-button-as-link:focus,.action-advanced:focus,.data-grid .action-delete:focus{color:#0fa7ff}.abs-action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.abs-action-default:active,.abs-action-default:focus,.abs-action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.abs-action-primary,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary,button.primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.abs-action-primary:active,.abs-action-primary:focus,.abs-action-primary:hover,.page-actions .page-actions-buttons>button.action-primary:active,.page-actions .page-actions-buttons>button.action-primary:focus,.page-actions .page-actions-buttons>button.action-primary:hover,.page-actions .page-actions-buttons>button.primary:active,.page-actions .page-actions-buttons>button.primary:focus,.page-actions .page-actions-buttons>button.primary:hover,.page-actions>button.action-primary:active,.page-actions>button.action-primary:focus,.page-actions>button.action-primary:hover,.page-actions>button.primary:active,.page-actions>button.primary:focus,.page-actions>button.primary:hover,button.primary:active,button.primary:focus,button.primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-primary.disabled,.abs-action-primary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],button.primary.disabled,button.primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-secondary,.modal-popup .modal-footer .action-primary,.page-actions .page-actions-buttons>button.action-secondary,.page-actions>button.action-secondary,button.secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.abs-action-secondary:active,.abs-action-secondary:focus,.abs-action-secondary:hover,.modal-popup .modal-footer .action-primary:active,.modal-popup .modal-footer .action-primary:focus,.modal-popup .modal-footer .action-primary:hover,.page-actions .page-actions-buttons>button.action-secondary:active,.page-actions .page-actions-buttons>button.action-secondary:focus,.page-actions .page-actions-buttons>button.action-secondary:hover,.page-actions>button.action-secondary:active,.page-actions>button.action-secondary:focus,.page-actions>button.action-secondary:hover,button.secondary:active,button.secondary:focus,button.secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-secondary:active,.modal-popup .modal-footer .action-primary:active,.page-actions .page-actions-buttons>button.action-secondary:active,.page-actions>button.action-secondary:active,button.secondary:active{background-color:#35302c}.abs-action-tertiary,.modal-popup .modal-footer .action-secondary,button.tertiary{background-color:transparent;border-color:transparent;text-shadow:none;color:#008bdb}.abs-action-tertiary:active,.abs-action-tertiary:focus,.abs-action-tertiary:hover,.modal-popup .modal-footer .action-secondary:active,.modal-popup .modal-footer .action-secondary:focus,.modal-popup .modal-footer .action-secondary:hover,button.tertiary:active,button.tertiary:focus,button.tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#0fa7ff;text-decoration:underline}.abs-action-quaternary,.page-actions .page-actions-buttons>button,.page-actions>button{background-color:transparent;border-color:transparent;text-shadow:none;color:#333}.abs-action-quaternary:active,.abs-action-quaternary:focus,.abs-action-quaternary:hover,.page-actions .page-actions-buttons>button:active,.page-actions .page-actions-buttons>button:focus,.page-actions .page-actions-buttons>button:hover,.page-actions>button:active,.page-actions>button:focus,.page-actions>button:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#1a1a1a}.abs-action-menu,.actions-split .abs-action-menu .action-submenu,.actions-split .abs-action-menu .action-submenu .action-submenu,.actions-split .action-menu,.actions-split .action-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.actions-split .dropdown-menu{text-align:left;background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu._active,.actions-split .abs-action-menu .action-submenu .action-submenu._active,.actions-split .abs-action-menu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .action-menu._active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .actions-split .dropdown-menu .action-submenu._active,.actions-split .dropdown-menu._active{display:block}.abs-action-menu>li,.actions-split .abs-action-menu .action-submenu .action-submenu>li,.actions-split .abs-action-menu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .action-menu>li,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .actions-split .dropdown-menu .action-submenu>li,.actions-split .dropdown-menu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu>li>a:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .abs-action-menu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .action-menu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu>li>a:hover{text-decoration:none}.abs-action-menu>li._visible,.abs-action-menu>li:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu .action-submenu>li:hover,.actions-split .abs-action-menu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .action-menu>li._visible,.actions-split .action-menu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu>li:hover,.actions-split .dropdown-menu>li._visible,.actions-split .dropdown-menu>li:hover{background-color:#e3e3e3}.abs-action-menu>li:active,.actions-split .abs-action-menu .action-submenu .action-submenu>li:active,.actions-split .abs-action-menu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .action-menu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu>li:active,.actions-split .dropdown-menu>li:active{background-color:#cacaca}.abs-action-menu>li._parent,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent,.actions-split .abs-action-menu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .action-menu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent,.actions-split .dropdown-menu>li._parent{-webkit-flex-direction:row;display:flex;-ms-flex-direction:row;flex-direction:row}.abs-action-menu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-menu-item,.abs-action-menu .item,.actions-split .abs-action-menu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .item,.actions-split .abs-action-menu .action-submenu .item,.actions-split .action-menu .action-menu-item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .item,.actions-split .action-menu .item,.actions-split .actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .actions-split .dropdown-menu .action-submenu .item,.actions-split .dropdown-menu .action-menu-item,.actions-split .dropdown-menu .item{cursor:pointer;display:block;padding:.6875em 1em}.abs-action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu a.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .abs-action-menu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .action-menu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu a.action-menu-item{color:#333}.abs-action-menu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.abs-action-wrap-triangle{position:relative}.abs-action-wrap-triangle .action-default{width:100%}.abs-action-wrap-triangle .action-default:after,.abs-action-wrap-triangle .action-default:before{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.abs-action-wrap-triangle .action-default:active,.abs-action-wrap-triangle .action-default:focus,.abs-action-wrap-triangle .action-default:hover{box-shadow:none}._keyfocus .abs-action-wrap-triangle .action-default:focus{box-shadow:0 0 0 1px #007bdb}.ie10 .abs-action-wrap-triangle .action-default.disabled,.ie10 .abs-action-wrap-triangle .action-default[disabled],.ie9 .abs-action-wrap-triangle .action-default.disabled,.ie9 .abs-action-wrap-triangle .action-default[disabled]{background-color:#fcfcfc;opacity:1;text-shadow:none}.abs-action-wrap-triangle-right{display:inline-block;padding-right:1.6rem;position:relative}.abs-action-wrap-triangle-right .action-default:after,.abs-action-wrap-triangle-right .action-default:before{border-color:transparent transparent transparent #e3e3e3;border-width:1.7rem 0 1.6rem 1.7rem;left:100%;margin-left:-1.7rem}.abs-action-wrap-triangle-right .action-default:before{border-left-color:#949494;right:-1px}.abs-action-wrap-triangle-right .action-default:active:after,.abs-action-wrap-triangle-right .action-default:focus:after,.abs-action-wrap-triangle-right .action-default:hover:after{border-left-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-right .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-right .action-default[disabled]:after{border-color:transparent transparent transparent #fcfcfc}.abs-action-wrap-triangle-right .action-primary:after{border-color:transparent transparent transparent #eb5202}.abs-action-wrap-triangle-right .action-primary:active:after,.abs-action-wrap-triangle-right .action-primary:focus:after,.abs-action-wrap-triangle-right .action-primary:hover:after{border-left-color:#ba4000}.abs-action-wrap-triangle-left{display:inline-block;padding-left:1.6rem}.abs-action-wrap-triangle-left .action-default{text-indent:-.85rem}.abs-action-wrap-triangle-left .action-default:after,.abs-action-wrap-triangle-left .action-default:before{border-color:transparent #e3e3e3 transparent transparent;border-width:1.7rem 1.7rem 1.6rem 0;margin-right:-1.7rem;right:100%}.abs-action-wrap-triangle-left .action-default:before{border-right-color:#949494;left:-1px}.abs-action-wrap-triangle-left .action-default:active:after,.abs-action-wrap-triangle-left .action-default:focus:after,.abs-action-wrap-triangle-left .action-default:hover:after{border-right-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-left .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-left .action-default[disabled]:after{border-color:transparent #fcfcfc transparent transparent}.abs-action-wrap-triangle-left .action-primary:after{border-color:transparent #eb5202 transparent transparent}.abs-action-wrap-triangle-left .action-primary:active:after,.abs-action-wrap-triangle-left .action-primary:focus:after,.abs-action-wrap-triangle-left .action-primary:hover:after{border-right-color:#ba4000}.action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.action-default:active,.action-default:focus,.action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.action-primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.action-primary:active,.action-primary:focus,.action-primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-primary.disabled,.action-primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.action-secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.action-secondary:active,.action-secondary:focus,.action-secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-secondary:active{background-color:#35302c}.action-quaternary,.action-tertiary{background-color:transparent;border-color:transparent;text-shadow:none}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover,.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none}.action-tertiary{color:#008bdb}.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{color:#0fa7ff;text-decoration:underline}.action-quaternary{color:#333}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover{color:#1a1a1a}.action-close>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-close:active{-ms-transform:scale(0.9);transform:scale(0.9)}.action-close:before{content:'\e62f';transition:color .1s linear}.action-close:hover{cursor:pointer;text-decoration:none}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu .action-submenu .action-submenu._active,.abs-action-menu .action-submenu._active,.action-menu .action-submenu._active,.action-menu._active,.actions-split .action-menu .action-submenu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .dropdown-menu .action-submenu._active{display:block}.abs-action-menu .action-submenu .action-submenu>li,.abs-action-menu .action-submenu>li,.action-menu .action-submenu>li,.action-menu>li,.actions-split .action-menu .action-submenu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .dropdown-menu .action-submenu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu .action-submenu .action-submenu>li>a:hover,.abs-action-menu .action-submenu>li>a:hover,.action-menu .action-submenu>li>a:hover,.action-menu>li>a:hover,.actions-split .action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu>li>a:hover{text-decoration:none}.abs-action-menu .action-submenu .action-submenu>li._visible,.abs-action-menu .action-submenu .action-submenu>li:hover,.abs-action-menu .action-submenu>li._visible,.abs-action-menu .action-submenu>li:hover,.action-menu .action-submenu>li._visible,.action-menu .action-submenu>li:hover,.action-menu>li._visible,.action-menu>li:hover,.actions-split .action-menu .action-submenu .action-submenu>li._visible,.actions-split .action-menu .action-submenu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu>li:hover{background-color:#e3e3e3}.abs-action-menu .action-submenu .action-submenu>li:active,.abs-action-menu .action-submenu>li:active,.action-menu .action-submenu>li:active,.action-menu>li:active,.actions-split .action-menu .action-submenu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu>li:active{background-color:#cacaca}.abs-action-menu .action-submenu .action-submenu>li._parent,.abs-action-menu .action-submenu>li._parent,.action-menu .action-submenu>li._parent,.action-menu>li._parent,.actions-split .action-menu .action-submenu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu>li._parent{-webkit-flex-direction:row;display:flex;-ms-flex-direction:row;flex-direction:row}.abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.abs-action-menu .action-submenu>li._parent>.action-menu-item,.action-menu .action-submenu>li._parent>.action-menu-item,.action-menu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .item,.abs-action-menu .action-submenu .item,.action-menu .action-menu-item,.action-menu .action-submenu .action-menu-item,.action-menu .action-submenu .item,.action-menu .item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .item,.actions-split .action-menu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .item{cursor:pointer;display:block;padding:.6875em 1em}.abs-action-menu .action-submenu .action-submenu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu .action-submenu,.ie9 .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .action-menu .action-submenu,.ie9 .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu .action-submenu .action-submenu a.action-menu-item,.abs-action-menu .action-submenu a.action-menu-item,.action-menu .action-submenu a.action-menu-item,.action-menu a.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu a.action-menu-item{color:#333}.abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.abs-action-menu .action-submenu a.action-menu-item:focus,.action-menu .action-submenu a.action-menu-item:focus,.action-menu a.action-menu-item:focus,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.messages .message:last-child{margin:0 0 2rem}.message{background:#fffbbb;border:none;border-radius:0;color:#333;font-size:1.4rem;margin:0 0 1px;padding:1.8rem 4rem 1.8rem 5.5rem;position:relative;text-shadow:none}.message:before{background:0 0;border:0;color:#007bdb;content:'\e61a';font-family:Icons;font-size:1.9rem;font-style:normal;font-weight:400;height:auto;left:1.9rem;line-height:inherit;margin-top:-1.3rem;position:absolute;speak:none;text-shadow:none;top:50%;width:auto}.message-notice:before{color:#007bdb;content:'\e61a'}.message-warning:before{color:#eb5202;content:'\e623'}.message-error{background:#fcc}.message-error:before{color:#e22626;content:'\e632';font-size:1.5rem;left:2.2rem;margin-top:-1rem}.message-success:before{color:#79a22e;content:'\e62d'}.message-spinner:before{display:none}.message-spinner .spinner{font-size:2.5rem;left:1.5rem;position:absolute;top:1.5rem}.message-in-rating-edit{margin-left:1.8rem;margin-right:1.8rem}.modal-popup .action-close,.modal-slide .action-close{color:#736963;position:absolute;right:0;top:0;z-index:1}.modal-popup .action-close:active,.modal-slide .action-close:active{-ms-transform:none;transform:none}.modal-popup .action-close:active:before,.modal-slide .action-close:active:before{font-size:1.8rem}.modal-popup .action-close:hover:before,.modal-slide .action-close:hover:before{color:#58504b}.modal-popup .action-close:before,.modal-slide .action-close:before{font-size:2rem}.modal-popup .action-close:focus,.modal-slide .action-close:focus{background-color:transparent}.modal-popup.prompt .prompt-message{padding:2rem 0}.modal-popup.prompt .prompt-message input{width:100%}.modal-popup.confirm .modal-inner-wrap .message,.modal-popup.prompt .modal-inner-wrap .message{background:#fff}.modal-popup.modal-system-messages .modal-inner-wrap{background:#fffbbb}.modal-popup._image-box .modal-inner-wrap{margin:5rem auto;max-width:78rem;position:static}.modal-popup._image-box .thumbnail-preview{padding-bottom:3rem;text-align:center}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image-block{border:1px solid #ccc;margin:0 auto 2rem;max-width:58rem;padding:2rem}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image{max-height:54rem}.modal-popup .modal-title{font-size:2.4rem;margin-right:6.4rem}.modal-popup .modal-footer{padding-top:2.6rem;text-align:right}.modal-popup .action-close{padding:3rem}.modal-popup .action-close:active,.modal-popup .action-close:focus{background:0 0;padding-right:3.1rem;padding-top:3.1rem}.modal-slide .modal-content-new-attribute{-webkit-overflow-scrolling:touch;overflow:auto;padding-bottom:0}.modal-slide .modal-content-new-attribute iframe{margin-bottom:-2.5rem}.modal-slide .modal-title{font-size:2.1rem;margin-right:5.7rem}.modal-slide .action-close{padding:2.1rem 2.6rem}.modal-slide .action-close:active{padding-right:2.7rem;padding-top:2.2rem}.modal-slide .page-main-actions{margin-bottom:.6rem;margin-top:2.1rem}.modal-slide .magento-message{padding:0 3rem 3rem;position:relative}.modal-slide .magento-message .insert-title-inner,.modal-slide .main-col .insert-title-inner{border-bottom:1px solid #adadad;margin:0 0 2rem;padding-bottom:.5rem}.modal-slide .magento-message .insert-actions,.modal-slide .main-col .insert-actions{float:right}.modal-slide .magento-message .title,.modal-slide .main-col .title{font-size:1.6rem;padding-top:.5rem}.modal-slide .main-col,.modal-slide .side-col{float:left;padding-bottom:0}.modal-slide .main-col:after,.modal-slide .side-col:after{display:none}.modal-slide .side-col{width:20%}.modal-slide .main-col{padding-right:0;width:80%}.modal-slide .content-footer .form-buttons{float:right}.modal-title{font-weight:400;margin-bottom:0;min-height:1em}.modal-title span{font-size:1.4rem;font-style:italic;margin-left:1rem}.spinner{display:inline-block;font-size:4rem;height:1em;margin-right:1.5rem;position:relative;width:1em}.spinner>span:nth-child(1){animation-delay:.27s;-ms-transform:rotate(-315deg);transform:rotate(-315deg)}.spinner>span:nth-child(2){animation-delay:.36s;-ms-transform:rotate(-270deg);transform:rotate(-270deg)}.spinner>span:nth-child(3){animation-delay:.45s;-ms-transform:rotate(-225deg);transform:rotate(-225deg)}.spinner>span:nth-child(4){animation-delay:.54s;-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.spinner>span:nth-child(5){animation-delay:.63s;-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.spinner>span:nth-child(6){animation-delay:.72s;-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.spinner>span:nth-child(7){animation-delay:.81s;-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.spinner>span:nth-child(8){animation-delay:.9;-ms-transform:rotate(0deg);transform:rotate(0deg)}@keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}.spinner>span{-ms-transform:scale(0.4);transform:scale(0.4);animation-name:fade;animation-duration:.72s;animation-iteration-count:infinite;animation-direction:linear;background-color:#fff;border-radius:6px;clip:rect(0 .28571429em .1em 0);height:.1em;margin-top:.5em;position:absolute;width:1em}.ie9 .spinner{background:url(../images/ajax-loader.gif) center no-repeat}.ie9 .spinner>span{display:none}.popup-loading{background:rgba(255,255,255,.8);border-color:#ef672f;color:#ef672f;font-size:14px;font-weight:700;left:50%;margin-left:-100px;padding:100px 0 10px;position:fixed;text-align:center;top:40%;width:200px;z-index:1003}.popup-loading:after{background-image:url(../images/loader-1.gif);content:'';height:64px;left:50%;margin:-32px 0 0 -32px;position:absolute;top:40%;width:64px;z-index:2}.loading-mask,.loading-old{background:rgba(255,255,255,.4);bottom:0;left:0;position:fixed;right:0;top:0;z-index:2003}.loading-mask img,.loading-old img{display:none}.loading-mask p,.loading-old p{margin-top:118px}.loading-mask .loader,.loading-old .loader{background:url(../images/loader-1.gif) 50% 30% no-repeat #f7f3eb;border-radius:5px;bottom:0;color:#575757;font-size:14px;font-weight:700;height:160px;left:0;margin:auto;opacity:.95;position:absolute;right:0;text-align:center;top:0;width:160px}.admin-user{float:right;line-height:1.36;margin-left:.3rem;z-index:490}.admin-user._active .admin__action-dropdown,.admin-user.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin-user .admin__action-dropdown{height:3.3rem;padding:.7rem 2.8rem .4rem 4rem}.admin-user .admin__action-dropdown._active:after,.admin-user .admin__action-dropdown.active:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:after{border-color:#777 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.3rem;top:50%;transition:all .2s linear;width:0}._active .admin-user .admin__action-dropdown:after,.active .admin-user .admin__action-dropdown:after{-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin-user .admin__action-dropdown:before{color:#777;content:'\e600';font-size:2rem;left:1.1rem;margin-top:-1.1rem;position:absolute;top:50%}.admin-user .admin__action-dropdown:hover:before{color:#333}.admin-user .admin__action-dropdown-menu{min-width:20rem;padding-left:1rem;padding-right:1rem}.admin-user .admin__action-dropdown-menu>li>a{padding-left:.5em;padding-right:1.8rem;transition:background-color .1s linear;white-space:nowrap}.admin-user .admin__action-dropdown-menu>li>a:hover{background-color:#e0f6fe;color:#333}.admin-user .admin__action-dropdown-menu>li>a:active{background-color:#c7effd;bottom:-1px;position:relative}.admin-user .admin__action-dropdown-menu .admin-user-name{text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:20rem;overflow:hidden;vertical-align:top}.admin-user-account-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:11.2rem}.search-global{float:right;margin-right:-.3rem;position:relative;z-index:480}.search-global-field{min-width:5rem}.search-global-field._active .search-global-input{background-color:#fff;border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);padding-right:4rem;width:25rem}.search-global-field._active .search-global-action{display:block;height:3.3rem;position:absolute;right:0;text-indent:-100%;top:0;width:5rem;z-index:3}.search-global-field .autocomplete-results{height:3.3rem;position:absolute;right:0;top:0;width:25rem}.search-global-field .search-global-menu{border:1px solid #007bdb;border-top-color:transparent;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin-top:-2px;padding:0;position:absolute;right:0;top:100%;z-index:2}.search-global-field .search-global-menu:after{background-color:#fff;content:'';height:5px;left:0;position:absolute;right:0;top:-5px}.search-global-field .search-global-menu>li{background-color:#fff;border-top:1px solid #ddd;display:block;font-size:1.2rem;padding:.75rem 1.4rem .55rem}.search-global-field .search-global-menu>li._active{background-color:#e0f6fe}.search-global-field .search-global-menu .title{display:block;font-size:1.4rem}.search-global-field .search-global-menu .type{color:#1a1a1a;display:block}.search-global-label{cursor:pointer;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;z-index:2}.search-global-label:active{-ms-transform:scale(0.9);transform:scale(0.9)}.search-global-label:hover:before{color:#000}.search-global-label:before{color:#777;content:'\e60c';font-size:2rem}.search-global-input{background-color:transparent;border:1px solid transparent;font-size:1.4rem;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;transition:all .1s linear,width .3s linear;width:5rem;z-index:1}.search-global-action{display:none}.notifications-wrapper{float:right;line-height:1;position:relative}.notifications-wrapper.active{z-index:500}.notifications-wrapper.active .notifications-action{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.notifications-wrapper.active .notifications-action:after{background-color:#fff;border:none;content:'';display:block;height:6px;left:-6px;margin-top:0;position:absolute;right:0;top:100%;width:auto}.notifications-wrapper .admin__action-dropdown-menu{padding:1rem 0 0;width:32rem}.notifications-action{color:#777;height:3.3rem;padding:.75rem 2rem .65rem}.notifications-action:after{display:none}.notifications-action:before{content:'\e607';font-size:1.9rem;margin-right:0}.notifications-action:active:before{position:relative;top:1px}.notifications-action .notifications-counter{background-color:#e22626;border-radius:1em;color:#fff;display:inline-block;font-size:1.1rem;font-weight:700;left:50%;margin-left:.3em;margin-top:-1.1em;padding:.3em .5em;position:absolute;top:50%}.notifications-entry{line-height:1.36;padding:.6rem 2rem .8rem;position:relative;transition:background-color .1s linear}.notifications-entry:hover{background-color:#e0f6fe}.notifications-entry.notifications-entry-last{margin:0 2rem;padding:.3rem 0 1.3rem;text-align:center}.notifications-entry.notifications-entry-last:hover{background-color:transparent}.notifications-entry+.notifications-entry-last{border-top:1px solid #ddd;padding-bottom:.6rem}.notifications-entry ._cutted{cursor:pointer}.notifications-entry ._cutted .notifications-entry-description-start:after{content:'...'}.notifications-entry-title{color:#ef672f;display:block;font-size:1.1rem;font-weight:700;margin-bottom:.7rem;margin-right:1em}.notifications-entry-description{color:#333;font-size:1.1rem;margin-bottom:.8rem}.notifications-entry-description-end{display:none}.notifications-entry-description-end._show{display:inline}.notifications-entry-time{color:#777;font-size:1.1rem}.notifications-close{line-height:1;padding:1rem;position:absolute;right:0;top:.6rem}.notifications-close:before{color:#ccc;content:'\e620';transition:color .1s linear}.notifications-close:hover:before{color:#b3b3b3}.notifications-close:active{-ms-transform:scale(0.95);transform:scale(0.95)}.page-header-actions{padding-top:1.1rem}.page-header-hgroup{padding-right:1.5rem}.page-title{color:#333;font-size:2.8rem}.page-header{padding:1.5rem 3rem}.menu-wrapper{display:inline-block;position:relative;width:8.8rem;z-index:700}.menu-wrapper:before{background-color:#373330;bottom:0;content:'';left:0;position:fixed;top:0;width:8.8rem;z-index:699}.menu-wrapper._fixed{left:0;position:fixed;top:0}.menu-wrapper._fixed~.page-wrapper{margin-left:8.8rem}.menu-wrapper .logo{display:block;height:8.8rem;padding:2.4rem 0 2.2rem;position:relative;text-align:center;z-index:700}._keyfocus .menu-wrapper .logo:focus{background-color:#4a4542;box-shadow:none}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a{background-color:#373330}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a:after{display:none}.menu-wrapper .logo:hover .logo-img{-webkit-filter:brightness(1.1);filter:brightness(1.1)}.menu-wrapper .logo:active .logo-img{-ms-transform:scale(0.95);transform:scale(0.95)}.menu-wrapper .logo .logo-img{height:4.2rem;transition:-webkit-filter .2s linear,filter .2s linear,transform .1s linear;width:3.5rem}.abs-menu-separator,.admin__menu .item-partners>a:after,.admin__menu .level-0:first-child>a:after{background-color:#736963;content:'';display:block;height:1px;left:0;margin-left:16%;position:absolute;top:0;width:68%}.admin__menu li{display:block}.admin__menu .level-0:first-child>a{position:relative}.admin__menu .level-0._active>a,.admin__menu .level-0:hover>a{color:#f7f3eb}.admin__menu .level-0._active>a{background-color:#524d49}.admin__menu .level-0:hover>a{background-color:#4a4542}.admin__menu .level-0>a{color:#aaa6a0;display:block;font-size:1rem;letter-spacing:.025em;min-height:6.2rem;padding:1.2rem .5rem .5rem;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;transition:background-color .1s linear;word-wrap:break-word;z-index:700}.admin__menu .level-0>a:focus{box-shadow:none}.admin__menu .level-0>a:before{content:'\e63a';display:block;font-size:2.2rem;height:2.2rem}.admin__menu .level-0>.submenu{background-color:#4a4542;box-shadow:0 0 3px #000;left:100%;min-height:calc(8.8rem + 2rem + 100%);padding:2rem 0 0;position:absolute;top:0;-ms-transform:translateX(-100%);transform:translateX(-100%);transition-duration:.3s;transition-property:transform,visibility;transition-timing-function:ease-in-out;visibility:hidden;z-index:697}.ie10 .admin__menu .level-0>.submenu,.ie11 .admin__menu .level-0>.submenu{height:100%}.admin__menu .level-0._show>.submenu{-ms-transform:translateX(0);transform:translateX(0);visibility:visible;z-index:698}.admin__menu .level-1{margin-left:1.5rem;margin-right:1.5rem}.admin__menu [class*=level-]:not(.level-0) a{display:block;padding:1.25rem 1.5rem}.admin__menu [class*=level-]:not(.level-0) a:hover{background-color:#403934}.admin__menu [class*=level-]:not(.level-0) a:active{background-color:#322c29;padding-bottom:1.15rem;padding-top:1.35rem}.admin__menu .submenu li{min-width:23.8rem}.admin__menu .submenu a{color:#fcfcfc;transition:background-color .1s linear}.admin__menu .submenu a:focus,.admin__menu .submenu a:hover{box-shadow:none;text-decoration:none}._keyfocus .admin__menu .submenu a:focus{background-color:#403934}._keyfocus .admin__menu .submenu a:active{background-color:#322c29}.admin__menu .submenu .parent{margin-bottom:4.5rem}.admin__menu .submenu .parent .submenu-group-title{color:#a79d95;display:block;font-size:1.6rem;font-weight:600;margin-bottom:.7rem;padding:1.25rem 1.5rem;pointer-events:none}.admin__menu .submenu .column{display:table-cell}.admin__menu .submenu-title{color:#fff;display:block;font-size:2.2rem;font-weight:600;margin-bottom:4.2rem;margin-left:3rem;margin-right:5.8rem}.admin__menu .submenu-sub-title{color:#fff;display:block;font-size:1.2rem;margin:-3.8rem 5.8rem 3.8rem 3rem}.admin__menu .action-close{padding:2.4rem 2.8rem;position:absolute;right:0;top:0}.admin__menu .action-close:before{color:#a79d95;font-size:1.7rem}.admin__menu .action-close:hover:before{color:#fff}.admin__menu .item-dashboard>a:before{content:'\e604';font-size:1.8rem;padding-top:.4rem}.admin__menu .item-sales>a:before{content:'\e60b'}.admin__menu .item-catalog>a:before{content:'\e608'}.admin__menu .item-customer>a:before{content:'\e603';font-size:2.6rem;position:relative;top:-.4rem}.admin__menu .item-marketing>a:before{content:'\e609';font-size:2rem;padding-top:.2rem}.admin__menu .item-content>a:before{content:'\e602';font-size:2.4rem;position:relative;top:-.2rem}.admin__menu .item-report>a:before{content:'\e60a'}.admin__menu .item-stores>a:before{content:'\e60d';font-size:1.9rem;padding-top:.3rem}.admin__menu .item-system>a:before{content:'\e610'}.admin__menu .item-partners._active>a:after,.admin__menu .item-system._current+.item-partners>a:after{display:none}.admin__menu .item-partners>a{padding-bottom:1rem}.admin__menu .item-partners>a:before{content:'\e612'}.admin__menu .level-0>.submenu>ul>.level-1:only-of-type>.submenu-group-title,.admin__menu .submenu .column:only-of-type .submenu-group-title{display:none}.admin__menu-overlay{bottom:0;left:0;position:fixed;right:0;top:0;z-index:697}.store-switcher{color:#333;float:left;font-size:1.3rem;margin-top:.7rem}.store-switcher .admin__action-dropdown{background-color:#f8f8f8;margin-left:.5em}.store-switcher .dropdown{display:inline-block;position:relative}.store-switcher .dropdown:after,.store-switcher .dropdown:before{content:'';display:table}.store-switcher .dropdown:after{clear:both}.store-switcher .dropdown .action.toggle{cursor:pointer;display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e607';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle:active:after,.store-switcher .dropdown .action.toggle:hover:after{color:#333}.store-switcher .dropdown .action.toggle.active{display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle.active:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e618';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle.active:active:after,.store-switcher .dropdown .action.toggle.active:hover:after{color:#333}.store-switcher .dropdown .dropdown-menu{margin:4px 0 0;padding:0;list-style:none;background:#fff;border:1px solid #aaa6a0;min-width:19.5rem;z-index:100;box-sizing:border-box;display:none;position:absolute;top:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.store-switcher .dropdown .dropdown-menu li{margin:0;padding:0}.store-switcher .dropdown .dropdown-menu li:hover{background:0 0;cursor:pointer}.store-switcher .dropdown.active{overflow:visible}.store-switcher .dropdown.active .dropdown-menu{display:block}.store-switcher .dropdown-menu{left:0;margin-top:.5em;max-height:250px;overflow-y:auto;padding-top:.25em}.store-switcher .dropdown-menu li{border:0;cursor:default}.store-switcher .dropdown-menu li:hover{cursor:default}.store-switcher .dropdown-menu li a,.store-switcher .dropdown-menu li span{color:#333;display:block;padding:.5rem 1.3rem}.store-switcher .dropdown-menu li a{text-decoration:none}.store-switcher .dropdown-menu li a:hover{background:#e9e9e9}.store-switcher .dropdown-menu li span{color:#adadad;cursor:default}.store-switcher .dropdown-menu li.current span{background:#eee;color:#333}.store-switcher .dropdown-menu .store-switcher-store a,.store-switcher .dropdown-menu .store-switcher-store span{padding-left:2.6rem}.store-switcher .dropdown-menu .store-switcher-store-view a,.store-switcher .dropdown-menu .store-switcher-store-view span{padding-left:3.9rem}.store-switcher .dropdown-menu .dropdown-toolbar{border-top:1px solid #ebebeb;margin-top:1rem}.store-switcher .dropdown-menu .dropdown-toolbar a:before{content:'\e610';margin-right:.25em;position:relative;top:1px}.store-switcher-label{font-weight:700}.store-switcher-alt{display:inline-block;position:relative}.store-switcher-alt.active .dropdown-menu{display:block}.store-switcher-alt .dropdown-menu{margin-top:2px;white-space:nowrap}.store-switcher-alt .dropdown-menu ul{list-style:none;margin:0;padding:0}.store-switcher-alt strong{color:#a79d95;display:block;font-size:14px;font-weight:500;line-height:1.333;padding:5px 10px}.store-switcher-alt .store-selected{color:#676056;cursor:pointer;font-size:12px;font-weight:400;line-height:1.333}.store-switcher-alt .store-selected:after{-webkit-font-smoothing:antialiased;color:#afadac;content:'\e02c';font-style:normal;font-weight:400;margin:0 0 0 3px;speak:none;vertical-align:text-top}.store-switcher-alt .store-switcher-store,.store-switcher-alt .store-switcher-website{padding:0}.store-switcher-alt .store-switcher-store:hover,.store-switcher-alt .store-switcher-website:hover{background:0 0}.store-switcher-alt .manage-stores,.store-switcher-alt .store-switcher-all,.store-switcher-alt .store-switcher-store-view{padding:0}.store-switcher-alt .manage-stores>a,.store-switcher-alt .store-switcher-all>a{color:#676056;display:block;font-size:12px;padding:8px 15px;text-decoration:none}.store-switcher-website{margin:5px 0 0}.store-switcher-website>strong{padding-left:13px}.store-switcher-store{margin:1px 0 0}.store-switcher-store>strong{padding-left:20px}.store-switcher-store>ul{margin-top:1px}.store-switcher-store-view:first-child{border-top:1px solid #e5e5e5}.store-switcher-store-view>a{color:#333;display:block;font-size:13px;padding:5px 15px 5px 24px;text-decoration:none}.store-view:not(.store-switcher){float:left}.store-view .store-switcher-label{display:inline-block;margin-top:1rem}.tooltip{margin-left:.5em}.tooltip .help a,.tooltip .help span{cursor:pointer;display:inline-block;height:22px;position:relative;vertical-align:middle;width:22px;z-index:2}.tooltip .help a:before,.tooltip .help span:before{color:#333;content:'\e633';font-size:1.7rem}.tooltip .help a:hover{text-decoration:none}.tooltip .tooltip-content{background:#000;border-radius:3px;color:#fff;display:none;margin-left:-19px;margin-top:10px;max-width:200px;padding:4px 8px;position:absolute;text-shadow:none;z-index:20}.tooltip .tooltip-content:before{border-bottom:5px solid #000;border-left:5px solid transparent;border-right:5px solid transparent;content:'';height:0;left:20px;opacity:.8;position:absolute;top:-5px;width:0}.tooltip .tooltip-content.loading{position:absolute}.tooltip .tooltip-content.loading:before{border-bottom-color:rgba(0,0,0,.3)}.tooltip:hover>.tooltip-content{display:block}.page-actions._fixed,.page-main-actions:not(._hidden){background:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;padding:1.5rem}.page-main-actions{margin:0 0 3rem}.page-main-actions._hidden .store-switcher{display:none}.page-main-actions._hidden .page-actions-placeholder{min-height:50px}.page-actions{float:right}.page-main-actions .page-actions._fixed{left:8.8rem;position:fixed;right:0;top:0;z-index:501}.page-main-actions .page-actions._fixed .page-actions-inner:before{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333;content:attr(data-title);float:left;font-size:2.8rem;margin-top:.3rem;max-width:50%}.page-actions .page-actions-buttons>button,.page-actions>button{float:right;margin-left:1.3rem}.page-actions .page-actions-buttons>button.action-back,.page-actions .page-actions-buttons>button.back,.page-actions>button.action-back,.page-actions>button.back{float:left;-ms-flex-order:-1;order:-1}.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before{content:'\e626';margin-right:.5em;position:relative;top:1px}.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary{-ms-flex-order:2;order:2}.page-actions .page-actions-buttons>button.save:not(.primary),.page-actions>button.save:not(.primary){-ms-flex-order:1;order:1}.page-actions .page-actions-buttons>button.delete,.page-actions>button.delete{-ms-flex-order:-1;order:-1}.page-actions .actions-split{float:right;margin-left:1.3rem;-ms-flex-order:2;order:2}.page-actions .actions-split .dropdown-menu .item{display:block}.page-actions-buttons{float:right;-ms-flex-pack:end;justify-content:flex-end;display:-ms-flexbox;display:flex}.customer-index-edit .page-actions-buttons{background-color:transparent}.admin__page-nav{background:#f1f1f1;border:1px solid #e3e3e3}.admin__page-nav._collapsed:first-child{border-bottom:none}.admin__page-nav._collapsed._show{border-bottom:1px solid #e3e3e3}.admin__page-nav._collapsed._show ._collapsible{background:#f1f1f1}.admin__page-nav._collapsed._show ._collapsible:after{content:'\e62b'}.admin__page-nav._collapsed._show ._collapsible+.admin__page-nav-items{display:block}.admin__page-nav._collapsed._hide .admin__page-nav-title-messages,.admin__page-nav._collapsed._hide .admin__page-nav-title-messages ._active{display:inline-block}.admin__page-nav+._collapsed{border-bottom:none;border-top:none}.admin__page-nav-title{border-bottom:1px solid #e3e3e3;color:#303030;display:block;font-size:1.4rem;line-height:1.2;margin:0 0 -1px;padding:1.8rem 1.5rem;position:relative;text-transform:uppercase}.admin__page-nav-title._collapsible{background:#fff;cursor:pointer;margin:0;padding-right:3.5rem;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-title._collapsible+.admin__page-nav-items{display:none;margin-top:-1px}.admin__page-nav-title._collapsible:after{content:'\e628';font-size:1.3rem;font-weight:700;position:absolute;right:1.8rem;top:2rem}.admin__page-nav-title._collapsible:hover{background:#f1f1f1}.admin__page-nav-title._collapsible:last-child{margin:0 0 -1px}.admin__page-nav-title strong{font-weight:700}.admin__page-nav-title .admin__page-nav-title-messages{display:none}.admin__page-nav-items{list-style-type:none;margin:0;padding:1rem 0 1.3rem}.admin__page-nav-item{border-left:3px solid transparent;margin-left:.7rem;padding:0;position:relative;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-item:hover{border-color:#e4e4e4}.admin__page-nav-item:hover .admin__page-nav-link{background:#e4e4e4;color:#303030;text-decoration:none}.admin__page-nav-item._active,.admin__page-nav-item.ui-state-active{border-color:#eb5202}.admin__page-nav-item._active .admin__page-nav-link,.admin__page-nav-item.ui-state-active .admin__page-nav-link{background:#fff;border-color:#e3e3e3;border-right:1px solid #fff;color:#303030;margin-right:-1px;font-weight:600}.admin__page-nav-item._loading:before,.admin__page-nav-item.ui-tabs-loading:before{display:none}.admin__page-nav-item._loading .admin__page-nav-item-message-loader,.admin__page-nav-item.ui-tabs-loading .admin__page-nav-item-message-loader{display:inline-block}.admin__page-nav-link{border:1px solid transparent;border-width:1px 0;color:#303030;display:block;font-weight:500;line-height:1.2;margin:0 0 -1px;padding:2rem 4rem 2rem 1rem;transition:border-color .1s ease-out,background-color .1s ease-out;word-wrap:break-word}.admin__page-nav-item-messages{display:inline-block}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:3.7rem;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-size:1.4rem;font-weight:400;left:-1rem;line-height:1.36;padding:1.5rem;position:absolute;text-transform:none;width:27rem;word-break:normal;z-index:2}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after,.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border:15px solid transparent;height:0;width:0;border-top-color:#f1f1f1;content:'';display:block;left:2rem;position:absolute;top:100%;z-index:3}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after{border-top-color:#f1f1f1;margin-top:-1px;z-index:4}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border-top-color:#bfbfbf;margin-top:1px}.admin__page-nav-item-message-loader{display:none;margin-top:-1rem;position:absolute;right:0;top:50%}.admin__page-nav-item-message-loader .spinner{font-size:2rem;margin-right:1.5rem}._loading>.admin__page-nav-item-messages .admin__page-nav-item-message-loader{display:inline-block}.admin__page-nav-item-message{position:relative}.admin__page-nav-item-message:hover{z-index:500}.admin__page-nav-item-message:hover .admin__page-nav-item-message-tooltip{display:block}.admin__page-nav-item-message._changed,.admin__page-nav-item-message._error{display:none}.admin__page-nav-item-message .admin__page-nav-item-message-icon{display:inline-block;font-size:1.4rem;padding-left:.8em;vertical-align:baseline}.admin__page-nav-item-message .admin__page-nav-item-message-icon:after{color:#666;content:'\e631'}._changed:not(._error)>.admin__page-nav-item-messages ._changed{display:inline-block}._error .admin__page-nav-item-message-icon:after{color:#eb5202;content:'\e623'}._error>.admin__page-nav-item-messages ._error{display:inline-block}._error>.admin__page-nav-item-messages ._error .spinner{font-size:2rem;margin-right:1.5rem}._error .admin__page-nav-item-message-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:3.7rem;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;left:-1rem;line-height:1.36;padding:2rem;position:absolute;text-transform:none;width:27rem;word-break:normal;z-index:2}._error .admin__page-nav-item-message-tooltip:after,._error .admin__page-nav-item-message-tooltip:before{border:15px solid transparent;height:0;width:0;border-top-color:#f1f1f1;content:'';display:block;left:2rem;position:absolute;top:100%;z-index:3}._error .admin__page-nav-item-message-tooltip:after{border-top-color:#f1f1f1;margin-top:-1px;z-index:4}._error .admin__page-nav-item-message-tooltip:before{border-top-color:#bfbfbf}.admin__data-grid-wrap-static .data-grid{box-sizing:border-box}.admin__data-grid-wrap-static .data-grid thead{color:#333}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td{background-color:#f5f5f5}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td._dragging{background-color:rgba(245,245,245,.95)}.admin__data-grid-wrap-static .data-grid ul{margin-left:1rem;padding-left:1rem}.admin__data-grid-wrap-static .admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:0;position:absolute;right:0;top:0;z-index:399}.admin__data-grid-wrap-static .admin__data-grid-loading-mask .grid-loader{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-filters-actions-wrap{float:right}.data-grid-search-control-wrap{float:left;max-width:45.5rem;position:relative;width:35%}.data-grid-search-control-wrap :-ms-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-webkit-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-moz-placeholder{font-style:italic}.data-grid-search-control-wrap .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:.6rem 2rem .2rem;position:absolute;right:0;top:1px}.data-grid-search-control-wrap .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.data-grid-search-control-wrap .action-submit:active{-ms-transform:scale(0.9);transform:scale(0.9)}.data-grid-search-control-wrap .action-submit:hover:before{color:#1a1a1a}._keyfocus .data-grid-search-control-wrap .action-submit:focus{box-shadow:0 0 0 1px #008bdb}.data-grid-search-control-wrap .action-submit:before{content:'\e60c';font-size:2rem;transition:color .1s linear}.data-grid-search-control-wrap .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.data-grid-search-control-wrap .abs-action-menu .action-submenu,.data-grid-search-control-wrap .abs-action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .action-menu,.data-grid-search-control-wrap .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:19.25rem;overflow-y:auto;z-index:398}.data-grid-search-control-wrap .action-menu-item._selected{background-color:#e0f6fe}.data-grid-search-control-wrap .data-grid-search-label{display:none}.data-grid-search-control{padding-right:6rem;width:100%}.data-grid-filters-action-wrap{float:left;padding-left:2rem}.data-grid-filters-action-wrap .action-default{font-size:1.3rem;margin-bottom:1rem;padding-left:1.7rem;padding-right:2.1rem;padding-top:.7rem}.data-grid-filters-action-wrap .action-default._active{background-color:#fff;border-bottom-color:#fff;border-right-color:#ccc;font-weight:600;margin:-.1rem 0 0;padding-bottom:1.6rem;padding-top:.8rem;position:relative;z-index:281}.data-grid-filters-action-wrap .action-default._active:after{background-color:#eb5202;bottom:100%;content:'';height:3px;left:-1px;position:absolute;right:-1px}.data-grid-filters-action-wrap .action-default:before{color:#333;content:'\e605';font-size:1.8rem;margin-right:.4rem;position:relative;top:-1px;vertical-align:top}.data-grid-filters-action-wrap .filters-active{display:none}.admin__action-grid-select .admin__control-select{margin:-.5rem .5rem 0 0;padding-bottom:.6rem;padding-top:.6rem}.admin__data-grid-filters-wrap{opacity:0;visibility:hidden;clear:both;font-size:1.3rem;transition:opacity .3s ease}.admin__data-grid-filters-wrap._show{opacity:1;visibility:visible;border-bottom:1px solid #ccc;border-top:1px solid #ccc;margin-bottom:.7rem;padding:3.6rem 0 3rem;position:relative;top:-1px;z-index:280}.admin__data-grid-filters-wrap._show .admin__data-grid-filters,.admin__data-grid-filters-wrap._show .admin__data-grid-filters-footer{display:block}.admin__data-grid-filters-wrap .admin__form-field-label,.admin__data-grid-filters-wrap .admin__form-field-legend{display:block;font-weight:700;margin:0 0 .3rem;text-align:left}.admin__data-grid-filters-wrap .admin__form-field{display:inline-block;margin-bottom:2em;margin-left:0;padding-left:2rem;padding-right:2rem;vertical-align:top;width:calc(100% / 4 - 4px)}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field{display:block;float:none;margin-bottom:1.5rem;padding-left:0;padding-right:0;width:auto}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field:last-child{margin-bottom:0}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-label{border:1px solid transparent;float:left;font-weight:400;line-height:1.36;margin-bottom:0;padding-bottom:.6rem;padding-right:1em;padding-top:.6rem;width:25%}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-control{margin-left:25%}.admin__data-grid-filters-wrap .admin__action-multiselect,.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text,.admin__data-grid-filters-wrap .admin__form-field-label{font-size:1.3rem}.admin__data-grid-filters-wrap .admin__control-select{height:3.2rem;padding-top:.5rem}.admin__data-grid-filters-wrap .admin__action-multiselect:before{height:3.2rem;width:3.2rem}.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text._has-datepicker{width:100%}.admin__data-grid-filters{display:none;margin-left:-2rem;margin-right:-2rem}.admin__filters-legend{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-filters-footer{display:none;font-size:1.4rem}.admin__data-grid-filters-footer .admin__footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-filters-footer .admin__footer-secondary-actions{float:left;width:50%}.admin__data-grid-filters-current{border-bottom:.1rem solid #ccc;border-top:.1rem solid #ccc;display:none;font-size:1.3rem;margin-bottom:.9rem;padding-bottom:.8rem;padding-top:1.1rem;width:100%}.admin__data-grid-filters-current._show{display:table;position:relative;top:-1px;z-index:3}.admin__data-grid-filters-current._show+.admin__data-grid-filters-wrap._show{margin-top:-1rem}.admin__current-filters-actions-wrap,.admin__current-filters-list-wrap,.admin__current-filters-title-wrap{display:table-cell;vertical-align:top}.admin__current-filters-title{margin-right:1em;white-space:nowrap}.admin__current-filters-list-wrap{width:100%}.admin__current-filters-list{margin-bottom:0}.admin__current-filters-list>li{display:inline-block;font-weight:600;margin:0 1rem .5rem;padding-right:2.6rem;position:relative}.admin__current-filters-list .action-remove{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0;line-height:1;position:absolute;right:0;top:1px}.admin__current-filters-list .action-remove:hover{background-color:transparent;border:none;box-shadow:none}.admin__current-filters-list .action-remove:hover:before{color:#949494}.admin__current-filters-list .action-remove:active{-ms-transform:scale(0.9);transform:scale(0.9)}.admin__current-filters-list .action-remove:before{color:#adadad;content:'\e620';font-size:1.6rem;transition:color .1s linear}.admin__current-filters-list .action-remove>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__current-filters-actions-wrap .action-clear{border:none;padding-bottom:0;padding-top:0;white-space:nowrap}.admin__data-grid-pager-wrap{float:right;text-align:right}.admin__data-grid-pager{display:inline-block;margin-left:3rem}.admin__data-grid-pager .admin__control-text::-webkit-inner-spin-button,.admin__data-grid-pager .admin__control-text::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.admin__data-grid-pager .admin__control-text{-moz-appearance:textfield;text-align:center;width:4.4rem}.action-next,.action-previous{width:4.4rem}.action-next:before,.action-previous:before{font-weight:700}.action-next>span,.action-previous>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-previous{margin-right:2.5rem;text-indent:-.25em}.action-previous:before{content:'\e629'}.action-next{margin-left:1.5rem;text-indent:.1em}.action-next:before{content:'\e62a'}.admin__data-grid-action-bookmarks{opacity:.98}.admin__data-grid-action-bookmarks .admin__action-dropdown-text:after{left:0;right:-6px}.admin__data-grid-action-bookmarks._active{z-index:290}.admin__data-grid-action-bookmarks .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;max-width:15rem;min-width:4.9rem;vertical-align:top;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown:before{content:'\e60f'}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu{font-size:1.3rem;left:0;padding:1rem 0;right:auto}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li{padding:0 5rem 0 0;position:relative;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action){transition:background-color .1s linear}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action):hover{background-color:#e3e3e3}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item{max-width:23rem;min-width:18rem;white-space:normal;word-break:break-all}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit{display:none;padding-bottom:1rem;padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit .action-dropdown-menu-item-actions{padding-bottom:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action{padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action+.action-dropdown-menu-item-last{padding-top:.5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a{color:#008bdb;text-decoration:none;display:inline-block;padding-left:1.1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a:hover{color:#0fa7ff;text-decoration:underline}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-last{padding-bottom:0}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item{display:none}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item-edit{display:block}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._active .action-dropdown-menu-link{font-weight:600}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{font-size:1.3rem;min-width:15rem;width:calc(100% - 4rem)}.ie9 .admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{width:15rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-actions{border-left:1px solid #fff;bottom:0;position:absolute;right:0;top:0;width:5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-link{color:#333;display:block;text-decoration:none;padding:1rem 1rem 1rem 2.1rem}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit,.admin__data-grid-action-bookmarks .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;vertical-align:top}.admin__data-grid-action-bookmarks .action-delete:hover,.admin__data-grid-action-bookmarks .action-edit:hover,.admin__data-grid-action-bookmarks .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before{font-size:1.7rem}.admin__data-grid-action-bookmarks .action-delete>span,.admin__data-grid-action-bookmarks .action-edit>span,.admin__data-grid-action-bookmarks .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit{padding:.6rem 1.4rem}.admin__data-grid-action-bookmarks .action-delete:active,.admin__data-grid-action-bookmarks .action-edit:active{-ms-transform:scale(0.9);transform:scale(0.9)}.admin__data-grid-action-bookmarks .action-submit{padding:.6rem 1rem .6rem .8rem}.admin__data-grid-action-bookmarks .action-submit:active{position:relative;right:-1px}.admin__data-grid-action-bookmarks .action-submit:before{content:'\e625'}.admin__data-grid-action-bookmarks .action-delete:before{content:'\e630'}.admin__data-grid-action-bookmarks .action-edit{padding-top:.8rem}.admin__data-grid-action-bookmarks .action-edit:before{content:'\e631'}.admin__data-grid-action-columns._active{opacity:.98;z-index:290}.admin__data-grid-action-columns .admin__action-dropdown:before{content:'\e610';font-size:1.8rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-columns-menu{color:#303030;font-size:1.3rem;overflow:hidden;padding:2.2rem 3.5rem 1rem;z-index:1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-header{border-bottom:1px solid #d1d1d1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-content{width:49.2rem}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-footer{border-top:1px solid #d1d1d1;padding-top:2.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content{max-height:22.85rem;overflow-y:auto;padding-top:1.5rem;position:relative;width:47.4rem}.admin__data-grid-action-columns-menu .admin__field-option{float:left;height:1.9rem;margin-bottom:1.5rem;padding:0 1rem 0 0;width:15.8rem}.admin__data-grid-action-columns-menu .admin__field-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-header{padding-bottom:1.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-footer{padding:1rem 0 2rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-secondary-actions{float:left;margin-left:-1em}.admin__data-grid-action-export._active{opacity:.98;z-index:290}.admin__data-grid-action-export .admin__action-dropdown:before{content:'\e635';font-size:1.7rem;left:.3rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-export-menu{padding-left:2rem;padding-right:2rem;padding-top:1rem}.admin__data-grid-action-export-menu .admin__action-dropdown-footer-main-actions{padding-bottom:2rem;padding-top:2.5rem;white-space:nowrap}.sticky-header{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:8.8rem;margin-top:-1px;padding:.5rem 3rem 0;position:fixed;right:0;top:77px;z-index:398}.sticky-header .admin__data-grid-wrap{margin-bottom:0;overflow-x:visible;padding-bottom:0}.sticky-header .admin__data-grid-header-row{position:relative;text-align:right}.sticky-header .admin__data-grid-header-row:last-child{margin:0}.sticky-header .admin__data-grid-actions-wrap,.sticky-header .admin__data-grid-filters-wrap,.sticky-header .admin__data-grid-pager-wrap,.sticky-header .data-grid-filters-actions-wrap,.sticky-header .data-grid-search-control-wrap{display:inline-block;float:none;vertical-align:top}.sticky-header .action-select-wrap{float:left;margin-right:1.5rem;width:16.66666667%}.sticky-header .admin__control-support-text{float:left}.sticky-header .data-grid-search-control-wrap{margin:-.5rem 0 0 1.1rem;width:auto}.sticky-header .data-grid-search-control-wrap .data-grid-search-label{box-sizing:border-box;cursor:pointer;display:block;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;position:relative;text-align:center}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before{color:#333;content:'\e60c';font-size:2rem;transition:color .1s linear}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:hover:before{color:#000}.sticky-header .data-grid-search-control-wrap .data-grid-search-label span{display:none}.sticky-header .data-grid-filters-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-left:0;position:relative}.sticky-header .data-grid-filters-actions-wrap .action-default{background-color:transparent;border:1px solid transparent;box-sizing:border-box;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;text-align:center;transition:all .15s ease}.sticky-header .data-grid-filters-actions-wrap .action-default span{display:none}.sticky-header .data-grid-filters-actions-wrap .action-default:before{margin:0}.sticky-header .data-grid-filters-actions-wrap .action-default._active{background-color:#fff;border-color:#adadad #adadad #fff;box-shadow:1px 1px 5px rgba(0,0,0,.5);z-index:210}.sticky-header .data-grid-filters-actions-wrap .action-default._active:after{background-color:#fff;content:'';height:6px;left:-2px;position:absolute;right:-6px;top:100%}.sticky-header .data-grid-filters-action-wrap{padding:0}.sticky-header .admin__data-grid-filters-wrap{background-color:#fff;border:1px solid #adadad;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:0;padding-left:3.5rem;padding-right:3.5rem;position:absolute;top:100%;width:100%;z-index:209}.sticky-header .admin__data-grid-filters-current+.admin__data-grid-filters-wrap._show{margin-top:-6px}.sticky-header .filters-active{background-color:#e04f00;border-radius:10px;color:#fff;display:block;font-size:1.4rem;font-weight:700;padding:.1rem .7rem;position:absolute;right:-7px;top:0;z-index:211}.sticky-header .filters-active:empty{padding-bottom:0;padding-top:0}.sticky-header .admin__data-grid-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-right:.3rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown{background-color:transparent;box-sizing:border-box;min-width:3.8rem;padding-left:.6rem;padding-right:.6rem;text-align:center}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;max-width:0;min-width:0;overflow:hidden}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:before{margin:0}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap{margin-right:1.1rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after,.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:after{display:none}.sticky-header .admin__data-grid-actions-wrap ._active .admin__action-dropdown{background-color:#fff}.sticky-header .admin__data-grid-action-bookmarks .admin__action-dropdown:before{position:relative;top:-3px}.sticky-header .admin__data-grid-filters-current{border-bottom:0;border-top:0;margin-bottom:0;padding-bottom:0;padding-top:0}.sticky-header .admin__data-grid-pager .admin__control-text,.sticky-header .admin__data-grid-pager-wrap .admin__control-support-text,.sticky-header .data-grid-search-control-wrap .action-submit,.sticky-header .data-grid-search-control-wrap .data-grid-search-control{display:none}.sticky-header .action-next{margin:0}.sticky-header .data-grid{margin-bottom:-1px}.data-grid-cap-left,.data-grid-cap-right{background-color:#f8f8f8;bottom:-2px;position:absolute;top:6rem;width:3rem;z-index:201}.data-grid-cap-left{left:0}.admin__data-grid-header{font-size:1.4rem}.admin__data-grid-header-row+.admin__data-grid-header-row{margin-top:1.1rem}.admin__data-grid-header-row:last-child{margin-bottom:0}.admin__data-grid-header-row .action-select-wrap{display:block}.admin__data-grid-header-row .action-select{width:100%}.admin__data-grid-actions-wrap{float:right;margin-left:1.1rem;margin-top:-.5rem;text-align:right}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap{position:relative;text-align:left;vertical-align:middle}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._hide+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:first-child:after{display:none}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown-menu{border-color:#adadad}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after{border-left:1px solid #ccc;content:'';height:3.2rem;left:0;position:absolute;top:.5rem;z-index:3}.admin__data-grid-actions-wrap .admin__action-dropdown{padding-bottom:1.7rem;padding-top:1.2rem}.admin__data-grid-actions-wrap .admin__action-dropdown:after{margin-top:-.4rem}.admin__data-grid-outer-wrap{min-height:8rem;position:relative}.admin__data-grid-wrap{margin-bottom:2rem;max-width:100%;overflow-x:auto;padding-bottom:1rem;padding-top:2rem}.admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:0;position:absolute;right:0;top:0;z-index:399}.admin__data-grid-loading-mask .spinner{font-size:4rem;left:50%;margin-left:-2rem;margin-top:-2rem;position:absolute;top:50%}.ie9 .admin__data-grid-loading-mask .spinner{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-cell-content{display:inline-block;overflow:hidden;width:100%}body._in-resize{cursor:col-resize;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body._in-resize *,body._in-resize .data-grid-th,body._in-resize .data-grid-th._draggable,body._in-resize .data-grid-th._sortable{cursor:col-resize!important}._layout-fixed{table-layout:fixed}.data-grid{border:none;font-size:1.3rem;margin-bottom:0;width:100%}.data-grid:not(._dragging-copy) ._odd-row td._dragging{background-color:#d0d0d0}.data-grid:not(._dragging-copy) ._dragging{background-color:#d9d9d9;color:rgba(48,48,48,.95)}.data-grid:not(._dragging-copy) ._dragging a{color:rgba(0,139,219,.95)}.data-grid:not(._dragging-copy) ._dragging a:hover{color:rgba(15,167,255,.95)}.data-grid._dragged{outline:#007bdb solid 1px}.data-grid thead{background-color:transparent}.data-grid tfoot th{padding:1rem}.data-grid tr._odd-row td{background-color:#f5f5f5}.data-grid tr._odd-row td._update-status-active{background:#89e1ff}.data-grid tr._odd-row td._update-status-upcoming{background:#b7ee63}.data-grid tr:hover td._update-status-active,.data-grid tr:hover td._update-status-upcoming{background-color:#e5f7fe}.data-grid tr.data-grid-tr-no-data td{font-size:1.6rem;padding:3rem;text-align:center}.data-grid tr.data-grid-tr-no-data:hover td{background-color:#fff;cursor:default}.data-grid tr:active td{background-color:#e0f6fe}.data-grid tr:hover td{background-color:#e5f7fe}.data-grid tr._dragged td{background:#d0d0d0}.data-grid tr._dragover-top td{box-shadow:inset 0 3px 0 0 #008bdb}.data-grid tr._dragover-bottom td{box-shadow:inset 0 -3px 0 0 #008bdb}.data-grid tr:not(.data-grid-editable-row):last-child td{border-bottom:.1rem solid #d6d6d6}.data-grid tr ._clickable,.data-grid tr._clickable{cursor:pointer}.data-grid tr._disabled{pointer-events:none}.data-grid td,.data-grid th{font-size:1.3rem;line-height:1.36;transition:background-color .1s linear;vertical-align:top}.data-grid td._resizing,.data-grid th._resizing{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid td._hidden,.data-grid th._hidden{display:none}.data-grid td._fit,.data-grid th._fit{width:1%}.data-grid td{background-color:#fff;border-left:.1rem dashed #d6d6d6;border-right:.1rem dashed #d6d6d6;color:#303030;padding:1rem}.data-grid td:first-child{border-left-style:solid}.data-grid td:last-child{border-right-style:solid}.data-grid td .action-select-wrap{position:static}.data-grid td .action-select{color:#008bdb;text-decoration:none;background-color:transparent;border:none;font-size:1.3rem;padding:0 3rem 0 0;position:relative}.data-grid td .action-select:hover{color:#0fa7ff;text-decoration:underline}.data-grid td .action-select:hover:after{border-color:#0fa7ff transparent transparent}.data-grid td .action-select:after{border-color:#008bdb transparent transparent;margin:.6rem 0 0 .7rem;right:auto;top:auto}.data-grid td .action-select:before{display:none}.data-grid td .abs-action-menu .action-submenu,.data-grid td .abs-action-menu .action-submenu .action-submenu,.data-grid td .action-menu,.data-grid td .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu .action-submenu{left:auto;min-width:10rem;right:0;text-align:left;top:auto;z-index:1}.data-grid td._update-status-active{background:#bceeff}.data-grid td._update-status-upcoming{background:#ccf391}.data-grid th{background-color:#514943;border:.1rem solid #8a837f;border-left-color:transparent;color:#fff;font-weight:600;padding:0;text-align:left}.data-grid th:first-child{border-left-color:#8a837f}.data-grid th._dragover-left{box-shadow:inset 3px 0 0 0 #fff;z-index:2}.data-grid th._dragover-right{box-shadow:inset -3px 0 0 0 #fff}.data-grid .shadow-div{cursor:col-resize;height:100%;margin-right:-5px;position:absolute;right:0;top:0;width:10px}.data-grid .data-grid-th{background-clip:padding-box;color:#fff;padding:1rem;position:relative;vertical-align:middle}.data-grid .data-grid-th._resize-visible .shadow-div{cursor:auto;display:none}.data-grid .data-grid-th._draggable{cursor:grab}.data-grid .data-grid-th._sortable{cursor:pointer;transition:background-color .1s linear;z-index:1}.data-grid .data-grid-th._sortable:focus,.data-grid .data-grid-th._sortable:hover{background-color:#5f564f}.data-grid .data-grid-th._sortable:active{padding-bottom:.9rem;padding-top:1.1rem}.data-grid .data-grid-th.required>span:after{color:#f38a5e;content:'*';margin-left:.3rem}.data-grid .data-grid-checkbox-cell{overflow:hidden;padding:0;vertical-align:top;width:5.2rem}.data-grid .data-grid-checkbox-cell:hover{cursor:default}.data-grid .data-grid-thumbnail-cell{text-align:center;width:7rem}.data-grid .data-grid-thumbnail-cell img{border:1px solid #d6d6d6;width:5rem}.data-grid .data-grid-multicheck-cell{padding:1rem 1rem .9rem;text-align:center;vertical-align:middle}.data-grid .data-grid-onoff-cell{text-align:center;width:12rem}.data-grid .data-grid-actions-cell{padding-left:2rem;padding-right:2rem;text-align:center;width:1%}.data-grid._hidden{display:none}.data-grid._dragging-copy{box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;opacity:.95;position:fixed;top:0;z-index:1000}.data-grid._dragging-copy .data-grid-th{border:1px solid #007bdb;border-bottom:none}.data-grid._dragging-copy .data-grid-th,.data-grid._dragging-copy .data-grid-th._sortable{cursor:grabbing}.data-grid._dragging-copy tr:last-child td{border-bottom:1px solid #007bdb}.data-grid._dragging-copy td{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:rgba(255,251,230,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td,.data-grid._dragging-copy._in-edit .data-grid-editable-row:hover td{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:after,.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{left:0;right:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:only-child{border-left:1px solid #007bdb;border-right:1px solid #007bdb;left:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-select,.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-text{opacity:.5}.data-grid .data-grid-controls-row td{padding-top:1.6rem}.data-grid .data-grid-controls-row td.data-grid-checkbox-cell{padding-top:.6rem}.data-grid .data-grid-controls-row td [class*=admin__control-],.data-grid .data-grid-controls-row td button{margin-top:-1.7rem}.data-grid._in-edit tr:hover td{background-color:#e6e6e6}.data-grid._in-edit ._odd-row.data-grid-editable-row td,.data-grid._in-edit ._odd-row.data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit ._odd-row td,.data-grid._in-edit ._odd-row:hover td{background-color:#dcdcdc}.data-grid._in-edit .data-grid-editable-row-actions td,.data-grid._in-edit .data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid._in-edit td{background-color:#e6e6e6;pointer-events:none}.data-grid._in-edit .data-grid-checkbox-cell{pointer-events:auto}.data-grid._in-edit .data-grid-editable-row{border:.1rem solid #adadad;border-bottom-color:#c2c2c2}.data-grid._in-edit .data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit .data-grid-editable-row td{background-color:#fff;border-bottom-color:#fff;border-left-style:hidden;border-right-style:hidden;border-top-color:#fff;pointer-events:auto;vertical-align:middle}.data-grid._in-edit .data-grid-editable-row td:first-child{border-left-color:#adadad;border-left-style:solid}.data-grid._in-edit .data-grid-editable-row td:first-child:after,.data-grid._in-edit .data-grid-editable-row td:first-child:before{left:0}.data-grid._in-edit .data-grid-editable-row td:last-child{border-right-color:#adadad;border-right-style:solid;left:-.1rem}.data-grid._in-edit .data-grid-editable-row td:last-child:after,.data-grid._in-edit .data-grid-editable-row td:last-child:before{right:0}.data-grid._in-edit .data-grid-editable-row .admin__control-select,.data-grid._in-edit .data-grid-editable-row .admin__control-text{width:100%}.data-grid._in-edit .data-grid-bulk-edit-panel td{vertical-align:bottom}.data-grid .data-grid-editable-row td{border-left-color:#fff;border-left-style:solid;position:relative;z-index:1}.data-grid .data-grid-editable-row td:after{bottom:0;box-shadow:0 5px 5px rgba(0,0,0,.25);content:'';height:.9rem;left:0;margin-top:-1rem;position:absolute;right:0}.data-grid .data-grid-editable-row td:before{background-color:#fff;bottom:0;content:'';height:1rem;left:-10px;position:absolute;right:-10px;z-index:1}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td,.data-grid .data-grid-editable-row.data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:first-child{border-left-color:#fff;border-right-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:last-child{left:0}.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:#fffbe6}.data-grid .data-grid-editable-row-actions{left:50%;margin-left:-12.5rem;margin-top:-2px;position:absolute;text-align:center}.data-grid .data-grid-editable-row-actions td{width:25rem}.data-grid .data-grid-editable-row-actions [class*=action-]{min-width:9rem}.data-grid .data-grid-draggable-row-cell{width:1%}.data-grid .data-grid-draggable-row-cell .draggable-handle{padding:0}.data-grid-th._sortable._ascend,.data-grid-th._sortable._descend{padding-right:2.7rem}.data-grid-th._sortable._ascend:before,.data-grid-th._sortable._descend:before{margin-top:-1em;position:absolute;right:1rem;top:50%}.data-grid-th._sortable._ascend:before{content:'\2193'}.data-grid-th._sortable._descend:before{content:'\2191'}.data-grid-checkbox-cell-inner{display:block;padding:1.1rem 1.8rem .9rem;text-align:right}.data-grid-checkbox-cell-inner:hover{cursor:pointer}.data-grid-state-cell-inner{display:block;padding:1.1rem 1.8rem .9rem;text-align:center}.data-grid-state-cell-inner>span{display:inline-block;font-style:italic;padding:.6rem 0}.data-grid-row-parent._active>td .data-grid-checkbox-cell-inner:before{content:'\e62b'}.data-grid-row-parent>td .data-grid-checkbox-cell-inner{padding-left:3.7rem;position:relative}.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before{content:'\e628';font-size:1rem;font-weight:700;left:1.35rem;position:absolute;top:1.6rem}.data-grid-th._col-xs{width:1%}.data-grid-info-panel{box-shadow:0 0 5px rgba(0,0,0,.5);margin:2rem .1rem -2rem}.data-grid-info-panel .messages{overflow:hidden}.data-grid-info-panel .messages .message{margin:1rem}.data-grid-info-panel .messages .message:last-child{margin-bottom:1rem}.data-grid-info-panel-actions{padding:1rem;text-align:right}.data-grid-editable-row .admin__field-control{position:relative}.data-grid-editable-row .admin__field-control._error:after{border-color:transparent #ee7d7d transparent transparent;border-style:solid;border-width:0 12px 12px 0;content:'';position:absolute;right:0;top:0}.data-grid-editable-row .admin__field-control._error .admin__control-text{border-color:#ee7d7d}.data-grid-editable-row .admin__field-control._focus:after{display:none}.data-grid-editable-row .admin__field-error{bottom:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin:0 auto 1.5rem;max-width:32rem;position:absolute;right:0}.data-grid-editable-row .admin__field-error:after,.data-grid-editable-row .admin__field-error:before{border-style:solid;content:'';left:50%;position:absolute;top:100%}.data-grid-editable-row .admin__field-error:after{border-color:#fffbbb transparent transparent;border-width:10px 10px 0;margin-left:-10px;z-index:1}.data-grid-editable-row .admin__field-error:before{border-color:#ee7d7d transparent transparent;border-width:11px 12px 0;margin-left:-12px}.data-grid-bulk-edit-panel .admin__field-label-vertical{display:block;font-size:1.2rem;margin-bottom:.5rem;text-align:left}.data-grid-row-changed{cursor:default;display:block;opacity:.5;position:relative;width:100%;z-index:1}.data-grid-row-changed:after{content:'\e631';display:inline-block}.data-grid-row-changed .data-grid-row-changed-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:100%;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;line-height:1.36;margin-bottom:1.5rem;padding:1rem;position:absolute;right:-1rem;text-transform:none;width:27rem;word-break:normal;z-index:2}.data-grid-row-changed._changed{opacity:1;z-index:3}.data-grid-row-changed._changed:hover .data-grid-row-changed-tooltip{display:block}.data-grid-row-changed._changed:hover:before{background:#f1f1f1;border:1px solid #f1f1f1;bottom:100%;box-shadow:4px 4px 3px -1px rgba(0,0,0,.15);content:'';display:block;height:1.6rem;left:50%;margin:0 0 .7rem -.8rem;position:absolute;-ms-transform:rotate(45deg);transform:rotate(45deg);width:1.6rem;z-index:3}.ie9 .data-grid-row-changed._changed:hover:before{display:none}.admin__data-grid-outer-wrap .data-grid-checkbox-cell{overflow:hidden}.admin__data-grid-outer-wrap .data-grid-checkbox-cell-inner{position:relative}.admin__data-grid-outer-wrap .data-grid-checkbox-cell-inner:before{bottom:0;content:'';height:500%;left:0;position:absolute;right:0;top:0}.admin__data-grid-wrap-static .data-grid-checkbox-cell:hover{cursor:pointer}.admin__data-grid-wrap-static .data-grid-checkbox-cell-inner{margin:1.1rem 1.8rem .9rem;padding:0}.adminhtml-cms-hierarchy-index .admin__data-grid-wrap-static .data-grid-actions-cell:first-child{padding:0}.adminhtml-export-index .admin__data-grid-wrap-static .data-grid-checkbox-cell-inner{margin:0;padding:1.1rem 1.8rem 1.9rem}.admin__control-addon [class*=admin__control-][class]~[class*=admin__addon-]:last-child:before,.admin__control-file-label:before,.admin__control-multiselect,.admin__control-select,.admin__control-text,.admin__control-textarea,.selectmenu{-webkit-appearance:none;background-color:#fff;border:1px solid #adadad;border-radius:1px;box-shadow:none;color:#303030;font-size:1.4rem;font-weight:400;height:auto;line-height:1.36;padding:.6rem 1rem;transition:border-color .1s linear;vertical-align:baseline;width:auto}.admin__control-addon [class*=admin__control-][class]:hover~[class*=admin__addon-]:last-child:before,.admin__control-multiselect:hover,.admin__control-select:hover,.admin__control-text:hover,.admin__control-textarea:hover,.selectmenu:hover,.selectmenu:hover .selectmenu-toggle:before{border-color:#878787}.admin__control-addon [class*=admin__control-][class]:focus~[class*=admin__addon-]:last-child:before,.admin__control-file:active+.admin__control-file-label:before,.admin__control-file:focus+.admin__control-file-label:before,.admin__control-multiselect:focus,.admin__control-select:focus,.admin__control-text:focus,.admin__control-textarea:focus,.selectmenu._focus,.selectmenu._focus .selectmenu-toggle:before{border-color:#007bdb;box-shadow:none;outline:0}.admin__control-addon [class*=admin__control-][class][disabled]~[class*=admin__addon-]:last-child:before,.admin__control-file[disabled]+.admin__control-file-label:before,.admin__control-multiselect[disabled],.admin__control-select[disabled],.admin__control-text[disabled],.admin__control-textarea[disabled]{background-color:#e9e9e9;border-color:#adadad;color:#303030;cursor:not-allowed;opacity:.5}.admin__field-row[class]>.admin__field-control,.admin__fieldset>.admin__field.admin__field-wide[class]>.admin__field-control{clear:left;float:none;text-align:left;width:auto}.admin__field-row[class]:not(.admin__field-option)>.admin__field-label,.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label{display:block;line-height:1.4rem;margin-bottom:.86rem;margin-top:-.14rem;text-align:left;width:auto}.admin__field-row[class]:not(.admin__field-option)>.admin__field-label:before,.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label:before{display:none}.admin__field-row[class]:not(.admin__field-option)._required>.admin__field-label span,.admin__field-row[class]:not(.admin__field-option).required>.admin__field-label span,.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span,.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option).required>.admin__field-label span{padding-left:1.5rem}.admin__field-row[class]:not(.admin__field-option)._required>.admin__field-label span:after,.admin__field-row[class]:not(.admin__field-option).required>.admin__field-label span:after,.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span:after,.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option).required>.admin__field-label span:after{left:0;margin-left:30px}.admin__legend{font-size:1.8rem;font-weight:600;margin-bottom:3rem}.admin__control-checkbox,.admin__control-radio{cursor:pointer;opacity:.01;overflow:hidden;position:absolute;vertical-align:top}.admin__control-checkbox:after,.admin__control-radio:after{display:none}.admin__control-checkbox+label,.admin__control-radio+label{cursor:pointer;display:inline-block}.admin__control-checkbox+label:before,.admin__control-radio+label:before{background-color:#fff;border:1px solid #adadad;color:transparent;float:left;height:1.6rem;text-align:center;vertical-align:top;width:1.6rem}.admin__control-checkbox+.admin__field-label,.admin__control-radio+.admin__field-label{padding-left:2.6rem}.admin__control-checkbox+.admin__field-label:before,.admin__control-radio+.admin__field-label:before{margin:1px 1rem 0 -2.6rem}.admin__control-checkbox:checked+label:before,.admin__control-radio:checked+label:before{color:#514943}.admin__control-checkbox.disabled+label,.admin__control-checkbox[disabled]+label,.admin__control-radio.disabled+label,.admin__control-radio[disabled]+label{color:#303030;cursor:default;opacity:.5}.admin__control-checkbox.disabled+label:before,.admin__control-checkbox[disabled]+label:before,.admin__control-radio.disabled+label:before,.admin__control-radio[disabled]+label:before{background-color:#e9e9e9;border-color:#adadad;cursor:default}._keyfocus .admin__control-checkbox:not(.disabled):focus+label:before,._keyfocus .admin__control-checkbox:not([disabled]):focus+label:before,._keyfocus .admin__control-radio:not(.disabled):focus+label:before,._keyfocus .admin__control-radio:not([disabled]):focus+label:before{border-color:#007bdb}.admin__control-checkbox:not(.disabled):hover+label:before,.admin__control-checkbox:not([disabled]):hover+label:before,.admin__control-radio:not(.disabled):hover+label:before,.admin__control-radio:not([disabled]):hover+label:before{border-color:#878787}.admin__control-radio+label:before{border-radius:1.6rem;content:'';transition:border-color .1s linear,color .1s ease-in}.admin__control-radio.admin__control-radio+label:before{line-height:140%}.admin__control-radio:checked+label{position:relative}.admin__control-radio:checked+label:after{background-color:#514943;border-radius:50%;content:'';height:10px;left:3px;position:absolute;top:4px;width:10px}.admin__control-radio:checked:not(.disabled):hover,.admin__control-radio:checked:not(.disabled):hover+label,.admin__control-radio:checked:not([disabled]):hover,.admin__control-radio:checked:not([disabled]):hover+label{cursor:default}.admin__control-radio:checked:not(.disabled):hover+label:before,.admin__control-radio:checked:not([disabled]):hover+label:before{border-color:#adadad}.admin__control-checkbox+label:before{border-radius:1px;content:'';font-size:0;transition:font-size .1s ease-out,color .1s ease-out,border-color .1s linear}.admin__control-checkbox:checked+label:before{content:'\e62d';font-size:1.1rem;line-height:125%}.admin__control-checkbox:not(:checked)._indeterminate+label:before,.admin__control-checkbox:not(:checked):indeterminate+label:before{color:#514943;content:'-';font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700}input[type=checkbox].admin__control-checkbox,input[type=radio].admin__control-checkbox{margin:0;position:absolute}.admin__control-text{min-width:4rem}.admin__control-select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#adadad,#adadad);background-position:calc(100% - 12px) -34px,100%,calc(100% - 3.2rem) 0;background-size:auto,3.2rem 100%,1px 100%;background-repeat:no-repeat;max-width:100%;min-width:8.5rem;padding-bottom:.5rem;padding-right:4.4rem;padding-top:.5rem;transition:border-color .1s linear}.admin__control-select:hover{border-color:#878787;cursor:pointer}.admin__control-select:focus{background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#007bdb,#007bdb);background-position:calc(100% - 12px) 13px,100%,calc(100% - 3.2rem) 0;border-color:#007bdb}.admin__control-select::-ms-expand{display:none}.ie9 .admin__control-select{background-image:none;padding-right:1rem}option:empty{display:none}.admin__control-multiselect{height:auto;max-width:100%;min-width:15rem;overflow:auto;padding:0;resize:both}.admin__control-multiselect optgroup,.admin__control-multiselect option{padding:.5rem 1rem}.admin__control-file-wrapper{display:inline-block;padding:.5rem 1rem;position:relative;z-index:1}.admin__control-file-label:before{content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__control-file{background:0 0;border:0;padding-top:.7rem;position:relative;width:auto;z-index:1}.admin__control-support-text{border:1px solid transparent;display:inline-block;font-size:1.4rem;line-height:1.36;padding-bottom:.6rem;padding-top:.6rem}.admin__control-support-text+[class*=admin__control-],[class*=admin__control-]+.admin__control-support-text{margin-left:.7rem}.admin__control-service{float:left;margin:.8rem 0 0 3rem}.admin__control-textarea{height:8.48rem;line-height:1.18;padding-top:.8rem;resize:vertical}.admin__control-addon{-ms-flex-direction:row;flex-direction:row;display:inline-flex;-ms-flex-flow:row nowrap;flex-flow:row nowrap;position:relative;width:100%;z-index:1}.admin__control-addon>[class*=admin__addon-],.admin__control-addon>[class*=admin__control-]{-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative;z-index:1}.admin__control-addon .admin__control-select{width:auto}.admin__control-addon .admin__control-text{margin:.1rem;padding:.5rem .9rem;width:100%}.admin__control-addon [class*=admin__control-][class]{appearence:none;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-order:1;order:1;-ms-flex-negative:1;flex-shrink:1;background-color:transparent;border-color:transparent;box-shadow:none;vertical-align:top}.admin__control-addon [class*=admin__control-][class]+[class*=admin__control-]{border-left-color:#adadad}.admin__control-addon [class*=admin__control-][class] :focus{box-shadow:0}.admin__control-addon [class*=admin__control-][class]~[class*=admin__addon-]:last-child{padding-left:1rem;position:static!important;z-index:0}.admin__control-addon [class*=admin__control-][class]~[class*=admin__addon-]:last-child>*{position:relative;vertical-align:top;z-index:1}.admin__control-addon [class*=admin__control-][class]~[class*=admin__addon-]:last-child:empty{padding:0}.admin__control-addon [class*=admin__control-][class]~[class*=admin__addon-]:last-child:before{bottom:0;box-sizing:border-box;content:'';left:0;position:absolute;top:0;width:100%;z-index:-1}.admin__addon-prefix,.admin__addon-suffix{border:0;box-sizing:border-box;color:#858585;display:inline-block;font-size:1.4rem;font-weight:400;height:3.2rem;line-height:3.2rem;padding:0}.admin__addon-suffix{-ms-flex-order:3;order:3}.admin__addon-suffix:last-child{padding-right:1rem}.admin__addon-prefix{-ms-flex-order:0;order:0}.ie9 .admin__control-addon:after{clear:both;content:'';display:block;height:0;overflow:hidden}.ie9 .admin__addon{min-width:0;overflow:hidden;text-align:right;white-space:nowrap;width:auto}.ie9 .admin__addon [class*=admin__control-]{display:inline}.ie9 .admin__addon-prefix{float:left}.ie9 .admin__addon-suffix{float:right}.admin__control-collapsible{width:100%}.admin__control-collapsible ._dragged .admin__collapsible-block-wrapper .admin__collapsible-title{background:#d0d0d0}.admin__control-collapsible ._dragover-bottom .admin__collapsible-block-wrapper:before,.admin__control-collapsible ._dragover-top .admin__collapsible-block-wrapper:before{background:#008bdb;content:'';display:block;height:3px;left:0;position:absolute;right:0}.admin__control-collapsible ._dragover-top .admin__collapsible-block-wrapper:before{top:-3px}.admin__control-collapsible ._dragover-bottom .admin__collapsible-block-wrapper:before{bottom:-3px}.admin__control-collapsible .admin__collapsible-block-wrapper.fieldset-wrapper{border:0;margin:0;position:relative}.admin__control-collapsible .admin__collapsible-block-wrapper.fieldset-wrapper .fieldset-wrapper-title{background:#f8f8f8;border:2px solid #ccc}.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .admin__collapsible-title{font-size:1.4rem;font-weight:400;line-height:1;padding:1.6rem 4rem 1.6rem 3.8rem}.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .admin__collapsible-title:before{left:1rem;right:auto;top:1.4rem}.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .action-delete{background-color:transparent;border-color:transparent;box-shadow:none;padding:0;position:absolute;right:1rem;top:1.4rem}.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .action-delete:hover{background-color:transparent;border-color:transparent;box-shadow:none}.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .action-delete:before{content:'\e630';font-size:2rem}.admin__control-collapsible .admin__collapsible-block-wrapper .fieldset-wrapper-title .action-delete>span{display:none}.admin__control-collapsible .admin__collapsible-content{background-color:#fff;margin-bottom:1rem}.admin__control-collapsible .admin__collapsible-content>.fieldset-wrapper{border:1px solid #ccc;margin-top:-1px;padding:1rem}.admin__control-collapsible .admin__collapsible-content .admin__fieldset{padding:0}.admin__control-collapsible .admin__collapsible-content .admin__field:last-child{margin-bottom:0}.admin__control-table-wrapper{max-width:100%;overflow-x:auto;overflow-y:hidden}.admin__control-table{width:100%}.admin__control-table thead{background-color:transparent}.admin__control-table tbody td{vertical-align:top}.admin__control-table tfoot th{padding-bottom:1.3rem}.admin__control-table tfoot th.validation{padding-bottom:0;padding-top:0}.admin__control-table tfoot td{border-top:1px solid #fff}.admin__control-table tfoot .admin__control-table-pagination{float:right;padding-bottom:0}.admin__control-table tfoot .action-previous{margin-right:.5rem}.admin__control-table tfoot .action-next{margin-left:.9rem}.admin__control-table tr:last-child td{border-bottom:none}.admin__control-table tr._dragover-top td{box-shadow:inset 0 3px 0 0 #008bdb}.admin__control-table tr._dragover-bottom td{box-shadow:inset 0 -3px 0 0 #008bdb}.admin__control-table tr._dragged td,.admin__control-table tr._dragged th{background:#d0d0d0}.admin__control-table td,.admin__control-table th{background-color:#efefef;border:0;border-bottom:1px solid #fff;padding:1.3rem 1rem 1.3rem 0;text-align:left;vertical-align:top}.admin__control-table td:first-child,.admin__control-table th:first-child{padding-left:1rem}.admin__control-table td>.admin__control-select,.admin__control-table td>.admin__control-text,.admin__control-table th>.admin__control-select,.admin__control-table th>.admin__control-text{width:100%}.admin__control-table td._hidden,.admin__control-table th._hidden{display:none}.admin__control-table td._fit,.admin__control-table th._fit{width:1px}.admin__control-table th{color:#303030;font-size:1.4rem;font-weight:600;vertical-align:bottom}.admin__control-table th._required span:after{color:#eb5202;content:'*'}.admin__control-table .control-table-actions-th{white-space:nowrap}.admin__control-table .control-table-actions-cell{padding-top:1.8rem;text-align:center;width:1%}.admin__control-table .control-table-options-th{text-align:center;width:10rem}.admin__control-table .control-table-options-cell{text-align:center}.admin__control-table .control-table-text{line-height:3.2rem}.admin__control-table .col-draggable{padding-top:2.2rem;width:1%}.admin__control-table .action-delete{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.admin__control-table .action-delete:hover{background-color:transparent;border-color:transparent;box-shadow:none}.admin__control-table .action-delete:before{content:'\e630';font-size:2rem}.admin__control-table .action-delete>span{display:none}.admin__control-table .draggable-handle{padding:0}.admin__control-table._dragged{outline:#007bdb solid 1px}.admin__control-table-action{background-color:#efefef;border-top:1px solid #fff;padding:1.3rem 1rem}.admin__dynamic-rows._dragged{opacity:.95;position:absolute;z-index:999}.admin__dynamic-rows.admin__control-table .admin__control-fields>.admin__field{border:0;padding:0}.admin__dynamic-rows td>.admin__field{border:0;margin:0;padding:0}.admin__control-table-pagination{padding-bottom:1rem}.admin__control-table-pagination .admin__data-grid-pager{float:right}.admin__field-tooltip{display:inline-block;margin-top:.5rem;max-width:45px;overflow:visible;vertical-align:top;width:0}.admin__field-tooltip:hover{position:relative;z-index:500}.admin__field-option .admin__field-tooltip{margin-top:.5rem}.admin__field-tooltip .admin__field-tooltip-action{margin-left:2rem;position:relative;z-index:2;display:inline-block;text-decoration:none}.admin__field-tooltip .admin__field-tooltip-action:before{-webkit-font-smoothing:antialiased;font-size:2.2rem;line-height:1;color:#514943;content:'\e633';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.admin__field-tooltip .admin__control-text:focus+.admin__field-tooltip-content,.admin__field-tooltip:hover .admin__field-tooltip-content{display:block}.admin__field-tooltip .admin__field-tooltip-content{bottom:3.8rem;display:none;right:-2.3rem}.admin__field-tooltip .admin__field-tooltip-content:after,.admin__field-tooltip .admin__field-tooltip-content:before{border:1.6rem solid transparent;height:0;width:0;border-top-color:#afadac;content:'';display:block;position:absolute;right:2rem;top:100%;z-index:3}.admin__field-tooltip .admin__field-tooltip-content:after{border-top-color:#fffbbb;margin-top:-1px;z-index:4}.abs-admin__field-tooltip-content,.admin__field-tooltip .admin__field-tooltip-content{box-shadow:0 2px 8px 0 rgba(0,0,0,.3);background:#fffbbb;border:1px solid #afadac;border-radius:1px;padding:1.5rem 2.5rem;position:absolute;width:32rem;z-index:1}.admin__field-fallback-reset{font-size:1.25rem;white-space:nowrap;width:30px}.admin__field-fallback-reset>span{margin-left:.5rem;position:relative}.admin__field-fallback-reset:active{-ms-transform:scale(0.98);transform:scale(0.98)}.admin__field-fallback-reset:before{transition:color .1s linear;content:'\e642';font-size:1.3rem;margin-left:.5rem}.admin__field-fallback-reset:hover{cursor:pointer;text-decoration:none}.admin__field-fallback-reset:focus{background:0 0}.abs-field-size-x-small,.abs-field-sizes.admin__field-x-small>.admin__field-control,.admin__field.admin__field-x-small>.admin__field-control,.admin__fieldset>.admin__field.admin__field-x-small>.admin__field-control,[class*=admin__control-grouped]>.admin__field.admin__field-x-small>.admin__field-control{width:8rem}.abs-field-size-small,.abs-field-sizes.admin__field-small>.admin__field-control,.admin__control-grouped-date>.admin__field-date.admin__field>.admin__field-control,.admin__field.admin__field-small>.admin__field-control,.admin__fieldset>.admin__field.admin__field-small>.admin__field-control,[class*=admin__control-grouped]>.admin__field.admin__field-small>.admin__field-control{width:15rem}.abs-field-size-medium,.abs-field-sizes.admin__field-medium>.admin__field-control,.admin__field.admin__field-medium>.admin__field-control,.admin__fieldset>.admin__field.admin__field-medium>.admin__field-control,[class*=admin__control-grouped]>.admin__field.admin__field-medium>.admin__field-control{width:34rem}.abs-field-size-large,.abs-field-sizes.admin__field-large>.admin__field-control,.admin__field.admin__field-large>.admin__field-control,.admin__fieldset>.admin__field.admin__field-large>.admin__field-control,[class*=admin__control-grouped]>.admin__field.admin__field-large>.admin__field-control{width:64rem}.abs-field-no-label,.admin__field-group-additional,.admin__field-no-label,.admin__fieldset>.admin__field.admin__field-no-label>.admin__field-control{margin-left:calc((100%) * .25 + 30px)}.admin__fieldset{border:0;margin:0;min-width:0;padding:0}.admin__fieldset .fieldset-wrapper.admin__fieldset-section>.fieldset-wrapper-title{padding-left:1rem}.admin__fieldset .fieldset-wrapper.admin__fieldset-section>.fieldset-wrapper-title strong{font-size:1.7rem;font-weight:600}.admin__fieldset .fieldset-wrapper.admin__fieldset-section .admin__fieldset-wrapper-content>.admin__fieldset{padding-top:1rem}.admin__fieldset .fieldset-wrapper.admin__fieldset-section:last-child .admin__fieldset-wrapper-content>.admin__fieldset{padding-bottom:0}.admin__fieldset>.admin__field{border:0;margin:0 0 0 -30px;padding:0}.admin__fieldset>.admin__field:after{clear:both;content:'';display:table}.admin__fieldset>.admin__field>.admin__field-control{width:calc((100%) * .5 - 30px);float:left;margin-left:30px}.admin__fieldset>.admin__field>.admin__field-label{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}.admin__fieldset>.admin__field.admin__field-no-label>.admin__field-label{display:none}.admin__fieldset>.admin__field+.admin__field._empty._no-header{margin-top:-3rem}.admin__fieldset-product-websites{position:relative;z-index:300}.admin__fieldset-note{margin-bottom:2rem}.admin__form-field{border:0;margin:0;padding:0}.admin__field-control .admin__control-text,.admin__field-control .admin__control-textarea,.admin__form-field-control .admin__control-text,.admin__form-field-control .admin__control-textarea{width:100%}.admin__field-label{color:#303030;cursor:pointer;margin:0;text-align:right}.admin__field-label+br{display:none}.admin__field:not(.admin__field-option)>.admin__field-label{font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:3.2rem;padding:0;white-space:nowrap}.admin__field:not(.admin__field-option)>.admin__field-label:before{opacity:0;visibility:hidden;content:'.';margin-left:-7px;overflow:hidden}.admin__field:not(.admin__field-option)>.admin__field-label span{display:inline-block;line-height:1.2;vertical-align:middle;white-space:normal}.admin__field:not(.admin__field-option)>.admin__field-label span[data-config-scope]{position:relative}._required>.admin__field-label>span:after,.required>.admin__field-label>span:after{color:#eb5202;content:'*';display:inline-block;font-size:1.6rem;font-weight:500;line-height:1;margin-left:10px;margin-top:.2rem;position:absolute;z-index:1}._disabled>.admin__field-label{color:#999;cursor:default}.admin__field{margin-bottom:0}.admin__field+.admin__field{margin-top:1.5rem}.admin__field:not(.admin__field-option)~.admin__field-option{margin-top:.5rem}.admin__field.admin__field-option~.admin__field-option{margin-top:.9rem}.admin__field~.admin__field-option:last-child{margin-bottom:.8rem}.admin__fieldset>.admin__field{margin-bottom:3rem;position:relative}.admin__field legend.admin__field-label{opacity:0}.admin__field[data-config-scope]:before{color:gray;content:attr(data-config-scope);display:inline-block;font-size:1.2rem;left:calc((100%) * .75 - 30px);line-height:3.2rem;margin-left:60px;position:absolute;width:calc((100%) * .25 - 30px)}.admin__field-control .admin__field[data-config-scope]:nth-child(n+2):before{content:''}.admin__field._error .admin__field-control [class*=admin__addon-]:before,.admin__field._error .admin__field-control [class*=admin__control-] [class*=admin__addon-]:before,.admin__field._error .admin__field-control>[class*=admin__control-]{border-color:#e22626}.admin__field._disabled,.admin__field._disabled:hover{box-shadow:inherit;cursor:inherit;opacity:1;outline:inherit}.admin__field._hidden{display:none}.admin__field-control+.admin__field-control{margin-top:1.5rem}.admin__field-control._with-tooltip>.admin__control-addon,.admin__field-control._with-tooltip>.admin__control-select,.admin__field-control._with-tooltip>.admin__control-text,.admin__field-control._with-tooltip>.admin__control-textarea,.admin__field-control._with-tooltip>.admin__field-option{max-width:calc(100% - 45px - 4px)}.admin__field-control._with-tooltip .admin__field-tooltip{width:auto}.admin__field-control._with-tooltip .admin__field-option{display:inline-block}.admin__field-control._with-reset>.admin__control-addon,.admin__field-control._with-reset>.admin__control-text,.admin__field-control._with-reset>.admin__control-textarea{width:calc(100% - 30px - .5rem - 4px)}.admin__field-control._with-reset .admin__field-fallback-reset{margin-left:.5rem;margin-top:1rem;vertical-align:top}.admin__field-control._with-reset._with-tooltip>.admin__control-addon,.admin__field-control._with-reset._with-tooltip>.admin__control-text,.admin__field-control._with-reset._with-tooltip>.admin__control-textarea{width:calc(100% - 30px - .5rem - 45px - 8px)}.admin__fieldset>.admin__field-collapsible{margin-bottom:0}.admin__fieldset>.admin__field-collapsible .admin__field-control{border-top:1px solid #ccc;display:block;font-size:1.7rem;font-weight:700;padding:1.7rem 0;width:calc(97%)}.admin__fieldset>.admin__field-collapsible .admin__field-option{padding-top:0}.admin__field-collapsible+div{margin-top:2.5rem}.admin__field-collapsible .admin__control-radio+label:before{height:1.8rem;width:1.8rem}.admin__field-collapsible .admin__control-radio:checked+label:after{left:4px;top:5px}.admin__field-error{background:#fffbbb;border:1px solid #ee7d7d;box-sizing:border-box;color:#555;display:block;font-size:1.2rem;font-weight:400;line-height:1.2;margin:.2rem 0 0;padding:.8rem 1rem .9rem}.admin__field-note{color:#303030;font-size:1.2rem;margin:10px 0 0;padding:0}.admin__additional-info{padding-top:1rem}.admin__field-option{padding-top:.7rem}.admin__field-option .admin__field-label{text-align:left}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2),.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1){display:inline-block}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option{display:inline-block;margin-left:41px;margin-top:0}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option:before,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option:before{background:#cacaca;content:'';display:inline-block;height:20px;margin-left:-20px;position:absolute;width:1px}.admin__field-value{display:inline-block;padding-top:.7rem}.admin__field-service{padding-top:1rem}.admin__control-fields>.admin__field:first-child,[class*=admin__control-grouped]>.admin__field:first-child{position:static}.admin__control-fields>.admin__field:first-child>.admin__field-label,[class*=admin__control-grouped]>.admin__field:first-child>.admin__field-label{width:calc((100%) * .25 - 30px);float:left;margin-left:30px;background:#fff;cursor:pointer;left:0;position:absolute;top:0}.admin__control-fields>.admin__field:first-child>.admin__field-label span:before,[class*=admin__control-grouped]>.admin__field:first-child>.admin__field-label span:before{display:block}.admin__control-fields>.admin__field._disabled>.admin__field-label,[class*=admin__control-grouped]>.admin__field._disabled>.admin__field-label{cursor:default}.admin__control-fields>.admin__field>.admin__field-label span:before,[class*=admin__control-grouped]>.admin__field>.admin__field-label span:before{display:none}.admin__control-fields .admin__field-label~.admin__field-control{width:100%}.admin__control-fields .admin__field-option{padding-top:0}[class*=admin__control-grouped]{box-sizing:border-box;display:table;width:100%}[class*=admin__control-grouped]>.admin__field{display:table-cell;vertical-align:top}[class*=admin__control-grouped]>.admin__field>.admin__field-control{float:none;width:100%}[class*=admin__control-grouped]>.admin__field.admin__field-default,[class*=admin__control-grouped]>.admin__field.admin__field-large,[class*=admin__control-grouped]>.admin__field.admin__field-medium,[class*=admin__control-grouped]>.admin__field.admin__field-small,[class*=admin__control-grouped]>.admin__field.admin__field-x-small{width:1px}[class*=admin__control-grouped]>.admin__field.admin__field-default+.admin__field:last-child,[class*=admin__control-grouped]>.admin__field.admin__field-large+.admin__field:last-child,[class*=admin__control-grouped]>.admin__field.admin__field-medium+.admin__field:last-child,[class*=admin__control-grouped]>.admin__field.admin__field-small+.admin__field:last-child,[class*=admin__control-grouped]>.admin__field.admin__field-x-small+.admin__field:last-child{width:auto}[class*=admin__control-grouped]>.admin__field:nth-child(n+2){padding-left:20px}.admin__control-group-equal{table-layout:fixed}.admin__control-group-equal>.admin__field{width:50%}.admin__field-control-group{margin-top:.8rem}.admin__field-control-group>.admin__field{padding:0}.admin__control-grouped-date>.admin__field-date{white-space:nowrap;width:1px}.admin__control-grouped-date>.admin__field-date.admin__field>.admin__field-control{float:left;position:relative}.admin__control-grouped-date>.admin__field-date+.admin__field:last-child{width:auto}.admin__control-grouped-date>.admin__field-date+.admin__field-date>.admin__field-label{float:left;padding-right:20px}.admin__control-grouped-date .ui-datepicker-trigger{left:100%;top:0}.admin__field-group-columns.admin__field-control.admin__control-grouped{width:calc((100%) * 1 - 30px);float:left;margin-left:30px}.admin__field-group-columns>.admin__field:first-child>.admin__field-label{float:none;margin:0;opacity:1;position:static;text-align:left}.admin__field-group-columns .admin__control-select{width:100%}.admin__field-group-additional{clear:both}.admin__field-group-additional .action-advanced{margin-top:1rem}.admin__field-group-additional .action-secondary{width:100%}.admin__field-group-show-label{white-space:nowrap}.admin__field-group-show-label>.admin__field-control,.admin__field-group-show-label>.admin__field-label{display:inline-block;vertical-align:top}.admin__field-group-show-label>.admin__field-label{margin-right:20px}.admin__field-complex{margin:1rem 0 3rem;padding-left:1rem}.admin__field:not(._hidden)+.admin__field-complex{margin-top:3rem}.admin__field-complex .admin__field-complex-title{clear:both;color:#303030;font-size:1.7rem;font-weight:600;letter-spacing:.025em;margin-bottom:1rem}.admin__field-complex .admin__field-complex-elements{float:right;max-width:40%}.admin__field-complex .admin__field-complex-elements button{margin-left:1rem}.admin__field-complex .admin__field-complex-content{max-width:60%;overflow:hidden}.admin__field-complex .admin__field-complex-text{margin-left:-1rem}.admin__field-complex+.admin__field._empty._no-header{margin-top:-3rem}.admin__legend{float:left;position:static;width:100%}.admin__legend+br{clear:left;display:block;height:0;overflow:hidden}.message{margin-bottom:3rem}.message-icon-top:before{margin-top:0;top:1.8rem}.nav{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;display:none;margin-bottom:3rem;padding:2.2rem 1.5rem 0 0}.nav .btn-group,.nav-bar-outer-actions{float:right;margin-bottom:1.7rem}.nav .btn-group .btn-wrap,.nav-bar-outer-actions .btn-wrap{float:right;margin-left:.5rem;margin-right:.5rem}.nav .btn-group .btn-wrap .btn,.nav-bar-outer-actions .btn-wrap .btn{padding-left:.5rem;padding-right:.5rem}.nav-bar-outer-actions{margin-top:-10.6rem;padding-right:1.5rem}.btn-wrap-try-again{width:9.5rem}.btn-wrap-next,.btn-wrap-prev{width:8.5rem}.nav-bar{counter-reset:i;float:left;margin:0 1rem 1.7rem 0;padding:0;position:relative;white-space:nowrap}.nav-bar:before{background-color:#d4d4d4;background-repeat:repeat-x;background-image:linear-gradient(to bottom,#d1d1d1 0,#d4d4d4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#d4d4d4', GradientType=0);border-bottom:1px solid #d9d9d9;border-top:1px solid #bfbfbf;content:'';height:1rem;left:5.15rem;position:absolute;right:5.15rem;top:.7rem}.nav-bar>li{display:inline-block;font-size:0;position:relative;vertical-align:top;width:10.3rem}.nav-bar>li:first-child:after{display:none}.nav-bar>li:after{background-color:#514943;content:'';height:.5rem;left:calc(-50% + .25rem);position:absolute;right:calc(50% + .7rem);top:.9rem}.nav-bar>li.disabled:before,.nav-bar>li.ui-state-disabled:before{bottom:0;content:'';left:0;position:absolute;right:0;top:0;z-index:1}.nav-bar>li.active~li:after,.nav-bar>li.ui-state-active~li:after{display:none}.nav-bar>li.active~li a:after,.nav-bar>li.ui-state-active~li a:after{background-color:transparent;border-color:transparent;color:#a6a6a6}.nav-bar>li.active a,.nav-bar>li.ui-state-active a{color:#000}.nav-bar>li.active a:hover,.nav-bar>li.ui-state-active a:hover{cursor:default}.nav-bar>li.active a:after,.nav-bar>li.ui-state-active a:after{background-color:#fff;content:''}.nav-bar a{color:#514943;display:block;font-size:1.2rem;font-weight:600;line-height:1.2;overflow:hidden;padding:3rem .5em 0;position:relative;text-align:center;text-overflow:ellipsis}.nav-bar a:hover{text-decoration:none}.nav-bar a:after{background-color:#514943;border:.4rem solid #514943;border-radius:100%;color:#fff;content:counter(i);counter-increment:i;height:1.5rem;left:50%;line-height:.6;margin-left:-.8rem;position:absolute;right:auto;text-align:center;top:.4rem;width:1.5rem}.nav-bar a:before{background-color:#d6d6d6;border:1px solid transparent;border-bottom-color:#d9d9d9;border-radius:100%;border-top-color:#bfbfbf;content:'';height:2.3rem;left:50%;line-height:1;margin-left:-1.2rem;position:absolute;top:0;width:2.3rem}.tooltip{display:block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.19rem;font-weight:400;line-height:1.4;opacity:0;position:absolute;visibility:visible;z-index:10}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-4px;padding:8px 0}.tooltip.right{margin-left:4px;padding:0 8px}.tooltip.bottom{margin-top:4px;padding:8px 0}.tooltip.left{margin-left:-4px;padding:0 8px}.tooltip p:last-child{margin-bottom:0}.tooltip-inner{background-color:#fff;border:1px solid #adadad;border-radius:0;box-shadow:1px 1px 1px #ccc;color:#41362f;max-width:31rem;padding:.5em 1em;text-decoration:none}.tooltip-arrow,.tooltip-arrow:after{border:solid transparent;height:0;position:absolute;width:0}.tooltip-arrow:after{content:'';position:absolute}.tooltip.top .tooltip-arrow,.tooltip.top .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:50%;margin-left:-8px}.tooltip.top-left .tooltip-arrow,.tooltip.top-left .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;margin-bottom:-8px;right:8px}.tooltip.top-right .tooltip-arrow,.tooltip.top-right .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:8px;margin-bottom:-8px}.tooltip.right .tooltip-arrow,.tooltip.right .tooltip-arrow:after{border-right-color:#949494;border-width:8px 8px 8px 0;left:1px;margin-top:-8px;top:50%}.tooltip.right .tooltip-arrow:after{border-right-color:#fff;border-width:6px 7px 6px 0;margin-left:0;margin-top:-6px}.tooltip.left .tooltip-arrow,.tooltip.left .tooltip-arrow:after{border-left-color:#949494;border-width:8px 0 8px 8px;margin-top:-8px;right:0;top:50%}.tooltip.bottom .tooltip-arrow,.tooltip.bottom .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:50%;margin-left:-8px;top:0}.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;margin-top:-8px;right:8px;top:0}.tooltip.bottom-right .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:8px;margin-top:-8px;top:0}.password-strength{display:block;margin:0 -.3rem 1em;white-space:nowrap}.password-strength.password-strength-too-short .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child+.password-strength-item{background-color:#e22626}.password-strength.password-strength-fair .password-strength-item:first-child,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item+.password-strength-item{background-color:#ef672f}.password-strength.password-strength-good .password-strength-item:first-child,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item+.password-strength-item,.password-strength.password-strength-strong .password-strength-item{background-color:#79a22e}.password-strength .password-strength-item{background-color:#ccc;display:inline-block;font-size:0;height:1.4rem;margin-right:.3rem;width:calc(20% - .6rem)}@keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}.progress{background-color:#fafafa;border:1px solid #ccc;clear:left;height:3rem;margin-bottom:3rem;overflow:hidden}.progress-bar{background-color:#79a22e;color:#fff;float:left;font-size:1.19rem;height:100%;line-height:3rem;text-align:center;transition:width .6s ease;width:0}.progress-bar.active{animation:progress-bar-stripes 2s linear infinite}.progress-bar-text-description{margin-bottom:1.6rem}.progress-bar-text-progress{text-align:right}.page-columns .page-inner-sidebar{margin:0 0 3rem}.page-header{margin-bottom:2.7rem;padding-bottom:2rem;position:relative}.page-header:before{border-bottom:1px solid #e3e3e3;bottom:0;content:'';display:block;height:1px;left:3rem;position:absolute;right:3rem}.container .page-header:before{content:normal}.page-header .message{margin-bottom:1.8rem}.page-header .message+.message{margin-top:-1.5rem}.page-header .admin__action-dropdown,.page-header .search-global-input{transition:none}.container .page-header{margin-bottom:0}.page-title-wrapper{margin-top:1.1rem}.container .page-title-wrapper{background:url(../../pub/images/logo.svg) no-repeat;min-height:41px;padding:4px 0 0 45px}.admin__menu .level-0:first-child>a{margin-top:1.6rem}.admin__menu .level-0:first-child>a:after{top:-1.6rem}.admin__menu .level-0:first-child._active>a:after{display:block}.admin__menu .level-0>a{padding-bottom:1.3rem;padding-top:1.3rem}.admin__menu .level-0>a:before{margin-bottom:.7rem}.admin__menu .item-home>a:before{content:'\e611';font-size:2.3rem;padding-top:-.1rem}.admin__menu .item-component>a:before{content:'\e612'}.admin__menu .item-extension>a:before{content:'\e612'}.admin__menu .item-module>a:before{content:'\e647'}.admin__menu .item-upgrade>a:before{content:'\e614'}.admin__menu .item-system-config>a:before{content:'\e610'}.admin__menu .item-tools>a:before{content:'\e613'}.modal-sub-title{font-size:1.7rem;font-weight:600}.modal-connect-signin .modal-inner-wrap{max-width:80rem}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog{-webkit-overflow-scrolling:touch;bottom:0;box-sizing:border-box;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:999}.ngdialog *,.ngdialog:after,.ngdialog:before{box-sizing:inherit}.ngdialog.ngdialog-disabled-animation *{animation:none!important}.ngdialog.ngdialog-closing .ngdialog-content,.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-animation:ngdialog-fadeout .5s;-webkit-backface-visibility:hidden;animation:ngdialog-fadeout .5s}.ngdialog-overlay{-webkit-animation:ngdialog-fadein .5s;-webkit-backface-visibility:hidden;animation:ngdialog-fadein .5s;background:rgba(0,0,0,.4);bottom:0;left:0;position:fixed;right:0;top:0}.ngdialog-content{-webkit-animation:ngdialog-fadein .5s;-webkit-backface-visibility:hidden;animation:ngdialog-fadein .5s}body.ngdialog-open{overflow:hidden}.component-indicator{border-radius:50%;cursor:help;display:inline-block;height:16px;text-align:center;vertical-align:middle;width:16px}.component-indicator::after,.component-indicator::before{background:#fff;display:block;opacity:0;position:absolute;transition:opacity .2s linear .1s;visibility:hidden}.component-indicator::before{border:1px solid #adadad;border-radius:1px;box-shadow:0 0 2px rgba(0,0,0,.4);content:attr(data-label);font-size:1.2rem;margin:30px 0 0 -10px;min-width:50px;padding:4px 5px}.component-indicator::after{border-color:#999;border-style:solid;border-width:1px 0 0 1px;box-shadow:-1px -1px 1px rgba(0,0,0,.1);content:'';height:10px;margin:9px 0 0 5px;-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.component-indicator:hover::after,.component-indicator:hover::before{opacity:1;transition:opacity .2s linear;visibility:visible}.component-indicator span{display:block;height:16px;overflow:hidden;width:16px}.component-indicator span:before{content:'';display:block;font-family:Icons;font-size:16px;height:100%;line-height:16px;width:100%}.component-indicator._on{background:#79a22e}.component-indicator._off{background:#e22626}.component-indicator._off span:before{background:#fff;height:4px;margin:8px auto 20px;width:12px}.component-indicator._info{background:0 0}.component-indicator._info span{width:21px}.component-indicator._info span:before{color:#008bdb;content:'\e648';font-family:Icons;font-size:16px}.component-indicator._tooltip{background:0 0;margin:0 0 8px 5px}.component-indicator._tooltip a{width:21px}.component-indicator._tooltip a:hover{text-decoration:none}.component-indicator._tooltip a:before{color:#514943;content:'\e633';font-family:Icons;font-size:16px}.col-manager-item-name .data-grid-data{padding-left:5px}.col-manager-item-name .ng-hide+.data-grid-data{padding-left:24px}.col-manager-item-name ._hide-dependencies,.col-manager-item-name ._show-dependencies{cursor:pointer;padding-left:24px;position:relative}.col-manager-item-name ._hide-dependencies:before,.col-manager-item-name ._show-dependencies:before{display:block;font-family:Icons;font-size:12px;left:0;position:absolute;top:1px}.col-manager-item-name ._show-dependencies:before{content:'\e62b'}.col-manager-item-name ._hide-dependencies:before{content:'\e628'}.col-manager-item-name ._no-dependencies{padding-left:24px}.product-modules-block{font-size:1.2rem;padding:15px 0 0}.col-manager-item-name .product-modules-block{padding-left:1rem}.product-modules-descriprion,.product-modules-title{font-weight:700;margin:0 0 7px}.product-modules-list{font-size:1.1rem;list-style:none;margin:0}.col-manager-item-name .product-modules-list{margin-left:15px}.col-manager-item-name .product-modules-list li{padding:0 0 0 15px;position:relative}.product-modules-list li{margin:0 0 .5rem}.product-modules-list .component-indicator{height:10px;left:0;position:absolute;top:3px;width:10px}.module-summary{white-space:nowrap}.module-summary-title{font-size:2.1rem;margin-right:1rem}.app-updater .nav{display:block;margin-bottom:3.1rem;margin-top:-2.8rem}.app-updater .nav-bar-outer-actions{margin-top:1rem;padding-right:0}.app-updater .nav-bar-outer-actions .btn-wrap-cancel{margin-right:2.6rem}.main{padding-bottom:2rem;padding-top:3rem}.menu-wrapper .logo-static{pointer-events:none}.header{display:none}.header .logo{float:left;height:4.1rem;width:3.5rem}.header-title{font-size:2.8rem;letter-spacing:.02em;line-height:1.4;margin:2.5rem 0 3.5rem 5rem}.page-title{margin-bottom:1rem}.page-sub-title{font-size:2rem}.accent-box{margin-bottom:2rem}.accent-box .btn-prime{margin-top:1.5rem}.spinner.side{float:left;font-size:2.4rem;margin-left:2rem;margin-top:-5px}.page-landing{margin:7.6% auto 0;max-width:44rem;text-align:center}.page-landing .logo{height:5.6rem;margin-bottom:2rem;width:19.2rem}.page-landing .text-version{margin-bottom:3rem}.page-landing .text-welcome{margin-bottom:6.5rem}.page-landing .text-terms{margin-bottom:2.5rem;text-align:center}.page-landing .btn-submit,.page-license .license-text{margin-bottom:2rem}.page-license .page-license-footer{text-align:right}.readiness-check-item{margin-bottom:4rem;min-height:2.5rem}.readiness-check-item .spinner{float:left;font-size:2.5rem;margin:-.4rem 0 0 1.7rem}.readiness-check-title{font-size:1.4rem;font-weight:700;margin-bottom:.1rem;margin-left:5.7rem}.readiness-check-content{margin-left:5.7rem;margin-right:22rem;position:relative}.readiness-check-content .readiness-check-title{margin-left:0}.readiness-check-content .list{margin-top:-.3rem}.readiness-check-side{left:100%;padding-left:2.4rem;position:absolute;top:0;width:22rem}.readiness-check-side .side-title{margin-bottom:0}.readiness-check-icon{float:left;margin-left:1.7rem;margin-top:.3rem}.extensions-information{margin-bottom:5rem}.extensions-information h3{font-size:1.4rem;margin-bottom:1.3rem}.extensions-information .message{margin-bottom:2.5rem}.extensions-information .message:before{margin-top:0;top:1.8rem}.extensions-information .extensions-container{padding:0 2rem}.extensions-information .list{margin-bottom:1rem}.extensions-information .list select{cursor:pointer}.extensions-information .list select:disabled{background:#ccc;cursor:default}.extensions-information .list .extension-delete{font-size:1.7rem;padding-top:0}.delete-modal-wrap{padding:0 4% 4rem}.delete-modal-wrap h3{font-size:3.4rem;display:inline-block;font-weight:300;margin:0 0 2rem;padding:.9rem 0 0;vertical-align:top}.delete-modal-wrap .actions{padding:3rem 0 0}.page-web-configuration .form-el-insider-wrap{width:auto}.page-web-configuration .form-el-insider{width:15.4rem}.page-web-configuration .form-el-insider-input .form-el-input{width:16.5rem}.customize-your-store .advanced-modules-count,.customize-your-store .advanced-modules-select{padding-left:1.5rem}.customize-your-store .customize-your-store-advanced{min-width:0}.customize-your-store .message-error:before{margin-top:0;top:1.8rem}.customize-your-store .message-error a{color:#333;text-decoration:underline}.customize-your-store .message-error .form-label:before{background:#fff}.customize-your-store .customize-database-clean p{margin-top:2.5rem}.content-install{margin-bottom:2rem}.console{border:1px solid #ccc;font-family:'Courier New',Courier,monospace;font-weight:300;height:20rem;margin:1rem 0 2rem;overflow-y:auto;padding:1.5rem 2rem 2rem;resize:vertical}.console .text-danger{color:#e22626}.console .text-success{color:#090}.console .hidden{display:none}.content-success .btn-prime{margin-top:1.5rem}.jumbo-title{font-size:3.6rem}.jumbo-title .jumbo-icon{font-size:3.8rem;margin-right:.25em;position:relative;top:.15em}.install-database-clean{margin-top:4rem}.install-database-clean .btn{margin-right:1rem}.page-sub-title{margin-bottom:2.1rem;margin-top:3rem}.multiselect-custom{max-width:71.1rem}.content-install{margin-top:3.7rem}.home-page-inner-wrap{margin:0 auto;max-width:91rem}.setup-home-title{margin-bottom:3.9rem;padding-top:1.8rem;text-align:center}.setup-home-item{background-color:#fafafa;border:1px solid #ccc;color:#333;display:block;margin-bottom:2rem;margin-left:1.3rem;margin-right:1.3rem;min-height:30rem;padding:2rem;text-align:center}.setup-home-item:hover{border-color:#8c8c8c;color:#333;text-decoration:none;transition:border-color .1s linear}.setup-home-item:active{-ms-transform:scale(0.99);transform:scale(0.99)}.setup-home-item:before{display:block;font-size:7rem;margin-bottom:3.3rem;margin-top:4rem}.setup-home-item-component:before,.setup-home-item-extension:before{content:'\e612'}.setup-home-item-module:before{content:'\e647'}.setup-home-item-upgrade:before{content:'\e614'}.setup-home-item-configuration:before{content:'\e610'}.setup-home-item-title{display:block;font-size:1.8rem;letter-spacing:.025em;margin-bottom:1rem}.setup-home-item-description{display:block}.extension-manager-wrap{border:1px solid #bbb;margin:0 0 4rem}.extension-manager-account{font-size:2.1rem;display:inline-block;font-weight:400}.extension-manager-title{font-size:3.2rem;background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;color:#41362f;font-weight:600;line-height:1.2;padding:2rem}.extension-manager-content{padding:2.5rem 2rem 2rem}.extension-manager-items{list-style:none;margin:0;text-align:center}.extension-manager-items .btn{border:1px solid #adadad;display:block;margin:1rem auto 0}.extension-manager-items .item-title{font-size:2.1rem;display:inline-block;text-align:left}.extension-manager-items .item-number{font-size:4.1rem;display:inline-block;line-height:.8;margin:0 5px 1.5rem 0;vertical-align:top}.extension-manager-items .item-date{font-size:2.6rem;margin-top:1px}.extension-manager-items .item-date-title{font-size:1.5rem}.extension-manager-items .item-install{margin:0 0 2rem}.sync-login-wrap{padding:0 10% 4rem}.sync-login-wrap .legend{font-size:2.6rem;color:#eb5202;float:left;font-weight:300;line-height:1.2;margin:-1rem 0 2.5rem;position:static;width:100%}.sync-login-wrap .legend._hidden{display:none}.sync-login-wrap .login-header{font-size:3.4rem;font-weight:300;margin:0 0 2rem}.sync-login-wrap .login-header span{display:inline-block;padding:.9rem 0 0;vertical-align:top}.sync-login-wrap h4{font-size:1.4rem;margin:0 0 2rem}.sync-login-wrap .sync-login-steps{margin:0 0 2rem 1.5rem}.sync-login-wrap .sync-login-steps li{padding:0 0 0 1rem}.sync-login-wrap .form-row .form-label{display:inline-block}.sync-login-wrap .form-row .form-label.required{padding-left:1.5rem}.sync-login-wrap .form-row .form-label.required:after{left:0;position:absolute;right:auto}.sync-login-wrap .form-row{max-width:28rem}.sync-login-wrap .form-actions{display:table;margin-top:-1.3rem}.sync-login-wrap .form-actions .links{display:table-header-group}.sync-login-wrap .form-actions .actions{padding:3rem 0 0}@media all and (max-width:1047px){.admin__menu .submenu li{min-width:19.8rem}.nav{padding-bottom:5.38rem;padding-left:1.5rem;text-align:center}.nav-bar{display:inline-block;float:none;margin-right:0;vertical-align:top}.nav .btn-group,.nav-bar-outer-actions{display:inline-block;float:none;margin-top:-8.48rem;text-align:center;vertical-align:top;width:100%}.nav-bar-outer-actions{padding-right:0}.nav-bar-outer-actions .outer-actions-inner-wrap{display:inline-block}.app-updater .nav{padding-bottom:1.7rem}.app-updater .nav-bar-outer-actions{margin-top:2rem}}@media all and (min-width:768px){.page-layout-admin-2columns-left .page-columns{margin-left:-30px}.page-layout-admin-2columns-left .page-columns:after{clear:both;content:'';display:table}.page-layout-admin-2columns-left .page-columns .main-col{width:calc((100%) * .75 - 30px);float:right}.page-layout-admin-2columns-left .page-columns .side-col{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9{float:left}.col-m-12{width:100%}.col-m-11{width:91.66666667%}.col-m-10{width:83.33333333%}.col-m-9{width:75%}.col-m-8{width:66.66666667%}.col-m-7{width:58.33333333%}.col-m-6{width:50%}.col-m-5{width:41.66666667%}.col-m-4{width:33.33333333%}.col-m-3{width:25%}.col-m-2{width:16.66666667%}.col-m-1{width:8.33333333%}.col-m-pull-12{right:100%}.col-m-pull-11{right:91.66666667%}.col-m-pull-10{right:83.33333333%}.col-m-pull-9{right:75%}.col-m-pull-8{right:66.66666667%}.col-m-pull-7{right:58.33333333%}.col-m-pull-6{right:50%}.col-m-pull-5{right:41.66666667%}.col-m-pull-4{right:33.33333333%}.col-m-pull-3{right:25%}.col-m-pull-2{right:16.66666667%}.col-m-pull-1{right:8.33333333%}.col-m-pull-0{right:auto}.col-m-push-12{left:100%}.col-m-push-11{left:91.66666667%}.col-m-push-10{left:83.33333333%}.col-m-push-9{left:75%}.col-m-push-8{left:66.66666667%}.col-m-push-7{left:58.33333333%}.col-m-push-6{left:50%}.col-m-push-5{left:41.66666667%}.col-m-push-4{left:33.33333333%}.col-m-push-3{left:25%}.col-m-push-2{left:16.66666667%}.col-m-push-1{left:8.33333333%}.col-m-push-0{left:auto}.col-m-offset-12{margin-left:100%}.col-m-offset-11{margin-left:91.66666667%}.col-m-offset-10{margin-left:83.33333333%}.col-m-offset-9{margin-left:75%}.col-m-offset-8{margin-left:66.66666667%}.col-m-offset-7{margin-left:58.33333333%}.col-m-offset-6{margin-left:50%}.col-m-offset-5{margin-left:41.66666667%}.col-m-offset-4{margin-left:33.33333333%}.col-m-offset-3{margin-left:25%}.col-m-offset-2{margin-left:16.66666667%}.col-m-offset-1{margin-left:8.33333333%}.col-m-offset-0{margin-left:0}.page-columns{margin-left:-30px}.page-columns:after{clear:both;content:'';display:table}.page-columns .page-inner-content{width:calc((100%) * .75 - 30px);float:right}.page-columns .page-inner-sidebar{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}}@media all and (min-width:1048px){.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9{float:left}.col-l-12{width:100%}.col-l-11{width:91.66666667%}.col-l-10{width:83.33333333%}.col-l-9{width:75%}.col-l-8{width:66.66666667%}.col-l-7{width:58.33333333%}.col-l-6{width:50%}.col-l-5{width:41.66666667%}.col-l-4{width:33.33333333%}.col-l-3{width:25%}.col-l-2{width:16.66666667%}.col-l-1{width:8.33333333%}.col-l-pull-12{right:100%}.col-l-pull-11{right:91.66666667%}.col-l-pull-10{right:83.33333333%}.col-l-pull-9{right:75%}.col-l-pull-8{right:66.66666667%}.col-l-pull-7{right:58.33333333%}.col-l-pull-6{right:50%}.col-l-pull-5{right:41.66666667%}.col-l-pull-4{right:33.33333333%}.col-l-pull-3{right:25%}.col-l-pull-2{right:16.66666667%}.col-l-pull-1{right:8.33333333%}.col-l-pull-0{right:auto}.col-l-push-12{left:100%}.col-l-push-11{left:91.66666667%}.col-l-push-10{left:83.33333333%}.col-l-push-9{left:75%}.col-l-push-8{left:66.66666667%}.col-l-push-7{left:58.33333333%}.col-l-push-6{left:50%}.col-l-push-5{left:41.66666667%}.col-l-push-4{left:33.33333333%}.col-l-push-3{left:25%}.col-l-push-2{left:16.66666667%}.col-l-push-1{left:8.33333333%}.col-l-push-0{left:auto}.col-l-offset-12{margin-left:100%}.col-l-offset-11{margin-left:91.66666667%}.col-l-offset-10{margin-left:83.33333333%}.col-l-offset-9{margin-left:75%}.col-l-offset-8{margin-left:66.66666667%}.col-l-offset-7{margin-left:58.33333333%}.col-l-offset-6{margin-left:50%}.col-l-offset-5{margin-left:41.66666667%}.col-l-offset-4{margin-left:33.33333333%}.col-l-offset-3{margin-left:25%}.col-l-offset-2{margin-left:16.66666667%}.col-l-offset-1{margin-left:8.33333333%}.col-l-offset-0{margin-left:0}}@media all and (min-width:1440px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-pull-12{right:100%}.col-xl-pull-11{right:91.66666667%}.col-xl-pull-10{right:83.33333333%}.col-xl-pull-9{right:75%}.col-xl-pull-8{right:66.66666667%}.col-xl-pull-7{right:58.33333333%}.col-xl-pull-6{right:50%}.col-xl-pull-5{right:41.66666667%}.col-xl-pull-4{right:33.33333333%}.col-xl-pull-3{right:25%}.col-xl-pull-2{right:16.66666667%}.col-xl-pull-1{right:8.33333333%}.col-xl-pull-0{right:auto}.col-xl-push-12{left:100%}.col-xl-push-11{left:91.66666667%}.col-xl-push-10{left:83.33333333%}.col-xl-push-9{left:75%}.col-xl-push-8{left:66.66666667%}.col-xl-push-7{left:58.33333333%}.col-xl-push-6{left:50%}.col-xl-push-5{left:41.66666667%}.col-xl-push-4{left:33.33333333%}.col-xl-push-3{left:25%}.col-xl-push-2{left:16.66666667%}.col-xl-push-1{left:8.33333333%}.col-xl-push-0{left:auto}.col-xl-offset-12{margin-left:100%}.col-xl-offset-11{margin-left:91.66666667%}.col-xl-offset-10{margin-left:83.33333333%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-8{margin-left:66.66666667%}.col-xl-offset-7{margin-left:58.33333333%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-5{margin-left:41.66666667%}.col-xl-offset-4{margin-left:33.33333333%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-2{margin-left:16.66666667%}.col-xl-offset-1{margin-left:8.33333333%}.col-xl-offset-0{margin-left:0}}@media all and (max-width:767px){.abs-clearer-mobile:after,.nav-bar:after{clear:both;content:'';display:table}.list-definition>dt{float:none}.list-definition>dd{margin-left:0}.form-row .form-label{text-align:left}.form-row .form-label.required:after{position:static}.nav{padding-bottom:0;padding-left:0;padding-right:0}.nav-bar-outer-actions{margin-top:0}.nav-bar{display:block;margin-bottom:0;margin-left:auto;margin-right:auto;width:30.9rem}.nav-bar:before{display:none}.nav-bar>li{float:left;min-height:9rem}.nav-bar>li:after{display:none}.nav-bar>li:nth-child(4n){clear:both}.nav-bar a{line-height:1.4}.tooltip{display:none!important}.readiness-check-content{margin-right:2rem}.readiness-check-side{padding:2rem 0;position:static}.form-el-insider,.form-el-insider-wrap,.page-web-configuration .form-el-insider-input,.page-web-configuration .form-el-insider-input .form-el-input{display:block;width:100%}}@media all and (max-width:479px){.nav-bar{width:23.175rem}.nav-bar>li{width:7.725rem}.nav .btn-group .btn-wrap-try-again,.nav-bar-outer-actions .btn-wrap-try-again{clear:both;display:block;float:none;margin-left:auto;margin-right:auto;margin-top:1rem;padding-top:1rem}} diff --git a/setup/view/magento/setup/navigation/side-menu.phtml b/setup/view/magento/setup/navigation/side-menu.phtml index d41b306a75fca..58d12a4de448a 100644 --- a/setup/view/magento/setup/navigation/side-menu.phtml +++ b/setup/view/magento/setup/navigation/side-menu.phtml @@ -39,7 +39,7 @@ Extension Manager -
  • +
  • Module Manager From 2fb5735a848b8730379a1e71e67518ce8fc1683a Mon Sep 17 00:00:00 2001 From: vzabaznov Date: Thu, 12 Oct 2017 17:16:36 +0300 Subject: [PATCH 025/653] MAGETWO-81801: Prepare code base 2.2.1 --- app/code/Magento/Deploy/Model/Filesystem.php | 80 +++----- .../Deploy/Test/Unit/Model/FilesystemTest.php | 189 ++++++++++++------ .../Controller/Adminhtml/History/Download.php | 2 +- .../Adminhtml/History/DownloadTest.php | 13 +- app/code/Magento/Store/etc/config.xml | 4 + .../Adminhtml/Downloadable/FileTest.php | 35 ---- 6 files changed, 172 insertions(+), 151 deletions(-) delete mode 100644 dev/tests/integration/testsuite/Magento/Downloadable/Controller/Adminhtml/Downloadable/FileTest.php diff --git a/app/code/Magento/Deploy/Model/Filesystem.php b/app/code/Magento/Deploy/Model/Filesystem.php index 3dd28f4d3e820..0557914f48d24 100644 --- a/app/code/Magento/Deploy/Model/Filesystem.php +++ b/app/code/Magento/Deploy/Model/Filesystem.php @@ -5,17 +5,16 @@ */ namespace Magento\Deploy\Model; -use Symfony\Component\Console\Output\OutputInterface; -use Magento\Framework\App\State; -use Magento\Framework\App\DeploymentConfig\Writer; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Validator\Locale; use Magento\User\Model\ResourceModel\User\Collection as UserCollection; +use Symfony\Component\Console\Output\OutputInterface; /** * Generate static files, compile * - * Сlear generated/code, generated/metadata/, var/view_preprocessed and pub/static directories + * Clear generated/code, generated/metadata/, var/view_preprocessed and pub/static directories * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ @@ -50,21 +49,6 @@ class Filesystem */ const DEFAULT_THEME = 'Magento/blank'; - /** - * @var \Magento\Framework\App\DeploymentConfig\Writer - */ - private $writer; - - /** - * @var \Magento\Framework\App\DeploymentConfig\Reader - */ - private $reader; - - /** - * @var \Magento\Framework\ObjectManagerInterface - */ - private $objectManager; - /** * @var \Magento\Framework\Filesystem */ @@ -101,33 +85,35 @@ class Filesystem private $userCollection; /** - * @param \Magento\Framework\App\DeploymentConfig\Writer $writer - * @param \Magento\Framework\App\DeploymentConfig\Reader $reader - * @param \Magento\Framework\ObjectManagerInterface $objectManager + * @var Locale + */ + private $locale; + + /** * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Framework\App\Filesystem\DirectoryList $directoryList * @param \Magento\Framework\Filesystem\Driver\File $driverFile * @param \Magento\Store\Model\Config\StoreView $storeView * @param \Magento\Framework\ShellInterface $shell + * @param UserCollection $userCollection + * @param Locale $locale */ public function __construct( - \Magento\Framework\App\DeploymentConfig\Writer $writer, - \Magento\Framework\App\DeploymentConfig\Reader $reader, - \Magento\Framework\ObjectManagerInterface $objectManager, \Magento\Framework\Filesystem $filesystem, \Magento\Framework\App\Filesystem\DirectoryList $directoryList, \Magento\Framework\Filesystem\Driver\File $driverFile, \Magento\Store\Model\Config\StoreView $storeView, - \Magento\Framework\ShellInterface $shell + \Magento\Framework\ShellInterface $shell, + UserCollection $userCollection, + Locale $locale ) { - $this->writer = $writer; - $this->reader = $reader; - $this->objectManager = $objectManager; $this->filesystem = $filesystem; $this->directoryList = $directoryList; $this->driverFile = $driverFile; $this->storeView = $storeView; $this->shell = $shell; + $this->userCollection = $userCollection; + $this->locale = $locale; $this->functionCallPath = PHP_BINARY . ' -f ' . BP . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'magento '; } @@ -141,7 +127,7 @@ public function __construct( public function regenerateStatic( OutputInterface $output ) { - // Сlear generated/code, generated/metadata/, var/view_preprocessed and pub/static directories + // Clear generated/code, generated/metadata/, var/view_preprocessed and pub/static directories $this->cleanupFilesystem( [ DirectoryList::CACHE, @@ -193,7 +179,7 @@ protected function deployStaticContent( private function getAdminUserInterfaceLocales() { $locales = []; - foreach ($this->getUserCollection() as $user) { + foreach ($this->userCollection as $user) { $locales[] = $user->getInterfaceLocale(); } return $locales; @@ -203,6 +189,7 @@ private function getAdminUserInterfaceLocales() * Get used store and admin user locales * * @return array + * @throws \InvalidArgumentException if unknown locale is provided by the store configuration */ private function getUsedLocales() { @@ -210,25 +197,18 @@ private function getUsedLocales() $this->storeView->retrieveLocales(), $this->getAdminUserInterfaceLocales() ); - return array_unique($usedLocales); - } - - /** - * Get user collection - * - * @return UserCollection - * @deprecated 100.1.0 Added to not break backward compatibility of the constructor signature - * by injecting the new dependency directly. - * The method can be removed in a future major release, when constructor signature can be changed. - */ - private function getUserCollection() - { - if (!($this->userCollection instanceof UserCollection)) { - return \Magento\Framework\App\ObjectManager::getInstance()->get( - UserCollection::class - ); - } - return $this->userCollection; + return array_map( + function ($locale) { + if (!$this->locale->isValid($locale)) { + throw new \InvalidArgumentException( + $locale . + ' argument has invalid value, run info:language:list for list of available locales' + ); + } + return $locale; + }, + array_unique($usedLocales) + ); } /** diff --git a/app/code/Magento/Deploy/Test/Unit/Model/FilesystemTest.php b/app/code/Magento/Deploy/Test/Unit/Model/FilesystemTest.php index 673f31c04ffd3..d14c86c4a3264 100644 --- a/app/code/Magento/Deploy/Test/Unit/Model/FilesystemTest.php +++ b/app/code/Magento/Deploy/Test/Unit/Model/FilesystemTest.php @@ -5,47 +5,64 @@ */ namespace Magento\Deploy\Test\Unit\Model; +use Magento\Deploy\Model\Filesystem as DeployFilesystem; +use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\Directory\WriteInterface; +use Magento\Framework\ObjectManagerInterface; +use Magento\Framework\ShellInterface; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\Store\Model\Config\StoreView; +use Magento\User\Model\ResourceModel\User\Collection; +use Magento\User\Model\User; +use PHPUnit_Framework_MockObject_MockObject as MockObject; +use Symfony\Component\Console\Output\OutputInterface; +use Magento\Framework\Validator\Locale; +use Magento\Framework\Setup\Lists; + +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class FilesystemTest extends \PHPUnit\Framework\TestCase { /** - * @var \Magento\Store\Model\Config\StoreView + * @var StoreView|MockObject */ - private $storeViewMock; + private $storeView; /** - * @var \Magento\Framework\ShellInterface + * @var ShellInterface|MockObject */ - private $shellMock; + private $shell; /** - * @var \Magento\User\Model\ResourceModel\User\Collection + * @var OutputInterface|MockObject */ - private $userCollectionMock; + private $output; /** - * @var \Symfony\Component\Console\Output\OutputInterface + * @var Filesystem|MockObject */ - private $outputMock; + private $filesystem; /** - * @var \Magento\Framework\Filesystem + * @var WriteInterface|MockObject */ - private $filesystemMock; + private $directoryWrite; /** - * @var \Magento\Framework\Filesystem\Directory\WriteInterface + * @var Collection|MockObject */ - private $directoryWriteMock; + private $userCollection; /** - * @var \Magento\Framework\ObjectManagerInterface + * @var ObjectManagerInterface|MockObject */ - private $objectManagerMock; + private $objectManager; /** - * @var \Magento\Deploy\Model\Filesystem + * @var DeployFilesystem */ - private $filesystem; + private $deployFilesystem; /** * @var string @@ -54,75 +71,127 @@ class FilesystemTest extends \PHPUnit\Framework\TestCase protected function setUp() { - $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); - - $this->storeViewMock = $this->createMock(\Magento\Store\Model\Config\StoreView::class); - $this->shellMock = $this->createMock(\Magento\Framework\ShellInterface::class); - $this->userCollectionMock = $this->createMock(\Magento\User\Model\ResourceModel\User\Collection::class); - $this->outputMock = $this->createMock(\Symfony\Component\Console\Output\OutputInterface::class); - $this->objectManagerMock = $this->createMock(\Magento\Framework\ObjectManagerInterface::class); - $this->filesystemMock = $this->createMock(\Magento\Framework\Filesystem::class); - $this->directoryWriteMock = $this->createMock(\Magento\Framework\Filesystem\Directory\WriteInterface::class); - $this->filesystemMock->expects($this->any()) - ->method('getDirectoryWrite') - ->willReturn($this->directoryWriteMock); - $this->filesystem = $objectManager->getObject( - \Magento\Deploy\Model\Filesystem::class, + $objectManager = new ObjectManager($this); + + $this->storeView = $this->createMock(StoreView::class); + $this->shell = $this->createMock(ShellInterface::class); + $this->output = $this->createMock(OutputInterface::class); + $this->objectManager = $this->createMock(ObjectManagerInterface::class); + $this->filesystem = $this->createMock(Filesystem::class); + $this->directoryWrite = $this->createMock(WriteInterface::class); + $this->filesystem->method('getDirectoryWrite') + ->willReturn($this->directoryWrite); + + $this->userCollection = $this->createMock(Collection::class); + + $lists = $this->getMockBuilder(Lists::class) + ->disableOriginalConstructor() + ->getMock(); + $lists->method('getLocaleList') + ->willReturn([ + 'fr_FR' => 'France', + 'de_DE' => 'Germany', + 'nl_NL' => 'Netherlands', + 'en_US' => 'USA' + ]); + $locale = $objectManager->getObject(Locale::class, ['lists' => $lists]); + + $this->deployFilesystem = $objectManager->getObject( + DeployFilesystem::class, [ - 'storeView' => $this->storeViewMock, - 'shell' => $this->shellMock, - 'filesystem' => $this->filesystemMock + 'storeView' => $this->storeView, + 'shell' => $this->shell, + 'filesystem' => $this->filesystem, + 'userCollection' => $this->userCollection, + 'locale' => $locale ] ); - $userCollection = new \ReflectionProperty(\Magento\Deploy\Model\Filesystem::class, 'userCollection'); - $userCollection->setAccessible(true); - $userCollection->setValue($this->filesystem, $this->userCollectionMock); - $this->cmdPrefix = PHP_BINARY . ' -f ' . BP . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'magento '; } public function testRegenerateStatic() { $storeLocales = ['fr_FR', 'de_DE', 'nl_NL']; - $adminUserInterfaceLocales = ['de_DE', 'en_US']; - $this->storeViewMock->expects($this->once()) - ->method('retrieveLocales') + $this->storeView->method('retrieveLocales') ->willReturn($storeLocales); - $userMock = $this->createMock(\Magento\User\Model\User::class); - $userMock->expects($this->once()) - ->method('getInterfaceLocale') - ->willReturn('en_US'); - $this->userCollectionMock->expects($this->once()) - ->method('getIterator') - ->willReturn(new \ArrayIterator([$userMock])); - - $usedLocales = array_unique( - array_merge($storeLocales, $adminUserInterfaceLocales) - ); - $staticContentDeployCmd = $this->cmdPrefix . 'setup:static-content:deploy -f ' - . implode(' ', $usedLocales); + $setupDiCompileCmd = $this->cmdPrefix . 'setup:di:compile'; - $this->shellMock->expects($this->at(0)) + $this->shell->expects(self::at(0)) ->method('execute') ->with($setupDiCompileCmd); - $this->shellMock->expects($this->at(1)) + + $this->initAdminLocaleMock('en_US'); + + $usedLocales = ['fr_FR', 'de_DE', 'nl_NL', 'en_US']; + $staticContentDeployCmd = $this->cmdPrefix . 'setup:static-content:deploy -f ' + . implode(' ', $usedLocales); + $this->shell->expects(self::at(1)) ->method('execute') ->with($staticContentDeployCmd); - $this->outputMock->expects($this->at(0)) + $this->output->expects(self::at(0)) ->method('writeln') ->with('Starting compilation'); - $this->outputMock->expects($this->at(2)) + $this->output->expects(self::at(2)) ->method('writeln') ->with('Compilation complete'); - $this->outputMock->expects($this->at(3)) + $this->output->expects(self::at(3)) ->method('writeln') ->with('Starting deployment of static content'); - $this->outputMock->expects($this->at(5)) + $this->output->expects(self::at(5)) ->method('writeln') ->with('Deployment of static content complete'); - $this->filesystem->regenerateStatic($this->outputMock); + $this->deployFilesystem->regenerateStatic($this->output); + } + + /** + * Checks a case when configuration contains incorrect locale code. + * + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage ;echo argument has invalid value, run info:language:list for list of available locales + */ + public function testGenerateStaticForNotAllowedStoreViewLocale() + { + $storeLocales = ['fr_FR', 'de_DE', ';echo']; + $this->storeView->method('retrieveLocales') + ->willReturn($storeLocales); + + $this->initAdminLocaleMock('en_US'); + + $this->deployFilesystem->regenerateStatic($this->output); + } + + /** + * Checks as case when admin locale is incorrect. + * + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage ;echo argument has invalid value, run info:language:list for list of available locales + */ + public function testGenerateStaticForNotAllowedAdminLocale() + { + $storeLocales = ['fr_FR', 'de_DE', 'en_US']; + $this->storeView->method('retrieveLocales') + ->willReturn($storeLocales); + + $this->initAdminLocaleMock(';echo'); + + $this->deployFilesystem->regenerateStatic($this->output); + } + + /** + * Initializes admin user locale. + * + * @param string $locale + */ + private function initAdminLocaleMock($locale) + { + /** @var User|MockObject $user */ + $user = $this->createMock(User::class); + $user->method('getInterfaceLocale') + ->willReturn($locale); + $this->userCollection->method('getIterator') + ->willReturn(new \ArrayIterator([$user])); } } diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/History/Download.php b/app/code/Magento/ImportExport/Controller/Adminhtml/History/Download.php index 91cfbefbd57a2..e490ee4018376 100644 --- a/app/code/Magento/ImportExport/Controller/Adminhtml/History/Download.php +++ b/app/code/Magento/ImportExport/Controller/Adminhtml/History/Download.php @@ -39,7 +39,7 @@ public function __construct( */ public function execute() { - $fileName = $this->getRequest()->getParam('filename'); + $fileName = basename($this->getRequest()->getParam('filename')); /** @var \Magento\ImportExport\Helper\Report $reportHelper */ $reportHelper = $this->_objectManager->get(\Magento\ImportExport\Helper\Report::class); diff --git a/app/code/Magento/ImportExport/Test/Unit/Controller/Adminhtml/History/DownloadTest.php b/app/code/Magento/ImportExport/Test/Unit/Controller/Adminhtml/History/DownloadTest.php index 73b97dfc67751..3eb14e673f648 100644 --- a/app/code/Magento/ImportExport/Test/Unit/Controller/Adminhtml/History/DownloadTest.php +++ b/app/code/Magento/ImportExport/Test/Unit/Controller/Adminhtml/History/DownloadTest.php @@ -72,8 +72,9 @@ class DownloadTest extends \PHPUnit\Framework\TestCase */ protected function setUp() { - $this->request = $this->createPartialMock(\Magento\Framework\App\Request\Http::class, ['getParam']); - $this->request->expects($this->any())->method('getParam')->with('filename')->willReturn('filename'); + $this->request = $this->getMockBuilder(\Magento\Framework\App\Request\Http::class) + ->disableOriginalConstructor() + ->getMock(); $this->reportHelper = $this->createPartialMock( \Magento\ImportExport\Helper\Report::class, ['importFileExists', 'getReportSize', 'getReportOutput'] @@ -126,11 +127,12 @@ protected function setUp() } /** - * Test execute() + * Tests execute() */ public function testExecute() { - $this->reportHelper->expects($this->any())->method('importFileExists')->willReturn(true); + $this->reportHelper->expects($this->atLeastOnce())->method('importFileExists')->willReturn(true); + $this->resultRaw->expects($this->once())->method('setContents'); $this->downloadController->execute(); } @@ -140,7 +142,8 @@ public function testExecute() */ public function testExecuteFileNotFound() { - $this->reportHelper->expects($this->any())->method('importFileExists')->willReturn(false); + $this->request->method('getParam')->with('filename')->willReturn('filename'); + $this->reportHelper->method('importFileExists')->willReturn(false); $this->resultRaw->expects($this->never())->method('setContents'); $this->downloadController->execute(); } diff --git a/app/code/Magento/Store/etc/config.xml b/app/code/Magento/Store/etc/config.xml index 470337a97dcd9..bb5b23620df4b 100644 --- a/app/code/Magento/Store/etc/config.xml +++ b/app/code/Magento/Store/etc/config.xml @@ -115,6 +115,10 @@ php + php3 + php4 + php5 + php7 htaccess jsp pl diff --git a/dev/tests/integration/testsuite/Magento/Downloadable/Controller/Adminhtml/Downloadable/FileTest.php b/dev/tests/integration/testsuite/Magento/Downloadable/Controller/Adminhtml/Downloadable/FileTest.php deleted file mode 100644 index 4d19e973556c0..0000000000000 --- a/dev/tests/integration/testsuite/Magento/Downloadable/Controller/Adminhtml/Downloadable/FileTest.php +++ /dev/null @@ -1,35 +0,0 @@ - [ - 'name' => 'sample.txt', - 'type' => 'text/plain', - 'tmp_name' => dirname(__DIR__) . '/_files/sample.tmp', - 'error' => 0, - 'size' => 0, - ], - ]; - - $this->dispatch('backend/admin/downloadable_file/upload/type/samples'); - $body = $this->getResponse()->getBody(); - $result = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( - \Magento\Framework\Json\Helper\Data::class - )->jsonDecode( - $body - ); - $this->assertEquals(0, $result['error']); - } -} From 0edacbcac548b09d3e9a1e155688eeb3fe714d6b Mon Sep 17 00:00:00 2001 From: vzabaznov Date: Thu, 12 Oct 2017 19:24:36 +0300 Subject: [PATCH 026/653] MAGETWO-81820: Fix versions of packages into magento/framework composer.json --- lib/internal/Magento/Framework/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json index 55d6e55d4977f..7046122ec9f89 100644 --- a/lib/internal/Magento/Framework/composer.json +++ b/lib/internal/Magento/Framework/composer.json @@ -21,7 +21,7 @@ "lib-libxml": "*", "ext-xsl": "*", "symfony/process": "~2.1", - "colinmollenhour/php-redis-session-abstract": "~1.2.2", + "colinmollenhour/php-redis-session-abstract": "1.3.4", "composer/composer": "1.4.1", "monolog/monolog": "^1.17", "oyejorge/less.php": "~1.7.0", From 311bc1045de32748ff8454b9e8c5671abd3cd3e5 Mon Sep 17 00:00:00 2001 From: Lewis Voncken Date: Thu, 12 Oct 2017 20:20:39 +0000 Subject: [PATCH 027/653] [BUGFIX] Solved problem with incorrect created_at date in the Product Flat Catalog Table --- .../Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php index 05dd94dbe6e57..fbe0d4b550fa6 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php @@ -179,6 +179,11 @@ protected function _createTemporaryFlatTable($storeId) $columnComment = isset($fieldProp['comment']) ? $fieldProp['comment'] : $fieldName; + if ($fieldName == 'created_at') { + $columnDefinition['nullable'] = true; + $columnDefinition['default'] = null; + } + $table->addColumn($fieldName, $fieldProp['type'], $columnLength, $columnDefinition, $columnComment); } From 1c192a6397085289130c0cbf6a75737b7acde2f1 Mon Sep 17 00:00:00 2001 From: Todd Christensen Date: Mon, 2 Oct 2017 11:38:12 -0700 Subject: [PATCH 028/653] Avoid duplicates with > 1000 changelog entries. If an import modifies 2000 products, and then changes their category allocation, etc. there may be many duplicates, but not within a range of 1000 changelog entries. This loads all the ids in one batch (which should be relatively cheap memory and time wise), and then runs over them with the indexer in smaller chunks. This way indexers continue to seem the small chunk sizes, in case they would fail with too many ids. --- lib/internal/Magento/Framework/Mview/View.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/internal/Magento/Framework/Mview/View.php b/lib/internal/Magento/Framework/Mview/View.php index b489dd7d59e43..ef0bff64b09b6 100644 --- a/lib/internal/Magento/Framework/Mview/View.php +++ b/lib/internal/Magento/Framework/Mview/View.php @@ -21,6 +21,11 @@ class View extends \Magento\Framework\DataObject implements ViewInterface */ const DEFAULT_BATCH_SIZE = 1000; + /** + * Max versions to load from database at a time + */ + const MAX_VERSION_QUERY_BATCH = 100000; + /** * @var string */ @@ -272,14 +277,19 @@ public function update() try { $this->getState()->setStatus(View\StateInterface::STATUS_WORKING)->save(); + $versionBatchSize = self::MAX_VERSION_QUERY_BATCH; $batchSize = isset($this->changelogBatchSize[$this->getChangelog()->getViewId()]) ? $this->changelogBatchSize[$this->getChangelog()->getViewId()] : self::DEFAULT_BATCH_SIZE; - for ($versionFrom = $lastVersionId; $versionFrom < $currentVersionId; $versionFrom += $batchSize) { - $ids = $this->getChangelog()->getList($versionFrom, $versionFrom + $batchSize); + for ($versionFrom = $lastVersionId; $versionFrom < $currentVersionId; $versionFrom += $versionBatchSize) { + // Don't go past the current version for atomicy. + $versionTo = min($currentVersionId, $versionFrom + $versionBatchSize); + $ids = $this->getChangelog()->getList($versionFrom, $versionTo); - if (!empty($ids)) { + // We run the actual indexer in batches. Chunked AFTER loading to avoid duplicates in separate chunks. + $chunks = array_chunk($ids, $batchSize); + foreach ($chunks as $ids) { $action->execute($ids); } } From a16100638a18317ea1593ea20b4cbf46fdd07c10 Mon Sep 17 00:00:00 2001 From: Todd Christensen Date: Mon, 2 Oct 2017 11:47:41 -0700 Subject: [PATCH 029/653] Update test to expect last version id. Otherwise we would want to update to the latest version id returned. --- lib/internal/Magento/Framework/Mview/Test/Unit/ViewTest.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/internal/Magento/Framework/Mview/Test/Unit/ViewTest.php b/lib/internal/Magento/Framework/Mview/Test/Unit/ViewTest.php index 0c32665a54219..3fd8ea93c9bbe 100644 --- a/lib/internal/Magento/Framework/Mview/Test/Unit/ViewTest.php +++ b/lib/internal/Magento/Framework/Mview/Test/Unit/ViewTest.php @@ -263,7 +263,6 @@ public function testUpdate() $currentVersionId = 3; $lastVersionId = 1; $listId = [2, 3]; - $defaultBatchSize = 1000; $this->stateMock->expects($this->any()) ->method('getViewId') @@ -297,7 +296,7 @@ public function testUpdate() 'getList' )->with( $lastVersionId, - $lastVersionId + $defaultBatchSize + $currentVersionId )->will( $this->returnValue($listId) ); @@ -327,7 +326,6 @@ public function testUpdateWithException() $currentVersionId = 3; $lastVersionId = 1; $listId = [2, 3]; - $defaultBatchSize = 1000; $this->stateMock->expects($this->any()) ->method('getViewId') @@ -360,7 +358,7 @@ public function testUpdateWithException() 'getList' )->with( $lastVersionId, - $lastVersionId + $defaultBatchSize + $currentVersionId )->will( $this->returnValue($listId) ); From 9a1918a5e6bbc1b2edbda13088f07b4b125c6ecd Mon Sep 17 00:00:00 2001 From: Todd Christensen Date: Thu, 12 Oct 2017 13:37:03 -0700 Subject: [PATCH 030/653] Avoid exposing a visible change to Mview/View. --- lib/internal/Magento/Framework/Mview/View.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/internal/Magento/Framework/Mview/View.php b/lib/internal/Magento/Framework/Mview/View.php index ef0bff64b09b6..1f1bde6bb021c 100644 --- a/lib/internal/Magento/Framework/Mview/View.php +++ b/lib/internal/Magento/Framework/Mview/View.php @@ -24,7 +24,7 @@ class View extends \Magento\Framework\DataObject implements ViewInterface /** * Max versions to load from database at a time */ - const MAX_VERSION_QUERY_BATCH = 100000; + private static $maxVersionQueryBatch = 100000; /** * @var string @@ -277,7 +277,7 @@ public function update() try { $this->getState()->setStatus(View\StateInterface::STATUS_WORKING)->save(); - $versionBatchSize = self::MAX_VERSION_QUERY_BATCH; + $versionBatchSize = self::$maxVersionQueryBatch; $batchSize = isset($this->changelogBatchSize[$this->getChangelog()->getViewId()]) ? $this->changelogBatchSize[$this->getChangelog()->getViewId()] : self::DEFAULT_BATCH_SIZE; From 9d0befb24b4dd81f1568155b23ec9451fea290b8 Mon Sep 17 00:00:00 2001 From: Jeroen van Leusden Date: Fri, 13 Oct 2017 13:46:00 +0200 Subject: [PATCH 031/653] Translate order getCreatedAtFormatted() to store locale --- app/code/Magento/Sales/Model/Order.php | 20 +++++++++-- .../Sales/Test/Unit/Model/OrderTest.php | 34 ++++++++++++++++++- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Sales/Model/Order.php b/app/code/Magento/Sales/Model/Order.php index 250aa510eafc6..50497e8d47ba1 100644 --- a/app/code/Magento/Sales/Model/Order.php +++ b/app/code/Magento/Sales/Model/Order.php @@ -7,6 +7,8 @@ use Magento\Directory\Model\Currency; use Magento\Framework\Api\AttributeValueFactory; +use Magento\Framework\App\ObjectManager; +use Magento\Framework\Locale\ResolverInterface; use Magento\Framework\Pricing\PriceCurrencyInterface; use Magento\Sales\Api\Data\OrderInterface; use Magento\Sales\Api\Data\OrderStatusHistoryInterface; @@ -212,6 +214,11 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface */ protected $_currencyFactory; + /** + * @var \Magento\Eav\Model\Config + */ + private $_eavConfig; + /** * @var \Magento\Sales\Model\Order\Status\HistoryFactory */ @@ -267,6 +274,11 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface */ protected $timezone; + /** + * @var ResolverInterface + */ + private $localeResolver; + /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry @@ -295,6 +307,7 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data + * @param ResolverInterface $localeResolver * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -324,7 +337,8 @@ public function __construct( \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productListFactory, \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, - array $data = [] + array $data = [], + ResolverInterface $localeResolver = null ) { $this->_storeManager = $storeManager; $this->_orderConfig = $orderConfig; @@ -346,6 +360,8 @@ public function __construct( $this->_trackCollectionFactory = $trackCollectionFactory; $this->salesOrderCollectionFactory = $salesOrderCollectionFactory; $this->priceCurrency = $priceCurrency; + $this->localeResolver = $localeResolver ?: ObjectManager::getInstance()->get(ResolverInterface::class); + parent::__construct( $context, $registry, @@ -1830,7 +1846,7 @@ public function getCreatedAtFormatted($format) new \DateTime($this->getCreatedAt()), $format, $format, - null, + $this->localeResolver->getDefaultLocale(), $this->timezone->getConfigTimezone('store', $this->getStore()) ); } diff --git a/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php b/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php index dab92632426fa..fb1970638753f 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php @@ -7,6 +7,8 @@ use Magento\Catalog\Api\Data\ProductInterface; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory; +use Magento\Framework\Locale\ResolverInterface; +use Magento\Framework\Stdlib\DateTime\TimezoneInterface; use Magento\Sales\Api\Data\OrderInterface; use Magento\Sales\Model\Order; use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory as HistoryCollectionFactory; @@ -73,6 +75,16 @@ class OrderTest extends \PHPUnit\Framework\TestCase */ protected $productCollectionFactoryMock; + /** + * @var ResolverInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $localeResolver; + + /** + * @var TimezoneInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $timezone; + protected function setUp() { $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); @@ -124,6 +136,8 @@ protected function setUp() true, ['round'] ); + $this->localeResolver = $this->createMock(ResolverInterface::class); + $this->timezone = $this->createMock(TimezoneInterface::class); $this->incrementId = '#00000001'; $this->eventManager = $this->createMock(\Magento\Framework\Event\Manager::class); $context = $this->createPartialMock(\Magento\Framework\Model\Context::class, ['getEventDispatcher']); @@ -138,7 +152,9 @@ protected function setUp() 'historyCollectionFactory' => $this->historyCollectionFactoryMock, 'salesOrderCollectionFactory' => $this->salesOrderCollectionFactoryMock, 'priceCurrency' => $this->priceCurrency, - 'productListFactory' => $this->productCollectionFactoryMock + 'productListFactory' => $this->productCollectionFactoryMock, + 'localeResolver' => $this->localeResolver, + 'timezone' => $this->timezone, ] ); } @@ -1044,6 +1060,22 @@ public function testResetOrderWillResetPayment() ); } + public function testGetCreatedAtFormattedUsesCorrectLocale() + { + $localeCode = 'nl_NL'; + + $this->localeResolver->expects($this->once())->method('getDefaultLocale')->willReturn($localeCode); + $this->timezone->expects($this->once())->method('formatDateTime') + ->with( + $this->anything(), + $this->anything(), + $this->anything(), + $localeCode + ); + + $this->order->getCreatedAtFormatted(\IntlDateFormatter::SHORT); + } + public function notInvoicingStatesProvider() { return [ From 1d998f9c45856497332daddd930786ee42d458cb Mon Sep 17 00:00:00 2001 From: Mayank Date: Fri, 13 Oct 2017 18:19:11 +0530 Subject: [PATCH 032/653] Magento 2.2.0 Product Repeat Isuue after filter on category listing page.Issue : #11139 --- .../Catalog/Block/Product/ProductList/Toolbar.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php index f461b52515253..46080ab5c3330 100644 --- a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php +++ b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php @@ -192,7 +192,14 @@ public function setCollection($collection) $this->_collection->setPageSize($limit); } if ($this->getCurrentOrder()) { - $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection()); + if (($this->getCurrentOrder()) == 'position') { + $this->_collection->addAttributeToSort( + $this->getCurrentOrder(), + $this->getCurrentDirection() + )->addAttributeToSort('entity_id', $this->getCurrentDirection()); + } else { + $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection()); + } } return $this; } From 1530cbd5580880d30f966c003eb00c8d9ce8c7ae Mon Sep 17 00:00:00 2001 From: Lewis Voncken Date: Fri, 13 Oct 2017 14:35:12 +0000 Subject: [PATCH 033/653] [BUGFIX] Check if item exists because it is possible to delete the item in the submitBefore observer event --- app/code/Magento/Tax/Model/Plugin/OrderSave.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Tax/Model/Plugin/OrderSave.php b/app/code/Magento/Tax/Model/Plugin/OrderSave.php index 7203285248688..3c87086cdf585 100644 --- a/app/code/Magento/Tax/Model/Plugin/OrderSave.php +++ b/app/code/Magento/Tax/Model/Plugin/OrderSave.php @@ -163,7 +163,9 @@ protected function saveOrderTax(\Magento\Sales\Api\Data\OrderInterface $order) if (isset($quoteItemId['id'])) { //This is a product item $item = $order->getItemByQuoteItemId($quoteItemId['id']); - $itemId = $item->getId(); + if ($item !== null && $item->getId()) { + $itemId = $item->getId(); + } } elseif (isset($quoteItemId['associated_item_id'])) { //This item is associated with a product item $item = $order->getItemByQuoteItemId($quoteItemId['associated_item_id']); From 0379ec65e08e2fb6e02739bc6149ecc4e6ab970b Mon Sep 17 00:00:00 2001 From: Lewis Voncken Date: Fri, 13 Oct 2017 14:42:29 +0000 Subject: [PATCH 034/653] [TASK] Use one reference in Customer Webapi: use one Customer Id reference --- app/code/Magento/Customer/Api/CustomerRepositoryInterface.php | 4 ++-- app/code/Magento/Customer/etc/webapi.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Customer/Api/CustomerRepositoryInterface.php b/app/code/Magento/Customer/Api/CustomerRepositoryInterface.php index a18540d8cf9d5..2133ae5a323b4 100644 --- a/app/code/Magento/Customer/Api/CustomerRepositoryInterface.php +++ b/app/code/Magento/Customer/Api/CustomerRepositoryInterface.php @@ -38,7 +38,7 @@ public function save(\Magento\Customer\Api\Data\CustomerInterface $customer, $pa public function get($email, $websiteId = null); /** - * Get customer by customer ID. + * Get customer by Customer ID. * * @param int $customerId * @return \Magento\Customer\Api\Data\CustomerInterface @@ -70,7 +70,7 @@ public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCr public function delete(\Magento\Customer\Api\Data\CustomerInterface $customer); /** - * Delete customer by ID. + * Delete customer by Customer ID. * * @param int $customerId * @return bool true on success diff --git a/app/code/Magento/Customer/etc/webapi.xml b/app/code/Magento/Customer/etc/webapi.xml index cbcbbc8e71c72..c4a6b74815c67 100644 --- a/app/code/Magento/Customer/etc/webapi.xml +++ b/app/code/Magento/Customer/etc/webapi.xml @@ -128,7 +128,7 @@ - + From 57de356be55c7a99620952953032d764988acab0 Mon Sep 17 00:00:00 2001 From: Lewis Voncken Date: Fri, 13 Oct 2017 14:44:52 +0000 Subject: [PATCH 035/653] [TASK] Updated the Exception description for V1/customers/password --- app/code/Magento/Customer/Model/AccountManagement.php | 9 +++++++-- .../Customer/Test/Unit/Model/AccountManagementTest.php | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Customer/Model/AccountManagement.php b/app/code/Magento/Customer/Model/AccountManagement.php index b7b099ec45232..89f2cc8f0a4a2 100644 --- a/app/code/Magento/Customer/Model/AccountManagement.php +++ b/app/code/Magento/Customer/Model/AccountManagement.php @@ -526,8 +526,13 @@ public function initiatePasswordReset($email, $template, $websiteId = null) default: throw new InputException( __( - 'Invalid value of "%value" provided for the %fieldName field.', - ['value' => $template, 'fieldName' => 'email type'] + 'Invalid value of "%value" provided for the %fieldName field. Possible values are %template1 or %template2.', + [ + 'value' => $template, + 'fieldName' => 'template', + 'template1' => AccountManagement::EMAIL_REMINDER, + 'template2' => AccountManagement::EMAIL_RESET + ] ) ); } diff --git a/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php b/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php index de9c0460ad29e..13fd1790cecdd 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php @@ -1158,7 +1158,7 @@ public function testInitiatePasswordResetEmailReset() /** * @expectedException \Magento\Framework\Exception\InputException - * @expectedExceptionMessage Invalid value of "" provided for the email type field + * @expectedExceptionMessage Invalid value of "" provided for the template field. Possible values are email_reminder or email_reset. */ public function testInitiatePasswordResetNoTemplate() { From 3c3168bdfbe43379e485ff91e708a045dd767e67 Mon Sep 17 00:00:00 2001 From: marina Date: Fri, 13 Oct 2017 20:43:15 +0300 Subject: [PATCH 036/653] Update scheduledGenerateSitemaps unit test --- .../Sitemap/Test/Unit/Model/ObserverTest.php | 56 +++++++++++++++++-- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php index 92e6f4e2e2293..904360ffb3804 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php @@ -96,11 +96,11 @@ protected function setUp() ); } - /** - * @expectedException \Exception - */ - public function testScheduledGenerateSitemapsThrowsException() + public function testScheduledGenerateSitemapsSendsExceptionEmail() { + $exception = 'Sitemap Exception'; + $transport = $this->createMock(\Magento\Framework\Mail\TransportInterface::class); + $this->scopeConfigMock->expects($this->once())->method('isSetFlag')->willReturn(true); $this->collectionFactoryMock->expects($this->once()) @@ -111,7 +111,53 @@ public function testScheduledGenerateSitemapsThrowsException() ->method('getIterator') ->willReturn(new \ArrayIterator([$this->sitemapMock])); - $this->sitemapMock->expects($this->once())->method('generateXml')->willThrowException(new \Exception()); + $this->sitemapMock->expects($this->once())->method('generateXml')->willThrowException(new \Exception($exception)); + + $this->scopeConfigMock->expects($this->at(1)) + ->method('getValue') + ->with( + \Magento\Sitemap\Model\Observer::XML_PATH_ERROR_RECIPIENT, + \Magento\Store\Model\ScopeInterface::SCOPE_STORE + ) + ->willReturn('error-recipient@example.com'); + + $this->inlineTranslationMock->expects($this->once()) + ->method('suspend'); + + $this->transportBuilderMock->expects($this->once()) + ->method('setTemplateIdentifier') + ->will($this->returnSelf()); + + $this->transportBuilderMock->expects($this->once()) + ->method('setTemplateOptions') + ->with([ + 'area' => \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE, + 'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID, + ]) + ->will($this->returnSelf()); + + $this->transportBuilderMock->expects($this->once()) + ->method('setTemplateVars') + ->with(['warnings' => $exception]) + ->will($this->returnSelf()); + + $this->transportBuilderMock->expects($this->once()) + ->method('setFrom') + ->will($this->returnSelf()); + + $this->transportBuilderMock->expects($this->once()) + ->method('addTo') + ->will($this->returnSelf()); + + $this->transportBuilderMock->expects($this->once()) + ->method('getTransport') + ->willReturn($transport); + + $transport->expects($this->once()) + ->method('sendMessage'); + + $this->inlineTranslationMock->expects($this->once()) + ->method('resume'); $this->observer->scheduledGenerateSitemaps(); } From 11e38f68a9956cbdc1d7c48284bc712729f43a90 Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz Date: Sat, 14 Oct 2017 11:46:28 +0200 Subject: [PATCH 037/653] 7241 Always add empty option for prefix and/or suffix if optional --- .../Config/Model/Config/Source/Nooptreq.php | 10 +++++++--- app/code/Magento/Customer/Model/Options.php | 18 +++++++++++++++--- .../Magento/Customer/etc/adminhtml/system.xml | 4 ++-- app/code/Magento/Customer/i18n/en_US.csv | 4 ++-- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/Config/Model/Config/Source/Nooptreq.php b/app/code/Magento/Config/Model/Config/Source/Nooptreq.php index 03fe5ca2abccc..1c9eb801dfec7 100644 --- a/app/code/Magento/Config/Model/Config/Source/Nooptreq.php +++ b/app/code/Magento/Config/Model/Config/Source/Nooptreq.php @@ -11,15 +11,19 @@ */ class Nooptreq implements \Magento\Framework\Option\ArrayInterface { + const VALUE_NO = ''; + const VALUE_OPTIONAL = 'opt'; + const VALUE_REQUIRED = 'req'; + /** * @return array */ public function toOptionArray() { return [ - ['value' => '', 'label' => __('No')], - ['value' => 'opt', 'label' => __('Optional')], - ['value' => 'req', 'label' => __('Required')] + ['value' => self::VALUE_NO, 'label' => __('No')], + ['value' => self::VALUE_OPTIONAL, 'label' => __('Optional')], + ['value' => self::VALUE_REQUIRED, 'label' => __('Required')] ]; } } diff --git a/app/code/Magento/Customer/Model/Options.php b/app/code/Magento/Customer/Model/Options.php index ee109dac08104..bdd5fd9fd1137 100644 --- a/app/code/Magento/Customer/Model/Options.php +++ b/app/code/Magento/Customer/Model/Options.php @@ -5,6 +5,7 @@ */ namespace Magento\Customer\Model; +use Magento\Config\Model\Config\Source\Nooptreq as NooptreqSource; use Magento\Customer\Helper\Address as AddressHelper; use Magento\Framework\Escaper; @@ -42,7 +43,10 @@ public function __construct( */ public function getNamePrefixOptions($store = null) { - return $this->_prepareNamePrefixSuffixOptions($this->addressHelper->getConfig('prefix_options', $store)); + return $this->prepareNamePrefixSuffixOptions( + $this->addressHelper->getConfig('prefix_options', $store), + $this->addressHelper->getConfig('prefix_show', $store) == NooptreqSource::VALUE_OPTIONAL + ); } /** @@ -53,16 +57,21 @@ public function getNamePrefixOptions($store = null) */ public function getNameSuffixOptions($store = null) { - return $this->_prepareNamePrefixSuffixOptions($this->addressHelper->getConfig('suffix_options', $store)); + return $this->prepareNamePrefixSuffixOptions( + $this->addressHelper->getConfig('suffix_options', $store), + $this->addressHelper->getConfig('suffix_show', $store) == NooptreqSource::VALUE_OPTIONAL + ); } /** * Unserialize and clear name prefix or suffix options + * If field is optional, add an empty first option. * * @param string $options + * @param bool $isOptional * @return array|bool */ - protected function _prepareNamePrefixSuffixOptions($options) + private function prepareNamePrefixSuffixOptions($options, $isOptional = false) { $options = trim($options); if (empty($options)) { @@ -70,6 +79,9 @@ protected function _prepareNamePrefixSuffixOptions($options) } $result = []; $options = explode(';', $options); + if ($isOptional && trim(current($options))) { + array_unshift($options, ''); + } foreach ($options as $value) { $value = $this->escaper->escapeHtml(trim($value)); $result[$value] = $value; diff --git a/app/code/Magento/Customer/etc/adminhtml/system.xml b/app/code/Magento/Customer/etc/adminhtml/system.xml index daf9240677588..46d7f589022b8 100644 --- a/app/code/Magento/Customer/etc/adminhtml/system.xml +++ b/app/code/Magento/Customer/etc/adminhtml/system.xml @@ -209,7 +209,7 @@ - Put semicolon in the beginning for empty first option.
    Leave empty for open text field.]]> + Leave empty for open text field.]]>
    @@ -227,7 +227,7 @@ - Put semicolon in the beginning for empty first option.
    Leave empty for open text field.]]> + Leave empty for open text field.]]>
    diff --git a/app/code/Magento/Customer/i18n/en_US.csv b/app/code/Magento/Customer/i18n/en_US.csv index aececbf6deeb4..8768426b5c949 100644 --- a/app/code/Magento/Customer/i18n/en_US.csv +++ b/app/code/Magento/Customer/i18n/en_US.csv @@ -479,9 +479,9 @@ Strong,Strong "The title that goes before name (Mr., Mrs., etc.)","The title that goes before name (Mr., Mrs., etc.)" "Prefix Dropdown Options","Prefix Dropdown Options" " - Semicolon (;) separated values.
    Put semicolon in the beginning for empty first option.
    Leave empty for open text field. + Semicolon (;) separated values.
    Leave empty for open text field. "," - Semicolon (;) separated values.
    Put semicolon in the beginning for empty first option.
    Leave empty for open text field. + Semicolon (;) separated values.
    Leave empty for open text field. " "Show Middle Name (initial)","Show Middle Name (initial)" "Always optional.","Always optional." From 64943cd06e02b8993a86835985786dfcd33964f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20H=C3=BCnig?= Date: Sat, 14 Oct 2017 14:32:48 +0200 Subject: [PATCH 038/653] close #10810 Migrates Apache Access Syntax to 2.4 on Apaxhe >= 2.4 --- .htaccess | 162 ++++++++++++++---- app/.htaccess | 10 +- bin/.htaccess | 10 +- dev/.htaccess | 10 +- .../Composer/_files/testFromClone/.htaccess | 8 +- .../_files/testFromClone/cache/.htaccess | 8 +- .../_files/testFromCreateProject/.htaccess | 8 +- .../testFromCreateProject/cache/.htaccess | 8 +- .../Composer/_files/testSkeleton/.htaccess | 8 +- .../_files/testSkeleton/cache/.htaccess | 8 +- generated/.htaccess | 10 +- lib/.htaccess | 10 +- phpserver/.htaccess | 10 +- pub/.htaccess | 18 +- pub/media/customer/.htaccess | 10 +- pub/media/downloadable/.htaccess | 10 +- pub/media/import/.htaccess | 10 +- pub/media/theme_customization/.htaccess | 9 +- setup/config/.htaccess | 10 +- setup/performance-toolkit/.htaccess | 10 +- setup/src/.htaccess | 10 +- setup/view/.htaccess | 10 +- var/.htaccess | 10 +- vendor/.htaccess | 10 +- 24 files changed, 309 insertions(+), 78 deletions(-) diff --git a/.htaccess b/.htaccess index 90b9c16a5a8c0..54e4ed4800a21 100644 --- a/.htaccess +++ b/.htaccess @@ -203,76 +203,166 @@ RedirectMatch 403 /\.git - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + # For 404s and 403s that aren't handled by the application, show plain 404 response diff --git a/app/.htaccess b/app/.htaccess index 93169e4eb44ff..707c26b075e16 100644 --- a/app/.htaccess +++ b/app/.htaccess @@ -1,2 +1,8 @@ -Order deny,allow -Deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/bin/.htaccess b/bin/.htaccess index 896fbc5a341ea..707c26b075e16 100644 --- a/bin/.htaccess +++ b/bin/.htaccess @@ -1,2 +1,8 @@ -Order deny,allow -Deny from all \ No newline at end of file + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/dev/.htaccess b/dev/.htaccess index 93169e4eb44ff..707c26b075e16 100644 --- a/dev/.htaccess +++ b/dev/.htaccess @@ -1,2 +1,8 @@ -Order deny,allow -Deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/.htaccess b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/.htaccess index 14249c50bd760..118789f3d955b 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/.htaccess +++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/.htaccess @@ -1 +1,7 @@ -Deny from all \ No newline at end of file + + deny from all + += 2.4> + Require all denied + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/cache/.htaccess b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/cache/.htaccess index 14249c50bd760..118789f3d955b 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/cache/.htaccess +++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/cache/.htaccess @@ -1 +1,7 @@ -Deny from all \ No newline at end of file + + deny from all + += 2.4> + Require all denied + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/.htaccess b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/.htaccess index 14249c50bd760..118789f3d955b 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/.htaccess +++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/.htaccess @@ -1 +1,7 @@ -Deny from all \ No newline at end of file + + deny from all + += 2.4> + Require all denied + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/cache/.htaccess b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/cache/.htaccess index 14249c50bd760..118789f3d955b 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/cache/.htaccess +++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/cache/.htaccess @@ -1 +1,7 @@ -Deny from all \ No newline at end of file + + deny from all + += 2.4> + Require all denied + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/.htaccess b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/.htaccess index 14249c50bd760..118789f3d955b 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/.htaccess +++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/.htaccess @@ -1 +1,7 @@ -Deny from all \ No newline at end of file + + deny from all + += 2.4> + Require all denied + + diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/cache/.htaccess b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/cache/.htaccess index 14249c50bd760..118789f3d955b 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/cache/.htaccess +++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testSkeleton/cache/.htaccess @@ -1 +1,7 @@ -Deny from all \ No newline at end of file + + deny from all + += 2.4> + Require all denied + + diff --git a/generated/.htaccess b/generated/.htaccess index 93169e4eb44ff..707c26b075e16 100644 --- a/generated/.htaccess +++ b/generated/.htaccess @@ -1,2 +1,8 @@ -Order deny,allow -Deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/lib/.htaccess b/lib/.htaccess index 93169e4eb44ff..707c26b075e16 100644 --- a/lib/.htaccess +++ b/lib/.htaccess @@ -1,2 +1,8 @@ -Order deny,allow -Deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/phpserver/.htaccess b/phpserver/.htaccess index 93169e4eb44ff..707c26b075e16 100644 --- a/phpserver/.htaccess +++ b/phpserver/.htaccess @@ -1,2 +1,8 @@ -Order deny,allow -Deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/pub/.htaccess b/pub/.htaccess index bdae9be342d8d..9d79c1cc2b9a4 100644 --- a/pub/.htaccess +++ b/pub/.htaccess @@ -190,8 +190,13 @@ ## Deny access to release notes to prevent disclosure of the installed Magento version - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + # For 404s and 403s that aren't handled by the application, show plain 404 response @@ -207,8 +212,13 @@ ErrorDocument 403 /errors/404.php ########################################### ## Deny access to cron.php - order allow,deny - deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + diff --git a/pub/media/customer/.htaccess b/pub/media/customer/.htaccess index 93169e4eb44ff..707c26b075e16 100644 --- a/pub/media/customer/.htaccess +++ b/pub/media/customer/.htaccess @@ -1,2 +1,8 @@ -Order deny,allow -Deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/pub/media/downloadable/.htaccess b/pub/media/downloadable/.htaccess index 93169e4eb44ff..707c26b075e16 100644 --- a/pub/media/downloadable/.htaccess +++ b/pub/media/downloadable/.htaccess @@ -1,2 +1,8 @@ -Order deny,allow -Deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/pub/media/import/.htaccess b/pub/media/import/.htaccess index 93169e4eb44ff..707c26b075e16 100644 --- a/pub/media/import/.htaccess +++ b/pub/media/import/.htaccess @@ -1,2 +1,8 @@ -Order deny,allow -Deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/pub/media/theme_customization/.htaccess b/pub/media/theme_customization/.htaccess index ae8ddd114d94e..2b93da6b4c079 100644 --- a/pub/media/theme_customization/.htaccess +++ b/pub/media/theme_customization/.htaccess @@ -1,5 +1,10 @@ Options -Indexes - Order allow,deny - Deny from all + + order allow,deny + deny from all + + = 2.4> + Require all denied + diff --git a/setup/config/.htaccess b/setup/config/.htaccess index 281d5c33db37c..707c26b075e16 100644 --- a/setup/config/.htaccess +++ b/setup/config/.htaccess @@ -1,2 +1,8 @@ -order allow,deny -deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/setup/performance-toolkit/.htaccess b/setup/performance-toolkit/.htaccess index 281d5c33db37c..707c26b075e16 100644 --- a/setup/performance-toolkit/.htaccess +++ b/setup/performance-toolkit/.htaccess @@ -1,2 +1,8 @@ -order allow,deny -deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/setup/src/.htaccess b/setup/src/.htaccess index 281d5c33db37c..707c26b075e16 100644 --- a/setup/src/.htaccess +++ b/setup/src/.htaccess @@ -1,2 +1,8 @@ -order allow,deny -deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/setup/view/.htaccess b/setup/view/.htaccess index 281d5c33db37c..707c26b075e16 100644 --- a/setup/view/.htaccess +++ b/setup/view/.htaccess @@ -1,2 +1,8 @@ -order allow,deny -deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/var/.htaccess b/var/.htaccess index 896fbc5a341ea..707c26b075e16 100755 --- a/var/.htaccess +++ b/var/.htaccess @@ -1,2 +1,8 @@ -Order deny,allow -Deny from all \ No newline at end of file + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/vendor/.htaccess b/vendor/.htaccess index cb24fd7fc0b3a..707c26b075e16 100644 --- a/vendor/.htaccess +++ b/vendor/.htaccess @@ -1,2 +1,8 @@ -Order allow,deny -Deny from all + + order allow,deny + deny from all + += 2.4> + Require all denied + + From 86f1419e2a3ef386f1ebe3b68b23ab3050c2f7bb Mon Sep 17 00:00:00 2001 From: marina Date: Sun, 15 Oct 2017 16:27:05 +0300 Subject: [PATCH 039/653] Fix code style --- app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php index 904360ffb3804..e099d5b902544 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php @@ -111,7 +111,9 @@ public function testScheduledGenerateSitemapsSendsExceptionEmail() ->method('getIterator') ->willReturn(new \ArrayIterator([$this->sitemapMock])); - $this->sitemapMock->expects($this->once())->method('generateXml')->willThrowException(new \Exception($exception)); + $this->sitemapMock->expects($this->once()) + ->method('generateXml') + ->willThrowException(new \Exception($exception)); $this->scopeConfigMock->expects($this->at(1)) ->method('getValue') From 16590f018ab3c110d6999ebb467cd18592287f1c Mon Sep 17 00:00:00 2001 From: marina Date: Sun, 15 Oct 2017 17:27:25 +0300 Subject: [PATCH 040/653] Add suppress warning for coupling between objects --- app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php index e099d5b902544..ac88f23ff9d69 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/ObserverTest.php @@ -7,6 +7,10 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +/** + * Class ObserverTest + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class ObserverTest extends \PHPUnit\Framework\TestCase { /** From 42072dd20ac633ce678946586de6d73b83e9a43b Mon Sep 17 00:00:00 2001 From: Marius Grad Date: Sun, 15 Oct 2017 21:21:59 +0300 Subject: [PATCH 041/653] solve the toolbar problem when this is removed from the layout, code format on construcor of the product list block class --- .../Catalog/Block/Product/ListProduct.php | 74 ++++++++++++++----- 1 file changed, 54 insertions(+), 20 deletions(-) diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php index 7289aa85ea016..83065e81c7c50 100644 --- a/app/code/Magento/Catalog/Block/Product/ListProduct.php +++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php @@ -7,13 +7,18 @@ namespace Magento\Catalog\Block\Product; use Magento\Catalog\Api\CategoryRepositoryInterface; +use Magento\Catalog\Block\Product\Context; use Magento\Catalog\Block\Product\ProductList\Toolbar; +use Magento\Catalog\Helper\Product\ProductList; use Magento\Catalog\Model\Category; +use Magento\Catalog\Model\Layer\Resolver; use Magento\Catalog\Model\Product; use Magento\Catalog\Model\ResourceModel\Product\Collection; use Magento\Eav\Model\Entity\Collection\AbstractCollection; +use Magento\Framework\Data\Helper\PostHelper; use Magento\Framework\DataObject\IdentityInterface; use Magento\Framework\Exception\NoSuchEntityException; +use Magento\Framework\Url\Helper\Data; /** * Product list @@ -33,7 +38,7 @@ class ListProduct extends AbstractProduct implements IdentityInterface /** * Product Collection * - * @var AbstractCollection + * @var \Magento\Eav\Model\Entity\Collection\AbstractCollection */ protected $_productCollection; @@ -55,30 +60,39 @@ class ListProduct extends AbstractProduct implements IdentityInterface protected $urlHelper; /** - * @var CategoryRepositoryInterface + * @var \Magento\Catalog\Api\CategoryRepositoryInterface */ protected $categoryRepository; /** - * @param Context $context + * @var \Magento\Catalog\Helper\Product\ProductList + */ + protected $productListHelper; + + /** + * + * @param \Magento\Catalog\Helper\Product\ProductList $productListHelper + * @param \Magento\Catalog\Block\Product\Context $context * @param \Magento\Framework\Data\Helper\PostHelper $postDataHelper * @param \Magento\Catalog\Model\Layer\Resolver $layerResolver - * @param CategoryRepositoryInterface $categoryRepository + * @param \Magento\Catalog\Api\CategoryRepositoryInterface $categoryRepository * @param \Magento\Framework\Url\Helper\Data $urlHelper * @param array $data */ public function __construct( - \Magento\Catalog\Block\Product\Context $context, - \Magento\Framework\Data\Helper\PostHelper $postDataHelper, - \Magento\Catalog\Model\Layer\Resolver $layerResolver, + ProductList $productListHelper, + Context $context, + PostHelper $postDataHelper, + Resolver $layerResolver, CategoryRepositoryInterface $categoryRepository, - \Magento\Framework\Url\Helper\Data $urlHelper, + Data $urlHelper, array $data = [] ) { $this->_catalogLayer = $layerResolver->get(); $this->_postDataHelper = $postDataHelper; $this->categoryRepository = $categoryRepository; $this->urlHelper = $urlHelper; + $this->productListHelper = $productListHelper; parent::__construct( $context, $data @@ -137,7 +151,12 @@ public function getLoadedProductCollection() */ public function getMode() { - return $this->getChildBlock('toolbar')->getCurrentMode(); + if ($this->getChildBlock('toolbar')) { + return $this->getChildBlock('toolbar')->getCurrentMode(); + } + // if toolbar is removed from layout, use the general configuration for product list mode + // - config path catalog/frontend/list_mode + return $this->productListHelper->getDefaultViewMode($this->getModes()); } /** @@ -148,27 +167,43 @@ public function getMode() protected function _beforeToHtml() { $collection = $this->_getProductCollection(); - $this->configureToolbar($this->getToolbarBlock(), $collection); + + $this->addToobarBlock($collection); + $collection->load(); return parent::_beforeToHtml(); } + /** + * Add toolbar block to product listing + * + * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection + */ + private function addToobarBlock(Collection $collection) + { + $toolbar = $this->getToolbarBlock(); + if ($toolbar) { + $this->configureToolbar($toolbar, $collection); + } + } + /** * Retrieve Toolbar block * - * @return Toolbar + * @return Toolbar|false */ public function getToolbarBlock() { + $block = false; + $blockName = $this->getToolbarBlockName(); - if ($blockName) { - $block = $this->getLayout()->getBlock($blockName); - if ($block) { - return $block; - } + if (!$blockName) { + return $block; } - $block = $this->getLayout()->createBlock($this->_defaultToolbarBlock, uniqid(microtime())); + + $block = $this->getLayout()->getBlock($blockName); + return $block; } @@ -386,9 +421,8 @@ private function initializeProductCollection() if ($origCategory) { $layer->setCurrentCategory($origCategory); } - - $toolbar = $this->getToolbarBlock(); - $this->configureToolbar($toolbar, $collection); + + $this->addToobarBlock($collection); $this->_eventManager->dispatch( 'catalog_block_product_list_collection', From 30c48813ed20ffb24192ef79b6f8ea2b3e6a0ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Mart=C3=ADnez?= Date: Sun, 15 Oct 2017 01:03:56 +0200 Subject: [PATCH 042/653] REST API - Only associate automatically product with all websites when creating product in All Store Views scope --- app/code/Magento/Catalog/Model/ProductRepository.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Catalog/Model/ProductRepository.php b/app/code/Magento/Catalog/Model/ProductRepository.php index 4a72539e982f2..f7545ee1c1098 100644 --- a/app/code/Magento/Catalog/Model/ProductRepository.php +++ b/app/code/Magento/Catalog/Model/ProductRepository.php @@ -340,16 +340,17 @@ protected function initializeProductData(array $productData, $createNew) foreach ($productData as $key => $value) { $product->setData($key, $value); } - $this->assignProductToWebsites($product); + $this->assignProductToWebsites($product, $createNew); return $product; } /** * @param \Magento\Catalog\Model\Product $product + * @param bool $createNew * @return void */ - private function assignProductToWebsites(\Magento\Catalog\Model\Product $product) + private function assignProductToWebsites(\Magento\Catalog\Model\Product $product, $createNew) { $websiteIds = $product->getWebsiteIds(); @@ -362,7 +363,7 @@ private function assignProductToWebsites(\Magento\Catalog\Model\Product $product ); } - if ($this->storeManager->getStore(true)->getCode() == \Magento\Store\Model\Store::ADMIN_CODE) { + if ($createNew && $this->storeManager->getStore(true)->getCode() == \Magento\Store\Model\Store::ADMIN_CODE) { $websiteIds = array_keys($this->storeManager->getWebsites()); } From 906daf673c4dd55a7f0452fb1b58797abf217cc9 Mon Sep 17 00:00:00 2001 From: Mayank Date: Mon, 16 Oct 2017 10:14:36 +0530 Subject: [PATCH 043/653] Redundant round brackets removed from Magento 2.2.0 layer navigation return no products when 2 filters selected. --- app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php index 46080ab5c3330..df98969c262ce 100644 --- a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php +++ b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php @@ -192,7 +192,7 @@ public function setCollection($collection) $this->_collection->setPageSize($limit); } if ($this->getCurrentOrder()) { - if (($this->getCurrentOrder()) == 'position') { + if ($this->getCurrentOrder() == 'position') { $this->_collection->addAttributeToSort( $this->getCurrentOrder(), $this->getCurrentDirection() From 9dbe44493b92407c9b02217966224cb021175c48 Mon Sep 17 00:00:00 2001 From: Marius Grad Date: Mon, 16 Oct 2017 08:49:07 +0300 Subject: [PATCH 044/653] Remove the product list helper from constructor for backward compatibility. Use the default toolbar to get current listing mode. Refactor the code. --- .../Catalog/Block/Product/ListProduct.php | 74 ++++++++++++------- 1 file changed, 47 insertions(+), 27 deletions(-) diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php index 83065e81c7c50..0b197f93d4d35 100644 --- a/app/code/Magento/Catalog/Block/Product/ListProduct.php +++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php @@ -9,7 +9,6 @@ use Magento\Catalog\Api\CategoryRepositoryInterface; use Magento\Catalog\Block\Product\Context; use Magento\Catalog\Block\Product\ProductList\Toolbar; -use Magento\Catalog\Helper\Product\ProductList; use Magento\Catalog\Model\Category; use Magento\Catalog\Model\Layer\Resolver; use Magento\Catalog\Model\Product; @@ -65,13 +64,6 @@ class ListProduct extends AbstractProduct implements IdentityInterface protected $categoryRepository; /** - * @var \Magento\Catalog\Helper\Product\ProductList - */ - protected $productListHelper; - - /** - * - * @param \Magento\Catalog\Helper\Product\ProductList $productListHelper * @param \Magento\Catalog\Block\Product\Context $context * @param \Magento\Framework\Data\Helper\PostHelper $postDataHelper * @param \Magento\Catalog\Model\Layer\Resolver $layerResolver @@ -80,7 +72,6 @@ class ListProduct extends AbstractProduct implements IdentityInterface * @param array $data */ public function __construct( - ProductList $productListHelper, Context $context, PostHelper $postDataHelper, Resolver $layerResolver, @@ -92,7 +83,6 @@ public function __construct( $this->_postDataHelper = $postDataHelper; $this->categoryRepository = $categoryRepository; $this->urlHelper = $urlHelper; - $this->productListHelper = $productListHelper; parent::__construct( $context, $data @@ -154,9 +144,31 @@ public function getMode() if ($this->getChildBlock('toolbar')) { return $this->getChildBlock('toolbar')->getCurrentMode(); } - // if toolbar is removed from layout, use the general configuration for product list mode - // - config path catalog/frontend/list_mode - return $this->productListHelper->getDefaultViewMode($this->getModes()); + + return $this->getDefaultListingMode(); + } + + /** + * Get listing mode for products if toolbar is removed from layout. + * Use the general configuration for product list mode from config path catalog/frontend/list_mode as default value + // or mode data from block declaration from layout. + * + * @return string + */ + private function getDefaultListingMode() + { + // default Toolbar when the toolbar layout is not used + $defaultToolbar = $this->getToolbarBlock(); + $availableModes = $defaultToolbar->getModes(); + + // layout config mode + $mode = $this->getData('mode'); + if (!$mode && !isset($availableModes[$mode])) { + // default config mode + $mode = $defaultToolbar->getCurrentMode(); + } + + return $mode; } /** @@ -168,7 +180,7 @@ protected function _beforeToHtml() { $collection = $this->_getProductCollection(); - $this->addToobarBlock($collection); + $this->addToolbarBlock($collection); $collection->load(); @@ -176,33 +188,41 @@ protected function _beforeToHtml() } /** - * Add toolbar block to product listing + * Add toolbar block from product listing layout * * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */ - private function addToobarBlock(Collection $collection) + private function addToolbarBlock(Collection $collection) { - $toolbar = $this->getToolbarBlock(); - if ($toolbar) { - $this->configureToolbar($toolbar, $collection); + $toolbarLayout = false; + + $blockName = $this->getToolbarBlockName(); + + if ($blockName) { + $toolbarLayout = $this->getLayout()->getBlock($blockName); + } + + if ($toolbarLayout) { + $this->configureToolbar($toolbarLayout, $collection); } } /** - * Retrieve Toolbar block + * Retrieve Toolbar block from layout or a default Toolbar * - * @return Toolbar|false + * @return Toolbar */ public function getToolbarBlock() { - $block = false; - $blockName = $this->getToolbarBlockName(); - if (!$blockName) { - return $block; + + if ($blockName) { + $block = $this->getLayout()->getBlock($blockName); } - $block = $this->getLayout()->getBlock($blockName); + if (!$block) { + $block = $this->getLayout()->createBlock($this->_defaultToolbarBlock, uniqid(microtime())); + } return $block; } @@ -422,7 +442,7 @@ private function initializeProductCollection() $layer->setCurrentCategory($origCategory); } - $this->addToobarBlock($collection); + $this->addToolbarBlock($collection); $this->_eventManager->dispatch( 'catalog_block_product_list_collection', From 49fdfaee640a79ef6278e9df247a07217d9d597c Mon Sep 17 00:00:00 2001 From: Marius Grad Date: Mon, 16 Oct 2017 10:56:16 +0300 Subject: [PATCH 045/653] refactor the code on get toolbar block from layout, fix condition on using the mode layout configuration --- .../Catalog/Block/Product/ListProduct.php | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php index 0b197f93d4d35..abcc106337617 100644 --- a/app/code/Magento/Catalog/Block/Product/ListProduct.php +++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php @@ -163,7 +163,8 @@ private function getDefaultListingMode() // layout config mode $mode = $this->getData('mode'); - if (!$mode && !isset($availableModes[$mode])) { + + if (!$mode || !isset($availableModes[$mode])) { // default config mode $mode = $defaultToolbar->getCurrentMode(); } @@ -194,13 +195,7 @@ protected function _beforeToHtml() */ private function addToolbarBlock(Collection $collection) { - $toolbarLayout = false; - - $blockName = $this->getToolbarBlockName(); - - if ($blockName) { - $toolbarLayout = $this->getLayout()->getBlock($blockName); - } + $toolbarLayout = $this->getToolbarFromLayout(); if ($toolbarLayout) { $this->configureToolbar($toolbarLayout, $collection); @@ -214,11 +209,7 @@ private function addToolbarBlock(Collection $collection) */ public function getToolbarBlock() { - $blockName = $this->getToolbarBlockName(); - - if ($blockName) { - $block = $this->getLayout()->getBlock($blockName); - } + $block = $this->getToolbarFromLayout(); if (!$block) { $block = $this->getLayout()->createBlock($this->_defaultToolbarBlock, uniqid(microtime())); @@ -227,6 +218,24 @@ public function getToolbarBlock() return $block; } + /** + * Get toolbar block from layout + * + * @return bool|Toolbar + */ + private function getToolbarFromLayout() + { + $blockName = $this->getToolbarBlockName(); + + $toolbarLayout = false; + + if ($blockName) { + $toolbarLayout = $this->getLayout()->getBlock($blockName); + } + + return $toolbarLayout; + } + /** * Retrieve additional blocks html * From b58bc135d12135242139fa5cb550f44a2a1652cf Mon Sep 17 00:00:00 2001 From: joost-florijn-kega Date: Mon, 16 Oct 2017 11:49:23 +0200 Subject: [PATCH 046/653] do the stock check on default level because the stock on website level isn't updated and should be ignored Product's are linked to categories without notice of any website. The visual merchandiser shows to lowest price of in stock and active simples that are associated with the configurable. The stock check ignores the website scope so if a simple is in stock on the website level but out of stock on default level it should been ignored to determine the lowest price. This commit fixes that issue. --- .../ResourceModel/Product/StockStatusBaseSelectProcessor.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/CatalogInventory/Model/ResourceModel/Product/StockStatusBaseSelectProcessor.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Product/StockStatusBaseSelectProcessor.php index 9f89d380a8f96..b80c26c53a76e 100644 --- a/app/code/Magento/CatalogInventory/Model/ResourceModel/Product/StockStatusBaseSelectProcessor.php +++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Product/StockStatusBaseSelectProcessor.php @@ -56,7 +56,9 @@ public function process(Select $select) ['stock' => $stockStatusTable], sprintf('stock.product_id = %s.entity_id', BaseSelectProcessorInterface::PRODUCT_TABLE_ALIAS), [] - )->where('stock.stock_status = ?', Stock::STOCK_IN_STOCK); + ) + ->where('stock.stock_status = ?', Stock::STOCK_IN_STOCK) + ->where('stock.website_id = ?', 0); } return $select; From b6ed2d9b31de64b234540abfd28f55485c4556bd Mon Sep 17 00:00:00 2001 From: Marius Grad Date: Mon, 16 Oct 2017 13:03:51 +0300 Subject: [PATCH 047/653] Update the toolbar test with product list collection. The toolbar HTML depends on product collection. Because you can remove the toolbar from layout, there is no reason for parent class to add the product collection to default toolbar if the toolbar is never used. That is why the test toolbar coverage needs to include a product collection before checking the toolbar HTML. --- .../testsuite/Magento/Catalog/Block/Product/ListTest.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php index 17c0f451f9083..43240824d43a5 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php @@ -62,6 +62,9 @@ public function testToolbarCoverage() /* In order to initialize toolbar collection block toHtml should be called before toolbar toHtml */ $this->assertEmpty($parent->toHtml(), 'Block HTML'); /* Template not specified */ $this->assertEquals('grid', $parent->getMode(), 'Default Mode'); /* default mode */ + + /* In order to use toolbar html you need a collection to be set to toolbar block */ + $parent->getToolbarBlock()->setCollection($parent->getLoadedProductCollection()); $this->assertNotEmpty($parent->getToolbarHtml(), 'Toolbar HTML'); /* toolbar for one simple product */ } From 9cd20c03f9c4f3d7dd79865addf8dac9aa6139db Mon Sep 17 00:00:00 2001 From: Marius Grad Date: Mon, 16 Oct 2017 15:46:14 +0300 Subject: [PATCH 048/653] Update the toolbar coverage test to use the a layout toolbar declaration present in default layout. Remove the previews correction made because it's not solve the problem where is checking if the toolbar HTML is not empty. --- .../testsuite/Magento/Catalog/Block/Product/ListTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php index 43240824d43a5..8773256b85785 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php @@ -55,6 +55,9 @@ public function testToolbarCoverage() $parent = $this->_getLayout()->createBlock(\Magento\Catalog\Block\Product\ListProduct::class, 'parent'); /* Prepare toolbar block */ + $this->_getLayout()->createBlock(\Magento\Catalog\Block\Product\ProductList\Toolbar::class, 'product_list_toolbar'); + $parent->setToolbarBlockName('product_list_toolbar'); + $toolbar = $parent->getToolbarBlock(); $this->assertInstanceOf(\Magento\Catalog\Block\Product\ProductList\Toolbar::class, $toolbar, 'Default Toolbar'); @@ -62,9 +65,6 @@ public function testToolbarCoverage() /* In order to initialize toolbar collection block toHtml should be called before toolbar toHtml */ $this->assertEmpty($parent->toHtml(), 'Block HTML'); /* Template not specified */ $this->assertEquals('grid', $parent->getMode(), 'Default Mode'); /* default mode */ - - /* In order to use toolbar html you need a collection to be set to toolbar block */ - $parent->getToolbarBlock()->setCollection($parent->getLoadedProductCollection()); $this->assertNotEmpty($parent->getToolbarHtml(), 'Toolbar HTML'); /* toolbar for one simple product */ } From 2adefdff73c62d829d1969b3abc988992bd3da39 Mon Sep 17 00:00:00 2001 From: Marius Grad Date: Mon, 16 Oct 2017 19:26:15 +0300 Subject: [PATCH 049/653] fix static line limit test --- .../testsuite/Magento/Catalog/Block/Product/ListTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php index 8773256b85785..f68e509e4a8dd 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php @@ -55,7 +55,8 @@ public function testToolbarCoverage() $parent = $this->_getLayout()->createBlock(\Magento\Catalog\Block\Product\ListProduct::class, 'parent'); /* Prepare toolbar block */ - $this->_getLayout()->createBlock(\Magento\Catalog\Block\Product\ProductList\Toolbar::class, 'product_list_toolbar'); + $this->_getLayout() + ->createBlock(\Magento\Catalog\Block\Product\ProductList\Toolbar::class, 'product_list_toolbar'); $parent->setToolbarBlockName('product_list_toolbar'); $toolbar = $parent->getToolbarBlock(); From a872f4061695b91e923d1c1abb87a0a50e18c77d Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi Date: Wed, 18 Oct 2017 15:18:48 +0300 Subject: [PATCH 050/653] MAGETWO-81153: Backward incompatible changes of 2.2.1 release --- app/code/Magento/Customer/Helper/Address.php | 39 +----- .../Customer/Helper/AttributeChecker.php | 71 +++++++++++ .../Customer/Test/Unit/Helper/AddressTest.php | 69 ----------- .../Test/Unit/Helper/AttributeCheckerTest.php | 112 ++++++++++++++++++ 4 files changed, 184 insertions(+), 107 deletions(-) create mode 100644 app/code/Magento/Customer/Helper/AttributeChecker.php create mode 100644 app/code/Magento/Customer/Test/Unit/Helper/AttributeCheckerTest.php diff --git a/app/code/Magento/Customer/Helper/Address.php b/app/code/Magento/Customer/Helper/Address.php index 8dac704aaa085..c74c62dc6d98c 100644 --- a/app/code/Magento/Customer/Helper/Address.php +++ b/app/code/Magento/Customer/Helper/Address.php @@ -8,9 +8,7 @@ use Magento\Customer\Api\AddressMetadataInterface; use Magento\Customer\Api\CustomerMetadataInterface; use Magento\Customer\Api\Data\AttributeMetadataInterface; -use Magento\Customer\Model\Metadata\AttributeResolver; use Magento\Directory\Model\Country\Format; -use Magento\Framework\App\ObjectManager; use Magento\Framework\Exception\NoSuchEntityException; /** @@ -95,11 +93,6 @@ class Address extends \Magento\Framework\App\Helper\AbstractHelper */ protected $_addressConfig; - /** - * @var AttributeResolver - */ - private $attributeResolver; - /** * @param \Magento\Framework\App\Helper\Context $context * @param \Magento\Framework\View\Element\BlockFactory $blockFactory @@ -107,7 +100,6 @@ class Address extends \Magento\Framework\App\Helper\AbstractHelper * @param CustomerMetadataInterface $customerMetadataService * @param AddressMetadataInterface $addressMetadataService * @param \Magento\Customer\Model\Address\Config $addressConfig - * @param AttributeResolver|null $attributeResolver */ public function __construct( \Magento\Framework\App\Helper\Context $context, @@ -115,15 +107,13 @@ public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, CustomerMetadataInterface $customerMetadataService, AddressMetadataInterface $addressMetadataService, - \Magento\Customer\Model\Address\Config $addressConfig, - AttributeResolver $attributeResolver = null + \Magento\Customer\Model\Address\Config $addressConfig ) { $this->_blockFactory = $blockFactory; $this->_storeManager = $storeManager; $this->_customerMetadataService = $customerMetadataService; $this->_addressMetadataService = $addressMetadataService; $this->_addressConfig = $addressConfig; - $this->attributeResolver = $attributeResolver ?: ObjectManager::getInstance()->get(AttributeResolver::class); parent::__construct($context); } @@ -401,31 +391,4 @@ public function isAttributeVisible($code) } return false; } - - /** - * Checks whether it is allowed to show an attribute on the form - * - * This check relies on the attribute's property 'getUsedInForms' which contains a list of forms - * where allowed to render specified attribute. - * - * @param string $attributeCode - * @param string $formName - * @return bool - */ - public function isAttributeAllowedOnForm($attributeCode, $formName) - { - $isAllowed = false; - $attributeMetadata = $this->_addressMetadataService->getAttributeMetadata($attributeCode); - if ($attributeMetadata) { - /** @var \Magento\Customer\Model\Attribute $attribute */ - $attribute = $this->attributeResolver->getModelByAttribute( - \Magento\Customer\Api\AddressMetadataManagementInterface::ENTITY_TYPE_ADDRESS, - $attributeMetadata - ); - $usedInForms = $attribute->getUsedInForms(); - $isAllowed = in_array($formName, $usedInForms, true); - } - - return $isAllowed; - } } diff --git a/app/code/Magento/Customer/Helper/AttributeChecker.php b/app/code/Magento/Customer/Helper/AttributeChecker.php new file mode 100644 index 0000000000000..d8766a67c8b21 --- /dev/null +++ b/app/code/Magento/Customer/Helper/AttributeChecker.php @@ -0,0 +1,71 @@ +addressMetadata = $addressMetadata; + $this->attributeResolver = $attributeResolver; + parent::__construct($context); + } + + /** + * Checks whether it is allowed to show an attribute on the form + * + * This check relies on the attribute's property 'getUsedInForms' which contains a list of forms + * where allowed to render specified attribute. + * + * @param string $attributeCode + * @param string $formName + * @return bool + */ + public function isAttributeAllowedOnForm($attributeCode, $formName) + { + $isAllowed = false; + $attributeMetadata = $this->addressMetadata->getAttributeMetadata($attributeCode); + if ($attributeMetadata) { + /** @var Attribute $attribute */ + $attribute = $this->attributeResolver->getModelByAttribute( + AddressMetadataManagementInterface::ENTITY_TYPE_ADDRESS, + $attributeMetadata + ); + $usedInForms = $attribute->getUsedInForms(); + $isAllowed = in_array($formName, $usedInForms, true); + } + + return $isAllowed; + } +} diff --git a/app/code/Magento/Customer/Test/Unit/Helper/AddressTest.php b/app/code/Magento/Customer/Test/Unit/Helper/AddressTest.php index 7b42e8b7774c8..50785247d7965 100644 --- a/app/code/Magento/Customer/Test/Unit/Helper/AddressTest.php +++ b/app/code/Magento/Customer/Test/Unit/Helper/AddressTest.php @@ -7,7 +7,6 @@ namespace Magento\Customer\Test\Unit\Helper; use Magento\Customer\Api\AddressMetadataInterface; -use Magento\Customer\Api\AddressMetadataManagementInterface; use Magento\Customer\Api\CustomerMetadataInterface; /** @@ -36,9 +35,6 @@ class AddressTest extends \PHPUnit\Framework\TestCase /** @var \Magento\Customer\Model\Address\Config|\PHPUnit_Framework_MockObject_MockObject */ protected $addressConfig; - /** @var \Magento\Customer\Model\Metadata\AttributeResolver|\PHPUnit_Framework_MockObject_MockObject */ - protected $attributeResolver; - /** @var \PHPUnit_Framework_MockObject_MockObject|AddressMetadataInterface */ private $addressMetadataService; @@ -55,7 +51,6 @@ protected function setUp() $this->customerMetadataService = $arguments['customerMetadataService']; $this->addressConfig = $arguments['addressConfig']; $this->addressMetadataService = $arguments['addressMetadataService']; - $this->attributeResolver = $arguments['attributeResolver']; $this->helper = $objectManagerHelper->getObject($className, $arguments); } @@ -408,68 +403,4 @@ public function isAttributeVisibleDataProvider() ['invalid_code', false], ]; } - - /** - * @dataProvider attributeOnFormDataProvider - * @param bool $isAllowed - * @param bool $isMetadataExists - * @param string $attributeCode - * @param string $formName - * @param array $attributeFormsList - */ - public function testIsAttributeAllowedOnForm( - $isAllowed, - $isMetadataExists, - $attributeCode, - $formName, - array $attributeFormsList - ) { - $attributeMetadata = null; - if ($isMetadataExists) { - $attributeMetadata = $this->getMockBuilder(\Magento\Customer\Api\Data\AttributeMetadataInterface::class) - ->getMockForAbstractClass(); - $attribute = $this->getMockBuilder(\Magento\Customer\Model\Attribute::class) - ->disableOriginalConstructor() - ->getMock(); - $this->attributeResolver->expects($this->once()) - ->method('getModelByAttribute') - ->with(AddressMetadataManagementInterface::ENTITY_TYPE_ADDRESS, $attributeMetadata) - ->willReturn($attribute); - $attribute->expects($this->once()) - ->method('getUsedInForms') - ->willReturn($attributeFormsList); - } - $this->addressMetadataService->expects($this->once()) - ->method('getAttributeMetadata') - ->with($attributeCode) - ->willReturn($attributeMetadata); - $this->assertEquals($isAllowed, $this->helper->isAttributeAllowedOnForm($attributeCode, $formName)); - } - - public function attributeOnFormDataProvider() - { - return [ - 'metadata not exists' => [ - 'isAllowed' => false, - 'isMetadataExists' => false, - 'attributeCode' => 'attribute_code', - 'formName' => 'form_name', - 'attributeFormsList' => [], - ], - 'form not in the list' => [ - 'isAllowed' => false, - 'isMetadataExists' => true, - 'attributeCode' => 'attribute_code', - 'formName' => 'form_name', - 'attributeFormsList' => ['form_1', 'form_2'], - ], - 'allowed' => [ - 'isAllowed' => true, - 'isMetadataExists' => true, - 'attributeCode' => 'attribute_code', - 'formName' => 'form_name', - 'attributeFormsList' => ['form_name', 'form_1', 'form_2'], - ], - ]; - } } diff --git a/app/code/Magento/Customer/Test/Unit/Helper/AttributeCheckerTest.php b/app/code/Magento/Customer/Test/Unit/Helper/AttributeCheckerTest.php new file mode 100644 index 0000000000000..3ec2ded413bbb --- /dev/null +++ b/app/code/Magento/Customer/Test/Unit/Helper/AttributeCheckerTest.php @@ -0,0 +1,112 @@ +context = $this->getMockBuilder(Context::class) + ->disableOriginalConstructor() + ->getMock(); + $this->addressMetadataService = $this->getMockForAbstractClass(AddressMetadataInterface::class); + $this->attributeResolver = $this->getMockBuilder(AttributeResolver::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->model = new AttributeChecker( + $this->context, + $this->addressMetadataService, + $this->attributeResolver + ); + } + + /** + * @param bool $isAllowed + * @param bool $isMetadataExists + * @param string $attributeCode + * @param string $formName + * @param array $attributeFormsList + * + * @dataProvider attributeOnFormDataProvider + */ + public function testIsAttributeAllowedOnForm( + $isAllowed, + $isMetadataExists, + $attributeCode, + $formName, + array $attributeFormsList + ) { + $attributeMetadata = null; + if ($isMetadataExists) { + $attributeMetadata = $this->getMockForAbstractClass(AttributeMetadataInterface::class); + $attribute = $this->getMockBuilder(Attribute::class) + ->disableOriginalConstructor() + ->getMock(); + $this->attributeResolver->expects($this->once()) + ->method('getModelByAttribute') + ->with(AddressMetadataManagementInterface::ENTITY_TYPE_ADDRESS, $attributeMetadata) + ->willReturn($attribute); + $attribute->expects($this->once()) + ->method('getUsedInForms') + ->willReturn($attributeFormsList); + } + $this->addressMetadataService->expects($this->once()) + ->method('getAttributeMetadata') + ->with($attributeCode) + ->willReturn($attributeMetadata); + + $this->assertEquals($isAllowed, $this->model->isAttributeAllowedOnForm($attributeCode, $formName)); + } + + public function attributeOnFormDataProvider() + { + return [ + 'metadata not exists' => [ + 'isAllowed' => false, + 'isMetadataExists' => false, + 'attributeCode' => 'attribute_code', + 'formName' => 'form_name', + 'attributeFormsList' => [], + ], + 'form not in the list' => [ + 'isAllowed' => false, + 'isMetadataExists' => true, + 'attributeCode' => 'attribute_code', + 'formName' => 'form_name', + 'attributeFormsList' => ['form_1', 'form_2'], + ], + 'allowed' => [ + 'isAllowed' => true, + 'isMetadataExists' => true, + 'attributeCode' => 'attribute_code', + 'formName' => 'form_name', + 'attributeFormsList' => ['form_name', 'form_1', 'form_2'], + ], + ]; + } +} From ed52dc9b33ac855df73075334b26b657a87e2489 Mon Sep 17 00:00:00 2001 From: Todd Christensen Date: Wed, 18 Oct 2017 18:20:47 -0700 Subject: [PATCH 051/653] Correct flat indexing with staging and > 500 cats. Previously, the array was prefilled with entity_id values to ensure those categories were indexed. Unfortunately, when using row_id, it was using entity_ids. When chunking at 500, this could cause an overlapping row to be processed twice (the second time with missing non-static attributes), and cause a duplicate key error. --- .../Indexer/Category/Flat/AbstractAction.php | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/AbstractAction.php index 24d81f0054c5a..c5efbc619694a 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/AbstractAction.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/AbstractAction.php @@ -369,9 +369,11 @@ protected function getAttributeValues($entityIds, $storeId) } $values = []; - foreach ($entityIds as $entityId) { - $values[$entityId] = []; + $linkIds = $this->getLinkIds($entityIds); + foreach ($linkIds as $linkId) { + $values[$linkId] = []; } + $attributes = $this->getAttributes(); $attributesType = ['varchar', 'int', 'decimal', 'text', 'datetime']; foreach ($attributesType as $type) { @@ -385,9 +387,36 @@ protected function getAttributeValues($entityIds, $storeId) } } } + return $values; } + /** + * Translate entity ids into link ids + * + * Used for rows with no EAV attributes set. + * + * @param array $entityIds + * @return array + */ + private function getLinkIds(array $entityIds) + { + $linkField = $this->getCategoryMetadata()->getLinkField(); + if ($linkField === 'entity_id') { + return $entityIds; + } + + $select = $this->connection->select()->from( + ['e' => $this->connection->getTableName($this->getTableName('catalog_category_entity'))], + [$linkField] + )->where( + 'e.entity_id IN (?)', + $entityIds + ); + + return $this->connection->fetchCol($select); + } + /** * Return attribute values for given entities and store of specific attribute type * From 9380c95ba8a12eac0f57b92a682b932b1ceb6a1f Mon Sep 17 00:00:00 2001 From: Anton Evers Date: Thu, 19 Oct 2017 13:14:58 +0600 Subject: [PATCH 052/653] Even existing credit memos should be refundable if their state is open Credit memos can have the state open: `\Magento\Sales\Model\Order\Creditmemo::STATE_OPEN`. This means that it is possible to have a creditmemo with an ID which still has to be refunded. I'm creating a module that introduces a validation step for refund payments before the actual refund can take place. It uses the open state of credit memos to wait for approval and then refunds the creditmemo. Right now the credit memo is not refundable once it has an ID. I think this is incorrect in case of open credit memos. --- app/code/Magento/Sales/Model/Service/CreditmemoService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Model/Service/CreditmemoService.php b/app/code/Magento/Sales/Model/Service/CreditmemoService.php index 2f08c26de9058..c7541e6cb7e48 100644 --- a/app/code/Magento/Sales/Model/Service/CreditmemoService.php +++ b/app/code/Magento/Sales/Model/Service/CreditmemoService.php @@ -195,7 +195,7 @@ public function refund( */ protected function validateForRefund(\Magento\Sales\Api\Data\CreditmemoInterface $creditmemo) { - if ($creditmemo->getId()) { + if ($creditmemo->getId() && $creditmemo->getState() !== \Magento\Sales\Model\Order\Creditmemo::STATE_OPEN) { throw new \Magento\Framework\Exception\LocalizedException( __('We cannot register an existing credit memo.') ); From 8f50585d954c7e5f617050ba8367f373c00ead8a Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Thu, 19 Oct 2017 13:44:51 +0300 Subject: [PATCH 053/653] MAGETWO-66532: [FT] Magento\UrlRewrite\Test\TestCase\CreateProductWithSeveralWebsitesUrlRewriteTest randomly fails on Jenkins --- .../TestCase/CreateProductWithSeveralWebsitesUrlRewriteTest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/CreateProductWithSeveralWebsitesUrlRewriteTest.xml b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/CreateProductWithSeveralWebsitesUrlRewriteTest.xml index 91de39b384c35..98e3f9e38382d 100644 --- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/CreateProductWithSeveralWebsitesUrlRewriteTest.xml +++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/CreateProductWithSeveralWebsitesUrlRewriteTest.xml @@ -8,7 +8,6 @@ - stable:no simple-product-%isolation% Simple Product %isolation% simple_sku_%isolation% From 33aa293e2337101aac6250a9bdf9c93bf8af3377 Mon Sep 17 00:00:00 2001 From: marina Date: Thu, 19 Oct 2017 18:38:43 +0300 Subject: [PATCH 054/653] Add price calculation improvement for product option value price The price calculation relied on the getFinalPrice value, which if called without the qty parameter will not consider tier prices. This method was not updated when the price improvements have been added around 4 years ago. See similar update that was added for Magento\Catalog\Model\Product\Option. Resolves: #5774 --- app/code/Magento/Catalog/Model/Product/Option/Value.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Model/Product/Option/Value.php b/app/code/Magento/Catalog/Model/Product/Option/Value.php index 0e86510ebcee7..62c215e8d596c 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Value.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Value.php @@ -11,6 +11,7 @@ use Magento\Catalog\Model\Product; use Magento\Catalog\Model\Product\Option; use Magento\Framework\Model\AbstractModel; +use Magento\Catalog\Pricing\Price\BasePrice; /** * Catalog product option select type model @@ -223,7 +224,7 @@ public function saveValues() public function getPrice($flag = false) { if ($flag && $this->getPriceType() == self::TYPE_PERCENT) { - $basePrice = $this->getOption()->getProduct()->getFinalPrice(); + $basePrice = $this->getOption()->getProduct()->getPriceInfo()->getPrice(BasePrice::PRICE_CODE)->getValue(); $price = $basePrice * ($this->_getData(self::KEY_PRICE) / 100); return $price; } From 48cdd0a4d289466c4c7b0f9873a66f7c27b2f370 Mon Sep 17 00:00:00 2001 From: Iurii Ivashchenko Date: Wed, 18 Oct 2017 19:25:26 +0300 Subject: [PATCH 055/653] MAGETWO-75517: L4 randomly failed on testReturnAction --- .../Magento/Paypal/Controller/ExpressTest.php | 2 + .../Paypal/_files/configurable_attribute.php | 62 ++++++++ .../Paypal/_files/product_configurable.php | 143 ++++++++++++++++++ .../_files/quote_express_configurable.php | 8 +- 4 files changed, 211 insertions(+), 4 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Paypal/_files/configurable_attribute.php create mode 100644 dev/tests/integration/testsuite/Magento/Paypal/_files/product_configurable.php diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Controller/ExpressTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Controller/ExpressTest.php index 157999224d7b8..95e3abbfe6ff1 100644 --- a/dev/tests/integration/testsuite/Magento/Paypal/Controller/ExpressTest.php +++ b/dev/tests/integration/testsuite/Magento/Paypal/Controller/ExpressTest.php @@ -142,6 +142,8 @@ public function testStartActionCustomerToQuote() * Test return action with configurable product. * * @magentoDataFixture Magento/Paypal/_files/quote_express_configurable.php + * @magentoDbIsolation enabled + * @magentoAppIsolation enabled */ public function testReturnAction() { diff --git a/dev/tests/integration/testsuite/Magento/Paypal/_files/configurable_attribute.php b/dev/tests/integration/testsuite/Magento/Paypal/_files/configurable_attribute.php new file mode 100644 index 0000000000000..12f63993cb2d3 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Paypal/_files/configurable_attribute.php @@ -0,0 +1,62 @@ +get(\Magento\Eav\Model\Config::class); +$attribute = $eavConfig->getAttribute('catalog_product', 'test_configurable'); + +$eavConfig->clear(); + +/** @var $installer \Magento\Catalog\Setup\CategorySetup */ +$installer = Bootstrap::getObjectManager()->create(\Magento\Catalog\Setup\CategorySetup::class); + +if (!$attribute->getId()) { + + /** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */ + $attribute = Bootstrap::getObjectManager()->create( + \Magento\Catalog\Model\ResourceModel\Eav\Attribute::class + ); + + /** @var AttributeRepositoryInterface $attributeRepository */ + $attributeRepository = Bootstrap::getObjectManager()->create(AttributeRepositoryInterface::class); + + $attribute->setData( + [ + 'attribute_code' => 'test_configurable', + 'entity_type_id' => $installer->getEntityTypeId('catalog_product'), + 'is_global' => 1, + 'is_user_defined' => 1, + 'frontend_input' => 'select', + 'is_unique' => 0, + 'is_required' => 0, + 'is_searchable' => 0, + 'is_visible_in_advanced_search' => 0, + 'is_comparable' => 0, + 'is_filterable' => 0, + 'is_filterable_in_search' => 0, + 'is_used_for_promo_rules' => 0, + 'is_html_allowed_on_front' => 1, + 'is_visible_on_front' => 0, + 'used_in_product_listing' => 0, + 'used_for_sort_by' => 0, + 'frontend_label' => ['Test Configurable'], + 'backend_type' => 'int', + 'option' => [ + 'value' => ['option_0' => ['Option 1'], 'option_1' => ['Option 2']], + 'order' => ['option_0' => 1, 'option_1' => 2], + ], + ] + ); + + $attributeRepository->save($attribute); + + /* Assign attribute to attribute set */ + $installer->addAttributeToGroup('catalog_product', 'Default', 'General', $attribute->getId()); +} + +$eavConfig->clear(); diff --git a/dev/tests/integration/testsuite/Magento/Paypal/_files/product_configurable.php b/dev/tests/integration/testsuite/Magento/Paypal/_files/product_configurable.php new file mode 100644 index 0000000000000..7851abd965d8c --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Paypal/_files/product_configurable.php @@ -0,0 +1,143 @@ +reinitialize(); + +require __DIR__ . '/configurable_attribute.php'; + +/** @var ProductRepositoryInterface $productRepository */ +$productRepository = Bootstrap::getObjectManager() + ->create(ProductRepositoryInterface::class); + +/** @var $installer CategorySetup */ +$installer = Bootstrap::getObjectManager()->create(CategorySetup::class); + +/* Create simple products per each option value*/ +/** @var AttributeOptionInterface[] $options */ +$options = $attribute->getOptions(); + +$attributeValues = []; +$attributeSetId = $installer->getAttributeSetId('catalog_product', 'Default'); +$associatedProductIds = []; +$productIds = [101, 201]; +array_shift($options); //remove the first option which is empty + +foreach ($options as $option) { + /** @var $product Product */ + $product = Bootstrap::getObjectManager()->create(Product::class); + $productId = array_shift($productIds); + $product->setTypeId(Type::TYPE_SIMPLE) + ->setId($productId) + ->setAttributeSetId($attributeSetId) + ->setWebsiteIds([1]) + ->setName('Configurable Option' . $option->getLabel()) + ->setSku('simple_' . $productId) + ->setPrice($productId) + ->setTestConfigurable($option->getValue()) + ->setVisibility(Visibility::VISIBILITY_NOT_VISIBLE) + ->setStatus(Status::STATUS_ENABLED) + ->setStockData([ + 'use_config_manage_stock' => 1, + 'qty' => 100, + 'is_qty_decimal' => 0, + 'is_in_stock' => 1 + ]); + + $product = $productRepository->save($product); + + /** @var \Magento\CatalogInventory\Model\Stock\Item $stockItem */ + $stockItem = Bootstrap::getObjectManager()->create(\Magento\CatalogInventory\Model\Stock\Item::class); + $stockItem->load($productId, 'product_id'); + + if (!$stockItem->getProductId()) { + $stockItem->setProductId($productId); + } + $stockItem->setUseConfigManageStock(1); + $stockItem->setQty(1000); + $stockItem->setIsQtyDecimal(0); + $stockItem->setIsInStock(1); + $stockItem->save(); + + $attributeValues[] = [ + 'label' => 'test', + 'attribute_id' => $attribute->getId(), + 'value_index' => $option->getValue(), + ]; + $associatedProductIds[] = $product->getId(); +} + +/** @var $product Product */ +$product = Bootstrap::getObjectManager()->create(Product::class); + +/** @var Factory $optionsFactory */ +$optionsFactory = Bootstrap::getObjectManager()->create(Factory::class); + +$configurableAttributesData = [ + [ + 'attribute_id' => $attribute->getId(), + 'code' => $attribute->getAttributeCode(), + 'label' => $attribute->getStoreLabel(), + 'position' => '0', + 'values' => $attributeValues, + ], +]; + +$configurableOptions = $optionsFactory->create($configurableAttributesData); + +$extensionConfigurableAttributes = $product->getExtensionAttributes(); +$extensionConfigurableAttributes->setConfigurableProductOptions($configurableOptions); +$extensionConfigurableAttributes->setConfigurableProductLinks($associatedProductIds); + +$product->setExtensionAttributes($extensionConfigurableAttributes); + +// Remove any previously created product with the same id. +/** @var \Magento\Framework\Registry $registry */ +$registry = Bootstrap::getObjectManager()->get(\Magento\Framework\Registry::class); +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', true); + +try { + $productToDelete = $productRepository->getById(1); + $productRepository->delete($productToDelete); + + /** @var \Magento\Quote\Model\ResourceModel\Quote\Item $itemResource */ + $itemResource = Bootstrap::getObjectManager()->get(\Magento\Quote\Model\ResourceModel\Quote\Item::class); + $itemResource->getConnection()->delete( + $itemResource->getMainTable(), + 'product_id = ' . $productToDelete->getId() + ); +} catch (\Exception $e) { + // Nothing to remove +} + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', false); + +$product->setTypeId(Configurable::TYPE_CODE) + ->setId(100) + ->setAttributeSetId($attributeSetId) + ->setWebsiteIds([1]) + ->setName('Configurable Product') + ->setSku('configurable_express') + ->setVisibility(Visibility::VISIBILITY_BOTH) + ->setStatus(Status::STATUS_ENABLED) + ->setStockData([ + 'use_config_manage_stock' => 1, + 'is_in_stock' => 1 + ]); + +$productRepository->save($product); diff --git a/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_express_configurable.php b/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_express_configurable.php index b3f14b188a32a..cf90172368d5c 100644 --- a/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_express_configurable.php +++ b/dev/tests/integration/testsuite/Magento/Paypal/_files/quote_express_configurable.php @@ -11,7 +11,7 @@ use Magento\Quote\Model\Quote\Address\Rate; use Magento\TestFramework\Helper\Bootstrap; -require __DIR__ . '/../../../Magento/ConfigurableProduct/_files/product_configurable.php'; +require __DIR__ . '/product_configurable.php'; /** @var $objectManager \Magento\TestFramework\ObjectManager */ $objectManager = Bootstrap::getObjectManager(); @@ -19,7 +19,7 @@ /** @var $product \Magento\Catalog\Model\Product */ /** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */ $productRepository = $objectManager->create(ProductRepositoryInterface::class); -$product = $productRepository->get('configurable'); +$product = $productRepository->get('configurable_express'); /** @var $options Collection */ $options = $objectManager->create(Collection::class); @@ -27,8 +27,8 @@ $requestInfo = new \Magento\Framework\DataObject( [ - 'product' => 2, - 'selected_configurable_option' => 2, + 'product' => 1, + 'selected_configurable_option' => 1, 'qty' => 1, 'super_attribute' => [ $attribute->getId() => $option->getId() From 8623d65edd1388a03fb1004451cea8a336fc310c Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Thu, 22 Jun 2017 23:23:01 +0300 Subject: [PATCH 056/653] MQE-136: Added Allure reporting to functional tests --- dev/tests/functional/composer.json | 3 +- dev/tests/functional/phpunit.xml.dist | 14 ++++++++ .../functional/utils/generateAllureReport.php | 32 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 dev/tests/functional/utils/generateAllureReport.php diff --git a/dev/tests/functional/composer.json b/dev/tests/functional/composer.json index f92311f6ef351..7db2cea72b513 100644 --- a/dev/tests/functional/composer.json +++ b/dev/tests/functional/composer.json @@ -3,7 +3,8 @@ "magento/mtf": "1.0.0-rc56", "php": "7.0.2|~7.0.6|~7.1.0", "phpunit/phpunit": "~4.8.0|~5.5.0", - "phpunit/phpunit-selenium": ">=1.2" + "phpunit/phpunit-selenium": ">=1.2", + "allure-framework/allure-phpunit": "~1.2.0" }, "suggest": { "netwing/selenium-server-standalone": "dev-master", diff --git a/dev/tests/functional/phpunit.xml.dist b/dev/tests/functional/phpunit.xml.dist index 698ce30532774..e4b9e4c495041 100644 --- a/dev/tests/functional/phpunit.xml.dist +++ b/dev/tests/functional/phpunit.xml.dist @@ -26,6 +26,20 @@ + + + var/allure-results + false + + + ZephyrId + + + Group + + + + diff --git a/dev/tests/functional/utils/generateAllureReport.php b/dev/tests/functional/utils/generateAllureReport.php new file mode 100644 index 0000000000000..0f417d68b67d8 --- /dev/null +++ b/dev/tests/functional/utils/generateAllureReport.php @@ -0,0 +1,32 @@ + Date: Wed, 20 Sep 2017 12:18:15 +0300 Subject: [PATCH 057/653] MQE-279: Create repositories in magento organization --- dev/tests/acceptance/.env.example | 22 ++ dev/tests/acceptance/.gitignore | 7 + dev/tests/acceptance/LICENSE.txt | 48 ++++ dev/tests/acceptance/LICENSE_AFL.txt | 48 ++++ dev/tests/acceptance/README.md | 228 ++++++++++++++++ dev/tests/acceptance/RoboFile.php | 157 +++++++++++ dev/tests/acceptance/codeception.dist.yml | 33 +++ dev/tests/acceptance/tests/_bootstrap.php | 24 ++ dev/tests/acceptance/tests/_data/dump.sql | 1 + .../tests/functional.suite.dist.yml | 33 +++ .../AdminNotification/LICENSE.txt | 48 ++++ .../AdminNotification/LICENSE_AFL.txt | 48 ++++ .../AdminNotification/README.md | 3 + .../AdminNotification/composer.json | 47 ++++ .../AdvancedPricingImportExport/LICENSE.txt | 48 ++++ .../LICENSE_AFL.txt | 48 ++++ .../AdvancedPricingImportExport/README.md | 3 + .../AdvancedPricingImportExport/composer.json | 56 ++++ .../FunctionalTest/Analytics/LICENSE.txt | 48 ++++ .../FunctionalTest/Analytics/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Analytics/README.md | 3 + .../FunctionalTest/Analytics/composer.json | 53 ++++ .../FunctionalTest/Authorization/LICENSE.txt | 48 ++++ .../Authorization/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Authorization/README.md | 3 + .../Authorization/composer.json | 50 ++++ .../FunctionalTest/Authorizenet/LICENSE.txt | 48 ++++ .../Authorizenet/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Authorizenet/README.md | 3 + .../FunctionalTest/Authorizenet/composer.json | 56 ++++ .../Backend/Cest/AdminLoginCest.xml | 29 +++ .../Backend/Data/BackenedData.xml | 8 + .../FunctionalTest/Backend/LICENSE.txt | 48 ++++ .../FunctionalTest/Backend/LICENSE_AFL.txt | 48 ++++ .../Backend/Page/AdminLoginPage.xml | 8 + .../Magento/FunctionalTest/Backend/README.md | 3 + .../Backend/Section/AdminLoginFormSection.xml | 10 + .../Backend/Section/AdminMessagesSection.xml | 8 + .../FunctionalTest/Backend/composer.json | 64 +++++ .../Magento/FunctionalTest/Backup/LICENSE.txt | 48 ++++ .../FunctionalTest/Backup/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Backup/README.md | 3 + .../FunctionalTest/Backup/composer.json | 51 ++++ .../FunctionalTest/Braintree/LICENSE.txt | 48 ++++ .../FunctionalTest/Braintree/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Braintree/README.md | 3 + .../FunctionalTest/Braintree/composer.json | 61 +++++ .../Magento/FunctionalTest/Bundle/LICENSE.txt | 48 ++++ .../FunctionalTest/Bundle/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Bundle/README.md | 3 + .../FunctionalTest/Bundle/composer.json | 64 +++++ .../BundleImportExport/LICENSE.txt | 48 ++++ .../BundleImportExport/LICENSE_AFL.txt | 48 ++++ .../BundleImportExport/README.md | 3 + .../BundleImportExport/composer.json | 54 ++++ .../CacheInvalidate/LICENSE.txt | 48 ++++ .../CacheInvalidate/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/CacheInvalidate/README.md | 3 + .../CacheInvalidate/composer.json | 50 ++++ .../FunctionalTest/Captcha/LICENSE.txt | 48 ++++ .../FunctionalTest/Captcha/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Captcha/README.md | 3 + .../FunctionalTest/Captcha/composer.json | 53 ++++ .../Catalog/Cest/AdminCreateCategoryCest.xml | 44 ++++ .../AdminCreateConfigurableProductCest.xml | 130 ++++++++++ .../Cest/AdminCreateSimpleProductCest.xml | 65 +++++ .../Catalog/Data/CategoryData.xml | 17 ++ .../CustomAttributeCategoryUrlKeyData.xml | 9 + .../Data/CustomAttributeProductUrlKeyData.xml | 9 + .../Data/ProductConfigurableAttributeData.xml | 21 ++ .../Catalog/Data/ProductData.xml | 28 ++ .../Data/ProductExtensionAttributeData.xml | 8 + .../Catalog/Data/StockItemData.xml | 9 + .../FunctionalTest/Catalog/LICENSE.txt | 48 ++++ .../FunctionalTest/Catalog/LICENSE_AFL.txt | 48 ++++ .../Catalog/Metadata/category-meta.xml | 56 ++++ .../Metadata/custom_attribute-meta.xml | 13 + .../Catalog/Metadata/product-meta.xml | 67 +++++ .../product_extension_attribute-meta.xml | 11 + .../Catalog/Metadata/product_link-meta.xml | 25 ++ .../product_link_extension_attribute-meta.xml | 13 + .../Catalog/Metadata/product_option-meta.xml | 41 +++ .../Metadata/product_option_value-meta.xml | 21 ++ .../Catalog/Metadata/stock_item-meta.xml | 13 + .../Catalog/Page/AdminCategoryPage.xml | 11 + .../Catalog/Page/AdminProductEditPage.xml | 10 + .../Catalog/Page/AdminProductIndexPage.xml | 10 + .../Catalog/Page/StorefrontCategoryPage.xml | 8 + .../Catalog/Page/StorefrontProductPage.xml | 11 + .../Magento/FunctionalTest/Catalog/README.md | 3 + .../AdminCategoryBasicFieldSection.xml | 10 + .../AdminCategoryMainActionsSection.xml | 8 + .../Section/AdminCategoryMessagesSection.xml | 8 + .../Section/AdminCategorySEOSection.xml | 12 + .../AdminCategorySidebarActionSection.xml | 9 + .../AdminCategorySidebarTreeSection.xml | 9 + .../Section/AdminProductFormActionSection.xml | 8 + .../Section/AdminProductFormSection.xml | 51 ++++ .../Section/AdminProductGridActionSection.xml | 10 + .../Section/AdminProductGridSection.xml | 9 + .../Section/AdminProductMessagesSection.xml | 8 + .../Section/AdminProductSEOSection.xml | 9 + .../Section/StorefrontCategoryMainSection.xml | 12 + .../Section/StorefrontMessagesSection.xml | 8 + .../Section/StorefrontMiniCartSection.xml | 10 + .../StorefrontProductInfoDetailsSection.xml | 8 + .../StorefrontProductInfoMainSection.xml | 14 + .../FunctionalTest/Catalog/composer.json | 72 +++++ .../CatalogAnalytics/LICENSE.txt | 48 ++++ .../CatalogAnalytics/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/CatalogAnalytics/README.md | 3 + .../CatalogAnalytics/composer.json | 50 ++++ .../CatalogImportExport/LICENSE.txt | 48 ++++ .../CatalogImportExport/LICENSE_AFL.txt | 48 ++++ .../CatalogImportExport/README.md | 3 + .../CatalogImportExport/composer.json | 58 +++++ .../CatalogInventory/LICENSE.txt | 48 ++++ .../CatalogInventory/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/CatalogInventory/README.md | 3 + .../CatalogInventory/composer.json | 56 ++++ .../FunctionalTest/CatalogRule/LICENSE.txt | 48 ++++ .../CatalogRule/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/CatalogRule/README.md | 3 + .../FunctionalTest/CatalogRule/composer.json | 56 ++++ .../CatalogRuleConfigurable/LICENSE.txt | 48 ++++ .../CatalogRuleConfigurable/LICENSE_AFL.txt | 48 ++++ .../CatalogRuleConfigurable/README.md | 3 + .../CatalogRuleConfigurable/composer.json | 52 ++++ .../FunctionalTest/CatalogSearch/LICENSE.txt | 48 ++++ .../CatalogSearch/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/CatalogSearch/README.md | 3 + .../CatalogSearch/composer.json | 59 +++++ .../CatalogUrlRewrite/LICENSE.txt | 48 ++++ .../CatalogUrlRewrite/LICENSE_AFL.txt | 48 ++++ .../CatalogUrlRewrite/README.md | 3 + .../CatalogUrlRewrite/composer.json | 57 ++++ .../FunctionalTest/CatalogWidget/LICENSE.txt | 48 ++++ .../CatalogWidget/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/CatalogWidget/README.md | 3 + .../CatalogWidget/composer.json | 57 ++++ .../Cest/StorefrontCustomerCheckoutCest.xml | 86 ++++++ .../Cest/StorefrontGuestCheckoutCest.xml | 82 ++++++ .../FunctionalTest/Checkout/LICENSE.txt | 48 ++++ .../FunctionalTest/Checkout/LICENSE_AFL.txt | 48 ++++ .../Checkout/Page/CheckoutPage.xml | 13 + .../Checkout/Page/CheckoutSuccessPage.xml | 8 + .../Checkout/Page/GuestCheckoutPage.xml | 9 + .../Magento/FunctionalTest/Checkout/README.md | 3 + .../Section/CheckoutOrderSummarySection.xml | 11 + .../Section/CheckoutPaymentSection.xml | 10 + .../CheckoutShippingGuestInfoSection.xml | 15 ++ .../CheckoutShippingMethodsSection.xml | 9 + .../Section/CheckoutShippingSection.xml | 9 + .../Section/CheckoutSuccessMainSection.xml | 10 + .../Section/GuestCheckoutPaymentSection.xml | 10 + .../Section/GuestCheckoutShippingSection.xml | 17 ++ .../FunctionalTest/Checkout/composer.json | 67 +++++ .../CheckoutAgreements/LICENSE.txt | 48 ++++ .../CheckoutAgreements/LICENSE_AFL.txt | 48 ++++ .../CheckoutAgreements/README.md | 3 + .../CheckoutAgreements/composer.json | 53 ++++ .../Cms/Cest/AdminCreateCmsPageCest.xml | 45 ++++ .../FunctionalTest/Cms/Data/CmsPageData.xml | 11 + .../Magento/FunctionalTest/Cms/LICENSE.txt | 48 ++++ .../FunctionalTest/Cms/LICENSE_AFL.txt | 48 ++++ .../Cms/Page/CmsNewPagePage.xml | 11 + .../FunctionalTest/Cms/Page/CmsPagesPage.xml | 8 + .../Magento/FunctionalTest/Cms/README.md | 3 + .../Section/CmsNewPagePageActionsSection.xml | 8 + .../CmsNewPagePageBasicFieldsSection.xml | 8 + .../Section/CmsNewPagePageContentSection.xml | 10 + .../Cms/Section/CmsNewPagePageSeoSection.xml | 9 + .../Section/CmsPagesPageActionsSection.xml | 8 + .../Magento/FunctionalTest/Cms/composer.json | 58 +++++ .../FunctionalTest/CmsUrlRewrite/LICENSE.txt | 48 ++++ .../CmsUrlRewrite/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/CmsUrlRewrite/README.md | 6 + .../CmsUrlRewrite/composer.json | 52 ++++ .../Magento/FunctionalTest/Config/LICENSE.txt | 48 ++++ .../FunctionalTest/Config/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Config/README.md | 8 + .../FunctionalTest/Config/composer.json | 54 ++++ .../ConfigurableImportExport/LICENSE.txt | 48 ++++ .../ConfigurableImportExport/LICENSE_AFL.txt | 48 ++++ .../ConfigurableImportExport/composer.json | 54 ++++ .../Data/ConfigurableProductData.xml | 8 + .../ConfigurableProduct/LICENSE.txt | 48 ++++ .../ConfigurableProduct/LICENSE_AFL.txt | 48 ++++ .../ConfigurableProduct/README.md | 3 + .../ConfigurableProduct/composer.json | 60 +++++ .../ConfigurableProductSales/LICENSE.txt | 48 ++++ .../ConfigurableProductSales/LICENSE_AFL.txt | 48 ++++ .../ConfigurableProductSales/README.md | 3 + .../ConfigurableProductSales/composer.json | 52 ++++ .../FunctionalTest/Contact/LICENSE.txt | 48 ++++ .../FunctionalTest/Contact/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Contact/README.md | 3 + .../FunctionalTest/Contact/composer.json | 53 ++++ .../Magento/FunctionalTest/Cookie/LICENSE.txt | 48 ++++ .../FunctionalTest/Cookie/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Cookie/README.md | 3 + .../FunctionalTest/Cookie/composer.json | 50 ++++ .../FunctionalTest/CurrencySymbol/LICENSE.txt | 48 ++++ .../CurrencySymbol/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/CurrencySymbol/README.md | 3 + .../CurrencySymbol/composer.json | 54 ++++ .../Customer/Cest/AdminCreateCustomerCest.xml | 43 +++ .../Cest/StorefrontCreateCustomerCest.xml | 35 +++ .../StorefrontExistingCustomerLoginCest.xml | 36 +++ .../Customer/Data/AddressData.xml | 45 ++++ .../Customer/Data/CustomAttributeData.xml | 9 + .../Customer/Data/CustomerData.xml | 41 +++ .../Data/ExtensionAttributeSimple.xml | 8 + .../Customer/Data/RegionData.xml | 14 + .../FunctionalTest/Customer/LICENSE.txt | 48 ++++ .../FunctionalTest/Customer/LICENSE_AFL.txt | 48 ++++ .../Customer/Metadata/address-meta.xml | 56 ++++ .../Metadata/custom_attribute-meta.xml | 13 + .../Customer/Metadata/customer-meta.xml | 73 ++++++ .../customer_extension_attribute-meta.xml | 13 + ...stomer_nested_extension_attribute-meta.xml | 15 ++ .../empty_extension_attribute-meta.xml | 9 + .../Customer/Metadata/region-meta.xml | 17 ++ .../Customer/Page/AdminCustomerPage.xml | 11 + .../Customer/Page/AdminNewCustomerPage.xml | 9 + .../Page/StorefrontCustomerCreatePage.xml | 8 + .../Page/StorefrontCustomerDashboardPage.xml | 8 + .../Page/StorefrontCustomerSignInPage.xml | 8 + .../Customer/Page/StorefrontHomePage.xml | 8 + .../Magento/FunctionalTest/Customer/README.md | 3 + .../Section/AdminCustomerFiltersSection.xml | 10 + .../Section/AdminCustomerGridSection.xml | 8 + .../AdminCustomerMainActionsSection.xml | 8 + .../Section/AdminCustomerMessagesSection.xml | 8 + ...inNewCustomerAccountInformationSection.xml | 10 + .../AdminNewCustomerMainActionsSection.xml | 8 + .../StorefrontCustomerCreateFormSection.xml | 13 + ...omerDashboardAccountInformationSection.xml | 8 + .../StorefrontCustomerSignInFormSection.xml | 10 + .../Section/StorefrontPanelHeaderSection.xml | 8 + .../FunctionalTest/Customer/composer.json | 68 +++++ .../CustomerAnalytics/LICENSE.txt | 48 ++++ .../CustomerAnalytics/LICENSE_AFL.txt | 48 ++++ .../CustomerAnalytics/README.md | 3 + .../CustomerAnalytics/composer.json | 50 ++++ .../CustomerImportExport/LICENSE.txt | 48 ++++ .../CustomerImportExport/LICENSE_AFL.txt | 48 ++++ .../CustomerImportExport/README.md | 3 + .../CustomerImportExport/composer.json | 55 ++++ .../FunctionalTest/Developer/LICENSE.txt | 48 ++++ .../FunctionalTest/Developer/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Developer/README.md | 3 + .../FunctionalTest/Developer/composer.json | 51 ++++ .../Magento/FunctionalTest/Dhl/LICENSE.txt | 48 ++++ .../FunctionalTest/Dhl/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Dhl/README.md | 3 + .../Magento/FunctionalTest/Dhl/composer.json | 58 +++++ .../FunctionalTest/Directory/LICENSE.txt | 48 ++++ .../FunctionalTest/Directory/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Directory/README.md | 3 + .../FunctionalTest/Directory/composer.json | 52 ++++ .../FunctionalTest/Downloadable/LICENSE.txt | 48 ++++ .../Downloadable/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Downloadable/README.md | 3 + .../FunctionalTest/Downloadable/composer.json | 65 +++++ .../DownloadableImportExport/LICENSE.txt | 48 ++++ .../DownloadableImportExport/LICENSE_AFL.txt | 48 ++++ .../DownloadableImportExport/README.md | 3 + .../DownloadableImportExport/composer.json | 55 ++++ .../Magento/FunctionalTest/Eav/LICENSE.txt | 48 ++++ .../FunctionalTest/Eav/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Eav/README.md | 3 + .../Magento/FunctionalTest/Eav/composer.json | 54 ++++ .../Magento/FunctionalTest/Email/LICENSE.txt | 48 ++++ .../FunctionalTest/Email/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Email/README.md | 3 + .../FunctionalTest/Email/composer.json | 55 ++++ .../FunctionalTest/EncryptionKey/LICENSE.txt | 48 ++++ .../EncryptionKey/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/EncryptionKey/README.md | 3 + .../EncryptionKey/composer.json | 51 ++++ .../Magento/FunctionalTest/Fedex/LICENSE.txt | 48 ++++ .../FunctionalTest/Fedex/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Fedex/README.md | 3 + .../FunctionalTest/Fedex/composer.json | 57 ++++ .../FunctionalTest/GiftMessage/LICENSE.txt | 48 ++++ .../GiftMessage/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/GiftMessage/README.md | 3 + .../FunctionalTest/GiftMessage/composer.json | 57 ++++ .../FunctionalTest/GoogleAdwords/LICENSE.txt | 48 ++++ .../GoogleAdwords/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/GoogleAdwords/README.md | 3 + .../GoogleAdwords/composer.json | 51 ++++ .../GoogleAnalytics/LICENSE.txt | 48 ++++ .../GoogleAnalytics/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/GoogleAnalytics/README.md | 3 + .../GoogleAnalytics/composer.json | 52 ++++ .../GoogleOptimizer/LICENSE.txt | 48 ++++ .../GoogleOptimizer/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/GoogleOptimizer/README.md | 3 + .../GoogleOptimizer/composer.json | 55 ++++ .../GroupedImportExport/LICENSE.txt | 48 ++++ .../GroupedImportExport/LICENSE_AFL.txt | 48 ++++ .../GroupedImportExport/README.md | 3 + .../GroupedImportExport/composer.json | 54 ++++ .../FunctionalTest/GroupedProduct/LICENSE.txt | 48 ++++ .../GroupedProduct/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/GroupedProduct/README.md | 3 + .../GroupedProduct/composer.json | 61 +++++ .../FunctionalTest/ImportExport/LICENSE.txt | 48 ++++ .../ImportExport/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/ImportExport/README.md | 3 + .../FunctionalTest/ImportExport/composer.json | 54 ++++ .../FunctionalTest/Indexer/LICENSE.txt | 48 ++++ .../FunctionalTest/Indexer/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Indexer/README.md | 3 + .../FunctionalTest/Indexer/composer.json | 50 ++++ .../FunctionalTest/Integration/LICENSE.txt | 48 ++++ .../Integration/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Integration/README.md | 3 + .../FunctionalTest/Integration/composer.json | 55 ++++ .../LayeredNavigation/LICENSE.txt | 48 ++++ .../LayeredNavigation/LICENSE_AFL.txt | 48 ++++ .../LayeredNavigation/README.md | 3 + .../LayeredNavigation/composer.json | 51 ++++ .../FunctionalTest/Marketplace/LICENSE.txt | 48 ++++ .../Marketplace/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Marketplace/README.md | 3 + .../FunctionalTest/Marketplace/composer.json | 50 ++++ .../FunctionalTest/MediaStorage/LICENSE.txt | 48 ++++ .../MediaStorage/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/MediaStorage/README.md | 3 + .../FunctionalTest/MediaStorage/composer.json | 52 ++++ .../Magento/FunctionalTest/Msrp/LICENSE.txt | 48 ++++ .../FunctionalTest/Msrp/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Msrp/README.md | 3 + .../Magento/FunctionalTest/Msrp/composer.json | 55 ++++ .../FunctionalTest/Multishipping/LICENSE.txt | 48 ++++ .../Multishipping/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Multishipping/README.md | 3 + .../Multishipping/composer.json | 57 ++++ .../NewRelicReporting/LICENSE.txt | 48 ++++ .../NewRelicReporting/LICENSE_AFL.txt | 48 ++++ .../NewRelicReporting/README.md | 3 + .../NewRelicReporting/composer.json | 55 ++++ .../FunctionalTest/Newsletter/LICENSE.txt | 48 ++++ .../FunctionalTest/Newsletter/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Newsletter/README.md | 3 + .../FunctionalTest/Newsletter/composer.json | 56 ++++ .../OfflinePayments/LICENSE.txt | 48 ++++ .../OfflinePayments/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/OfflinePayments/README.md | 3 + .../OfflinePayments/composer.json | 51 ++++ .../OfflineShipping/LICENSE.txt | 48 ++++ .../OfflineShipping/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/OfflineShipping/README.md | 3 + .../OfflineShipping/composer.json | 57 ++++ .../FunctionalTest/PageCache/LICENSE.txt | 48 ++++ .../FunctionalTest/PageCache/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/PageCache/README.md | 3 + .../FunctionalTest/PageCache/composer.json | 52 ++++ .../FunctionalTest/Payment/LICENSE.txt | 48 ++++ .../FunctionalTest/Payment/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Payment/README.md | 3 + .../FunctionalTest/Payment/composer.json | 55 ++++ .../Magento/FunctionalTest/Paypal/LICENSE.txt | 48 ++++ .../FunctionalTest/Paypal/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Paypal/README.md | 3 + .../FunctionalTest/Paypal/composer.json | 64 +++++ .../FunctionalTest/Persistent/LICENSE.txt | 48 ++++ .../FunctionalTest/Persistent/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Persistent/README.md | 3 + .../FunctionalTest/Persistent/composer.json | 54 ++++ .../FunctionalTest/ProductAlert/LICENSE.txt | 48 ++++ .../ProductAlert/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/ProductAlert/README.md | 3 + .../FunctionalTest/ProductAlert/composer.json | 53 ++++ .../FunctionalTest/ProductVideo/LICENSE.txt | 48 ++++ .../ProductVideo/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/ProductVideo/README.md | 3 + .../FunctionalTest/ProductVideo/composer.json | 54 ++++ .../Magento/FunctionalTest/Quote/LICENSE.txt | 48 ++++ .../FunctionalTest/Quote/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Quote/README.md | 3 + .../FunctionalTest/Quote/composer.json | 63 +++++ .../FunctionalTest/QuoteAnalytics/LICENSE.txt | 48 ++++ .../QuoteAnalytics/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/QuoteAnalytics/README.md | 3 + .../QuoteAnalytics/composer.json | 50 ++++ .../FunctionalTest/Reports/LICENSE.txt | 48 ++++ .../FunctionalTest/Reports/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Reports/README.md | 3 + .../FunctionalTest/Reports/composer.json | 65 +++++ .../Magento/FunctionalTest/Review/LICENSE.txt | 48 ++++ .../FunctionalTest/Review/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Review/README.md | 3 + .../FunctionalTest/Review/composer.json | 57 ++++ .../ReviewAnalytics/LICENSE.txt | 48 ++++ .../ReviewAnalytics/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/ReviewAnalytics/README.md | 3 + .../ReviewAnalytics/composer.json | 50 ++++ .../Magento/FunctionalTest/Robots/LICENSE.txt | 48 ++++ .../FunctionalTest/Robots/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Robots/README.md | 3 + .../FunctionalTest/Robots/composer.json | 50 ++++ .../Magento/FunctionalTest/Rss/LICENSE.txt | 48 ++++ .../FunctionalTest/Rss/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Rss/README.md | 3 + .../Magento/FunctionalTest/Rss/composer.json | 52 ++++ .../Magento/FunctionalTest/Rule/LICENSE.txt | 48 ++++ .../FunctionalTest/Rule/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Rule/README.md | 3 + .../Magento/FunctionalTest/Rule/composer.json | 53 ++++ .../Sales/Cest/AdminCreateInvoiceCest.xml | 89 +++++++ .../FunctionalTest/Sales/Data/SalesData.xml | 8 + .../Magento/FunctionalTest/Sales/LICENSE.txt | 48 ++++ .../FunctionalTest/Sales/LICENSE_AFL.txt | 48 ++++ .../Sales/Page/InvoiceDetailsPage.xml | 8 + .../Sales/Page/InvoiceNewPage.xml | 8 + .../Sales/Page/InvoicesPage.xml | 9 + .../Sales/Page/OrderDetailsPage.xml | 10 + .../FunctionalTest/Sales/Page/OrdersPage.xml | 8 + .../Magento/FunctionalTest/Sales/README.md | 3 + .../InvoiceDetailsInformationSection.xml | 8 + .../Sales/Section/InvoiceNewSection.xml | 8 + .../Sales/Section/InvoicesFiltersSection.xml | 8 + .../Sales/Section/InvoicesGridSection.xml | 10 + .../OrderDetailsInformationSection.xml | 12 + .../Section/OrderDetailsInvoicesSection.xml | 9 + .../OrderDetailsMainActionsSection.xml | 15 ++ .../Section/OrderDetailsMessagesSection.xml | 8 + .../Section/OrderDetailsOrderViewSection.xml | 9 + .../Sales/Section/OrdersGridSection.xml | 14 + .../FunctionalTest/Sales/composer.json | 72 +++++ .../FunctionalTest/SalesAnalytics/LICENSE.txt | 48 ++++ .../SalesAnalytics/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/SalesAnalytics/README.md | 3 + .../SalesAnalytics/composer.json | 50 ++++ .../FunctionalTest/SalesInventory/LICENSE.txt | 48 ++++ .../SalesInventory/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/SalesInventory/README.md | 3 + .../SalesInventory/composer.json | 53 ++++ .../FunctionalTest/SalesRule/LICENSE.txt | 48 ++++ .../FunctionalTest/SalesRule/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/SalesRule/README.md | 3 + .../FunctionalTest/SalesRule/composer.json | 67 +++++ .../FunctionalTest/SalesSequence/LICENSE.txt | 48 ++++ .../SalesSequence/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/SalesSequence/README.md | 3 + .../SalesSequence/composer.json | 47 ++++ .../FunctionalTest/SampleData/LICENSE.txt | 48 ++++ .../FunctionalTest/SampleData/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/SampleData/README.md | 3 + .../FunctionalTest/SampleData/composer.json | 47 ++++ .../SampleTests/Cest/MinimumTestCest.xml | 28 ++ .../Cest/PersistMultipleEntitiesCest.xml | 35 +++ .../SampleTests/Cest/SampleCest.xml | 245 ++++++++++++++++++ .../Templates/TemplateCestFile.xml | 27 ++ .../Templates/TemplateDataFile.xml | 8 + .../Templates/TemplateMetaDataFile.xml | 16 ++ .../Templates/TemplatePageFile.xml | 8 + .../Templates/TemplateSectionFile.xml | 8 + .../Magento/FunctionalTest/Search/LICENSE.txt | 48 ++++ .../FunctionalTest/Search/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Search/README.md | 3 + .../FunctionalTest/Search/composer.json | 54 ++++ .../FunctionalTest/Security/LICENSE.txt | 48 ++++ .../FunctionalTest/Security/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Security/README.md | 3 + .../FunctionalTest/Security/composer.json | 51 ++++ .../FunctionalTest/SendFriend/LICENSE.txt | 48 ++++ .../FunctionalTest/SendFriend/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/SendFriend/README.md | 3 + .../FunctionalTest/SendFriend/composer.json | 52 ++++ .../FunctionalTest/Shipping/LICENSE.txt | 48 ++++ .../FunctionalTest/Shipping/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Shipping/README.md | 3 + .../FunctionalTest/Shipping/composer.json | 62 +++++ .../FunctionalTest/Sitemap/LICENSE.txt | 48 ++++ .../FunctionalTest/Sitemap/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Sitemap/README.md | 3 + .../FunctionalTest/Sitemap/composer.json | 58 +++++ .../Magento/FunctionalTest/Store/LICENSE.txt | 48 ++++ .../FunctionalTest/Store/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Store/README.md | 3 + .../FunctionalTest/Store/composer.json | 54 ++++ .../FunctionalTest/Swagger/LICENSE.txt | 48 ++++ .../FunctionalTest/Swagger/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Swagger/README.md | 3 + .../FunctionalTest/Swagger/composer.json | 47 ++++ .../FunctionalTest/Swatches/LICENSE.txt | 48 ++++ .../FunctionalTest/Swatches/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Swatches/README.md | 3 + .../FunctionalTest/Swatches/composer.json | 58 +++++ .../SwatchesLayeredNavigation/LICENSE.txt | 48 ++++ .../SwatchesLayeredNavigation/LICENSE_AFL.txt | 48 ++++ .../SwatchesLayeredNavigation/README.md | 3 + .../SwatchesLayeredNavigation/composer.json | 47 ++++ .../Magento/FunctionalTest/Tax/LICENSE.txt | 48 ++++ .../FunctionalTest/Tax/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Tax/README.md | 3 + .../Magento/FunctionalTest/Tax/composer.json | 62 +++++ .../TaxImportExport/LICENSE.txt | 48 ++++ .../TaxImportExport/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/TaxImportExport/README.md | 3 + .../TaxImportExport/composer.json | 53 ++++ .../Magento/FunctionalTest/Theme/LICENSE.txt | 48 ++++ .../FunctionalTest/Theme/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Theme/README.md | 3 + .../FunctionalTest/Theme/composer.json | 58 +++++ .../FunctionalTest/Translation/LICENSE.txt | 48 ++++ .../Translation/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/Translation/README.md | 3 + .../FunctionalTest/Translation/composer.json | 52 ++++ .../Magento/FunctionalTest/Ui/LICENSE.txt | 48 ++++ .../Magento/FunctionalTest/Ui/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Ui/README.md | 3 + .../Magento/FunctionalTest/Ui/composer.json | 53 ++++ .../Magento/FunctionalTest/Ups/LICENSE.txt | 48 ++++ .../FunctionalTest/Ups/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Ups/README.md | 3 + .../Magento/FunctionalTest/Ups/composer.json | 56 ++++ .../FunctionalTest/UrlRewrite/LICENSE.txt | 48 ++++ .../FunctionalTest/UrlRewrite/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/UrlRewrite/README.md | 3 + .../FunctionalTest/UrlRewrite/composer.json | 55 ++++ .../FunctionalTest/User/Data/UserData.xml | 9 + .../Magento/FunctionalTest/User/LICENSE.txt | 48 ++++ .../FunctionalTest/User/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/User/README.md | 3 + .../Magento/FunctionalTest/User/composer.json | 55 ++++ .../FunctionalTest/Variable/LICENSE.txt | 48 ++++ .../FunctionalTest/Variable/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Variable/README.md | 3 + .../FunctionalTest/Variable/composer.json | 52 ++++ .../Magento/FunctionalTest/Vault/LICENSE.txt | 48 ++++ .../FunctionalTest/Vault/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Vault/README.md | 3 + .../FunctionalTest/Vault/composer.json | 55 ++++ .../FunctionalTest/Version/LICENSE.txt | 48 ++++ .../FunctionalTest/Version/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Version/README.md | 3 + .../FunctionalTest/Version/composer.json | 48 ++++ .../Magento/FunctionalTest/Webapi/LICENSE.txt | 48 ++++ .../FunctionalTest/Webapi/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Webapi/README.md | 3 + .../FunctionalTest/Webapi/composer.json | 53 ++++ .../FunctionalTest/WebapiSecurity/LICENSE.txt | 48 ++++ .../WebapiSecurity/LICENSE_AFL.txt | 48 ++++ .../FunctionalTest/WebapiSecurity/README.md | 3 + .../WebapiSecurity/composer.json | 50 ++++ .../Magento/FunctionalTest/Weee/LICENSE.txt | 48 ++++ .../FunctionalTest/Weee/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Weee/README.md | 3 + .../Magento/FunctionalTest/Weee/composer.json | 61 +++++ .../Magento/FunctionalTest/Widget/LICENSE.txt | 48 ++++ .../FunctionalTest/Widget/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Widget/README.md | 3 + .../FunctionalTest/Widget/composer.json | 56 ++++ .../FunctionalTest/Wishlist/LICENSE.txt | 48 ++++ .../FunctionalTest/Wishlist/LICENSE_AFL.txt | 48 ++++ .../Magento/FunctionalTest/Wishlist/README.md | 3 + .../FunctionalTest/Wishlist/composer.json | 58 +++++ .../WishlistAnalytics/LICENSE.txt | 48 ++++ .../WishlistAnalytics/LICENSE_AFL.txt | 48 ++++ .../WishlistAnalytics/README.md | 3 + .../WishlistAnalytics/composer.json | 50 ++++ .../tests/functional/_bootstrap.php | 13 + 568 files changed, 19782 insertions(+) create mode 100644 dev/tests/acceptance/.env.example create mode 100755 dev/tests/acceptance/.gitignore create mode 100644 dev/tests/acceptance/LICENSE.txt create mode 100644 dev/tests/acceptance/LICENSE_AFL.txt create mode 100755 dev/tests/acceptance/README.md create mode 100644 dev/tests/acceptance/RoboFile.php create mode 100644 dev/tests/acceptance/codeception.dist.yml create mode 100644 dev/tests/acceptance/tests/_bootstrap.php create mode 100644 dev/tests/acceptance/tests/_data/dump.sql create mode 100644 dev/tests/acceptance/tests/functional.suite.dist.yml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Data/BackenedData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminLoginFormSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminMessagesSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CategoryData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeCategoryUrlKeyData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeProductUrlKeyData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductConfigurableAttributeData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductExtensionAttributeData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/StockItemData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductEditPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductIndexPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormActionSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridActionSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryMainSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMessagesSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMiniCartSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoDetailsSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoMainSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/GuestCheckoutPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutOrderSummarySection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingGuestInfoSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingMethodsSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutSuccessMainSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutShippingSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Data/CmsPageData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageActionsSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageBasicFieldsSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageContentSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageSeoSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsPagesPageActionsSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/AddressData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomAttributeData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/ExtensionAttributeSimple.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/RegionData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerCreateFormSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerSignInFormSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Data/SalesData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceDetailsPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoicesPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrdersPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceDetailsInformationSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceNewSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesFiltersSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesGridSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInformationSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInvoicesSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMainActionsSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMessagesSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsOrderViewSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrdersGridSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateCestFile.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateDataFile.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateMetaDataFile.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplatePageFile.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/Data/UserData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/composer.json create mode 100644 dev/tests/acceptance/tests/functional/_bootstrap.php diff --git a/dev/tests/acceptance/.env.example b/dev/tests/acceptance/.env.example new file mode 100644 index 0000000000000..500d54c3881ef --- /dev/null +++ b/dev/tests/acceptance/.env.example @@ -0,0 +1,22 @@ +#Copyright © Magento, Inc. All rights reserved. +#See COPYING.txt for license details. + +MAGENTO_BASE_URL= + +MAGENTO_BACKEND_NAME= +MAGENTO_ADMIN_USERNAME= +MAGENTO_ADMIN_PASSWORD= + +#*** Uncomment and set host & port if your dev environment needs different value other than MAGENTO_BASE_URL for Rest Api Requests ***# +#MAGENTO_RESTAPI_SERVER_HOST= +#MAGENTO_RESTAPI_SERVER_PORT= + +DB_DSN= +DB_USERNAME= +DB_PASSWORD= + +#*** uncomment these properties to set up a dev environment with symlinked projects***# +#TESTS_BP= +#FW_BP= +#TESTS_MODULE_PATH= +#MODULE_WHITELIST= \ No newline at end of file diff --git a/dev/tests/acceptance/.gitignore b/dev/tests/acceptance/.gitignore new file mode 100755 index 0000000000000..de6a96d05e7e2 --- /dev/null +++ b/dev/tests/acceptance/.gitignore @@ -0,0 +1,7 @@ +.idea +.env +codeception.yml +tests/_output/* +tests/functional.suite.yml +tests/functional/Magento/FunctionalTest/_generated +vendor/* diff --git a/dev/tests/acceptance/LICENSE.txt b/dev/tests/acceptance/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/LICENSE_AFL.txt b/dev/tests/acceptance/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/README.md b/dev/tests/acceptance/README.md new file mode 100755 index 0000000000000..df6c804815b00 --- /dev/null +++ b/dev/tests/acceptance/README.md @@ -0,0 +1,228 @@ +# Magento 2 Functional Tests + +# Built With +* [Codeception](http://codeception.com/) +* [Robo](http://robo.li/) +* [Allure](http://allure.qatools.ru/) + +---- + +# Prerequisites +* [PHP v7.x](http://php.net/manual/en/install.php) +* [Composer v1.4.x](https://getcomposer.org/download/) +* [Java](https://www.java.com/en/download/) +* [Selenium Server](http://www.seleniumhq.org/download/) +* [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/downloads) +* [Allure CLI](https://docs.qameta.io/allure/latest/#_installing_a_commandline) +* [GitHub](https://desktop.github.com/) +* GitHub Repos: + * [CE Tests](https://github.com/magento-pangolin/magento2ce-acceptance-tests) + * [EE Tests](https://github.com/magento-pangolin/magento2ee-acceptance-tests) +* Configure Magento for [Automated Testing](http://devdocs.magento.com/guides/v2.0/mtf/mtf_quickstart/mtf_quickstart_magento.html) + +### Recommendations +* We recommend using [PHPStorm 2017](https://www.jetbrains.com/phpstorm/) for your IDE. They recently added support for [Codeception Test execution](https://blog.jetbrains.com/phpstorm/2017/03/codeception-support-comes-to-phpstorm-2017-1/) which is helpful when debugging. +* We also recommend updating your [$PATH to include](https://stackoverflow.com/questions/7703041/editing-path-variable-on-mac) `vendor/bin` so you can easily execute the necessary `robo` and `codecept` commands instead of `vendor/bin/robo` or `vendor/bin/codecept`. + +---- + +# Installation +You can **either** install through composer **or** clone from git repository. +## Git +``` +git clone GITHUB_REPO_URL +cd magento2ce-acceptance-tests +composer install +``` + +## Composer +``` +mkdir DIR_NAME +cd DIR_NAME +composer create-project --repository-url=GITHUB_REPO_URL magento/magento2ce-acceptance-tests-metapackage +``` + +---- + +# Robo +Robo is a task runner for PHP that allows you to alias long complex CLI commands to simple commands. + +### Example + +* Original: `allure generate tests/_output/allure-results/ -o tests/_output/allure-report/` +* Robo: `robo allure1:generate` + +## Available Robo Commands +You can see a list of all available Robo commands by calling `robo` directly in the Terminal. + +##### Codeception Robo Commands +* `robo` + * Lists all available Robo commands. +* `robo clone:files` + * Duplicate the Example configuration files used to customize the Project +* `robo build:project` + * Build the Codeception project +* `robo generate:pages` + * Generate all Page Objects +* `robo generate:tests` + * Generate all Tests in PHP +* `robo example` + * Run all Tests marked with the @group tag 'example', using the Chrome environment +* `robo chrome` + * Run all Acceptance tests using the Chrome environment +* `robo firefox` + * Run all Acceptance tests using the FireFox environment +* `robo phantomjs` + * Run all Acceptance tests using the PhantomJS environment +* `robo folder ______` + * Run all Acceptance tests located under the Directory Path provided using the Chrome environment +* `robo group ______` + * Run all Tests with the specified @group tag, excluding @group 'skip', using the Chrome environment + +##### Allure Robo Commands +To determine which version of the Allure command you need to use please run `allure --version`. + +* `robo allure1:generate` + * Allure v1.x.x - Generate the HTML for the Allure report based on the Test XML output +* `robo allure1:open` + * Allure v1.x.x - Open the HTML Allure report +* `robo allure1:report` + * Allure v1.x.x - Generate and open the HTML Allure report +* `robo allure2:generate` + * Allure v2.x.x - Generate the HTML for the Allure report based on the Test XML output +* `robo allure2:open` + * Allure v2.x.x - Open the HTML Allure report +* `robo allure2:report` + * Allure v2.x.x - Generate and open the HTML Allure report + +---- + +# Building The Framework +After installing the dependencies you will want to build the Codeception project in the [Acceptance Test Framework](https://github.com/magento-pangolin/magento2-acceptance-test-framework), which is a dependency of the CE or EE Tests repo. Run `robo build:project` to complete this task. + +`robo build:project` + +---- + +# Configure the Framework +Before you can generate or run the Tests you will need to clone the Example Configuration files and edit them for your specific Store settings. You can edit these files with out the fear of accidentally committing your credentials or other sensitive information as these files are listed in the *.gitignore* file. +Run the following command to generate these files: + +`robo setup` + +In these files you will find key pieces of information that are unique to your local Magento setup that will need to be edited (ex **MAGENTO_BASE_URL**, **MAGENTO_BACKEND_NAME**, **MAGENTO_ADMIN_USERNAME**, **MAGENTO_ADMIN_PASSWORD**, etc...). +* **tests/acceptance.suite.yml** +* **codeception.dist.yml** +* **.env** + +---- + +# Generate PHP files for Tests +All Tests in the Framework are written in XML and need to have the PHP generated for Codeception to run. Run the following command to generate the PHP files into the following directory: `tests/acceptance/Magento/AcceptanceTest/_generated` + +If this directory doesn't exist it will be created. + +`robo generate:tests` + +---- + +# Running Tests +## Start the Selenium Server +PLEASE NOTE: You will need to have an instance of the Selenium Server running on your machine before you can execute the Tests. + +``` +cd [LOCATION_OF_SELENIUM_JAR] +java -jar selenium-server-standalone-X.X.X.jar +``` + +## Run Tests Manually +You can run the Codeception tests directly without using Robo if you'd like. To do so please run `codecept run acceptance` to execute all Acceptance tests that DO NOT include @env tags. IF a Test includes an [@env tag](http://codeception.com/docs/07-AdvancedUsage#Environments) you MUST include the `--env ENV_NAME` flag. + +#### Common Codeception Flags: + +* --env +* --group +* --skip-group +* --steps +* --verbose +* --debug + * [Full List of CLI Flags](http://codeception.com/docs/reference/Commands#Run) + +#### Examples + +* Run ALL Acceptance Tests without an @env tag: `codecept run acceptance` +* Run ALL Acceptance Tests without the "skip" @group: `codecept run acceptance --skip-group skip` +* Run ALL Acceptance Tests with the @group tag "example" without the "skip" @group tests: `codecept run acceptance --group example --skip-group skip` + +## Run Tests using Robo +* Run all Acceptance Tests using the @env tag "chrome": `robo chrome` +* Run all Acceptance Tests using the @env tag "firefox": `robo firefox` +* Run all Acceptance Tests using the @env tag "phantomjs": `robo phantomjs` +* Run all Acceptance Tests using the @group tag "example": `robo example` +* Run all Acceptance Tests using the provided @group tag: `robo group GROUP_NAME` +* Run all Acceptance Tests listed under the provided Folder Path: `robo folder tests/acceptance/Magento/AcceptanceTest/MODULE_NAME` + +---- + +# Allure Reports +### Manually +You can run the following commands in the Terminal to generate and open an Allure report. + +##### Allure v1.x.x +* Build the Report: `allure generate tests/_output/allure-results/ -o tests/_output/allure-report/` +* Open the Report: `allure report open --report-dir tests/_output/allure-report/` + +##### Allure v2.x.x +* Build the Report: `allure generate tests/_output/allure-results/ --output tests/_output/allure-report/ --clean` +* Open the Report: `allure open --port 0 tests/_output/allure-report/` + +### Using Robo +You can run the following Robo commands in the Terminal to generate and open an Allure report (Run the following terminal command for the Allure version: `allure --version`): + +##### Allure v1.x.x +* Build the Report: `robo allure1:generate` +* Open the Report: `robo allure1:open` +* Build/Open the Report: `robo allure1:report` + +##### Allure v2.x.x +* Build the Report: `robo allure2:generate` +* Open the Report: `robo allure2:open` +* Build/Open the Report: `robo allure2:report` + +---- + +# Composer SymLinking +Due to the interdependent nature of the 2 repos it is recommended to Symlink the repos so you develop locally easier. Please refer to this GitHub page: https://github.com/gossi/composer-localdev-plugin + +---- + +# Troubleshooting +* TimeZone Error - http://stackoverflow.com/questions/18768276/codeception-datetime-error +* TimeZone List - http://php.net/manual/en/timezones.america.php +* System PATH - Make sure you have `vendor/bin/` and `vendor/` listed in your system path so you can run the `codecept` and `robo` commands directly: + + `sudo nano /etc/private/paths` + +* StackOverflow Help: https://stackoverflow.com/questions/7703041/editing-path-variable-on-mac +* Allure `@env error` - Allure recently changed their Codeception Adapter that breaks Codeception when tests include the `@env` tag. A workaround for this error is to revert the changes they made to a function. + * Locate the `AllureAdapter.php` file here: `vendor/allure-framework/allure-codeception/src/Yandex/Allure/Adapter/AllureAdapter.php` + * Edit the `_initialize()` function found on line 77 and replace it with the following: +``` +public function _initialize(array $ignoredAnnotations = []) + { + parent::_initialize(); + Annotation\AnnotationProvider::registerAnnotationNamespaces(); + // Add standard PHPUnit annotations + Annotation\AnnotationProvider::addIgnoredAnnotations($this->ignoredAnnotations); + // Add custom ignored annotations + $ignoredAnnotations = $this->tryGetOption('ignoredAnnotations', []); + Annotation\AnnotationProvider::addIgnoredAnnotations($ignoredAnnotations); + $outputDirectory = $this->getOutputDirectory(); + $deletePreviousResults = + $this->tryGetOption(DELETE_PREVIOUS_RESULTS_PARAMETER, false); + $this->prepareOutputDirectory($outputDirectory, $deletePreviousResults); + if (is_null(Model\Provider::getOutputDirectory())) { + Model\Provider::setOutputDirectory($outputDirectory); + } + } +``` \ No newline at end of file diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php new file mode 100644 index 0000000000000..e41816cccbf11 --- /dev/null +++ b/dev/tests/acceptance/RoboFile.php @@ -0,0 +1,157 @@ +_exec('vendor/bin/robo clone:files'); + $this->_exec('vendor/bin/codecept build'); + } + + /** + * Duplicate the Example configuration files used to customize the Project for customization + */ + function cloneFiles() + { + $this->_exec('cp -vn .env.example .env'); + $this->_exec('cp -vn codeception.dist.yml codeception.yml'); + $this->_exec('cp -vn tests/functional.suite.dist.yml tests/functional.suite.yml'); + } + + /** + * Build the Codeception project + */ + function buildProject() + { + $this->cloneFiles(); + $this->_exec('vendor/bin/codecept build'); + } + + /** + * Generate all Tests + */ + function generateTests() + { + require 'tests/functional/_bootstrap.php'; + \Magento\FunctionalTestingFramework\Util\TestGenerator::getInstance()->createAllCestFiles(); + $this->say("Generate Tests Command Run"); + } + + /** + * Run all Acceptance tests using the Chrome environment + */ + function chrome() + { + $this->_exec('codecept run functional --env chrome --skip-group skip'); + } + + /** + * Run all Acceptance tests using the FireFox environment + */ + function firefox() + { + $this->_exec('codecept run functional --env firefox --skip-group skip'); + } + + /** + * Run all Acceptance tests using the PhantomJS environment + */ + function phantomjs() + { + $this->_exec('codecept run functional --env phantomjs --skip-group skip'); + } + + /** + * Run all Tests with the specified @group tag, excluding @group 'skip', using the Chrome environment + */ + function group($args = '') + { + $this->taskExec('codecept run functional --verbose --steps --env chrome --skip-group skip --group')->args($args)->run(); + } + + /** + * Run all Acceptance tests located under the Directory Path provided using the Chrome environment + */ + function folder($args = '') + { + $this->taskExec('codecept run functional --env chrome')->args($args)->run(); + } + + /** + * Run all Tests marked with the @group tag 'example', using the Chrome environment + */ + function example() + { + $this->_exec('codecept run --env chrome --group example --skip-group skip'); + } + + /** + * Generate the HTML for the Allure report based on the Test XML output - Allure v1.4.X + */ + function allure1Generate() + { + return $this->_exec('allure generate tests/_output/allure-results/ -o tests/_output/allure-report/'); + } + + /** + * Generate the HTML for the Allure report based on the Test XML output - Allure v2.3.X + */ + function allure2Generate() + { + return $this->_exec('allure generate tests/_output/allure-results/ --output tests/_output/allure-report/ --clean'); + } + + /** + * Open the HTML Allure report - Allure v1.4.xX + */ + function allure1Open() + { + $this->_exec('allure report open --report-dir tests/_output/allure-report/'); + } + + /** + * Open the HTML Allure report - Allure v2.3.X + */ + function allure2Open() + { + $this->_exec('allure open --port 0 tests/_output/allure-report/'); + } + + /** + * Generate and open the HTML Allure report - Allure v1.4.X + */ + function allure1Report() + { + $result1 = $this->allure1Generate(); + + if ($result1->wasSuccessful()) { + $this->allure1Open(); + } + } + + /** + * Generate and open the HTML Allure report - Allure v2.3.X + */ + function allure2Report() + { + $result1 = $this->allure2Generate(); + + if ($result1->wasSuccessful()) { + $this->allure2Open(); + } + } +} diff --git a/dev/tests/acceptance/codeception.dist.yml b/dev/tests/acceptance/codeception.dist.yml new file mode 100644 index 0000000000000..81fcd113db3d0 --- /dev/null +++ b/dev/tests/acceptance/codeception.dist.yml @@ -0,0 +1,33 @@ +# Copyright © Magento, Inc. All rights reserved. +# See COPYING.txt for license details. +actor: Tester +paths: + tests: tests + log: tests/_output + data: tests/_data + support: vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework + envs: vendor/magento/magento2-functional-testing-framework/etc/_envs +settings: + bootstrap: _bootstrap.php + colors: true + memory_limit: 1024M +extensions: + enabled: + - Codeception\Extension\RunFailed + - Yandex\Allure\Adapter\AllureAdapter + config: + Yandex\Allure\Adapter\AllureAdapter: + deletePreviousResults: true + outputDirectory: allure-results + ignoredAnnotations: + - env + - zephyrId +params: + - .env +modules: + config: + Db: + dsn: "%DB_DSN%" + user: "%DB_USERNAME%" + password: "%DB_PASSWORD%" + dump: tests/_data/dump.sql \ No newline at end of file diff --git a/dev/tests/acceptance/tests/_bootstrap.php b/dev/tests/acceptance/tests/_bootstrap.php new file mode 100644 index 0000000000000..80392c9f53fa5 --- /dev/null +++ b/dev/tests/acceptance/tests/_bootstrap.php @@ -0,0 +1,24 @@ +load(); + + if (array_key_exists('TESTS_MODULE_PATH', $_ENV) xor array_key_exists('TESTS_BP', $_ENV)) { + throw new Exception('You must define both parameters TESTS_BP and TESTS_MODULE_PATH or neither parameter'); + } + + foreach ($_ENV as $key => $var) { + defined($key) || define($key, $var); + } +} +defined('FW_BP') || define('FW_BP', PROJECT_ROOT . $RELATIVE_FW_PATH); diff --git a/dev/tests/acceptance/tests/_data/dump.sql b/dev/tests/acceptance/tests/_data/dump.sql new file mode 100644 index 0000000000000..4bc742ce67b1c --- /dev/null +++ b/dev/tests/acceptance/tests/_data/dump.sql @@ -0,0 +1 @@ +/* Replace this file with actual dump of your database */ \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional.suite.dist.yml b/dev/tests/acceptance/tests/functional.suite.dist.yml new file mode 100644 index 0000000000000..12ca2eae436d5 --- /dev/null +++ b/dev/tests/acceptance/tests/functional.suite.dist.yml @@ -0,0 +1,33 @@ +# Copyright © Magento, Inc. All rights reserved. +# See COPYING.txt for license details. + +# Codeception Test Suite Configuration +# +# Suite for acceptance tests. +# Perform tests in browser using the WebDriver or PhpBrowser. +# If you need both WebDriver and PHPBrowser tests - create a separate suite. + +class_name: AcceptanceTester +namespace: Magento\FunctionalTestingFramework +modules: + enabled: + - \Magento\FunctionalTestingFramework\Module\MagentoWebDriver + - \Magento\FunctionalTestingFramework\Helper\Acceptance + - \Magento\FunctionalTestingFramework\Helper\MagentoFakerData + - \Magento\FunctionalTestingFramework\Module\MagentoRestDriver: + url: "%MAGENTO_BASE_URL%/rest/default/V1/" + username: "%MAGENTO_ADMIN_USERNAME%" + password: "%MAGENTO_ADMIN_PASSWORD%" + depends: PhpBrowser + part: Json + - \Magento\FunctionalTestingFramework\Module\MagentoSequence + - Asserts + config: + \Magento\FunctionalTestingFramework\Module\MagentoWebDriver: + url: "%MAGENTO_BASE_URL%" + backend_name: admin + browser: chrome + window_size: maximize + username: "%MAGENTO_ADMIN_USERNAME%" + password: "%MAGENTO_ADMIN_PASSWORD%" + pageload_timeout: 30 diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/README.md new file mode 100644 index 0000000000000..4a84a064d1c7f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_AdminNotification** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json new file mode 100644 index 0000000000000..328161117f78c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json @@ -0,0 +1,47 @@ +{ + "name": "magento/magento2-functional-test-admin-notification", + "description": "Magento 2 Acceptance Test Module Admin Notification", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-media-storage": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-4": { + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/AdminNotification" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/LICENSE.txt new file mode 100644 index 0000000000000..2b7359b7dfcb4 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/README.md new file mode 100644 index 0000000000000..224e08d3e84c2 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_AdvancedPricingImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json new file mode 100644 index 0000000000000..32562af20944b --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json @@ -0,0 +1,56 @@ +{ + "name": "magento/magento2-functional-test-module-advanced-pricing-import-export", + "description": "Magento 2 Acceptance Test Module Advanced Pricing Import Export", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-import-export": "dev-master", + "magento/magento2-functional-test-module-catalog-import-export": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/README.md new file mode 100644 index 0000000000000..56c1d77deeed0 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Analytics** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/composer.json new file mode 100644 index 0000000000000..21e343f416927 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/composer.json @@ -0,0 +1,53 @@ +{ + "name": "magento/magento2-functional-test-module-analytics", + "description": "Magento 2 Acceptance Test Module Analytics", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-integration": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Analytics" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/README.md new file mode 100644 index 0000000000000..b540c210faf92 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Authorization** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json new file mode 100644 index 0000000000000..6c0ac32008789 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-authorization", + "description": "Magento 2 Acceptance Test Module Authorization", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-backend": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Authorization" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under " or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/README.md new file mode 100644 index 0000000000000..86a31896a223d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Authorizenet** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json new file mode 100644 index 0000000000000..898a84016c6b1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json @@ -0,0 +1,56 @@ +{ + "name": "magento/magento2-functional-test-module-authorizenet", + "description": "Magento 2 Acceptance Test Module Authorizenet", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-payment": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Authorizenet" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml new file mode 100644 index 0000000000000..c46766e6acfcc --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + <description value="You should be able to log into the Magento Admin backend."/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-71572"/> + </annotations> + <amOnPage url="{{AdminLoginPage}}" mergeKey="amOnAdminLoginPage"/> + <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> + <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickOnSignIn"/> + <seeInCurrentUrl url="{{AdminLoginPage}}" mergeKey="seeAdminLoginUrl"/> + </test> + </cest> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Data/BackenedData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Data/BackenedData.xml new file mode 100644 index 0000000000000..039472445b43b --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Data/BackenedData.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="backendDatadOne" type="backend"> + <data key="backendConfigName">data</data> + </entity> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml new file mode 100644 index 0000000000000..910450187adb1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="AdminLoginPage" urlPath="admin/admin" module="Magento_Backend"> + <section name="AdminLoginFormSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/README.md new file mode 100644 index 0000000000000..4cbe742ea6baa --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Backend** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminLoginFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminLoginFormSection.xml new file mode 100644 index 0000000000000..11768b4c83ddf --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminLoginFormSection.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminLoginFormSection"> + <element name="username" type="input" locator="#username"/> + <element name="password" type="input" locator="#login"/> + <element name="signIn" type="button" locator=".actions .action-primary" timeout="30"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminMessagesSection.xml new file mode 100644 index 0000000000000..ebc99031eac84 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminMessagesSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminMessagesSection"> + <element name="test" type="input" locator=".test"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json new file mode 100644 index 0000000000000..6aa559de5c3df --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json @@ -0,0 +1,64 @@ +{ + "name": "magento/magento2-functional-test-module-backend", + "description": "Magento 2 Acceptance Test Module Backend", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-developer": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-reports": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-user": "dev-master", + "magento/magento2-functional-test-module-security": "dev-master", + "magento/magento2-functional-test-module-backup": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-translation": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-require-js": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Backend" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/README.md new file mode 100644 index 0000000000000..962fdffd88da5 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Backup** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json new file mode 100644 index 0000000000000..95dc878ef341e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json @@ -0,0 +1,51 @@ +{ + "name": "magento/magento2-functional-test-module-backup", + "description": "Magento 2 Acceptance Test Module Backup", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backup": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Backup" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/README.md new file mode 100644 index 0000000000000..a4217e846b529 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Braintree** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json new file mode 100644 index 0000000000000..c9eeab4fdb5d5 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json @@ -0,0 +1,61 @@ +{ + "name": "magento/magento2-functional-test-module-braintree", + "description": "Magento 2 Acceptance Test Module Braintree", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-payment": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-vault": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-paypal": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Braintree" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/README.md new file mode 100644 index 0000000000000..95794907f2cfd --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Bundle** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json new file mode 100644 index 0000000000000..649a2f29700d2 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json @@ -0,0 +1,64 @@ +{ + "name": "magento/magento2-functional-test-module-bundle", + "description": "Magento 2 Acceptance Test Module Bundle", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-catalog-rule": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-gift-message": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Bundle" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/README.md new file mode 100644 index 0000000000000..83453308c0c5c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_BundleImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json new file mode 100644 index 0000000000000..2abf6a22a8edc --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json @@ -0,0 +1,54 @@ +{ + "name": "magento/magento2-functional-test-module-bundle-import-export", + "description": "Magento 2 Acceptance Test Module Bundle Import Export", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-import-export": "dev-master", + "magento/magento2-functional-test-module-catalog-import-export": "dev-master", + "magento/magento2-functional-test-module-bundle": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/BundleImportExport" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/README.md new file mode 100644 index 0000000000000..34d8ae9c36666 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CacheInvalidate** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json new file mode 100644 index 0000000000000..9ac9043f1b1d2 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-cache-invalidate", + "description": "Magento 2 Acceptance Test Module Cache Invalidate", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-page-cache": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CacheInvalidate" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/README.md new file mode 100644 index 0000000000000..3eee7b92bd32d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Captcha** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json new file mode 100644 index 0000000000000..60fff5eb2fecf --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json @@ -0,0 +1,53 @@ +{ + "name": "magento/magento2-functional-test-module-captcha", + "description": "Magento 2 Acceptance Test Module Captcha", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Captcha" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml new file mode 100644 index 0000000000000..f731830f2915a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="AdminCreateCategoryCest"> + <annotations> + <features value="Category Creation"/> + <stories value="Create a Category via the Admin"/> + <group value="category"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + </annotations> + <after> + <amOnPage url="admin/admin/auth/logout/" mergeKey="amOnLogoutPage"/> + </after> + <test name="CreateCategoryViaAdmin"> + <annotations> + <title value="You should be able to create a Category in the admin back-end."/> + <description value="You should be able to create a Category in the admin back-end."/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-72102"/> + </annotations> + <amOnPage url="{{AdminLoginPage}}" mergeKey="amOnAdminLoginPage"/> + <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> + <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickOnSignIn"/> + <amOnPage url="{{AdminCategoryPage}}" mergeKey="navigateToCategoryPage"/> + <waitForPageLoad mergeKey="waitForPageLoad1"/> + <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" mergeKey="clickOnAddSubCategory"/> + <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{SimpleSubCategory.name}}" mergeKey="enterCategoryName"/> + <click selector="{{AdminCategorySEOSection.SectionHeader}}" mergeKey="openSEO"/> + <fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{SimpleSubCategory.name_lwr}}" mergeKey="enterURLKey"/> + <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" mergeKey="saveCategory"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" mergeKey="assertSuccess"/> + + <!-- Literal URL below, need to refactor line + StorefrontCategoryPage when support for variable URL is implemented--> + <amOnPage url="/{{SimpleSubCategory.name_lwr}}.html" mergeKey="goToCategoryFrontPage"/> + <waitForPageLoad mergeKey="waitForPageLoad2"/> + <seeInTitle userInput="{{SimpleSubCategory.name}}" mergeKey="assertTitle"/> + <see selector="{{StorefrontCategoryMainSection.CategoryTitle}}" userInput="{{SimpleSubCategory.name_lwr}}" mergeKey="assertInfo1"/> + </test> + </cest> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml new file mode 100644 index 0000000000000..fa5cbd2d2f0f6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml @@ -0,0 +1,130 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="AdminCreateConfigurableProductCest"> + <annotations> + <features value="Product Creation"/> + <stories value="Create a Configurable Product via the Admin"/> + <group value="configurable"/> + <group value="product"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + </annotations> + <before> + <loginAsAdmin mergeKey="loginAsAdmin"/> + </before> + <after> + <amOnPage url="admin/admin/auth/logout/" mergeKey="amOnLogoutPage"/> + </after> + <test name="CreateConfigurableProductViaAdmin"> + <annotations> + <title value="Create a Configurable Product via the Admin."/> + <description value="You should be able to create a Configurable Product via the Admin."/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-26041"/> + </annotations> + + <amOnPage url="{{AdminCategoryPage.urlPath}}" mergeKey="amOnCategoryGridPage"/> + <waitForPageLoad mergeKey="waitForPageLoad1"/> + + <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" mergeKey="clickOnAddSubCategory"/> + <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{_defaultCategory.name}}" mergeKey="enterCategoryName"/> + <click selector="{{AdminCategorySEOSection.SectionHeader}}" mergeKey="clickOnSeoSection"/> + <fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{_defaultCategory.name_lwr}}" mergeKey="enterUrlKey"/> + <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" mergeKey="clickOnSaveCategory"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" mergeKey="assertSuccessMessage"/> + + <amOnPage url="{{AdminProductIndexPage.urlPath}}" mergeKey="amOnProductGridPage"/> + <waitForPageLoad mergeKey="waitForPageLoad2"/> + <click selector="{{AdminProductGridActionSection.addProductToggle}}" mergeKey="clickOnAddProductToggle"/> + <click selector="{{AdminProductGridActionSection.addConfigurableProduct}}" mergeKey="clickOnAddConfigurableProduct"/> + <fillField userInput="{{_defaultProduct.name}}" selector="{{AdminProductFormSection.productName}}" mergeKey="fillName"/> + <fillField userInput="{{_defaultProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" mergeKey="fillSKU"/> + <fillField userInput="{{_defaultProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" mergeKey="fillPrice"/> + <fillField userInput="{{_defaultProduct.quantity}}" selector="{{AdminProductFormSection.productQuantity}}" mergeKey="fillQuantity"/> + <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="['{{_defaultCategory.name}}']" mergeKey="searchAndSelectCategory"/> + <click selector="{{AdminProductSEOSection.sectionHeader}}" mergeKey="openSeoSection"/> + <fillField userInput="{{_defaultProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" mergeKey="fillUrlKey"/> + + <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" mergeKey="clickOnCreateConfigurations"/> + <click selector="{{AdminCreateProductConfigurationsPanel.createNewAttribute}}" mergeKey="clickOnNewAttribute"/> + <switchToIFrame selector="{{AdminNewAttributePanel.newAttributeIFrame}}" mergeKey="switchToNewAttributeIFrame"/> + <fillField selector="{{AdminNewAttributePanel.defaultLabel}}" userInput="{{colorProductAttribute.default_label}}" mergeKey="fillDefaultLabel"/> + <click selector="{{AdminNewAttributePanel.saveAttribute}}" mergeKey="clickOnNewAttributePanel"/> + + <switchToIFrame mergeKey="switchOutOfIFrame"/> + <click selector="{{AdminCreateProductConfigurationsPanel.filters}}" mergeKey="clickOnFilters"/> + <fillField userInput="{{colorProductAttribute.default_label}}" selector="{{AdminCreateProductConfigurationsPanel.attributeCode}}" mergeKey="fillFilterAttributeCodeField"/> + <click selector="{{AdminCreateProductConfigurationsPanel.applyFilters}}" mergeKey="clickApplyFiltersButton"/> + <click selector="{{AdminCreateProductConfigurationsPanel.firstCheckbox}}" mergeKey="clickOnFirstCheckbox"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" mergeKey="clickOnNextButton1"/> + + <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" mergeKey="clickOnCreateNewValue1"/> + <fillField userInput="{{colorProductAttribute1.name}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" mergeKey="fillFieldForNewAttribute1"/> + <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" mergeKey="clickOnSaveNewAttribute1"/> + + <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" mergeKey="clickOnCreateNewValue2"/> + <fillField userInput="{{colorProductAttribute2.name}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" mergeKey="fillFieldForNewAttribute2"/> + <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" mergeKey="clickOnSaveNewAttribute2"/> + + <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" mergeKey="clickOnCreateNewValue3"/> + <fillField userInput="{{colorProductAttribute3.name}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" mergeKey="fillFieldForNewAttribute3"/> + <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" mergeKey="clickOnSaveNewAttribute3"/> + + <click selector="{{AdminCreateProductConfigurationsPanel.selectAll}}" mergeKey="clickOnSelectAll"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" mergeKey="clickOnNextButton2"/> + + <click selector="{{AdminCreateProductConfigurationsPanel.applyUniquePricesByAttributeToEachSku}}" mergeKey="clickOnApplyUniquePricesByAttributeToEachSku"/> + <selectOption selector="{{AdminCreateProductConfigurationsPanel.selectAttribute}}" userInput="{{colorProductAttribute.default_label}}" mergeKey="selectAttributes"/> + <fillField selector="{{AdminCreateProductConfigurationsPanel.attribute1}}" userInput="{{colorProductAttribute1.price}}" mergeKey="fillAttributePrice1"/> + <fillField selector="{{AdminCreateProductConfigurationsPanel.attribute2}}" userInput="{{colorProductAttribute2.price}}" mergeKey="fillAttributePrice2"/> + <fillField selector="{{AdminCreateProductConfigurationsPanel.attribute3}}" userInput="{{colorProductAttribute3.price}}" mergeKey="fillAttributePrice3"/> + + <click selector="{{AdminCreateProductConfigurationsPanel.applySingleQuantityToEachSkus}}" mergeKey="clickOnApplySingleQuantityToEachSku"/> + <fillField selector="{{AdminCreateProductConfigurationsPanel.quantity}}" userInput="1" mergeKey="enterAttributeQuantity"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" mergeKey="clickOnNextButton3"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" mergeKey="clickOnNextButton4"/> + + <click selector="{{AdminProductFormActionSection.saveButton}}" mergeKey="clickOnSaveButton2"/> + <click selector="{{AdminChooseAffectedAttributeSetPopup.confirm}}" mergeKey="clickOnConfirmInPopup"/> + + <seeElement selector="{{AdminProductMessagesSection.successMessage}}" mergeKey="seeSaveProductMessage"/> + <seeInTitle userInput="{{_defaultProduct.name}}" mergeKey="seeProductNameInTitle"/> + + <seeNumberOfElements selector="{{AdminProductFormConfigurationsSection.currentVariationsRows}}" userInput="3" mergeKey="seeNumberOfRows"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsNameCells}}" userInput="{{colorProductAttribute1.name}}" mergeKey="seeAttributeName1InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsNameCells}}" userInput="{{colorProductAttribute2.name}}" mergeKey="seeAttributeName2InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsNameCells}}" userInput="{{colorProductAttribute3.name}}" mergeKey="seeAttributeName3InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsSkuCells}}" userInput="{{colorProductAttribute1.name}}" mergeKey="seeAttributeSku1InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsSkuCells}}" userInput="{{colorProductAttribute2.name}}" mergeKey="seeAttributeSku2InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsSkuCells}}" userInput="{{colorProductAttribute3.name}}" mergeKey="seeAttributeSku3InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsPriceCells}}" userInput="{{colorProductAttribute1.price}}" mergeKey="seeUniquePrice1InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsPriceCells}}" userInput="{{colorProductAttribute2.price}}" mergeKey="seeUniquePrice2InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsPriceCells}}" userInput="{{colorProductAttribute3.price}}" mergeKey="seeUniquePrice3InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsQuantityCells}}" userInput="{{colorProductAttribute.attribute_quantity}}" mergeKey="seeQuantityInField"/> + + <amOnPage url="/" mergeKey="amOnStorefront"/> + <waitForPageLoad mergeKey="waitForPageLoad3"/> + + <click userInput="{{_defaultCategory.name}}" mergeKey="clickOnCategoryName"/> + <waitForPageLoad mergeKey="waitForPageLoad4"/> + + <see userInput="{{_defaultProduct.name}}" mergeKey="assertProductPresent"/> + <see userInput="{{colorProductAttribute1.price}}" mergeKey="assertProductPricePresent"/> + <click userInput="{{_defaultProduct.name}}" mergeKey="clickOnProductName"/> + <waitForPageLoad mergeKey="waitForPageLoad5"/> + + <seeInTitle userInput="{{_defaultProduct.name}}" mergeKey="assertProductNameTitle"/> + <see userInput="{{_defaultProduct.name}}" selector="{{StorefrontProductInfoMainSection.productName}}" mergeKey="assertProductName"/> + <see userInput="{{colorProductAttribute1.price}}" selector="{{StorefrontProductInfoMainSection.productPrice}}" mergeKey="assertProductPrice"/> + <see userInput="{{_defaultProduct.sku}}" selector="{{StorefrontProductInfoMainSection.productSku}}" mergeKey="assertProductSku"/> + + <see selector="{{StorefrontProductInfoMainSection.productAttributeTitle1}}" userInput="{{colorProductAttribute.default_label}}" mergeKey="seeColorAttributeName1"/> + <see selector="{{StorefrontProductInfoMainSection.productAttributeOptions1}}" userInput="{{colorProductAttribute1.name}}" mergeKey="seeInDropDown1"/> + <see selector="{{StorefrontProductInfoMainSection.productAttributeOptions1}}" userInput="{{colorProductAttribute2.name}}" mergeKey="seeInDropDown2"/> + <see selector="{{StorefrontProductInfoMainSection.productAttributeOptions1}}" userInput="{{colorProductAttribute3.name}}" mergeKey="seeInDropDown3"/> + </test> + </cest> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml new file mode 100644 index 0000000000000..a32a80a6d9125 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="AdminCreateSimpleProductCest"> + <annotations> + <features value="Product Creation"/> + <stories value="Create a Simple Product via Admin"/> + <group value="product"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + </annotations> + <before> + <createData entity="_defaultCategory" mergeKey="createPreReqCategory"/> + </before> + <test name="CreateSimpleProductViaAdmin"> + <annotations> + <title value="You should be able to create a Simple Product in the admin back-end."/> + <description value="You should be able to create a Simple Product in the admin back-end."/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-23414"/> + </annotations> + <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> + <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" mergeKey="fillUsername"/> + <fillField userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" selector="{{AdminLoginFormSection.password}}" mergeKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> + <amOnPage url="{{AdminProductIndexPage.url}}" mergeKey="navigateToProductIndex"/> + <click selector="{{AdminProductGridActionSection.addProductToggle}}" mergeKey="clickAddProductDropdown"/> + <click selector="{{AdminProductGridActionSection.addSimpleProduct}}" mergeKey="clickAddSimpleProduct"/> + <fillField userInput="{{_defaultProduct.name}}" selector="{{AdminProductFormSection.productName}}" mergeKey="fillName"/> + <fillField userInput="{{_defaultProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" mergeKey="fillSKU"/> + <fillField userInput="{{_defaultProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" mergeKey="fillPrice"/> + <fillField userInput="{{_defaultProduct.quantity}}" selector="{{AdminProductFormSection.productQuantity}}" mergeKey="fillQuantity"/> + <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="['$$createPreReqCategory.name$$']" mergeKey="searchAndSelectCategory"/> + <click selector="{{AdminProductSEOSection.sectionHeader}}" mergeKey="openSeoSection"/> + <fillField userInput="{{_defaultProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" mergeKey="fillUrlKey"/> + <click selector="{{AdminProductFormActionSection.saveButton}}" mergeKey="saveProduct"/> + <seeElement selector="{{AdminProductMessagesSection.successMessage}}" mergeKey="assertSaveMessageSuccess"/> + <seeInField userInput="{{_defaultProduct.name}}" selector="{{AdminProductFormSection.productName}}" mergeKey="assertFieldName"/> + <seeInField userInput="{{_defaultProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" mergeKey="assertFieldSku"/> + <seeInField userInput="{{_defaultProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" mergeKey="assertFieldPrice"/> + <click selector="{{AdminProductSEOSection.sectionHeader}}" mergeKey="openSeoSectionAssert"/> + <seeInField userInput="{{_defaultProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" mergeKey="assertFieldUrlKey"/> + + <!-- Go to storefront category page, assert product visibility --> + <amOnPage url="{{StorefrontCategoryPage.url($$createPreReqCategory.name$$)}}" mergeKey="navigateToCategoryPage"/> + <waitForPageLoad mergeKey="waitForPageLoad1"/> + <see userInput="{{_defaultProduct.name}}" mergeKey="assertProductPresent"/> + <see userInput="{{_defaultProduct.price}}" mergeKey="assertProductPricePresent"/> + + <!-- Go to storefront product page, assert product visibility --> + <amOnPage url="{{_defaultProduct.urlKey}}.html" mergeKey="navigateToProductPage"/> + <waitForPageLoad mergeKey="waitForPageLoad2"/> + <seeInTitle userInput="{{_defaultProduct.name}}" mergeKey="assertProductNameTitle"/> + <see userInput="{{_defaultProduct.name}}" selector="{{StorefrontProductInfoMainSection.productName}}" mergeKey="assertProductName"/> + <see userInput="{{_defaultProduct.price}}" selector="{{StorefrontProductInfoMainSection.productPrice}}" mergeKey="assertProductPrice"/> + <see userInput="{{_defaultProduct.sku}}" selector="{{StorefrontProductInfoMainSection.productSku}}" mergeKey="assertProductSku"/> + </test> + <after> + <deleteData createDataKey="createPreReqCategory" mergeKey="deletePreReqCategory"/> + <amOnPage url="admin/admin/auth/logout/" mergeKey="amOnLogoutPage"/> + </after> + </cest> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CategoryData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CategoryData.xml new file mode 100644 index 0000000000000..5c6a03c46b3ec --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CategoryData.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="_defaultCategory" type="category"> + <data key="name" unique="suffix">simpleCategory</data> + <data key="name_lwr" unique="suffix">simplecategory</data> + <data key="is_active">true</data> + </entity> + <entity name="SimpleSubCategory" type="category"> + <data key="name" unique="suffix">SimpleSubCategory</data> + <data key="name_lwr" unique="suffix">simplesubcategory</data> + <data key="is_active">true</data> + <data key="include_in_menu">true</data> + <!--required-entity type="custom_attribute">CustomAttributeCategoryUrlKey</required-entity--> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeCategoryUrlKeyData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeCategoryUrlKeyData.xml new file mode 100644 index 0000000000000..43348890b944c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeCategoryUrlKeyData.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="CustomAttributeCategoryUrlKey" type="custom_attribute"> + <data key="attribute_code">url_key</data> + <data key="value" unique="suffix">category</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeProductUrlKeyData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeProductUrlKeyData.xml new file mode 100644 index 0000000000000..ccaed86c1e786 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeProductUrlKeyData.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="CustomAttributeProductUrlKey" type="custom_attribute"> + <data key="attribute_code">url_key</data> + <data key="value" unique="suffix">product</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductConfigurableAttributeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductConfigurableAttributeData.xml new file mode 100644 index 0000000000000..3cdb6c30c4f5a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductConfigurableAttributeData.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="colorProductAttribute" type="product_attribute"> + <data key="default_label" unique="suffix">Color</data> + <data key="attribute_quantity">1</data> + </entity> + <entity name="colorProductAttribute1" type="product_attribute"> + <data key="name" unique="suffix">White</data> + <data key="price">1.00</data> + </entity> + <entity name="colorProductAttribute2" type="product_attribute"> + <data key="name" unique="suffix">Red</data> + <data key="price">2.00</data> + </entity> + <entity name="colorProductAttribute3" type="product_attribute"> + <data key="name" unique="suffix">Blue</data> + <data key="price">3.00</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml new file mode 100644 index 0000000000000..6ac89d0c2a7a8 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="_defaultProduct" type="product"> + <data key="sku" unique="suffix">testSku</data> + <data key="type_id">simple</data> + <data key="attribute_set_id">4</data> + <data key="visibility">4</data> + <data key="name" unique="suffix">testProductName</data> + <data key="price">123.00</data> + <data key="urlKey" unique="suffix">testurlkey</data> + <data key="status">1</data> + <data key="quantity">100</data> + <required-entity type="product_extension_attribute">EavStockItem</required-entity> + </entity> + <entity name="SimpleProduct" type="product"> + <data key="sku" unique="suffix">SimpleProduct</data> + <data key="type_id">simple</data> + <data key="attribute_set_id">4</data> + <data key="name">SimpleProduct</data> + <data key="price">123.00</data> + <data key="visibility">4</data> + <data key="status">1</data> + <required-entity type="product_extension_attribute">EavStockItem</required-entity> + <!--required-entity type="custom_attribute">CustomAttributeProductUrlKey</required-entity--> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductExtensionAttributeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductExtensionAttributeData.xml new file mode 100644 index 0000000000000..d884bebf36d85 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductExtensionAttributeData.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="EavStockItem" type="product_extension_attribute"> + <required-entity type="stock_item">Qty_1000</required-entity> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/StockItemData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/StockItemData.xml new file mode 100644 index 0000000000000..7711f5dce8ec4 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/StockItemData.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="Qty_1000" type="stock_item"> + <data key="qty">1000</data> + <data key="is_in_stock">true</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml new file mode 100644 index 0000000000000..453fe74bfa38e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateCategory" dataType="category" type="create" auth="/rest/V1/integration/admin/token" url="/rest/V1/categories" method="POST"> + <header param="Content-Type">application/json</header> + <jsonObject key="category" dataType="category"> + <entry key="parent_id">integer</entry> + <entry key="name">string</entry> + <entry key="is_active">boolean</entry> + <entry key="position">integer</entry> + <entry key="level">integer</entry> + <entry key="children">string</entry> + <entry key="created_at">string</entry> + <entry key="updated_at">string</entry> + <entry key="path">string</entry> + <entry key="include_in_menu">boolean</entry> + <array key="available_sort_by"> + <value>string</value> + </array> + <entry key="extension_attributes">empty_extension_attribute</entry> + <array key="custom_attributes"> + <value>custom_attribute</value> + </array> + </jsonObject> + </operation> + + <operation name="UpdateCategory" dataType="category" type="update" auth="/rest/V1/integration/admin/token" url="/rest/V1/categories" method="PUT"> + <header param="Content-Type">application/json</header> + <jsonObject key="category" dataType="category"> + <entry key="id">integer</entry> + <entry key="parent_id">integer</entry> + <entry key="name">string</entry> + <entry key="is_active">boolean</entry> + <entry key="position">integer</entry> + <entry key="level">integer</entry> + <entry key="children">string</entry> + <entry key="created_at">string</entry> + <entry key="updated_at">string</entry> + <entry key="path">string</entry> + <array key="available_sort_by"> + <value>string</value> + </array> + <entry key="include_in_menu">boolean</entry> + <entry key="extension_attributes">empty_extension_attribute</entry> + <array key="custom_attributes"> + <value>custom_attribute</value> + </array> + </jsonObject> + </operation> + + <operation name="DeleteCategory" dataType="category" type="delete" auth="/rest/V1/integration/admin/token" url="/rest/V1/categories" method="DELETE"> + <header param="Content-Type">application/json</header> + <param key="categoryId" type="path">{id}</param> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml new file mode 100644 index 0000000000000..7ad804465c7ff --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateCustomAttribute" dataType="custom_attribute" type="create"> + <entry key="attribute_code">string</entry> + <entry key="value">string</entry> + </operation> + <operation name="UpdateCustomAttribute" dataType="custom_attribute" type="update"> + <entry key="attribute_code">string</entry> + <entry key="value">string</entry> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml new file mode 100644 index 0000000000000..a2b77297796ea --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateProduct" dataType="product" type="create" auth="/rest/V1/integration/admin/token" url="/rest/V1/products" method="POST"> + <header param="Content-Type">application/json</header> + <jsonObject dataType="product" key="product"> + <entry key="sku">string</entry> + <entry key="name">string</entry> + <entry key="attribute_set_id">integer</entry> + <entry key="price">integer</entry> + <entry key="status">integer</entry> + <entry key="visibility">integer</entry> + <entry key="type_id">string</entry> + <entry key="created_at">string</entry> + <entry key="updated_at">string</entry> + <entry key="weight">integer</entry> + <entry key="extension_attributes">product_extension_attribute</entry> + <array key="product_links"> + <value>product_link</value> + </array> + <array key="custom_attributes"> + <value>custom_attribute</value> + </array> + <array key="options"> + <value>product_option</value> + </array> + </jsonObject> + </operation> + <operation name="UpdateProduct" dataType="product" type="update" auth="/rest/V1/integration/admin/token" url="/rest/V1/products" method="PUT"> + <header param="Content-Type">application/json</header> + <jsonObject dataType="product" key="product"> + <entry key="id">integer</entry> + <entry key="sku">string</entry> + <entry key="name">string</entry> + <entry key="attribute_set_id">integer</entry> + <entry key="price">integer</entry> + <entry key="status">integer</entry> + <entry key="visibility">integer</entry> + <entry key="type_id">string</entry> + <entry key="created_at">string</entry> + <entry key="updated_at">string</entry> + <entry key="weight">integer</entry> + <entry key="extension_attributes">product_extension_attribute</entry> + <array key="product_links"> + <value>product_link</value> + </array> + <array key="custom_attributes"> + <value>custom_attribute</value> + </array> + <array key="options"> + <value>product_option</value> + </array> + <!--array key="media_gallery_entries"> + <value>media_gallery_entries</value> + </array> + <array key="tier_prices"> + <value>tier_prices</value> + </array--> + </jsonObject> + <entry key="saveOptions">boolean</entry> + </operation> + <operation name="deleteProduct" dataType="product" type="delete" auth="/rest/V1/integration/admin/token" url="/rest/V1/products" method="DELETE"> + <header param="Content-Type">application/json</header> + <param key="sku" type="path">{sku}</param> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml new file mode 100644 index 0000000000000..86d3629f48a6e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateProductExtensionAttribute" dataType="product_extension_attribute" type="create"> + <entry key="stock_item">stock_item</entry> + </operation> + <operation name="UpdateProductExtensionAttribute" dataType="product_extension_attribute" type="update"> + <entry key="stock_item">stock_item</entry> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml new file mode 100644 index 0000000000000..6400211dedf4e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateProductLink" dataType="product_link" type="create"> + <entry key="sku">string</entry> + <entry key="link_type">string</entry> + <entry key="linked_product_sku">string</entry> + <entry key="linked_product_type">string</entry> + <entry key="position">integer</entry> + <array key="extension_attributes"> + <value>product_link_extension_attribute</value> + </array> + </operation> + <operation name="UpdateProductLink" dataType="product_link" type="update"> + <entry key="sku">string</entry> + <entry key="link_type">string</entry> + <entry key="linked_product_sku">string</entry> + <entry key="linked_product_type">string</entry> + <entry key="position">integer</entry> + <array key="extension_attributes"> + <value>product_link_extension_attribute</value> + </array> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml new file mode 100644 index 0000000000000..5371fa1f5e7a2 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateProductLinkExtensionAttribute" dataType="product_link_extension_attribute" type="create"> + <header param="Content-Type">application/json</header> + <entry key="qty">integer</entry> + </operation> + <operation name="UpdateProductLinkExtensionAttribute" dataType="product_link_extension_attribute" type="update"> + <header param="Content-Type">application/json</header> + <entry key="qty">integer</entry> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml new file mode 100644 index 0000000000000..5e3f66c51e13f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateProductOption" dataType="product_option" type="create"> + <entry key="product_sku">string</entry> + <entry key="option_id">integer</entry> + <entry key="title">string</entry> + <entry key="type">string</entry> + <entry key="sort_order">integer</entry> + <entry key="is_require">boolean</entry> + <entry key="price">integer</entry> + <entry key="price_type">string</entry> + <entry key="sku">string</entry> + <entry key="file_extension">string</entry> + <entry key="max_characters">integer</entry> + <entry key="max_size_x">integer</entry> + <entry key="max_size_y">integer</entry> + <array key="values"> + <value>product_option_value</value> + </array> + </operation> + <operation name="UpdateProductOption" dataType="product_option" type="update"> + <entry key="product_sku">string</entry> + <entry key="option_id">integer</entry> + <entry key="title">string</entry> + <entry key="type">string</entry> + <entry key="sort_order">integer</entry> + <entry key="is_require">boolean</entry> + <entry key="price">integer</entry> + <entry key="price_type">string</entry> + <entry key="sku">string</entry> + <entry key="file_extension">string</entry> + <entry key="max_characters">integer</entry> + <entry key="max_size_x">integer</entry> + <entry key="max_size_y">integer</entry> + <array key="values"> + <value>product_option_value</value> + </array> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml new file mode 100644 index 0000000000000..4be46958db312 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateProductOptionValue" dataType="product_option_value" type="create"> + <entry key="title">string</entry> + <entry key="sort_order">integer</entry> + <entry key="price">integer</entry> + <entry key="price_type">string</entry> + <entry key="sku">string</entry> + <entry key="option_type_id">integer</entry> + </operation> + <operation name="UpdateProductOptionValue" dataType="product_option_value" type="update"> + <entry key="title">string</entry> + <entry key="sort_order">integer</entry> + <entry key="price">integer</entry> + <entry key="price_type">string</entry> + <entry key="sku">string</entry> + <entry key="option_type_id">integer</entry> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml new file mode 100644 index 0000000000000..70626de4211c5 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateStockItem" dataType="stock_item" type="create"> + <entry key="qty">integer</entry> + <entry key="is_in_stock">boolean</entry> + </operation> + <operation name="UpdateStockItem" dataType="stock_item" type="update"> + <entry key="qty">integer</entry> + <entry key="is_in_stock">boolean</entry> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml new file mode 100644 index 0000000000000..b00effeb20e9f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="AdminCategoryPage" urlPath="admin/catalog/category/" module="Catalog"> + <section name="AdminCategorySidebarActionSection"/> + <section name="AdminCategorySidebarTreeSection"/> + <section name="AdminCategoryBasicFieldSection"/> + <section name="AdminCategorySEOSection"/> + </page> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductEditPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductEditPage.xml new file mode 100644 index 0000000000000..907407acf8e31 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductEditPage.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="AdminProductEditPage" urlPath="admin/catalog/product/new" module="Magento_Catalog"> + <section name="AdminProductFormSection"/> + <section name="AdminProductFormActionSection"/> + <section name="AdminMessagesSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductIndexPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductIndexPage.xml new file mode 100644 index 0000000000000..b3f5ef1ba1151 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductIndexPage.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="AdminProductIndexPage" urlPath="admin/catalog/product/index" module="Magento_Catalog"> + <section name="AdminProductGridActionSection" /> + <section name="AdminProductGridSection" /> + <section name="AdminMessagesSection" /> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml new file mode 100644 index 0000000000000..1346b05af4c53 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="StorefrontCategoryPage" urlPath="/{{var1}}.html" module="Category" parameterized="true"> + <section name="StorefrontCategoryMainSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml new file mode 100644 index 0000000000000..4436742a13bf7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="StorefrontProductPage" urlPath="admin/catalog/product/view" module="Magento_Catalog"> + <section name="StorefrontProductInfoMainSection" /> + <section name="StorefrontProductInfoDetailsSection" /> + <section name="StorefrontProductImageSection" /> + <section name="StorefrontMessagesSection" /> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/README.md new file mode 100644 index 0000000000000..308f84b867aff --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Catalog** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml new file mode 100644 index 0000000000000..f83cc99b1b6b9 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminCategoryBasicFieldSection"> + <element name="IncludeInMenu" type="checkbox" locator="input[name='include_in_menu']"/> + <element name="EnableCategory" type="checkbox" locator="input[name='is_active']"/> + <element name="CategoryNameInput" type="input" locator="input[name='name']"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml new file mode 100644 index 0000000000000..dbec4c295e4f3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminCategoryMainActionsSection"> + <element name="SaveButton" type="button" locator=".page-actions-inner #save" timeout="30"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml new file mode 100644 index 0000000000000..e21176d441b1e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminCategoryMessagesSection"> + <element name="SuccessMessage" type="text" locator=".message-success"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml new file mode 100644 index 0000000000000..3564a6ca78b69 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminCategorySEOSection"> + <element name="SectionHeader" type="button" locator="div[data-index='search_engine_optimization']" timeout="30"/> + <element name="UrlKeyInput" type="input" locator="input[name='url_key']"/> + <element name="MetaTitleInput" type="input" locator="input[name='meta_title']"/> + <element name="MetaKeywordsInput" type="textarea" locator="textarea[name='meta_keywords']"/> + <element name="MetaDescriptionInput" type="textarea" locator="textarea[name='meta_description']"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml new file mode 100644 index 0000000000000..e3ff829d4ce89 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminCategorySidebarActionSection"> + <element name="AddRootCategoryButton" type="button" locator="#add_root_category_button" timeout="30"/> + <element name="AddSubcategoryButton" type="button" locator="#add_subcategory_button" timeout="30"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml new file mode 100644 index 0000000000000..ec537ba4830ba --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminCategorySidebarTreeSection"> + <element name="Collapse All" type="button" locator=".tree-actions a:first-child"/> + <element name="Expand All" type="button" locator=".tree-actions a:last-child"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormActionSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormActionSection.xml new file mode 100644 index 0000000000000..713e8b71c239c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormActionSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminProductFormActionSection"> + <element name="saveButton" type="button" locator="#save-button" timeout="30"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml new file mode 100644 index 0000000000000..1fef90bdd1156 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminProductFormSection"> + <element name="productName" type="input" locator=".admin__field[data-index=name] input"/> + <element name="productSku" type="input" locator=".admin__field[data-index=sku] input"/> + <element name="productPrice" type="input" locator=".admin__field[data-index=price] input"/> + <element name="categoriesDropdown" type="multiselect" locator="div[data-index='category_ids']"/> + <element name="productQuantity" type="input" locator=".admin__field[data-index=qty] input"/> + </section> + <section name="AdminProductFormConfigurationsSection"> + <element name="createConfigurations" type="button" locator="button[data-index='create_configurable_products_button']" timeout="30"/> + <element name="currentVariationsRows" type="button" locator=".data-row"/> + <element name="currentVariationsNameCells" type="textarea" locator=".admin__control-fields[data-index='name_container']"/> + <element name="currentVariationsSkuCells" type="textarea" locator=".admin__control-fields[data-index='sku_container']"/> + <element name="currentVariationsPriceCells" type="textarea" locator=".admin__control-fields[data-index='price_container']"/> + <element name="currentVariationsQuantityCells" type="textarea" locator=".admin__control-fields[data-index='quantity_container']"/> + <element name="currentVariationsAttributesCells" type="textarea" locator=".admin__control-fields[data-index='attributes']"/> + </section> + <section name="AdminCreateProductConfigurationsPanel"> + <element name="next" type="button" locator=".steps-wizard-navigation .action-next-step" timeout="30"/> + <element name="createNewAttribute" type="button" locator=".select-attributes-actions button[title='Create New Attribute']" timeout="30"/> + <element name="filters" type="button" locator="button[data-action='grid-filter-expand']"/> + <element name="attributeCode" type="input" locator=".admin__control-text[name='attribute_code']"/> + <element name="applyFilters" type="button" locator="button[data-action='grid-filter-apply']" timeout="30"/> + <element name="firstCheckbox" type="input" locator="tr[data-repeat-index='0'] .admin__control-checkbox"/> + + <element name="selectAll" type="button" locator=".action-select-all"/> + <element name="createNewValue" type="input" locator=".action-create-new" timeout="30"/> + <element name="attributeName" type="input" locator="li[data-attribute-option-title=''] .admin__field-create-new .admin__control-text"/> + <element name="saveAttribute" type="button" locator="li[data-attribute-option-title=''] .action-save" timeout="30"/> + + <element name="applyUniquePricesByAttributeToEachSku" type="radio" locator=".admin__field-label[for='apply-unique-prices-radio']"/> + <element name="selectAttribute" type="select" locator="#select-each-price" timeout="30"/> + <element name="attribute1" type="input" locator="#apply-single-price-input-0"/> + <element name="attribute2" type="input" locator="#apply-single-price-input-1"/> + <element name="attribute3" type="input" locator="#apply-single-price-input-2"/> + + <element name="applySingleQuantityToEachSkus" type="radio" locator=".admin__field-label[for='apply-single-inventory-radio']" timeout="30"/> + <element name="quantity" type="input" locator="#apply-single-inventory-input"/> + </section> + <section name="AdminNewAttributePanel"> + <element name="saveAttribute" type="button" locator="#save" timeout="30"/> + <element name="newAttributeIFrame" type="iframe" locator="create_new_attribute_container"/> + <element name="defaultLabel" type="input" locator="#attribute_label"/> + </section> + <section name="AdminChooseAffectedAttributeSetPopup"> + <element name="confirm" type="button" locator="button[data-index='confirm_button']" timeout="30"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridActionSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridActionSection.xml new file mode 100644 index 0000000000000..1c32564485c9e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridActionSection.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminProductGridActionSection"> + <element name="addProductToggle" type="button" locator=".action-toggle.primary.add" timeout="30"/> + <element name="addSimpleProduct" type="button" locator=".item[data-ui-id='products-list-add-new-product-button-item-simple']" timeout="30"/> + <element name="addConfigurableProduct" type="button" locator=".item[data-ui-id='products-list-add-new-product-button-item-configurable']" timeout="30"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml new file mode 100644 index 0000000000000..f48ece1a3f0e2 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminProductGridSection"> + <element name="productGridElement1" type="input" locator="#addLocator" /> + <element name="productGridElement2" type="text" locator="#addLocator" /> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml new file mode 100644 index 0000000000000..c35d1fe21b571 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminProductMessagesSection"> + <element name="successMessage" type="text" locator=".message-success"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml new file mode 100644 index 0000000000000..c03899381d15a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminProductSEOSection"> + <element name="sectionHeader" type="button" locator="div[data-index='search-engine-optimization']" timeout="30"/> + <element name="urlKeyInput" type="input" locator="input[name='product[url_key]']"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryMainSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryMainSection.xml new file mode 100644 index 0000000000000..47161b95b6268 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryMainSection.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="StorefrontCategoryMainSection"> + <element name="CategoryTitle" type="text" locator="#page-title-heading span"/> + <element name="ProductItemInfo" type="button" locator=".product-item-info"/> + <element name="AddToCartBtn" type="button" locator="button.action.tocart.primary"/> + <element name="SuccessMsg" type="button" locator="div.message-success"/> + <element name="productCount" type="text" locator="#toolbar-amount"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMessagesSection.xml new file mode 100644 index 0000000000000..e662b0914ce3b --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMessagesSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="StorefrontMessagesSection"> + <element name="test" type="input" locator=".test"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMiniCartSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMiniCartSection.xml new file mode 100644 index 0000000000000..85964f13a4d8d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMiniCartSection.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="StorefrontMiniCartSection"> + <element name="quantity" type="button" locator="span.counter-number"/> + <element name="show" type="button" locator="a.showcart"/> + <element name="goToCheckout" type="button" locator="#top-cart-btn-checkout"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoDetailsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoDetailsSection.xml new file mode 100644 index 0000000000000..92b84d42a4dda --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoDetailsSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="StorefrontProductInfoDetailsSection"> + <element name="productNameForReview" type="text" locator=".legend.review-legend>strong" /> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoMainSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoMainSection.xml new file mode 100644 index 0000000000000..be9cde517b59f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoMainSection.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="StorefrontProductInfoMainSection"> + <element name="productName" type="text" locator=".base"/> + <element name="productSku" type="text" locator=".product.attribute.sku>.value"/> + <element name="productPrice" type="text" locator=".price"/> + <element name="productStockStatus" type="text" locator=".stock[title=Availability]>span"/> + + <element name="productAttributeTitle1" type="text" locator="#product-options-wrapper div[tabindex='0'] label"/> + <element name="productAttributeOptions1" type="select" locator="#product-options-wrapper div[tabindex='0'] option"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json new file mode 100644 index 0000000000000..53c1bafbe43ad --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json @@ -0,0 +1,72 @@ +{ + "name": "magento/magento2-functional-test-module-catalog", + "description": "Magento 2 Acceptance Test Module Catalog", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-cms": "dev-master", + "magento/magento2-functional-test-module-indexer": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-theme": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-widget": "dev-master", + "magento/magento2-functional-test-module-wishlist": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-msrp": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-catalog-rule": "dev-master", + "magento/magento2-functional-test-module-product-alert": "dev-master", + "magento/magento2-functional-test-module-url-rewrite": "dev-master", + "magento/magento2-functional-test-module-catalog-url-rewrite": "dev-master", + "magento/magento2-functional-test-module-page-cache": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master", + "magento/magento2-functional-test-module-cookie": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Catalog" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/README.md new file mode 100644 index 0000000000000..ee39f1deb58d3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CatalogAnalytics** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/composer.json new file mode 100644 index 0000000000000..3b45c0b6b63c7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-catalog-analytics", + "description": "Magento 2 Acceptance Test Module Catalog Analytics", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-catalog": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CatalogAnalytics" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/README.md new file mode 100644 index 0000000000000..9a514f1c83fd7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CatalogImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json new file mode 100644 index 0000000000000..81ee5ddcfda7d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json @@ -0,0 +1,58 @@ +{ + "name": "magento/magento2-functional-test-module-catalog-import-export", + "description": "Magento 2 Acceptance Test Module Catalog Import Export", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-catalog-url-rewrite": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-import-export": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CatalogImportExport" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/README.md new file mode 100644 index 0000000000000..03f581dfd23d8 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CatalogInventory** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json new file mode 100644 index 0000000000000..de845f8f5a88a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json @@ -0,0 +1,56 @@ +{ + "name": "magento/magento2-functional-test-module-catalog-inventory", + "description": "Magento 2 Acceptance Test Module Catalog Inventory", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CatalogInventory" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/README.md new file mode 100644 index 0000000000000..0e318cd24b069 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CatalogRule** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json new file mode 100644 index 0000000000000..3952c494c78b3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json @@ -0,0 +1,56 @@ +{ + "name": "magento/magento2-functional-test-module-catalog-rule", + "description": "Magento 2 Acceptance Test Module Catalog Rule", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-rule": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CatalogRule" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/README.md new file mode 100644 index 0000000000000..81b8ad8679961 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CatalogRuleConfigurable** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json new file mode 100644 index 0000000000000..a20e6b7a3895d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json @@ -0,0 +1,52 @@ +{ + "name": "magento/magento2-functional-test-module-catalog-rule-configurable", + "description": "Magento 2 Acceptance Test Module Catalog Rule Configurable", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-configurable-product": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-catalog-rule": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/README.md new file mode 100644 index 0000000000000..85ed3bcf15d65 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CatalogSearch** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json new file mode 100644 index 0000000000000..cb88f4139c886 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json @@ -0,0 +1,59 @@ +{ + "name": "magento/magento2-functional-test-module-catalog-search", + "description": "Magento 2 Acceptance Test Module Catalog Search", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-search": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-theme": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CatalogSearch" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/README.md new file mode 100644 index 0000000000000..7329f664baa03 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CatalogUrlRewrite** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json new file mode 100644 index 0000000000000..a563bff42a491 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json @@ -0,0 +1,57 @@ +{ + "name": "magento/magento2-functional-test-module-catalog-url-rewrite", + "description": "Magento 2 Acceptance Test Module Catalog Url Rewrite", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-catalog-import-export": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-import-export": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-url-rewrite": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CatalogUrlRewrite" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/README.md new file mode 100644 index 0000000000000..b05124ac4bb3b --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CatalogWidget** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json new file mode 100644 index 0000000000000..457c7c30dff31 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json @@ -0,0 +1,57 @@ +{ + "name": "magento/magento2-functional-test-module-catalog-widget", + "description": "Magento 2 Acceptance Test Module Catalog Widget", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-widget": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-rule": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-wishlist": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CatalogWidget" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml new file mode 100644 index 0000000000000..1932ec0f6e1d9 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="StorefrontCustomerCheckoutCest"> + <annotations> + <features value="Checkout"/> + <stories value="Checkout via the Admin"/> + <group value="checkout"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + </annotations> + <before> + <createData entity="SimpleSubCategory" mergeKey="simplecategory"/> + <entity name="categoryLink" type="custom_attribute" mergeKey="categoryLink"> + <data key="attribute_code">category_ids</data> + <data key="value">$$simplecategory.id$$</data> + </entity> + <createData entity="SimpleProduct" mergeKey="simpleproduct1"> + <required-entity name="categoryLink"/> + </createData> + <createData entity="Simple_US_Customer" mergeKey="simpleuscustomer"/> + </before> + <after> + <deleteData createDataKey="simpleproduct1" mergeKey="deleteProduct1"/> + <deleteData createDataKey="simplecategory" mergeKey="deleteCategory"/> + <deleteData createDataKey="simpleuscustomer" mergeKey="deleteCustomer"/> + </after> + <test name="CustomerCheckoutTest"> + <annotations> + <title value="Customer Checkout"/> + <description value="Should be able to place an order as a customer."/> + <severity value="CRITICAL"/> + <testCaseId value="#"/> + </annotations> + + <amOnPage mergeKey="s1" url="customer/account/login/"/> + <fillField mergeKey="s3" userInput="$$simpleuscustomer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> + <fillField mergeKey="s5" userInput="$$simpleuscustomer.password$$" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> + <click mergeKey="s7" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> + <waitForPageLoad mergeKey="s9"/> + + <amOnPage mergeKey="s11" url="/$$simplecategory.name$$.html" /> + <moveMouseOver mergeKey="s15" selector="{{StorefrontCategoryMainSection.ProductItemInfo}}" /> + <click mergeKey="s17" selector="{{StorefrontCategoryMainSection.AddToCartBtn}}" /> + <waitForElementVisible mergeKey="s21" selector="{{StorefrontCategoryMainSection.SuccessMsg}}" time="30" /> + <see mergeKey="s23" selector="{{StorefrontCategoryMainSection.SuccessMsg}}" userInput="You added $$simpleproduct1.name$$ to your shopping cart."/> + <see mergeKey="s25" selector="{{StorefrontMiniCartSection.quantity}}" userInput="1" /> + <click mergeKey="s27" selector="{{StorefrontMiniCartSection.show}}" /> + <click mergeKey="s31" selector="{{StorefrontMiniCartSection.goToCheckout}}" /> + <waitForPageLoad mergeKey="s33"/> + <waitForLoadingMaskToDisappear mergeKey="s34"/> + <click mergeKey="s35" selector="{{CheckoutShippingMethodsSection.firstShippingMethod}}"/> + <waitForElement mergeKey="s36" selector="{{CheckoutShippingMethodsSection.next}}" time="30"/> + <click mergeKey="s37" selector="{{CheckoutShippingMethodsSection.next}}" /> + <waitForPageLoad mergeKey="s39"/> + <waitForElement mergeKey="s41" selector="{{CheckoutPaymentSection.placeOrder}}" time="30" /> + <see mergeKey="s47" selector="{{CheckoutPaymentSection.billingAddress}}" userInput="{{US_Address_TX.street[0]}}" /> + <click mergeKey="s49" selector="{{CheckoutPaymentSection.placeOrder}}" /> + <waitForPageLoad mergeKey="s51"/> + <grabTextFrom mergeKey="s53" selector="{{CheckoutSuccessMainSection.orderNumber22}}" returnVariable="orderNumber" /> + <see mergeKey="s55" selector="{{CheckoutSuccessMainSection.success}}" userInput="Your order number is:" /> + + <amOnPage mergeKey="s59" url="{{AdminLoginPage}}" /> + <fillField mergeKey="s61" selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" /> + <fillField mergeKey="s63" selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" /> + <click mergeKey="s65" selector="{{AdminLoginFormSection.signIn}}" /> + + <amOnPage mergeKey="s67" url="{{OrdersPage}}"/> + <waitForPageLoad mergeKey="s75"/> + <fillField mergeKey="s77" selector="{{OrdersGridSection.search}}" variable="orderNumber" /> + <waitForPageLoad mergeKey="s78"/> + + <click mergeKey="s81" selector="{{OrdersGridSection.submitSearch22}}" /> + <waitForPageLoad mergeKey="s831"/> + <click mergeKey="s84" selector="{{OrdersGridSection.firstRow}}" /> + <see mergeKey="s85" selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Pending" /> + <see mergeKey="s87" selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="Customer" /> + <see mergeKey="s89" selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="$$simpleuscustomer.email$$" /> + <see mergeKey="s91" selector="{{OrderDetailsInformationSection.billingAddress}}" userInput="{{US_Address_TX.street[0]}}" /> + <see mergeKey="s93" selector="{{OrderDetailsInformationSection.shippingAddress}}" userInput="{{US_Address_TX.street[0]}}" /> + <see mergeKey="s95" selector="{{OrderDetailsInformationSection.itemsOrdered}}" userInput="$$simpleproduct1.name$$" /> + </test> + </cest> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml new file mode 100644 index 0000000000000..5f58cf04e6ae1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="StorefrontGuestCheckoutCest"> + <annotations> + <features value="Checkout"/> + <stories value="Checkout via Guest Checkout"/> + <group value="checkout"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + </annotations> + <before> + <createData entity="_defaultCategory" mergeKey="createCategory"/> + <entity name="categoryLink" type="custom_attribute" mergeKey="categoryLink"> + <data key="attribute_code">category_ids</data> + <data key="value">$$createCategory.id$$</data> + </entity> + <createData entity="_defaultProduct" mergeKey="createProduct"> + <required-entity name="categoryLink"/> + </createData> + </before> + <after> + <deleteData createDataKey="createCategory" mergeKey="deleteCategory"/> + <deleteData createDataKey="createProduct" mergeKey="deleteProduct"/> + </after> + <test name="GuestCheckoutTest"> + <annotations> + <title value="Guest Checkout"/> + <description value="Should be able to place an order as a Guest."/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-72094"/> + </annotations> + <amOnPage url="{{StorefrontCategoryPage.url($$createCategory.name$$)}}" mergeKey="onCategoryPage"/> + <waitForPageLoad mergeKey="waitForPageLoad1"/> + <moveMouseOver selector="{{StorefrontCategoryMainSection.ProductItemInfo}}" mergeKey="hoverProduct"/> + <click selector="{{StorefrontCategoryMainSection.AddToCartBtn}}" mergeKey="addToCart"/> + <waitForElementVisible selector="{{StorefrontCategoryMainSection.SuccessMsg}}" time="30" mergeKey="waitForProductAdded"/> + <see selector="{{StorefrontCategoryMainSection.SuccessMsg}}" userInput="You added $$createProduct.name$$ to your shopping cart." mergeKey="seeAddedToCartMessage"/> + <see selector="{{StorefrontMiniCartSection.quantity}}" userInput="1" mergeKey="seeCartQuantity"/> + <click selector="{{StorefrontMiniCartSection.show}}" mergeKey="clickCart"/> + <click selector="{{StorefrontMiniCartSection.goToCheckout}}" mergeKey="goToCheckout"/> + <waitForPageLoad mergeKey="waitForPageLoad2"/> + <fillField selector="{{GuestCheckoutShippingSection.email}}" userInput="{{CustomerEntityOne.email}}" mergeKey="enterEmail"/> + <fillField selector="{{GuestCheckoutShippingSection.firstName}}" userInput="{{CustomerEntityOne.firstname}}" mergeKey="enterFirstName"/> + <fillField selector="{{GuestCheckoutShippingSection.lastName}}" userInput="{{CustomerEntityOne.lastname}}" mergeKey="enterLastName"/> + <fillField selector="{{GuestCheckoutShippingSection.street}}" userInput="{{CustomerAddressSimple.street[0]}}" mergeKey="enterStreet"/> + <fillField selector="{{GuestCheckoutShippingSection.city}}" userInput="{{CustomerAddressSimple.city}}" mergeKey="enterCity"/> + <selectOption selector="{{GuestCheckoutShippingSection.region}}" userInput="{{CustomerAddressSimple.state}}" mergeKey="selectRegion"/> + <fillField selector="{{GuestCheckoutShippingSection.postcode}}" userInput="{{CustomerAddressSimple.postcode}}" mergeKey="enterPostcode"/> + <fillField selector="{{GuestCheckoutShippingSection.telephone}}" userInput="{{CustomerAddressSimple.telephone}}" mergeKey="enterTelephone"/> + <waitForLoadingMaskToDisappear mergeKey="waitForLoadingMask"/> + <click selector="{{GuestCheckoutShippingSection.firstShippingMethod}}" mergeKey="selectFirstShippingMethod"/> + <waitForElement selector="{{GuestCheckoutShippingSection.next}}" time="30" mergeKey="waitForNextButton"/> + <click selector="{{GuestCheckoutShippingSection.next}}" mergeKey="clickNext"/> + <waitForElement selector="{{GuestCheckoutPaymentSection.placeOrder}}" time="30" mergeKey="waitForPlaceOrderButton"/> + <see selector="{{GuestCheckoutPaymentSection.cartItems}}" userInput="{{_defaultProduct.name}}" mergeKey="seeProductInCart"/> + <see selector="{{GuestCheckoutPaymentSection.billingAddress}}" userInput="{{CustomerAddressSimple.street[0]}}" mergeKey="seeAddress"/> + <click selector="{{GuestCheckoutPaymentSection.placeOrder}}" mergeKey="clickPlaceOrder"/> + <grabTextFrom selector="{{CheckoutSuccessMainSection.orderNumber}}" returnVariable="orderNumber" mergeKey="grabOrderNumber"/> + <see selector="{{CheckoutSuccessMainSection.success}}" userInput="Your order # is:" mergeKey="seeOrderNumber"/> + <see selector="{{CheckoutSuccessMainSection.success}}" userInput="We'll email you an order confirmation with details and tracking info." mergeKey="seeEmailYou"/> + <amOnPage url="{{AdminLoginPage}}" mergeKey="navigateToAdmin"/> + <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> + <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> + <amOnPage url="{{OrdersPage}}" mergeKey="onOrdersPage"/> + <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="30" mergeKey="waitForOrdersPage"/> + <fillField selector="{{OrdersGridSection.search}}" variable="orderNumber" mergeKey="fillOrderNum"/> + <click selector="{{OrdersGridSection.submitSearch}}" mergeKey="submitSearchOrderNum"/> + <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="30" mergeKey="waitForOrdersPage2"/> + <click selector="{{OrdersGridSection.firstRow}}" mergeKey="clickOrderRow"/> + <see selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Pending" mergeKey="seeAdminOrderStatus"/> + <see selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="Guest" mergeKey="seeAdminOrderGuest"/> + <see selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="{{CustomerEntityOne.email}}" mergeKey="seeAdminOrderEmail"/> + <see selector="{{OrderDetailsInformationSection.billingAddress}}" userInput="{{CustomerAddressSimple.street[0]}}" mergeKey="seeAdminOrderBillingAddress"/> + <see selector="{{OrderDetailsInformationSection.shippingAddress}}" userInput="{{CustomerAddressSimple.street[0]}}" mergeKey="seeAdminOrderShippingAddress"/> + <see selector="{{OrderDetailsInformationSection.itemsOrdered}}" userInput="{{_defaultProduct.name}}" mergeKey="seeAdminOrderProduct"/> + </test> + </cest> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml new file mode 100644 index 0000000000000..650589ae6ee8d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="CheckoutPage" urlPath="/checkout" module="Checkout"> + <section name="CheckoutShippingSection"/> + <section name="CheckoutShippingMethodsSection"/> + <section name="CheckoutOrderSummarySection"/> + <section name="CheckoutSuccessMainSection"/> + <section name="CheckoutPaymentSection"/> + <section name="CheckoutGuestShippingInfoSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml new file mode 100644 index 0000000000000..98cfe538f52a1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="CheckoutSuccessPage" urlPath="/checkout/onepage/success/" module="Checkout"> + <section name="CheckoutSuccessMainSection"/> + </page> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/GuestCheckoutPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/GuestCheckoutPage.xml new file mode 100644 index 0000000000000..eaab3ece3bb88 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/GuestCheckoutPage.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="GuestCheckoutPage" urlPath="/checkout" module="Checkout"> + <section name="GuestCheckoutShippingSection"/> + <section name="GuestCheckoutPaymentSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/README.md new file mode 100644 index 0000000000000..b36a7cf6d5de1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Checkout** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutOrderSummarySection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutOrderSummarySection.xml new file mode 100644 index 0000000000000..f9f4957e796e6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutOrderSummarySection.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="CheckoutOrderSummarySection"> + <element name="miniCartTab" type="button" locator=".title[role='tab']"/> + <element name="productItemName" type="text" locator=".product-item-name"/> + <element name="productItemQty" type="text" locator=".value"/> + <element name="productItemPrice" type="text" locator=".price"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml new file mode 100644 index 0000000000000..c5ed374d70b7e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="CheckoutPaymentSection"> + <element name="cartItems" type="text" locator=".minicart-items"/> + <element name="billingAddress" type="text" locator="div.billing-address-details"/> + <element name="placeOrder" type="button" locator="button.action.primary.checkout" timeout="30"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingGuestInfoSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingGuestInfoSection.xml new file mode 100644 index 0000000000000..9af04542d85bc --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingGuestInfoSection.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="CheckoutShippingGuestInfoSection"> + <element name="email" type="input" locator="#customer-email"/> + <element name="firstName" type="input" locator="input[name=firstname]"/> + <element name="lastName" type="input" locator="input[name=lastname]"/> + <element name="street" type="input" locator="input[name='street[0]']"/> + <element name="city" type="input" locator="input[name=city]"/> + <element name="region" type="select" locator="select[name=region_id]"/> + <element name="postcode" type="input" locator="input[name=postcode]"/> + <element name="telephone" type="input" locator="input[name=telephone]"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingMethodsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingMethodsSection.xml new file mode 100644 index 0000000000000..5065571381c81 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingMethodsSection.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="CheckoutShippingMethodsSection"> + <element name="next" type="button" locator="button.button.action.continue.primary"/> + <element name="firstShippingMethod" type="radio" locator=".row:nth-of-type(1) .col-method .radio"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml new file mode 100644 index 0000000000000..c13967e9b1262 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="CheckoutShippingSection"> + <element name="selectedShippingAddress" type="text" locator=".shipping-address-item.selected-item"/> + <element name="newAddressButton" type="button" locator="#checkout-step-shipping button"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutSuccessMainSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutSuccessMainSection.xml new file mode 100644 index 0000000000000..28de9f94ae591 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutSuccessMainSection.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="CheckoutSuccessMainSection"> + <element name="success" type="text" locator="div.checkout-success"/> + <element name="orderNumber" type="text" locator="div.checkout-success > p:nth-child(1) > span"/> + <element name="orderNumber22" type="text" locator=".order-number>strong"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml new file mode 100644 index 0000000000000..5b62584348bdf --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="GuestCheckoutPaymentSection"> + <element name="cartItems" type="text" locator=".minicart-items"/> + <element name="billingAddress" type="text" locator="div.billing-address-details"/> + <element name="placeOrder" type="button" locator="button.action.primary.checkout" timeout="30"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutShippingSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutShippingSection.xml new file mode 100644 index 0000000000000..f7bc6e82e3ff1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutShippingSection.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="GuestCheckoutShippingSection"> + <element name="email" type="input" locator="#customer-email"/> + <element name="firstName" type="input" locator="input[name=firstname]"/> + <element name="lastName" type="input" locator="input[name=lastname]"/> + <element name="street" type="input" locator="input[name='street[0]']"/> + <element name="city" type="input" locator="input[name=city]"/> + <element name="region" type="select" locator="select[name=region_id]"/> + <element name="postcode" type="input" locator="input[name=postcode]"/> + <element name="telephone" type="input" locator="input[name=telephone]"/> + <element name="next" type="button" locator="button.button.action.continue.primary"/> + <element name="firstShippingMethod" type="radio" locator=".row:nth-of-type(1) .col-method .radio"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json new file mode 100644 index 0000000000000..aec57da084ffb --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json @@ -0,0 +1,67 @@ +{ + "name": "magento/magento2-functional-test-module-checkout", + "description": "Magento 2 Acceptance Test Module Checkout", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-payment": "dev-master", + "magento/magento2-functional-test-module-shipping": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-page-cache": "dev-master", + "magento/magento2-functional-test-module-sales-rule": "dev-master", + "magento/magento2-functional-test-module-theme": "dev-master", + "magento/magento2-functional-test-module-msrp": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Checkout" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/README.md new file mode 100644 index 0000000000000..a985bc4dfe104 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CheckoutAgreements** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json new file mode 100644 index 0000000000000..ab5629e117db9 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json @@ -0,0 +1,53 @@ +{ + "name": "magento/magento2-functional-test-module-checkout-agreements", + "description": "Magento 2 Acceptance Test Module Checkout Agreements", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CheckoutAgreements" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml new file mode 100644 index 0000000000000..1a15cda8d7ead --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="AdminCreateCmsPageCest"> + <annotations> + <features value="CMS Page Creation"/> + <stories value="Create a CMS Page via the Admin"/> + <group value="cms"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + </annotations> + <after> + <amOnPage url="admin/admin/auth/logout/" mergeKey="amOnLogoutPage"/> + </after> + <test name="CreateNewPage"> + <annotations> + <title value="Create a CMS Page"/> + <description value="You should be able to create a CMS Page via the Admin."/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-25580"/> + </annotations> + <amOnPage url="{{AdminLoginPage}}" mergeKey="navigateToAdmin"/> + <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> + <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> + <amOnPage url="{{CmsPagesPage}}" mergeKey="amOnPagePagesGrid"/> + <waitForPageLoad mergeKey="waitForPageLoad1"/> + <click selector="{{CmsPagesPageActionsSection.addNewPage}}" mergeKey="clickAddNewPage"/> + <fillField selector="{{CmsNewPagePageBasicFieldsSection.pageTitle}}" userInput="{{_defaultCmsPage.title}}" mergeKey="fillFieldTitle"/> + <click selector="{{CmsNewPagePageContentSection.header}}" mergeKey="clickExpandContent"/> + <fillField selector="{{CmsNewPagePageContentSection.contentHeading}}" userInput="{{_defaultCmsPage.content_heading}}" mergeKey="fillFieldContentHeading"/> + <fillField selector="{{CmsNewPagePageContentSection.content}}" userInput="{{_defaultCmsPage.content}}" mergeKey="fillFieldContent"/> + <click selector="{{CmsNewPagePageSeoSection.header}}" mergeKey="clickExpandSearchEngineOptimisation"/> + <fillField selector="{{CmsNewPagePageSeoSection.urlKey}}" userInput="{{_defaultCmsPage.identifier}}" mergeKey="fillFieldUrlKey"/> + <click selector="{{CmsNewPagePageActionsSection.savePage}}" mergeKey="clickSavePage"/> + <see userInput="You saved the page." mergeKey="seeSuccessMessage"/> + <amOnPage url="{{_defaultCmsPage.identifier}}" mergeKey="amOnPageTestPage"/> + <waitForPageLoad mergeKey="waitForPageLoad2"/> + <see userInput="{{_defaultCmsPage.content_heading}}" mergeKey="seeContentHeading"/> + <see userInput="{{_defaultCmsPage.content}}" mergeKey="seeContent"/> + </test> + </cest> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Data/CmsPageData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Data/CmsPageData.xml new file mode 100644 index 0000000000000..ee3e483bba9b6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Data/CmsPageData.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="_defaultCmsPage" type="cms_page"> + <data key="title">Test CMS Page</data> + <data key="content_heading">Test Content Heading</data> + <data key="content">Sample page content. Yada yada yada.</data> + <data key="identifier" unique="suffix">test-page-</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml new file mode 100644 index 0000000000000..9dd1fb299d23d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="CmsNewPagePage" urlPath="admin/cms/page/new" module="Magento_Cms"> + <section name="CmsNewPagePageActionsSection"/> + <section name="CmsNewPagePageBasicFieldsSection"/> + <section name="CmsNewPagePageContentSection"/> + <section name="CmsNewPagePageSeoSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml new file mode 100644 index 0000000000000..4d52b0f0ba315 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="CmsPagesPage" urlPath="admin/cms/page" module="Magento_Cms"> + <section name="CmsPagesPageActionsSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/README.md new file mode 100644 index 0000000000000..4de61c2fb27b0 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Cms** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageActionsSection.xml new file mode 100644 index 0000000000000..dc6cafa655120 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageActionsSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="CmsNewPagePageActionsSection"> + <element name="savePage" type="button" locator="#save" timeout="30"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageBasicFieldsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageBasicFieldsSection.xml new file mode 100644 index 0000000000000..e29cc86863610 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageBasicFieldsSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="CmsNewPagePageBasicFieldsSection"> + <element name="pageTitle" type="input" locator="input[name=title]"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageContentSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageContentSection.xml new file mode 100644 index 0000000000000..cc1a98e31db18 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageContentSection.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="CmsNewPagePageContentSection"> + <element name="header" type="button" locator="div[data-index=content]"/> + <element name="contentHeading" type="input" locator="input[name=content_heading]"/> + <element name="content" type="input" locator="#cms_page_form_content"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageSeoSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageSeoSection.xml new file mode 100644 index 0000000000000..69b0b0faf6763 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageSeoSection.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="CmsNewPagePageSeoSection"> + <element name="header" type="button" locator="div[data-index=search_engine_optimisation]" timeout="30"/> + <element name="urlKey" type="input" locator="input[name=identifier]"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsPagesPageActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsPagesPageActionsSection.xml new file mode 100644 index 0000000000000..88746b3b5b7de --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsPagesPageActionsSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="CmsPagesPageActionsSection"> + <element name="addNewPage" type="button" locator="#add" timeout="30"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json new file mode 100644 index 0000000000000..ad21c6beeaffb --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json @@ -0,0 +1,58 @@ +{ + "name": "magento/magento2-functional-test-module-cms", + "description": "Magento 2 Acceptance Test Module Cms", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-theme": "dev-master", + "magento/magento2-functional-test-module-widget": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-email": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master", + "magento/magento2-functional-test-module-variable": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Cms" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/README.md new file mode 100644 index 0000000000000..1f1b1ca782532 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/README.md @@ -0,0 +1,6 @@ +## Overview + +The Magento_CmsUrlRewrite module adds support for URL rewrite rules for CMS pages. See also Magento_UrlRewrite module. + +The module adds and removes URL rewrite rules as CMS pages are added or removed by a user. +The rules can be edited by an admin user as any other URL rewrite rule. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json new file mode 100644 index 0000000000000..4c27ee9c61ed3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json @@ -0,0 +1,52 @@ +{ + "name": "magento/magento2-functional-test-module-cms-url-rewrite", + "description": "Magento 2 Acceptance Test Module Cms Url Rewrite", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-cms": "dev-master", + "magento/magento2-functional-test-module-url-rewrite": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CmsUrlRewrite" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/README.md new file mode 100644 index 0000000000000..6214cc94b04a0 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/README.md @@ -0,0 +1,8 @@ +#Config +The Config module is designed to implement system configuration functionality. +It provides mechanisms to add, edit, store and retrieve the configuration data +for each scope (there can be a default scope as well as scopes for each website and store). + +Modules can add items to be configured on the system configuration page by creating +system.xml files in their etc/adminhtml directories. These system.xml files get merged +to populate the forms in the config page. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json new file mode 100644 index 0000000000000..b82ea131819f5 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json @@ -0,0 +1,54 @@ +{ + "name": "magento/magento2-functional-test-module-config", + "description": "Magento 2 Acceptance Test Module Config", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-email": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Config" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json new file mode 100644 index 0000000000000..8af4f9591cfc5 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json @@ -0,0 +1,54 @@ +{ + "name": "magento/magento2-functional-test-module-configurable-import-export", + "description": "Magento 2 Acceptance Test Module Configurable Import Export", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-catalog-import-export": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-import-export": "dev-master", + "magento/magento2-functional-test-module-configurable-product": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/ConfigurableImportExport" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml new file mode 100644 index 0000000000000..0ae038de3e1a3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="ConfigurableProductOne" type="configurableProduct"> + <data key="configurableProductName">data</data> + </entity> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/README.md new file mode 100644 index 0000000000000..aa4342bf3a4e1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_ConfigurableProduct** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json new file mode 100644 index 0000000000000..9bc6d9d574c4b --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json @@ -0,0 +1,60 @@ +{ + "name": "magento/magento2-functional-test-module-configurable-product", + "description": "Magento 2 Acceptance Test Module Configurable Product", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-msrp": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/ConfigurableProduct" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/README.md new file mode 100644 index 0000000000000..f64eca364e908 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_ConfigurableProductSales** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json new file mode 100644 index 0000000000000..f9cb9a3e40432 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json @@ -0,0 +1,52 @@ +{ + "name": "magento/magento2-functional-test-module-configurable-product-sales", + "description": "Magento 2 Acceptance Test Module Configurable Product Sales", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/ConfigurableProductSales" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/README.md new file mode 100644 index 0000000000000..4b862fdfeea59 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Contact** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json new file mode 100644 index 0000000000000..11531b5e5f4cd --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json @@ -0,0 +1,53 @@ +{ + "name": "magento/magento2-functional-test-module-contact", + "description": "Magento 2 Acceptance Test Module Contact", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-cms": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Contact" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/README.md new file mode 100644 index 0000000000000..f218201d7c99f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Cookie** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json new file mode 100644 index 0000000000000..cf0a7bc2cb481 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-cookie", + "description": "Magento 2 Acceptance Test Module Cookie", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Cookie" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/README.md new file mode 100644 index 0000000000000..110a01dc96d58 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CurrencySymbol** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json new file mode 100644 index 0000000000000..9568fdb29ca38 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json @@ -0,0 +1,54 @@ +{ + "name": "magento/magento2-functional-test-module-currency-symbol", + "description": "Magento 2 Acceptance Test Module Currency Symbol", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-page-cache": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CurrencySymbol" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml new file mode 100644 index 0000000000000..66a750304f3ce --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="AdminCreateCustomerCest"> + <annotations> + <features value="Customer Creation"/> + <stories value="Create a Customer via the Admin"/> + <group value="customer"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + </annotations> + <test name="CreateCustomerViaAdminCest"> + <annotations> + <title value="You should be able to create a customer in the Admin back-end."/> + <description value="You should be able to create a customer in the Admin back-end."/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-72095"/> + </annotations> + <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> + <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" mergeKey="fillUsername"/> + <fillField userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" selector="{{AdminLoginFormSection.password}}" mergeKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> + <amOnPage url="{{AdminCustomerPage.url}}" mergeKey="navigateToCustomers"/> + <click selector="{{AdminCustomerMainActionsSection.addNewCustomer}}" mergeKey="clickCreateCustomer"/> + <fillField userInput="{{CustomerEntityOne.firstname}}" selector="{{AdminNewCustomerAccountInformationSection.firstName}}" mergeKey="fillFirstName"/> + <fillField userInput="{{CustomerEntityOne.lastname}}" selector="{{AdminNewCustomerAccountInformationSection.lastName}}" mergeKey="fillLastName"/> + <fillField userInput="{{CustomerEntityOne.email}}" selector="{{AdminNewCustomerAccountInformationSection.email}}" mergeKey="fillEmail"/> + <click selector="{{AdminNewCustomerMainActionsSection.saveButton}}" mergeKey="saveCustomer"/> + <waitForElementNotVisible selector="div [data-role='spinner']" time="10" mergeKey="waitForSpinner1"/> + <seeElement selector="{{AdminCustomerMessagesSection.successMessage}}" mergeKey="assertSuccessMessage"/> + + <click selector="{{AdminCustomerFiltersSection.filtersButton}}" mergeKey="openFilter"/> + <fillField userInput="{{CustomerEntityOne.firstname}}" selector="{{AdminCustomerFiltersSection.nameInput}}" mergeKey="filterFirstName"/> + <click selector="{{AdminCustomerFiltersSection.apply}}" mergeKey="applyFilter"/> + <waitForElementNotVisible selector="div [data-role='spinner']" time="10" mergeKey="waitForSpinner2"/> + <see userInput="{{CustomerEntityOne.firstname}}" selector="{{AdminCustomerGridSection.customerGrid}}" mergeKey="assertFirstName"/> + <see userInput="{{CustomerEntityOne.lastname}}" selector="{{AdminCustomerGridSection.customerGrid}}" mergeKey="assertLastName"/> + <see userInput="{{CustomerEntityOne.email}}" selector="{{AdminCustomerGridSection.customerGrid}}" mergeKey="assertEmail"/> + </test> + </cest> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml new file mode 100644 index 0000000000000..cba18378530c7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="StorefrontCreateCustomerCest"> + <annotations> + <features value="Customer Creation"/> + <stories value="Create a Customer via the Storefront"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + </annotations> + <test name="CreateCustomerViaStorefront"> + <annotations> + <title value="You should be able to create a customer via the storefront"/> + <description value="You should be able to create a customer via the storefront."/> + <severity value="CRITICAL"/> + <group value="create"/> + <testCaseId value="MAGETWO-23546"/> + </annotations> + <amOnPage mergeKey="amOnStorefrontPage" url="/"/> + <click mergeKey="clickOnCreateAccountLink" selector="{{StorefrontPanelHeaderSection.createAnAccountLink}}"/> + <fillField mergeKey="fillFirstName" userInput="{{CustomerEntityOne.firstname}}" selector="{{StorefrontCustomerCreateFormSection.firstnameField}}"/> + <fillField mergeKey="fillLastName" userInput="{{CustomerEntityOne.lastname}}" selector="{{StorefrontCustomerCreateFormSection.lastnameField}}"/> + <fillField mergeKey="fillEmail" userInput="{{CustomerEntityOne.email}}" selector="{{StorefrontCustomerCreateFormSection.emailField}}"/> + <fillField mergeKey="fillPassword" userInput="{{CustomerEntityOne.password}}" selector="{{StorefrontCustomerCreateFormSection.passwordField}}"/> + <fillField mergeKey="fillConfirmPassword" userInput="{{CustomerEntityOne.password}}" selector="{{StorefrontCustomerCreateFormSection.confirmPasswordField}}"/> + <click mergeKey="clickCreateAccountButton" selector="{{StorefrontCustomerCreateFormSection.createAccountButton}}"/> + <see mergeKey="seeThankYouMessage" userInput="Thank you for registering with Main Website Store."/> + <see mergeKey="seeFirstName" userInput="{{CustomerEntityOne.firstname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see mergeKey="seeLastName" userInput="{{CustomerEntityOne.lastname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see mergeKey="seeEmail" userInput="{{CustomerEntityOne.email}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + </test> + </cest> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml new file mode 100644 index 0000000000000..1c3722418cb64 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="StorefrontExistingCustomerLoginCest"> + <annotations> + <features value="Customer Login"/> + <stories value="Existing Customer can Login on the Storefront"/> + <group value="customer"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + </annotations> + <before> + <createData entity="Simple_US_Customer" mergeKey="Simple_US_Customer"/> + </before> + <after> + <deleteData createDataKey="Simple_US_Customer" mergeKey="Simple_US_Customer"/> + </after> + <test name="ExistingCustomerLoginStorefrontTest"> + <annotations> + <title value="You should be able to create a customer via the storefront"/> + <description value="You should be able to create a customer via the storefront."/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-72103"/> + </annotations> + <amOnPage mergeKey="amOnSignInPage" url="customer/account/login/"/> + <fillField mergeKey="fillEmail" userInput="$$Simple_US_Customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> + <fillField mergeKey="fillPassword" userInput="{{Simple_US_Customer.password}}" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> + <click mergeKey="clickSignInAccountButton" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> + <see mergeKey="seeFirstName" userInput="{{Simple_US_Customer.firstname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see mergeKey="seeLastName" userInput="{{Simple_US_Customer.lastname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see mergeKey="seeEmail" userInput="$$Simple_US_Customer.email$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + </test> + </cest> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/AddressData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/AddressData.xml new file mode 100644 index 0000000000000..34a8b89b9a274 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/AddressData.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="CustomerAddressSimple" type="address"> + <data key="id">0</data> + <data key="customer_id">12</data> + <required-entity type="region">CustomerRegionOne</required-entity> + <data key="region_id">0</data> + <data key="country_id">USA</data> + <array key="street"> + <item>7700 W Parmer Ln</item> + <item>Bld D</item> + </array> + <data key="company">Magento</data> + <data key="telephone">1234568910</data> + <data key="fax">1234568910</data> + <data key="postcode">78729</data> + <data key="city">Austin</data> + <data key="state">Texas</data> + <data key="firstname">John</data> + <data key="lastname">Doe</data> + <data key="middlename">string</data> + <data key="prefix">Mr</data> + <data key="suffix">Sr</data> + <data key="vat_id">vatData</data> + <data key="default_shipping">true</data> + <data key="default_billing">true</data> + </entity> + <entity name="US_Address_TX" type="address"> + <data key="firstname">John</data> + <data key="lastname">Doe</data> + <data key="company">Magento</data> + <array key="street"> + <item>7700 West Parmer Lane</item> + </array> + <data key="city">Austin</data> + <data key="country_id">US</data> + <data key="postcode">78729</data> + <data key="telephone">512-345-6789</data> + <data key="default_billing">Yes</data> + <data key="default_shipping">Yes</data> + <required-entity type="region">RegionTX</required-entity> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomAttributeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomAttributeData.xml new file mode 100644 index 0000000000000..01ce261bfa024 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomAttributeData.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="CustomAttributeSimple" type="custom_attribute"> + <data key="attribute_code">100</data> + <data key="value">test</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml new file mode 100644 index 0000000000000..b21e1ef130309 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="CustomerEntityOne" type="customer"> + <data key="group_id">0</data> + <data key="default_billing">defaultBillingValue</data> + <data key="default_shipping">defaultShippingValue</data> + <data key="confirmation">confirmationData</data> + <data key="created_at">12:00</data> + <data key="updated_at">12:00</data> + <data key="created_in">createdInData</data> + <data key="dob">01-01-1970</data> + <data key="email" unique="prefix">test@email.com</data> + <data key="firstname">John</data> + <data key="lastname">Doe</data> + <data key="middlename">S</data> + <data key="password">pwdTest123!</data> + <data key="prefix">Mr</data> + <data key="suffix">Sr</data> + <data key="gender">0</data> + <data key="store_id">0</data> + <data key="taxvat">taxValue</data> + <data key="website_id">0</data> + <required-entity type="address">CustomerAddressSimple</required-entity> + <data key="disable_auto_group_change">0</data> + <!--required-entity type="extension_attribute">ExtensionAttributeSimple</required-entity--> + </entity> + <entity name="Simple_US_Customer" type="customer"> + <data key="group_id">0</data> + <data key="default_billing">true</data> + <data key="default_shipping">true</data> + <data key="email" unique="prefix">John.Doe@example.com</data> + <data key="firstname">John</data> + <data key="lastname">Doe</data> + <data key="password">pwdTest123!</data> + <data key="store_id">0</data> + <data key="website_id">0</data> + <required-entity type="address">US_Address_TX</required-entity> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/ExtensionAttributeSimple.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/ExtensionAttributeSimple.xml new file mode 100644 index 0000000000000..2e5072176edf7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/ExtensionAttributeSimple.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="ExtensionAttributeSimple" type="extension_attribute"> + <data key="is_subscribed">true</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/RegionData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/RegionData.xml new file mode 100644 index 0000000000000..a52c9134f9242 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/RegionData.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="CustomerRegionOne" type="region"> + <data key="region_code">100</data> + <data key="region_id">12</data> + </entity> + <entity name="RegionTX" type="region"> + <data key="region">Texas</data> + <data key="region_code">TX</data> + <data key="region_id">1</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml new file mode 100644 index 0000000000000..0238f8fe9f937 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateAddress" dataType="address" type="create"> + <entry key="region">region</entry> + <entry key="country_id">string</entry> + <array key="street"> + <value>string</value> + </array> + <entry key="company">string</entry> + <entry key="telephone">string</entry> + <entry key="fax">string</entry> + <entry key="postcode">string</entry> + <entry key="city">string</entry> + <entry key="firstname">string</entry> + <entry key="lastname">string</entry> + <entry key="middlename">string</entry> + <entry key="prefix">string</entry> + <entry key="suffix">string</entry> + <entry key="vat_id">string</entry> + <entry key="default_shipping">boolean</entry> + <entry key="default_billing">boolean</entry> + <entry key="extension_attributes">empty_extension_attribute</entry> + <array key="custom_attributes"> + <value>custom_attribute</value> + </array> + </operation> + <operation name="UpdateAddress" dataType="address" type="update"> + <entry key="id">integer</entry> + <entry key="customer_id">integer</entry> + <entry key="region">region</entry> + <entry key="region_id">integer</entry> + <entry key="country_id">string</entry> + <array key="street"> + <value>string</value> + </array> + <entry key="company">string</entry> + <entry key="telephone">string</entry> + <entry key="fax">string</entry> + <entry key="postcode">string</entry> + <entry key="city">string</entry> + <entry key="firstname">string</entry> + <entry key="lastname">string</entry> + <entry key="middlename">string</entry> + <entry key="prefix">string</entry> + <entry key="suffix">string</entry> + <entry key="vat_id">string</entry> + <entry key="default_shipping">boolean</entry> + <entry key="default_billing">boolean</entry> + <entry key="extension_attributes">empty_extension_attribute</entry> + <array key="custom_attributes"> + <value>custom_attribute</value> + </array> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml new file mode 100644 index 0000000000000..7ad804465c7ff --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateCustomAttribute" dataType="custom_attribute" type="create"> + <entry key="attribute_code">string</entry> + <entry key="value">string</entry> + </operation> + <operation name="UpdateCustomAttribute" dataType="custom_attribute" type="update"> + <entry key="attribute_code">string</entry> + <entry key="value">string</entry> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml new file mode 100644 index 0000000000000..f2b6dbe682ea9 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateCustomer" dataType="customer" type="create" auth="/rest/V1/integration/admin/token" url="/rest/V1/customers" method="POST"> + <header param="Content-Type">application/json</header> + <jsonObject dataType="customer" key="customer"> + <entry key="group_id">integer</entry> + <entry key="default_billing">string</entry> + <entry key="default_shipping">string</entry> + <entry key="confirmation">string</entry> + <entry key="created_at">string</entry> + <entry key="updated_at">string</entry> + <entry key="created_in">string</entry> + <entry key="dob">string</entry> + <entry key="email">string</entry> + <entry key="firstname">string</entry> + <entry key="lastname">string</entry> + <entry key="middlename">string</entry> + <entry key="prefix">string</entry> + <entry key="suffix">string</entry> + <entry key="gender">integer</entry> + <entry key="store_id">integer</entry> + <entry key="taxvat">string</entry> + <entry key="website_id">integer</entry> + <array key="addresses"> + <value>address</value> + </array> + <entry key="disable_auto_group_change">integer</entry> + <entry key="extension_attributes">customer_extension_attribute</entry> + <array key="custom_attributes"> + <value>custom_attribute</value> + </array> + </jsonObject> + <entry key="password">string</entry> + </operation> + <operation name="UpdateCustomer" dataType="customer" type="update" auth="/rest/V1/integration/admin/token" url="/rest/V1/customers" method="PUT"> + <header param="Content-Type">application/json</header> + <entry key="id">integer</entry> + <entry key="group_id">integer</entry> + <entry key="default_billing">string</entry> + <entry key="default_shipping">string</entry> + <entry key="confirmation">string</entry> + <entry key="created_at">string</entry> + <entry key="updated_at">string</entry> + <entry key="created_in">string</entry> + <entry key="dob">string</entry> + <entry key="email">string</entry> + <entry key="firstname">string</entry> + <entry key="lastname">string</entry> + <entry key="middlename">string</entry> + <entry key="prefix">string</entry> + <entry key="suffix">string</entry> + <entry key="gender">integer</entry> + <entry key="store_id">integer</entry> + <entry key="taxvat">string</entry> + <entry key="website_id">integer</entry> + <array key="addresses"> + <value>address</value> + </array> + <entry key="disable_auto_group_change">integer</entry> + <entry key="extension_attributes">customer_extension_attribute</entry> + <array key="custom_attributes"> + <value>custom_attribute</value> + </array> + <entry key="password">string</entry> + <entry key="redirectUrl">string</entry> + </operation> + <operation name="DeleteCustomer" dataType="customer" type="delete" auth="/rest/V1/integration/admin/token" url="/rest/V1/customers" method="DELETE"> + <header param="Content-Type">application/json</header> + <param key="id" type="path">{id}</param> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml new file mode 100644 index 0000000000000..fee39b01336cb --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateCustomerExtensionAttribute" dataType="customer_extension_attribute" type="create"> + <entry key="is_subscribed">boolean</entry> + <entry key="extension_attribute">customer_nested_extension_attribute</entry> + </operation> + <operation name="UpdateCustomerExtensionAttribute" dataType="customer_extension_attribute" type="update"> + <entry key="is_subscribed">boolean</entry> + <entry key="extension_attribute">customer_nested_extension_attribute</entry> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml new file mode 100644 index 0000000000000..cf16e49fce69f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateNestedExtensionAttribute" dataType="customer_nested_extension_attribute" type="create"> + <entry key="id">integer</entry> + <entry key="customer_id">integer</entry> + <entry key="value">string</entry> + </operation> + <operation name="UpdateNestedExtensionAttribute" dataType="customer_nested_extension_attribute" type="update"> + <entry key="id">integer</entry> + <entry key="customer_id">integer</entry> + <entry key="value">string</entry> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml new file mode 100644 index 0000000000000..1a5377403e14a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateEmptyExtensionAttribute" dataType="empty_extension_attribute" type="create"> + </operation> + <operation name="UpdateEmptyExtensionAttribute" dataType="empty_extension_attribute" type="update"> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml new file mode 100644 index 0000000000000..ed7d56e3d2a5e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateRegion" dataType="region" type="create"> + <entry key="region_code">string</entry> + <entry key="region">string</entry> + <entry key="region_id">string</entry> + <entry key="extension_attributes">extension_attributes</entry> + </operation> + <operation name="UpdateRegion" dataType="region" type="update"> + <entry key="region_code">string</entry> + <entry key="region">string</entry> + <entry key="region_id">string</entry> + <entry key="extension_attributes">empty_extension_attribute</entry> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml new file mode 100644 index 0000000000000..c08116588f65f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="AdminCustomerPage" urlPath="/admin/customer/index/" module="Customer"> + <section name="AdminCustomerMainActionsSection"/> + <section name="AdminCustomerMessagesSection"/> + <section name="AdminCustomerGridSection"/> + <section name="AdminCustomerFiltersSection"/> + </page> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml new file mode 100644 index 0000000000000..c488e2c7cc79e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="AdminNewCustomerPage" urlPath="/admin/customer/index/new" module="Customer"> + <section name="AdminNewCustomerAccountInformationSection"/> + <section name="AdminNewCustomerMainActionsSection"/> + </page> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml new file mode 100644 index 0000000000000..a3e38d81549cf --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="StorefrontCustomerCreatePage" urlPath="/customer/account/create/" module="Magento_Customer"> + <section name="StorefrontCustomerCreateFormSection" /> + </page> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml new file mode 100644 index 0000000000000..3699b1280d43f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="StorefrontCustomerDashboardPage" urlPath="/customer/account/" module="Magento_Customer"> + <section name="StorefrontCustomerDashboardAccountInformationSection" /> + </page> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml new file mode 100644 index 0000000000000..c170b25738799 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="StorefrontCustomerSignInPage" urlPath="/customer/account/login/" module="Magento_Customer"> + <section name="StorefrontCustomerSignInFormSection" /> + </page> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml new file mode 100644 index 0000000000000..ce103f5add612 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="StorefrontProductPage" urlPath="/" module="Magento_Customer"> + <section name="StorefrontPanelHeader" /> + </page> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/README.md new file mode 100644 index 0000000000000..a7c25afc9a39e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Customer** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml new file mode 100644 index 0000000000000..12284623e60d6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminCustomerFiltersSection"> + <element name="filtersButton" type="button" locator="#container > div > div.admin__data-grid-header > div:nth-child(1) > div.data-grid-filters-actions-wrap > div > button" timeout="30"/> + <element name="nameInput" type="input" locator="input[name=name]"/> + <element name="apply" type="button" locator="button[data-action=grid-filter-apply]" timeout="30"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml new file mode 100644 index 0000000000000..ecc9e966802cf --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminCustomerGridSection"> + <element name="customerGrid" type="text" locator="table[data-role='grid']"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml new file mode 100644 index 0000000000000..95fcc7ab799d9 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminCustomerMainActionsSection"> + <element name="addNewCustomer" type="button" locator="#add" timeout="30"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml new file mode 100644 index 0000000000000..d27381aa0bc38 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminCustomerMessagesSection"> + <element name="successMessage" type="text" locator=".message-success"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml new file mode 100644 index 0000000000000..3b4b07309147e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminNewCustomerAccountInformationSection"> + <element name="firstName" type="input" locator="input[name='customer[firstname]']"/> + <element name="lastName" type="input" locator="input[name='customer[lastname]']"/> + <element name="email" type="input" locator="input[name='customer[email]']"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml new file mode 100644 index 0000000000000..a7e168ba9f21e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminNewCustomerMainActionsSection"> + <element name="saveButton" type="button" locator="#save" timeout="30"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerCreateFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerCreateFormSection.xml new file mode 100644 index 0000000000000..ef88114d02e53 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerCreateFormSection.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="StorefrontCustomerCreateFormSection"> + <element name="firstnameField" type="input" locator="#firstname"/> + <element name="lastnameField" type="input" locator="#lastname"/> + <element name="emailField" type="input" locator="#email_address"/> + <element name="passwordField" type="input" locator="#password"/> + <element name="confirmPasswordField" type="input" locator="#password-confirmation"/> + <element name="createAccountButton" type="button" locator="button.action.submit.primary" timeout="30"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml new file mode 100644 index 0000000000000..8b1dbbed1d49a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="StorefrontCustomerDashboardAccountInformationSection"> + <element name="ContactInformation" type="textarea" locator=".box.box-information .box-content"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerSignInFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerSignInFormSection.xml new file mode 100644 index 0000000000000..359a58ad7f052 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerSignInFormSection.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="StorefrontCustomerSignInFormSection"> + <element name="emailField" type="input" locator="#email"/> + <element name="passwordField" type="input" locator="#pass"/> + <element name="signInAccountButton" type="button" locator="#send2" timeout="30"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml new file mode 100644 index 0000000000000..63b39955281fd --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="StorefrontPanelHeaderSection"> + <element name="createAnAccountLink" type="select" locator=".panel.header li:nth-child(3)"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json new file mode 100644 index 0000000000000..3a13bf562bb57 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json @@ -0,0 +1,68 @@ +{ + "name": "magento/magento2-functional-test-module-customer", + "description": "Magento 2 Acceptance Test Module Customer", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-newsletter": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-wishlist": "dev-master", + "magento/magento2-functional-test-module-theme": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-review": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-authorization": "dev-master", + "magento/magento2-functional-test-module-integration": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-page-cache": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Customer" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/README.md new file mode 100644 index 0000000000000..ad6ab29c57026 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CustomerAnalytics** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/composer.json new file mode 100644 index 0000000000000..2f6c9d54e2b24 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-customer-analytics", + "description": "Magento 2 Acceptance Test Module Customer Analytics", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-customer": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CustomerAnalytics" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/README.md new file mode 100644 index 0000000000000..05e03b11a1b8c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_CustomerImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json new file mode 100644 index 0000000000000..df1b19f9e528c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json @@ -0,0 +1,55 @@ +{ + "name": "magento/magento2-functional-test-module-customer-import-export", + "description": "Magento 2 Acceptance Test Module Customer Import Export", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-import-export": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/CustomerImportExport" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/README.md new file mode 100644 index 0000000000000..f22b6ee1bf829 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Developer** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json new file mode 100644 index 0000000000000..dee920ee0319e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json @@ -0,0 +1,51 @@ +{ + "name": "magento/magento2-functional-test-module-developer", + "description": "Magento 2 Acceptance Test Module Developer", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Developer" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/README.md new file mode 100644 index 0000000000000..aca768d25105a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Dhl** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json new file mode 100644 index 0000000000000..0a9e884bde641 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json @@ -0,0 +1,58 @@ +{ + "name": "magento/magento2-functional-test-module-dhl", + "description": "Magento 2 Acceptance Test Module Dhl", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-shipping": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Dhl" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/README.md new file mode 100644 index 0000000000000..450176d56505f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Directory** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json new file mode 100644 index 0000000000000..3289183835004 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json @@ -0,0 +1,52 @@ +{ + "name": "magento/magento2-functional-test-module-directory", + "description": "Magento 2 Acceptance Test Module Directory", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Directory" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/README.md new file mode 100644 index 0000000000000..b32c7fd5a8d29 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Downloadable** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json new file mode 100644 index 0000000000000..7f3a10bdbca74 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json @@ -0,0 +1,65 @@ +{ + "name": "magento/magento2-functional-test-module-downloadable", + "description": "Magento 2 Acceptance Test Module Downloadable", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-theme": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-gift-message": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Downloadable" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/README.md new file mode 100644 index 0000000000000..7d1d4ce593856 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_DownloadableImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json new file mode 100644 index 0000000000000..a6290026e9cd2 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json @@ -0,0 +1,55 @@ +{ + "name": "magento/magento2-functional-test-module-downloadable-import-export", + "description": "Magento 2 Acceptance Test Module Downloadable Import Export", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-import-export": "dev-master", + "magento/magento2-functional-test-module-catalog-import-export": "dev-master", + "magento/magento2-functional-test-module-downloadable": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/DownloadableImportExport" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/README.md new file mode 100644 index 0000000000000..3ab73a4d5c7db --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_EAV** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json new file mode 100644 index 0000000000000..8052d51dfb332 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json @@ -0,0 +1,54 @@ +{ + "name": "magento/magento2-functional-test-module-eav", + "description": "Magento 2 Acceptance Test Module Eav", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Eav" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/README.md new file mode 100644 index 0000000000000..af55ead5c200d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Email** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json new file mode 100644 index 0000000000000..98f01cf7ec5a9 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json @@ -0,0 +1,55 @@ +{ + "name": "magento/magento2-functional-test-module-email", + "description": "Magento 2 Acceptance Test Module Email", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-theme": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-cms": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-variable": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Email" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/README.md new file mode 100644 index 0000000000000..c37fc732b0b87 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_EncryptionKey** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json new file mode 100644 index 0000000000000..933fe88440199 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json @@ -0,0 +1,51 @@ +{ + "name": "magento/magento2-functional-test-module-encryption-key", + "description": "Magento 2 Acceptance Test Module Encryption Key", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/EncryptionKey" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/README.md new file mode 100644 index 0000000000000..cd33bda917f5c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Fedex** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json new file mode 100644 index 0000000000000..f5102092a43c4 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json @@ -0,0 +1,57 @@ +{ + "name": "magento/magento2-functional-test-module-fedex", + "description": "Magento 2 Acceptance Test Module Fedex", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-shipping": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Fedex" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/README.md new file mode 100644 index 0000000000000..bc57464b7ed2f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_GiftMessage** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json new file mode 100644 index 0000000000000..cf76a42eddc81 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json @@ -0,0 +1,57 @@ +{ + "name": "magento/magento2-functional-test-module-gift-message", + "description": "Magento 2 Acceptance Test Module Gift Message", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/GiftMessage" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/README.md new file mode 100644 index 0000000000000..14b40663eff16 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_GoogleAdwords** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json new file mode 100644 index 0000000000000..ca0a31fa03117 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json @@ -0,0 +1,51 @@ +{ + "name": "magento/magento2-functional-test-module-google-adwords", + "description": "Magento 2 Acceptance Test Module Google Adwords", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/GoogleAdwords" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/README.md new file mode 100644 index 0000000000000..28c1ed435eab4 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_GoogleAnalytics** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json new file mode 100644 index 0000000000000..5bbef3c149b6c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json @@ -0,0 +1,52 @@ +{ + "name": "magento/magento2-functional-test-module-google-analytics", + "description": "Magento 2 Acceptance Test Module Google Analytics", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-cookie": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/GoogleAnalytics" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/README.md new file mode 100644 index 0000000000000..cf934ee7882e4 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_GoogleOptimizer** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json new file mode 100644 index 0000000000000..1454630bd0a75 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json @@ -0,0 +1,55 @@ +{ + "name": "magento/magento2-functional-test-module-google-optimizer", + "description": "Magento 2 Acceptance Test Module Google Optimizer", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-google-analytics": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-cms": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/GoogleOptimizer" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/README.md new file mode 100644 index 0000000000000..36fb828bbdff7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_GroupedImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json new file mode 100644 index 0000000000000..faafa32659f03 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json @@ -0,0 +1,54 @@ +{ + "name": "magento/magento2-functional-test-module-grouped-import-export", + "description": "Magento 2 Acceptance Test Module Grouped Import Export", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-import-export": "dev-master", + "magento/magento2-functional-test-module-catalog-import-export": "dev-master", + "magento/magento2-functional-test-module-grouped-product": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/GroupedImportExport" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/README.md new file mode 100644 index 0000000000000..ed07eaabba75a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_GroupedProduct** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json new file mode 100644 index 0000000000000..7b76ef1ad9766 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json @@ -0,0 +1,61 @@ +{ + "name": "magento/magento2-functional-test-module-grouped-product", + "description": "Magento 2 Acceptance Test Module Grouped Product", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master", + "magento/magento2-functional-test-module-msrp": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/GroupedProduct" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/README.md new file mode 100644 index 0000000000000..5723866dc44c2 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_ImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json new file mode 100644 index 0000000000000..1e254c70045a1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json @@ -0,0 +1,54 @@ +{ + "name": "magento/magento2-functional-test-module-import-export", + "description": "Magento 2 Acceptance Test Module Import Export", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/ImportExport" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/README.md new file mode 100644 index 0000000000000..f59821dc099cd --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Indexer** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json new file mode 100644 index 0000000000000..a56ee31fae160 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-indexer", + "description": "Magento 2 Acceptance Test Module Indexer", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-backend": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Indexer" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/README.md new file mode 100644 index 0000000000000..08c9cd5f24f40 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Integration** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json new file mode 100644 index 0000000000000..2c776a48ae4d6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json @@ -0,0 +1,55 @@ +{ + "name": "magento/magento2-functional-test-module-integration", + "description": "Magento 2 Acceptance Test Module Integration", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-user": "dev-master", + "magento/magento2-functional-test-module-security": "dev-master", + "magento/magento2-functional-test-module-authorization": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Integration" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/README.md new file mode 100644 index 0000000000000..89ac42d6134b1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_LayeredNavigation** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json new file mode 100644 index 0000000000000..5b74e905bee99 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json @@ -0,0 +1,51 @@ +{ + "name": "magento/magento2-functional-test-module-layered-navigation", + "description": "Magento 2 Acceptance Test Module Layered Navigation", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/LayeredNavigation" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/README.md new file mode 100644 index 0000000000000..cfd23dfcbace3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Marketplace** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json new file mode 100644 index 0000000000000..d3f589a31a05a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-marketplace", + "description": "Magento 2 Acceptance Test Module Marketplace", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-backend": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Marketplace" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/README.md new file mode 100644 index 0000000000000..bd023f6f926d4 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_MediaStorage** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json new file mode 100644 index 0000000000000..cc893b603f40a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json @@ -0,0 +1,52 @@ +{ + "name": "magento/magento2-functional-test-module-media-storage", + "description": "Magento 2 Acceptance Test Module Media Storage", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/MediaStorage" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/README.md new file mode 100644 index 0000000000000..1a97c33f497a5 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Msrp** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json new file mode 100644 index 0000000000000..8b3fcba7e67ee --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json @@ -0,0 +1,55 @@ +{ + "name": "magento/magento2-functional-test-module-msrp", + "description": "Magento 2 Acceptance Test Module Msrp", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-downloadable": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-grouped-product": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Msrp" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/README.md new file mode 100644 index 0000000000000..5eac4359473be --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Multishipping** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json new file mode 100644 index 0000000000000..809353b1eaa31 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json @@ -0,0 +1,57 @@ +{ + "name": "magento/magento2-functional-test-module-multishipping", + "description": "Magento 2 Acceptance Test Module Multishipping", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-payment": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Multishipping" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/README.md new file mode 100644 index 0000000000000..68dd1d5267af3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_NewRelicReporting** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json new file mode 100644 index 0000000000000..e2ce994efa1e6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json @@ -0,0 +1,55 @@ +{ + "name": "magento/magento2-functional-test-module-new-relic-reporting", + "description": "Magento 2 Acceptance Test Module New Relic Reporting", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-configurable-product": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/NewRelicReporting" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/README.md new file mode 100644 index 0000000000000..b38526eec8653 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Newsletter** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json new file mode 100644 index 0000000000000..34046ce9e836c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json @@ -0,0 +1,56 @@ +{ + "name": "magento/magento2-functional-test-module-newsletter", + "description": "Magento 2 Acceptance Test Module Newsletter", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-widget": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-cms": "dev-master", + "magento/magento2-functional-test-module-email": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Newsletter" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/README.md new file mode 100644 index 0000000000000..46fc09f181aef --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_OfflinePayments** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json new file mode 100644 index 0000000000000..aeed68809aceb --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json @@ -0,0 +1,51 @@ +{ + "name": "magento/magento2-functional-test-module-offline-payments", + "description": "Magento 2 Acceptance Test Module Offline Payments", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-payment": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/OfflinePayments" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/README.md new file mode 100644 index 0000000000000..f430b9b2a1f41 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_OfflineShipping** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json new file mode 100644 index 0000000000000..babeb8ad2ec6d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json @@ -0,0 +1,57 @@ +{ + "name": "magento/magento2-functional-test-module-offline-shipping", + "description": "Magento 2 Acceptance Test Module Offline Shipping", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-shipping": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-sales-rule": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/OfflineShipping" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/README.md new file mode 100644 index 0000000000000..b35a9877c8ba7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_PageCache** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json new file mode 100644 index 0000000000000..59205152e0d9e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json @@ -0,0 +1,52 @@ +{ + "name": "magento/magento2-functional-test-module-page-cache", + "description": "Magento 2 Acceptance Test Module Page Cache", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/PageCache" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/README.md new file mode 100644 index 0000000000000..a87d9a4f12b64 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Payment** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json new file mode 100644 index 0000000000000..ed77d47082399 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json @@ -0,0 +1,55 @@ +{ + "name": "magento/magento2-functional-test-module-payment", + "description": "Magento 2 Acceptance Test Module Payment", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Payment" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/README.md new file mode 100644 index 0000000000000..e6c828ce07206 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_PayPal** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json new file mode 100644 index 0000000000000..d82c9ccb34af7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json @@ -0,0 +1,64 @@ +{ + "name": "magento/magento2-functional-test-module-paypal", + "description": "Magento 2 Acceptance Test Module Paypal", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-payment": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-theme": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master", + "magento/magento2-functional-test-module-vault": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Paypal" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/README.md new file mode 100644 index 0000000000000..f0678daf757a0 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Persistent** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json new file mode 100644 index 0000000000000..0ee20653fbb80 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json @@ -0,0 +1,54 @@ +{ + "name": "magento/magento2-functional-test-module-persistent", + "description": "Magento 2 Acceptance Test Module Persistent", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-page-cache": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Persistent" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/README.md new file mode 100644 index 0000000000000..00b577465e5dc --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_ProductAlert** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json new file mode 100644 index 0000000000000..15988266a2029 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json @@ -0,0 +1,53 @@ +{ + "name": "magento/magento2-functional-test-module-product-alert", + "description": "Magento 2 Acceptance Test Module Product Alert", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/ProductAlert" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/LICENSE.txt new file mode 100644 index 0000000000000..36b2459f6aa63 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/LICENSE_AFL.txt new file mode 100644 index 0000000000000..496bf10ad440f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2016 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/README.md new file mode 100644 index 0000000000000..73ee15ca28f4e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_ProductVideo** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json new file mode 100644 index 0000000000000..bc08abd34a11e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json @@ -0,0 +1,54 @@ +{ + "name": "magento/magento2-functional-test-module-product-video", + "description": "Magento 2 Acceptance Test Module Product Video", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/ProductVideo" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/README.md new file mode 100644 index 0000000000000..510a9d5f16d62 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Quote** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json new file mode 100644 index 0000000000000..2dba18c3fa428 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json @@ -0,0 +1,63 @@ +{ + "name": "magento/magento2-functional-test-module-quote", + "description": "Magento 2 Acceptance Test Module Quote", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-authorization": "dev-master", + "magento/magento2-functional-test-module-payment": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-shipping": "dev-master", + "magento/magento2-functional-test-module-sales-sequence": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Quote" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/README.md new file mode 100644 index 0000000000000..7460ca6a7dffb --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_QuoteAnalytics** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/composer.json new file mode 100644 index 0000000000000..b86c40e02fe43 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-quote-analytics", + "description": "Magento 2 Acceptance Test Module Quote Analytics", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-quote": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/QuoteAnalytics" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/README.md new file mode 100644 index 0000000000000..ad49607139a7a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Reports** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json new file mode 100644 index 0000000000000..f73c4da907fbd --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json @@ -0,0 +1,65 @@ +{ + "name": "magento/magento2-functional-test-module-reports", + "description": "Magento 2 Acceptance Test Module Reports", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-cms": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-widget": "dev-master", + "magento/magento2-functional-test-module-wishlist": "dev-master", + "magento/magento2-functional-test-module-review": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-downloadable": "dev-master", + "magento/magento2-functional-test-module-sales-rule": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Reports" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/README.md new file mode 100644 index 0000000000000..b34f3c949e004 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Review** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json new file mode 100644 index 0000000000000..70f0e295838bd --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json @@ -0,0 +1,57 @@ +{ + "name": "magento/magento2-functional-test-module-review", + "description": "Magento 2 Acceptance Test Module Review", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-theme": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-newsletter": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Review" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/README.md new file mode 100644 index 0000000000000..3f50f5341cfd4 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_ReviewAnalytics** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/composer.json new file mode 100644 index 0000000000000..01772112b17e8 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-review-analytics", + "description": "Magento 2 Acceptance Test Module Review Analytics", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-review": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/ReviewAnalytics" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/README.md new file mode 100644 index 0000000000000..864304d41eec8 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Robots** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json new file mode 100644 index 0000000000000..082211c40a68f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-robots", + "description": "Magento 2 Acceptance Test Module Robots", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Robots" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/README.md new file mode 100644 index 0000000000000..04fc8e1c0d022 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Rss** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json new file mode 100644 index 0000000000000..d950390b0e1cd --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json @@ -0,0 +1,52 @@ +{ + "name": "magento/magento2-functional-test-module-rss", + "description": "Magento 2 Acceptance Test Module Rss", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Rss" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/README.md new file mode 100644 index 0000000000000..02eb487f33c52 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Rule** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json new file mode 100644 index 0000000000000..11cefb3a7dff5 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json @@ -0,0 +1,53 @@ +{ + "name": "magento/magento2-functional-test-module-rule", + "description": "Magento 2 Acceptance Test Module Rule", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Rule" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml new file mode 100644 index 0000000000000..832ede6b3dfbb --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="AdminCreateInvoiceCest"> + <annotations> + <features value="Invoice Creation"/> + <stories value="Create an Invoice via the Admin"/> + <group value="sales"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + </annotations> + <before> + <createData entity="_defaultCategory" mergeKey="createCategory"/> + <entity name="categoryLink" type="custom_attribute" mergeKey="categoryLink"> + <data key="attribute_code">category_ids</data> + <data key="value">$$createCategory.id$$</data> + </entity> + <createData entity="_defaultProduct" mergeKey="createProduct"> + <required-entity name="categoryLink"/> + </createData> + </before> + + <test name="CreateInvoiceTest"> + <annotations> + <title value="Create Invoice"/> + <description value="Should be able to create an invoice via the admin."/> + <severity value="NORMAL"/> + <testCaseId value="MAGETWO-72096"/> + </annotations> + + <!-- todo: Create an order via the api instead of driving the browser --> + <amOnPage url="{{StorefrontCategoryPage.url($$createCategory.name$$)}}" mergeKey="onCategoryPage"/> + <waitForPageLoad mergeKey="waitForPageLoad1"/> + <moveMouseOver selector="{{StorefrontCategoryMainSection.ProductItemInfo}}" mergeKey="hoverProduct"/> + <click selector="{{StorefrontCategoryMainSection.AddToCartBtn}}" mergeKey="addToCart"/> + <waitForElementVisible selector="{{StorefrontCategoryMainSection.SuccessMsg}}" time="30" mergeKey="waitForProductAdded"/> + <click selector="{{StorefrontMiniCartSection.show}}" mergeKey="clickCart"/> + <click selector="{{StorefrontMiniCartSection.goToCheckout}}" mergeKey="goToCheckout"/> + <waitForPageLoad mergeKey="waitForPageLoad2"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.email}}" userInput="{{CustomerEntityOne.email}}" mergeKey="enterEmail"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.firstName}}" userInput="{{CustomerEntityOne.firstname}}" mergeKey="enterFirstName"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.lastName}}" userInput="{{CustomerEntityOne.lastname}}" mergeKey="enterLastName"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.street}}" userInput="{{CustomerAddressSimple.street[0]}}" mergeKey="enterStreet"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.city}}" userInput="{{CustomerAddressSimple.city}}" mergeKey="enterCity"/> + <selectOption selector="{{CheckoutShippingGuestInfoSection.region}}" userInput="{{CustomerAddressSimple.state}}" mergeKey="selectRegion"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.postcode}}" userInput="{{CustomerAddressSimple.postcode}}" mergeKey="enterPostcode"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.telephone}}" userInput="{{CustomerAddressSimple.telephone}}" mergeKey="enterTelephone"/> + <waitForLoadingMaskToDisappear mergeKey="waitForLoadingMask"/> + <click selector="{{CheckoutShippingMethodsSection.firstShippingMethod}}" mergeKey="selectFirstShippingMethod"/> + <waitForElement selector="{{CheckoutShippingMethodsSection.next}}" time="30" mergeKey="waitForNextButton"/> + <click selector="{{CheckoutShippingMethodsSection.next}}" mergeKey="clickNext"/> + <waitForElement selector="{{CheckoutPaymentSection.placeOrder}}" time="30" mergeKey="waitForPlaceOrderButton"/> + <click selector="{{CheckoutPaymentSection.placeOrder}}" mergeKey="clickPlaceOrder"/> + <grabTextFrom selector="{{CheckoutSuccessMainSection.orderNumber}}" returnVariable="orderNumber" mergeKey="grabOrderNumber"/> + <!-- end todo --> + + <amOnPage url="{{AdminLoginPage}}" mergeKey="goToAdmin"/> + <waitForPageLoad mergeKey="waitForPageLoad1"/> + <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> + <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> + + <amOnPage url="{{OrdersPage}}" mergeKey="onOrdersPage"/> + <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="10" mergeKey="waitSpinner1"/> + <fillField selector="{{OrdersGridSection.search}}" variable="orderNumber" mergeKey="searchOrderNum"/> + <click selector="{{OrdersGridSection.submitSearch}}" mergeKey="submitSearch"/> + <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="10" mergeKey="waitSpinner2"/> + + <click selector="{{OrdersGridSection.firstRow}}" mergeKey="clickOrderRow"/> + <click selector="{{OrderDetailsMainActionsSection.invoice}}" mergeKey="clickInvoice"/> + <click selector="{{InvoiceNewSection.submitInvoice}}" mergeKey="clickSubmitInvoice"/> + <see selector="{{OrderDetailsMessagesSection.successMessage}}" userInput="The invoice has been created." mergeKey="seeSuccessMessage"/> + <click selector="{{OrderDetailsOrderViewSection.invoices}}" mergeKey="clickInvoices"/> + <waitForElementNotVisible selector="{{OrderDetailsInvoicesSection.spinner}}" time="10" mergeKey="waitSpinner3"/> + <see selector="{{OrderDetailsInvoicesSection.content}}" variable="orderNumber" mergeKey="seeInvoice1"/> + <see selector="{{OrderDetailsInvoicesSection.content}}" userInput="John Doe" mergeKey="seeInvoice2"/> + <click selector="{{OrderDetailsOrderViewSection.information}}" mergeKey="clickInformation"/> + <see selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Processing" mergeKey="seeOrderStatus"/> + <amOnPage url="{{InvoicesPage}}" mergeKey="goToInvoices"/> + <waitForElementNotVisible selector="{{InvoicesGridSection.spinner}}" time="10" mergeKey="waitSpinner4"/> + <click selector="{{InvoicesGridSection.filter}}" mergeKey="clickFilters"/> + <fillField selector="{{InvoicesFiltersSection.orderNum}}" variable="orderNumber" mergeKey="searchOrderNum2"/> + <click selector="{{InvoicesGridSection.firstRow}}" mergeKey="clickInvoice2"/> + <see selector="{{InvoiceDetailsInformationSection.orderStatus}}" userInput="Processing" mergeKey="seeOrderStatus2"/> + </test> + </cest> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Data/SalesData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Data/SalesData.xml new file mode 100644 index 0000000000000..637e7ef01babd --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Data/SalesData.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="salesRecordOne" type="sales"> + <data key="salesId">data</data> + </entity> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceDetailsPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceDetailsPage.xml new file mode 100644 index 0000000000000..4fde61b64d241 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceDetailsPage.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="InvoiceDetailsPage" urlPath="/admin/sales/invoice/view/invoice_id/" module="Sales"> + <section name="InvoiceDetailsInformationSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml new file mode 100644 index 0000000000000..760a50d31ade9 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="InvoiceNewPage" urlPath="/admin/sales/order_invoice/new/order_id/" module="Sales"> + <section name="InvoiceNewSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoicesPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoicesPage.xml new file mode 100644 index 0000000000000..93e997fee7b99 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoicesPage.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="InvoicesPage" urlPath="/admin/sales/invoice/" module="Sales"> + <section name="InvoicesGridSection"/> + <section name="InvoicesFiltersSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml new file mode 100644 index 0000000000000..20470e31c8fb9 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="OrderDetailsPage" urlPath="/admin/sales/order/view/order_id/" module="Sales"> + <section name="OrderDetailsMainActionsSection"/> + <section name="OrderDetailsInformationSection"/> + <section name="OrderDetailsMessagesSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrdersPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrdersPage.xml new file mode 100644 index 0000000000000..f215af9c21d0d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrdersPage.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="OrdersPage" urlPath="/admin/sales/order/" module="Sales"> + <section name="OrdersGridSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/README.md new file mode 100644 index 0000000000000..8f897de5484a6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Sales** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceDetailsInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceDetailsInformationSection.xml new file mode 100644 index 0000000000000..b1794d6d00f48 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceDetailsInformationSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="InvoiceDetailsInformationSection"> + <element name="orderStatus" type="text" locator="#order_status"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceNewSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceNewSection.xml new file mode 100644 index 0000000000000..6cbb05d4989d9 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceNewSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="InvoiceNewSection"> + <element name="submitInvoice" type="button" locator=".action-default.scalable.save.submit-button.primary"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesFiltersSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesFiltersSection.xml new file mode 100644 index 0000000000000..1d3328fb1ed23 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesFiltersSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="InvoicesFiltersSection"> + <element name="orderNum" type="input" locator="input[name='order_increment_id']"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesGridSection.xml new file mode 100644 index 0000000000000..275a4d3506d6d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesGridSection.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="InvoicesGridSection"> + <element name="spinner" type="button" locator=".spinner"/> + <element name="filter" type="button" locator="#container > div > div.admin__data-grid-header > div:nth-child(1) > div.data-grid-filters-actions-wrap > div > button"/> + <element name="firstRow" type="button" locator="tr.data-row:nth-of-type(1)"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInformationSection.xml new file mode 100644 index 0000000000000..b080c4b2e2c4e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInformationSection.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="OrderDetailsInformationSection"> + <element name="orderStatus" type="text" locator="#order_status"/> + <element name="accountInformation" type="text" locator=".order-account-information-table"/> + <element name="billingAddress" type="text" locator=".order-billing-address"/> + <element name="shippingAddress" type="text" locator=".order-shipping-address"/> + <element name="itemsOrdered" type="text" locator=".edit-order-table"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInvoicesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInvoicesSection.xml new file mode 100644 index 0000000000000..a05231646eac3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInvoicesSection.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="OrderDetailsInvoicesSection"> + <element name="spinner" type="button" locator=".spinner"/> + <element name="content" type="text" locator="#sales_order_view_tabs_order_invoices_content"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMainActionsSection.xml new file mode 100644 index 0000000000000..b9fb1751f0321 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMainActionsSection.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="OrderDetailsMainActionsSection"> + <element name="back" type="button" locator="#back"/> + <element name="cancel" type="button" locator="#order-view-cancel-button"/> + <element name="sendEmail" type="button" locator="#send_notification"/> + <element name="hold" type="button" locator="#order-view-hold-button"/> + <element name="invoice" type="button" locator="#order_invoice"/> + <element name="ship" type="button" locator="#order_ship"/> + <element name="reorder" type="button" locator="#order_reorder"/> + <element name="edit" type="button" locator="#order_edit"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMessagesSection.xml new file mode 100644 index 0000000000000..2c1b25dd2c0a3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMessagesSection.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="OrderDetailsMessagesSection"> + <element name="successMessage" type="text" locator="div.message-success"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsOrderViewSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsOrderViewSection.xml new file mode 100644 index 0000000000000..f17286060d8a3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsOrderViewSection.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="OrderDetailsOrderViewSection"> + <element name="information" type="button" locator="#sales_order_view_tabs_order_info"/> + <element name="invoices" type="button" locator="#sales_order_view_tabs_order_invoices"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrdersGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrdersGridSection.xml new file mode 100644 index 0000000000000..c5e5efe0d15aa --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrdersGridSection.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="OrdersGridSection"> + <element name="spinner" type="button" locator=".spinner"/> + <element name="gridLoadingMask" type="button" locator=".admin__data-grid-loading-mask"/> + <element name="search" type="input" locator="#fulltext"/> + <element name="submitSearch" type="button" locator=".//*[@id='container']/div/div[2]/div[1]/div[2]/button"/> + <element name="submitSearch22" type="button" locator=".//*[@class="admin__data-grid-filters-wrap"]/parent::*/div[@class="data-grid-search-control-wrap"]/button"/> + <element name="firstRow" type="button" locator="tr.data-row:nth-of-type(1)"/> + <element name="createNewOrder" type="button" locator="button[title='Create New Order'"/> + </section> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json new file mode 100644 index 0000000000000..5805b9a34c9ce --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json @@ -0,0 +1,72 @@ +{ + "name": "magento/magento2-functional-test-module-sales", + "description": "Magento 2 Acceptance Test Module Sales", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-authorization": "dev-master", + "magento/magento2-functional-test-module-payment": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-theme": "dev-master", + "magento/magento2-functional-test-module-sales-rule": "dev-master", + "magento/magento2-functional-test-module-sales-sequence": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-widget": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-gift-message": "dev-master", + "magento/magento2-functional-test-module-reports": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-wishlist": "dev-master", + "magento/magento2-functional-test-module-shipping": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Sales" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/README.md new file mode 100644 index 0000000000000..856eb7057f031 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_SalesAnalytics** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/composer.json new file mode 100644 index 0000000000000..afba02c119a55 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-sales-analytics", + "description": "Magento 2 Acceptance Test Module Sales Analytics", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-sales": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/SalesAnalytics" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/README.md new file mode 100644 index 0000000000000..a0d48d3c62889 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_SalesInventory** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json new file mode 100644 index 0000000000000..aec10499a8681 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json @@ -0,0 +1,53 @@ +{ + "name": "magento/magento2-functional-test-module-sales-inventory", + "description": "Magento 2 Acceptance Test Module Sales Inventory", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/SalesInventory" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/README.md new file mode 100644 index 0000000000000..09f32aad6881f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_SalesRule** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json new file mode 100644 index 0000000000000..dca57e5c34452 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json @@ -0,0 +1,67 @@ +{ + "name": "magento/magento2-functional-test-module-sales-rule", + "description": "Magento 2 Acceptance Test Module Sales Rule", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-theme": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-shipping": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-rule": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-payment": "dev-master", + "magento/magento2-functional-test-module-reports": "dev-master", + "magento/magento2-functional-test-module-catalog-rule": "dev-master", + "magento/magento2-functional-test-module-widget": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/SalesRule" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/README.md new file mode 100644 index 0000000000000..8dc5c1445cc95 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_SalesSequence** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json new file mode 100644 index 0000000000000..c395bbb71c5f2 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json @@ -0,0 +1,47 @@ +{ + "name": "magento/magento2-functional-test-module-sales-sequence", + "description": "Magento 2 Acceptance Test Module Sales Sequence", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/SalesSequence" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/README.md new file mode 100644 index 0000000000000..edcd1629bd50f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_SampleData** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json new file mode 100644 index 0000000000000..ef30780208b19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json @@ -0,0 +1,47 @@ +{ + "name": "magento/magento2-functional-test-module-sample-data", + "description": "Magento 2 Acceptance Test Module Sample Data", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/SampleData" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml new file mode 100644 index 0000000000000..4a5603e643ce6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Test XML Example --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="MinimumFieldsCest"> + <annotations> + <features value="Minimum Test"/> + <stories value="Minimum Test"/> + <group value="example"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + </annotations> + <after> + <seeInCurrentUrl url="/admin/admin/" mergeKey="seeInCurrentUrl"/> + </after> + <test name="MinimumFieldsTest"> + <annotations> + <title value="Minimum Test"/> + <description value="Minimum Test"/> + </annotations> + <amOnPage url="{{AdminLoginPage}}" mergeKey="navigateToAdmin"/> + <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> + <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> + </test> + </cest> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml new file mode 100644 index 0000000000000..59c47371b86b6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="PersistMultipleEntitiesCest"> + <annotations> + <group value="ff"/> + <group value="skip"/> + </annotations> + <before> + <createData entity="simplesubcategory" mergeKey="simplecategory"/> + <entity name="categoryLink" type="custom_attribute" mergeKey="categoryLink"> + <data key="attribute_code">category_ids</data> + <data key="value">$$simplecategory.id$$</data> + </entity> + + <createData entity="simpleproduct" mergeKey="simpleproduct1"> + <required-entity name="categoryLink"/> + </createData> + <createData entity="simpleproduct" mergeKey="simpleproduct2"> + <required-entity name="categoryLink"/> + </createData> + </before> + <after> + <deleteData createDataKey="simpleproduct1" mergeKey="deleteProduct1"/> + <deleteData createDataKey="simpleproduct2" mergeKey="deleteProduct2"/> + <deleteData createDataKey="simplecategory" mergeKey="deleteCategory"/> + </after> + <test name="PersistMultipleEntitiesTest"> + <amOnPage mergeKey="s11" url="/$$simplecategory.name$$.html" /> + <waitForPageLoad mergeKey="s33"/> + <see mergeKey="s35" selector="{{StorefrontCategoryMainSection.productCount}}" userInput="2"/> + </test> + </cest> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml new file mode 100644 index 0000000000000..92dd201812dce --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml @@ -0,0 +1,245 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Test XML Example --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="SampleGeneratorCest"> + <annotations> + <features value="Test Generator"/> + <stories value="Verify each Codeception command is generated correctly."/> + <stories value="Verify each Custom command is generated correctly."/> + <group value="skip"/> + </annotations> + <before> + <amOnUrl url="http://127.0.0.1:32772/admin/" mergeKey="amOnPage"/> + <createData entity="CustomerEntity1" mergeKey="createData1"/> + </before> + <after> + <amOnUrl url="http://127.0.0.1:32772/admin/admin/auth/logout" mergeKey="amOnPage"/> + <deleteData createDataKey="createData1" mergeKey="deleteData1"/> + </after> + <test name="AllCodeceptionMethodsTest"> + <annotations> + <title value="Create all Codeception methods"/> + <description value="Exercises the Generator to make sure it creates every Codeception method correctly."/> + <severity value="CRITICAL"/> + <testCaseId value="#"/> + </annotations> + <acceptPopup mergeKey="acceptPopup"/> + <amOnPage url="/admin" mergeKey="amOnPage"/> + <amOnSubdomain url="admin" mergeKey="amOnSubdomain"/> + <amOnUrl url="http://www.google.com/" mergeKey="amOnUrl"/> + <appendField userInput="More Words" selector=".stuff" mergeKey="appendField"/> + <attachFile userInput="filename.php" selector="#stuff" mergeKey="attachFile"/> + <cancelPopup mergeKey="cancelPopup"/> + <checkOption selector="#checkbox" mergeKey="checkOption"/> + <click selector="#button" userInput="Context" mergeKey="click1"/> + <click selectorArray="['link' => 'Login']" mergeKey="click2"/> + <click selectorArray="['link' => 'Login']" userInput="stuff" mergeKey="click3"/> + <click userInput="Click" mergeKey="click4"/> + <clickWithLeftButton selector="#clickHere" mergeKey="clickWithLeftButton1" x="23" y="324"/> + <clickWithLeftButton selectorArray="['css' => '.checkout']" mergeKey="clickWithLeftButton2" x="23" y="324"/> + <clickWithLeftButton mergeKey="clickWithLeftButton3" x="23" y="324"/> + <clickWithRightButton selector="#clickHere" mergeKey="clickWithRightButton1" x="23" y="324"/> + <clickWithRightButton selectorArray="['css' => '.checkout']" mergeKey="clickWithRightButton2" x="23" y="324"/> + <clickWithRightButton mergeKey="clickWithRightButton3" x="23" y="324"/> + <closeTab mergeKey="closeTab"/> + <createData entity="CustomerEntity1" mergeKey="createData1"/> + <deleteData createDataKey="createData1" mergeKey="deleteData1"/> + <dontSee userInput="Text" mergeKey="dontSee1"/> + <dontSee userInput="Text" selector=".title" mergeKey="dontSee2"/> + <dontSee userInput="Text" selectorArray="['css' => 'body h1']" mergeKey="dontSee3"/> + <dontSeeCheckboxIsChecked selector="#checkbox" mergeKey="dontSeeCheckboxIsChecked"/> + <dontSeeCookie userInput="cookieName" mergeKey="dontSeeCookie1"/> + <dontSeeCookie userInput="cookieName" parameterArray="['domainName' => 'stuff']" mergeKey="dontSeeCookie2"/> + <dontSeeCurrentUrlEquals url="/stuff" mergeKey="dontSeeCurrentUrlEquals"/> + <dontSeeCurrentUrlMatches url="~$/users/(\d+)~" mergeKey="dontSeeCurrentUrlMatches"/> + <dontSeeElement selector=".error" mergeKey="dontSeeElement1"/> + <dontSeeElement selector="input" parameterArray="['name' => 'login']" mergeKey="dontSeeElement2"/> + <dontSeeElementInDOM selector="#stuff" mergeKey="dontSeeElementInDOM1"/> + <dontSeeElementInDOM selector="#stuff" parameterArray="['name' => 'login']" mergeKey="dontSeeElementInDOM2"/> + <dontSeeInCurrentUrl url="/users/" mergeKey="dontSeeInCurrentUrl"/> + <dontSeeInField selector=".field" userInput="stuff" mergeKey="dontSeeInField1"/> + <dontSeeInField selectorArray="['name' => 'search']" userInput="Comment Here" mergeKey="dontSeeInField2"/> + <dontSeeInFormFields selector="form[name=myform]" parameterArray="['input1' => 'non-existent value', 'input2' => 'other non-existent value']" mergeKey="dontSeeInFormFields"/> + <dontSeeInPageSource userInput="Stuff in Page Source" mergeKey="dontSeeInPageSource"/> + <!--<dontSeeInSource html="<h1></h1>" mergeKey="dontSeeInSource"/>--> + <dontSeeInTitle userInput="Title" mergeKey="dontSeeInTitle"/> + <dontSeeLink userInput="Logout" mergeKey="dontSeeLink1"/> + <dontSeeLink userInput="Checkout" url="/store/cart.php" mergeKey="dontSeeLink2"/> + <dontSeeOptionIsSelected selector="#form .stuff" userInput="Option Name" mergeKey="dontSeeOptionIsSelected"/> + <doubleClick selector="#click .here" mergeKey="doubleClick"/> + <dragAndDrop selector1="#number1" selector2="#number2" mergeKey="dragAndDrop"/> + <executeInSelenium function="function(\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) {$webdriver->get('http://google.com');}" mergeKey="executeInSelenium"/> + <executeJS function="return $('#myField').val()" mergeKey="executeJS"/> + <fillField selector="#field" userInput="stuff" mergeKey="fillField1"/> + <fillField selectorArray="['name' => 'email']" userInput="stuff" mergeKey="fillField2"/> + <grabAttributeFrom returnVariable="title" selector="#target" userInput="title" mergeKey="grabAttributeFrom"/> + <grabCookie returnVariable="cookie" userInput="cookie" parameterArray="['domain' => 'www.google.com']" mergeKey="grabCookie"/> + <grabFromCurrentUrl returnVariable="uri" url="~$/user/(\d+)/~" mergeKey="grabFromCurrentUrl"/> + <grabMultiple returnVariable="multiple" selector="a" userInput="href" mergeKey="grabMultiple"/> + <grabPageSource returnVariable="pageSource" mergeKey="grabPageSource1"/> + <grabTextFrom returnVariable="text" selector="h1" mergeKey="grabTextFrom1"/> + <grabValueFrom returnVariable="value1" selector=".form" mergeKey="grabValueFrom1"/> + <grabValueFrom returnVariable="value2" selectorArray="['name' => 'username']" mergeKey="grabValueFrom2"/> + <loadSessionSnapshot userInput="stuff" mergeKey="loadSessionSnapshot1"/> + <loadSessionSnapshot returnVariable="snapshot" userInput="stuff" mergeKey="loadSessionSnapshot2"/> + <makeScreenshot userInput="ScreenshotName" mergeKey="makeScreenshot"/> + <maximizeWindow mergeKey="maximizeWindow"/> + <moveBack mergeKey="moveBack"/> + <moveForward mergeKey="moveForward"/> + <moveMouseOver selector="#stuff" mergeKey="moveMouseOver1"/> + <moveMouseOver selectorArray="['css' => '.checkout']" mergeKey="moveMouseOver2"/> + <moveMouseOver x="5" y="5" mergeKey="moveMouseOver3"/> + <moveMouseOver selector="#stuff" x="5" y="5" mergeKey="moveMouseOver4"/> + <moveMouseOver selectorArray="['css' => '.checkout']" x="5" y="5" mergeKey="moveMouseOver5"/> + <openNewTab mergeKey="openNewTab"/> + <pauseExecution mergeKey="pauseExecution"/> + <performOn selector=".rememberMe" function="function (WebDriver $I) { $I->see('Remember me next time'); $I->seeElement('#LoginForm_rememberMe'); $I->dontSee('Login'); }" mergeKey="performOn1"/> + <performOn selector=".rememberMe" function="ActionSequence::build()->see('Warning')->see('Are you sure you want to delete this?')->click('Yes')" mergeKey="performOn2"/> + <pressKey selector="#page" userInput="a" mergeKey="pressKey1"/> + <pressKey selector="#page" parameterArray="array('ctrl','a'),'new'" mergeKey="pressKey2"/> + <pressKey selector="#page" parameterArray="array('shift','111'),'1','x'" mergeKey="pressKey3"/> + <pressKey selector="#page" parameterArray="array('ctrl', 'a'), \Facebook\WebDriver\WebDriverKeys::DELETE" mergeKey="pressKey4"/> + <!--pressKey selector="descendant-or-self::*[@id='page']" userInput="u" mergeKey="pressKey5"/--> + <reloadPage mergeKey="reloadPage"/> + <resetCookie userInput="cookie" mergeKey="resetCookie1"/> + <resetCookie userInput="cookie" parameterArray="['domainName' => 'www.google.com']" mergeKey="resetCookie2"/> + <resizeWindow width="800" height="600" mergeKey="resizeWindow"/> + <saveSessionSnapshot userInput="stuff" mergeKey="saveSessionSnapshot"/> + <scrollTo selector="#place" x="20" y="50" mergeKey="scrollTo1"/> + <scrollTo selectorArray="['css' => '.checkout']" x="20" y="50" mergeKey="scrollTo2"/> + <see userInput="Stuff" mergeKey="see1"/> + <see userInput="More Stuff" selector=".stuff" mergeKey="see2"/> + <see userInput="More More Stuff" selectorArray="['css' => 'body h1']" mergeKey="see3"/> + <seeCheckboxIsChecked selector="#checkbox" mergeKey="seeCheckboxIsChecked"/> + <seeCookie userInput="PHPSESSID" mergeKey="seeCookie1"/> + <seeCookie userInput="PHPSESSID" parameterArray="['domainName' => 'www.google.com']" mergeKey="seeCookie2"/> + <seeCurrentUrlEquals url="/" mergeKey="seeCurrentUrlEquals"/> + <seeCurrentUrlMatches url="~$/users/(\d+)~" mergeKey="seeCurrentUrlMatches"/> + <seeElement selector=".error" mergeKey="seeElement1"/> + <seeElement selectorArray="['css' => 'form input']" mergeKey="seeElement2"/> + <seeElement selector=".error" parameterArray="['name' => 'login']" mergeKey="seeElement3"/> + <seeElement selectorArray="['css' => 'form input']" parameterArray="['name' => 'login']" mergeKey="seeElement4"/> + <seeElementInDOM selector="//form/input[type=hidden]" mergeKey="seeElementInDOM1"/> + <seeElementInDOM selector="//form/input[type=hidden]" parameterArray="['name' => 'form']" mergeKey="seeElementInDOM2"/> + <seeInCurrentUrl url="home" mergeKey="seeInCurrentUrl1"/> + <seeInCurrentUrl url="/home/" mergeKey="seeInCurrentUrl2"/> + <seeInField userInput="Stuff" selector="#field" mergeKey="seeInField1"/> + <seeInField userInput="Stuff" selectorArray="['name' => 'search']" mergeKey="seeInField2"/> + <seeInFormFields selector="form[name=myform]" parameterArray="['input1' => 'value','input2' => 'other value']" mergeKey="seeInFormFields1"/> + <seeInFormFields selector=".form-class" parameterArray="['multiselect' => ['value1','value2'],'checkbox[]' => ['a checked value','another checked value',]]" mergeKey="seeInFormFields2"/> + <!--<seeInPageSource html="<h1></h1>" mergeKey="seeInPageSource"/>--> + <seeInPopup userInput="Yes in Popup" mergeKey="seeInPopup"/> + <!--<seeInSource html="<h1></h1>" mergeKey="seeInSource"/>--> + <seeInTitle userInput="In Title" mergeKey="seeInTitle"/> + <seeLink userInput="Logout" mergeKey="seeLink1"/> + <seeLink userInput="Logout" url="/logout" mergeKey="seeLink2"/> + <seeNumberOfElements selector="tr" userInput="10" mergeKey="seeNumberOfElements1"/> + <seeNumberOfElements selector="tr" userInput="[0, 10]" mergeKey="seeNumberOfElements2"/> + <seeOptionIsSelected selector=".option" userInput="Visa" mergeKey="seeOptionIsSelected"/> + <selectOption selector=".dropDown" userInput="Option Name" mergeKey="selectOption1"/> + <selectOption selector="//form/select[@name=account]" parameterArray="array('Windows','Linux')" mergeKey="selectOption2"/> + <selectOption selector="Which OS do you use?" parameterArray="array('text' => 'Windows')" mergeKey="selectOption3"/> + <setCookie userInput="PHPSESSID" value="stuff" mergeKey="setCookie1"/> + <setCookie userInput="PHPSESSID" value="stuff" parameterArray="['domainName' => 'www.google.com']" mergeKey="setCookie2"/> + <submitForm selector="#my-form" parameterArray="['field' => ['value','another value',]]" button="#submit" mergeKey="submitForm2"/> + <switchToIFrame mergeKey="switchToIFrame1"/> + <switchToIFrame userInput="another_frame" mergeKey="switchToIFrame2"/> + <switchToNextTab mergeKey="switchToNextTab1"/> + <switchToNextTab userInput="2" mergeKey="switchToNextTab2"/> + <switchToPreviousTab mergeKey="switchToPreviewTab1"/> + <switchToPreviousTab userInput="1" mergeKey="switchToPreviewTab2"/> + <switchToWindow mergeKey="switchToWindow1"/> + <switchToWindow userInput="another_window" mergeKey="switchToWindow2"/> + <typeInPopup userInput="Stuff for popup" mergeKey="typeInPopup"/> + <uncheckOption selector="#option" mergeKey="uncheckOption"/> + <unselectOption selector="#dropDown" userInput="Option" mergeKey="unselectOption"/> + <wait time="15" mergeKey="wait"/> + <waitForElement selector="#button" time="10" mergeKey="waitForElement"/> + <waitForElementChange selector="#menu" function="function(\WebDriverElement $el) {return $el->isDisplayed();}" time="100" mergeKey="waitForElementChange"/> + <waitForElementNotVisible selector="#a_thing .className" time="30" mergeKey="waitForElementNotVisible"/> + <waitForElementVisible selector="#a_thing .className" time="15" mergeKey="waitForElementVisible"/> + <waitForJS function="return $.active == 0;" time="30" mergeKey="waitForJS"/> + <waitForText userInput="foo" time="30" mergeKey="waitForText1"/> + <waitForText userInput="foo" selector=".title" time="30" mergeKey="waitForText2"/> + </test> + <test name="AllCustomMethodsTest"> + <annotations> + <title value="Create all Custom methods"/> + <description value="Exercises the Generator to make sure it creates every Custom method correctly."/> + <severity value="CRITICAL"/> + <testCaseId value="#"/> + </annotations> + <loginAsAdmin mergeKey="loginAsAdmin1"/> + <loginAsAdmin username="admin" password="123123q" mergeKey="loginAsAdmin2"/> + <closeAdminNotification mergeKey="closeAdminNotification1"/> + <searchAndMultiSelectOption selector="#stuff" parameterArray="['Item 1', 'Item 2']" mergeKey="searchAndMultiSelect1"/> + <searchAndMultiSelectOption selector="#stuff" parameterArray="['Item 1', 'Item 2']" requiredAction="true" mergeKey="searchAndMultiSelect2"/> + <waitForPageLoad mergeKey="waitForPageLoad1"/> + <waitForPageLoad time="15" mergeKey="waitForPageLoad2"/> + <waitForAjaxLoad mergeKey="waitForAjax1"/> + <waitForAjaxLoad time="15" mergeKey="waitForAjax2"/> + <dontSeeJsError mergeKey="dontSeeJsError"/> + <formatMoney userInput="$300,000" mergeKey="formatMoney1"/> + <formatMoney userInput="$300,000" locale="en_US.UTF-8" mergeKey="formatMoney2"/> + <mSetLocale userInput="300" locale="en_US.UTF-8" mergeKey="mSetLocale1"/> + <mResetLocale mergeKey="mResetLocale1"/> + <waitForLoadingMaskToDisappear mergeKey="waitForLoadingMaskToDisappear1"/> + <scrollToTopOfPage mergeKey="scrollToTopOfPage"/> + <parseFloat userInput="300,000.2325" mergeKey="parseFloat1"/> + </test> + <test name="AllVariableMethodsTest"> + <annotations> + <title value="Create all Methods that support Variables."/> + <description value="Exercises the Generator to make sure it creates every Method that supports a Variable."/> + <severity value="CRITICAL"/> + <testCaseId value="#"/> + </annotations> + <grabFromCurrentUrl returnVariable="randomStuff" mergeKey="grabFromCurrentUrl1"/> + <amOnPage variable="randomStuff" mergeKey="amOnPage1"/> + <amOnSubdomain variable="randomStuff" mergeKey="amOnSubdomain1"/> + <amOnUrl variable="randomStuff" mergeKey="amOnUrl1"/> + <appendField variable="randomStuff" selector="#randomField" mergeKey="appendField1"/> + <attachFile variable="randomStuff" selector="#filePathField" mergeKey="attachFile1"/> + <click variable="randomStuff" mergeKey="click1"/> + <dontSee variable="randomStuff" mergeKey="dontSee1"/> + <dontSeeCookie variable="randomStuff" mergeKey="dontSeeCookie1"/> + <dontSeeCurrentUrlEquals variable="randomStuff" mergeKey="dontSeeCurrentUrlEquals1"/> + <dontSeeCurrentUrlMatches variable="randomStuff" mergeKey="dontSeeCurrentUrlMatches1"/> + <dontSeeInCurrentUrl variable="randomStuff" mergeKey="dontSeeInCurrentUrl1"/> + <dontSeeInField selector="#stuff" variable="randomStuff" mergeKey="dontSeeInField1"/> + <dontSeeInPageSource variable="randomStuff" mergeKey="dontSeeInPageSource1"/> + <dontSeeInTitle variable="randomStuff" mergeKey="dontSeeInTitle1"/> + <dontSeeLink variable="randomStuff" mergeKey="dontSeeLink1"/> + <dontSeeOptionIsSelected selector="#dropdown" variable="randomStuff" mergeKey="dontSeeOptionIsSelected1"/> + <fillField variable="randomStuff" selector="#field" mergeKey="fillField1"/> + <grabAttributeFrom selector="#stuff" returnVariable="moreRandomStuff" variable="randomStuff" mergeKey="grabAttributeFrom1"/> + <grabCookie returnVariable="cookies" variable="randomStuff" mergeKey="grabValueFrom1"/> + <grabFromCurrentUrl returnVariable="url" variable="randomStuff" mergeKey="grabFromCurrentUrl"/> + <grabMultiple returnVariable="multipleThings" selector="a" variable="randomStuff" mergeKey="grabMultiple1"/> + <loadSessionSnapshot variable="randomStuff" mergeKey="loadSessionSnapshot"/> + <pressKey selector="a" variable="randomStuff" mergeKey="pressKey1"/> + <saveSessionSnapshot variable="randomStuff" mergeKey="saveSessionSnapshot1"/> + <see variable="randomStuff" mergeKey="see1"/> + <seeCookie variable="randomStuff" mergeKey="seeCookie1"/> + <seeCurrentUrlEquals variable="randomStuff" mergeKey="seeCurrentUrlEquals1"/> + <seeCurrentUrlMatches variable="randomStuff" mergeKey="seeCurrentUrlMatches1"/> + <seeInCurrentUrl variable="randomStuff" mergeKey="seeInCurrentUrl1"/> + <seeInField selector="a" variable="randomStuff" mergeKey="seeInField1"/> + <seeInPopup variable="randomStuff" mergeKey="seeInPopup"/> + <seeInTitle variable="randomStuff" mergeKey="seeInTitle1"/> + <seeLink variable="randomStuff" mergeKey="seeLink1"/> + <seeNumberOfElements selector="#stuff" variable="randomStuff" mergeKey="seeNumberOfElements1"/> + <seeOptionIsSelected selector="#stuff" variable="randomStuff" mergeKey="seeOptionIsSelected1"/> + <selectOption selector="#stuff" variable="randomStuff" mergeKey="selectOption1"/> + <switchToIFrame variable="randomStuff" mergeKey="switchToIFrame1"/> + <switchToNextTab variable="randomStuff" mergeKey="switchToNextTab1"/> + <switchToPreviousTab variable="randomStuff" mergeKey="switchToPreviousTab1"/> + <switchToNextTab variable="randomStuff" mergeKey="switchToNextTab1"/> + <switchToWindow variable="randomStuff" mergeKey="switchToWindow1"/> + <typeInPopup variable="randomStuff" mergeKey="typeInPopup"/> + <unselectOption selector="#option" variable="randomStuff" mergeKey="unselectOption1"/> + <waitForText variable="randomStuff" time="5" mergeKey="waitForText1"/> + </test> + </cest> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateCestFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateCestFile.xml new file mode 100644 index 0000000000000..7ee5e2dfbc6ce --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateCestFile.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name=""> + <annotations> + <features value=""/> + <stories value=""/> + <group value=""/> + <env value=""/> + </annotations> + <before> + + </before> + <after> + + </after> + <test name=""> + <annotations> + <title value=""/> + <description value=""/> + <severity value=""/> + <testCaseId value=""/> + </annotations> + </test> + </cest> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateDataFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateDataFile.xml new file mode 100644 index 0000000000000..3682b7569fc07 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateDataFile.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="" type=""> + <data key=""></data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateMetaDataFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateMetaDataFile.xml new file mode 100644 index 0000000000000..952665b032301 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateMetaDataFile.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="" dataType="" type="" auth="" url="" method=""> + <header param="">application/json</header> + <param key="" type="">{}</param> + <jsonObject dataType="" key=""> + <entry key=""></entry> + <array key=""> + <value></value> + </array> + </jsonObject> + <entry key=""></entry> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplatePageFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplatePageFile.xml new file mode 100644 index 0000000000000..b165e99020314 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplatePageFile.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="" urlPath="" module=""> + <section name=""/> + </page> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml new file mode 100644 index 0000000000000..c6e284f76076b --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name=""> + <element name="" type="" locator=""/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/README.md new file mode 100644 index 0000000000000..17d37794fb03d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Search** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json new file mode 100644 index 0000000000000..ef78fc2a19ca6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json @@ -0,0 +1,54 @@ +{ + "name": "magento/magento2-functional-test-module-search", + "description": "Magento 2 Acceptance Test Module Search", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-catalog-search": "dev-master", + "magento/magento2-functional-test-module-reports": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Search" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/README.md new file mode 100644 index 0000000000000..2507ca55e068e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Security** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json new file mode 100644 index 0000000000000..0490f14838574 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json @@ -0,0 +1,51 @@ +{ + "name": "magento/magento2-functional-test-module-security", + "description": "Magento 2 Acceptance Test Module Security", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Security" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/README.md new file mode 100644 index 0000000000000..00d818d2406b5 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_SendFriend** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json new file mode 100644 index 0000000000000..4dbd07d2aefd3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json @@ -0,0 +1,52 @@ +{ + "name": "magento/magento2-functional-test-module-send-friend", + "description": "Magento 2 Acceptance Test Module Send Friend", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/SendFriend" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/README.md new file mode 100644 index 0000000000000..fbca31f68edbe --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Shipping** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json new file mode 100644 index 0000000000000..e4ad63928ad00 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json @@ -0,0 +1,62 @@ +{ + "name": "magento/magento2-functional-test-module-shipping", + "description": "Magento 2 Acceptance Test Module Shipping", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-contact": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-payment": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master", + "magento/magento2-functional-test-module-user": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Shipping" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/README.md new file mode 100644 index 0000000000000..cc89e5a0bce90 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Sitemap** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json new file mode 100644 index 0000000000000..9b7f0c3e184ef --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json @@ -0,0 +1,58 @@ +{ + "name": "magento/magento2-functional-test-module-sitemap", + "description": "Magento 2 Acceptance Test Module Sitemap", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-cms": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-catalog-url-rewrite": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-robots": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Sitemap" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/README.md new file mode 100644 index 0000000000000..108f407dd446f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Store** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json new file mode 100644 index 0000000000000..084ebb97b1158 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json @@ -0,0 +1,54 @@ +{ + "name": "magento/magento2-functional-test-module-store", + "description": "Magento 2 Acceptance Test Module Store", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Store" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/README.md new file mode 100644 index 0000000000000..767c5b0b729a3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Swagger** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json new file mode 100644 index 0000000000000..5b62252b3dfb7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json @@ -0,0 +1,47 @@ +{ + "name": "magento/magento2-functional-test-module-swagger", + "description": "Magento 2 Acceptance Test Module Swagger", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Swagger" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/README.md new file mode 100644 index 0000000000000..cc3852f1ed09b --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Swatches** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json new file mode 100644 index 0000000000000..aa541ddd3a4ef --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json @@ -0,0 +1,58 @@ +{ + "name": "magento/magento2-functional-test-module-swatches", + "description": "Magento 2 Acceptance Test Module Swatches", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-configurable-product": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-theme": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Swatches" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/README.md new file mode 100644 index 0000000000000..b4b81246d1f4d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_SwatchesLayeredNavigation** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json new file mode 100644 index 0000000000000..f195f6b7aad68 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json @@ -0,0 +1,47 @@ +{ + "name": "magento/magento2-functional-test-module-swatches-layered-navigation", + "description": "Magento 2 Acceptance Test Module Swatches Layered Navigation", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/README.md new file mode 100644 index 0000000000000..0a3794479ecb9 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Tax** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json new file mode 100644 index 0000000000000..ca12ade23381b --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json @@ -0,0 +1,62 @@ +{ + "name": "magento/magento2-functional-test-module-tax", + "description": "Magento 2 Acceptance Test Module Tax", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-shipping": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-reports": "dev-master", + "magento/magento2-functional-test-module-page-cache": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Tax" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/README.md new file mode 100644 index 0000000000000..dbbed298fe61c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_TaxImportExport** Module. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json new file mode 100644 index 0000000000000..563df720db8f8 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json @@ -0,0 +1,53 @@ +{ + "name": "magento/magento2-functional-test-module-tax-import-export", + "description": "Magento 2 Acceptance Test Module Tax Import Export", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/TaxImportExport" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/README.md new file mode 100644 index 0000000000000..187985eb18757 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Theme** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json new file mode 100644 index 0000000000000..e54095e5ed0c3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json @@ -0,0 +1,58 @@ +{ + "name": "magento/magento2-functional-test-module-theme", + "description": "Magento 2 Acceptance Test Module Theme", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-cms": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-widget": "dev-master", + "magento/magento2-functional-test-module-config": "dev-master", + "magento/magento2-functional-test-module-media-storage": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Theme" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/README.md new file mode 100644 index 0000000000000..477d0cca79123 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Translation** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json new file mode 100644 index 0000000000000..7825f0b22d6e7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json @@ -0,0 +1,52 @@ +{ + "name": "magento/magento2-functional-test-module-translation", + "description": "Magento 2 Acceptance Test Module Translation", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-developer": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Translation" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/README.md new file mode 100644 index 0000000000000..ca2fc10740951 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Ui** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json new file mode 100644 index 0000000000000..652a4ebed3a70 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json @@ -0,0 +1,53 @@ +{ + "name": "magento/magento2-functional-test-module-ui", + "description": "Magento 2 Acceptance Test Module Ui", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-authorization": "dev-master", + "magento/magento2-functional-test-module-user": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Ui" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/README.md new file mode 100644 index 0000000000000..95189beffd426 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Ups** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json new file mode 100644 index 0000000000000..6cb246e0d55a3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json @@ -0,0 +1,56 @@ +{ + "name": "magento/magento2-functional-test-module-ups", + "description": "Magento 2 Acceptance Test Module Ups", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-shipping": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Ups" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/README.md new file mode 100644 index 0000000000000..a0c3a234569c9 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_UrlRewrite** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json new file mode 100644 index 0000000000000..a8b351fc45b16 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json @@ -0,0 +1,55 @@ +{ + "name": "magento/magento2-functional-test-module-url-rewrite", + "description": "Magento 2 Acceptance Test Module Url Rewrite", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-catalog-url-rewrite": "dev-master", + "magento/magento2-functional-test-module-cms": "dev-master", + "magento/magento2-functional-test-module-cms-url-rewrite": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/UrlRewrite" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/Data/UserData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/Data/UserData.xml new file mode 100644 index 0000000000000..55c934b171740 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/Data/UserData.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="admin" type="user"> + <data key="email">admin@magento.com</data> + <data key="password">admin123</data> + </entity> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/README.md new file mode 100644 index 0000000000000..617eb0c0abe7e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_User** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json new file mode 100644 index 0000000000000..c40a4c122ed8b --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json @@ -0,0 +1,55 @@ +{ + "name": "magento/magento2-functional-test-module-user", + "description": "Magento 2 Acceptance Test Module User", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-authorization": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-security": "dev-master", + "magento/magento2-functional-test-module-integration": "dev-master", + "magento/magento2-functional-test-module-email": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/User" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/README.md new file mode 100644 index 0000000000000..454eb1e9164ee --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Variable** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json new file mode 100644 index 0000000000000..178f0401b9b2e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json @@ -0,0 +1,52 @@ +{ + "name": "magento/magento2-functional-test-module-variable", + "description": "Magento 2 Acceptance Test Module Variable", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-email": "dev-master", + "magento/magento2-functional-test-module-store": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Variable" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/README.md new file mode 100644 index 0000000000000..c993e275c54fa --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Vault** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json new file mode 100644 index 0000000000000..e1af1518555e4 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json @@ -0,0 +1,55 @@ +{ + "name": "magento/magento2-functional-test-module-vault", + "description": "Magento 2 Acceptance Test Module Vault", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-payment": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Vault" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/README.md new file mode 100644 index 0000000000000..c48f288e7293b --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Version** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json new file mode 100644 index 0000000000000..82387c516accb --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json @@ -0,0 +1,48 @@ +{ + "name": "magento/magento2-functional-test-module-version", + "description": "Magento 2 Acceptance Test Module Version", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Version" + ] + ] + } +} + diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/README.md new file mode 100644 index 0000000000000..3c8cf910c0194 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Webapi** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json new file mode 100644 index 0000000000000..af20f4956e2a0 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json @@ -0,0 +1,53 @@ +{ + "name": "magento/magento2-functional-test-module-webapi", + "description": "Magento 2 Acceptance Test Module Webapi", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-authorization": "dev-master", + "magento/magento2-functional-test-module-integration": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Webapi" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/README.md new file mode 100644 index 0000000000000..24a7953393052 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_WebapiSecurity** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json new file mode 100644 index 0000000000000..80cfc405e3747 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-webapi-security", + "description": "Magento 2 Acceptance Test Module Webapi Security", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-webapi": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/WebapiSecurity" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/README.md new file mode 100644 index 0000000000000..5166cfc5d4b26 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Weee** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json new file mode 100644 index 0000000000000..7e3f3eac4247d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json @@ -0,0 +1,61 @@ +{ + "name": "magento/magento2-functional-test-module-weee", + "description": "Magento 2 Acceptance Test Module Weee", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-tax": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-directory": "dev-master", + "magento/magento2-functional-test-module-eav": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-page-cache": "dev-master", + "magento/magento2-functional-test-module-quote": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Weee" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/README.md new file mode 100644 index 0000000000000..b6fd0b4513bb1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Widget** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json new file mode 100644 index 0000000000000..7d546965c3a3f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json @@ -0,0 +1,56 @@ +{ + "name": "magento/magento2-functional-test-module-widget", + "description": "Magento 2 Acceptance Test Module Widget", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-cms": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-email": "dev-master", + "magento/magento2-functional-test-module-theme": "dev-master", + "magento/magento2-functional-test-module-variable": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Widget" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/README.md new file mode 100644 index 0000000000000..53615d4273f73 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_Wishlist** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json new file mode 100644 index 0000000000000..cfb79284ec5a7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json @@ -0,0 +1,58 @@ +{ + "name": "magento/magento2-functional-test-module-wishlist", + "description": "Magento 2 Acceptance Test Module Wishlist", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "dev-master", + "magento/magento2-functional-test-module-customer": "dev-master", + "magento/magento2-functional-test-module-catalog": "dev-master", + "magento/magento2-functional-test-module-checkout": "dev-master", + "magento/magento2-functional-test-module-catalog-inventory": "dev-master", + "magento/magento2-functional-test-module-rss": "dev-master", + "magento/magento2-functional-test-module-backend": "dev-master", + "magento/magento2-functional-test-module-sales": "dev-master", + "magento/magento2-functional-test-module-ui": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/Wishlist" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/README.md new file mode 100644 index 0000000000000..a9826ff12fbd1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/README.md @@ -0,0 +1,3 @@ +# Magento 2 Acceptance Tests + +The Acceptance Tests Module for **Magento_WishlistAnalytics** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/composer.json new file mode 100644 index 0000000000000..19dba845461e7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/composer.json @@ -0,0 +1,50 @@ +{ + "name": "magento/magento2-functional-test-module-wishlist-analytics", + "description": "Magento 2 Acceptance Test Module WishlistAnalytics", + "repositories": [ + { + "type" : "composer", + "url" : "https://repo.magento.com/" + } + ], + "require": { + "php": "~7.0", + "codeception/codeception": "2.2|2.3", + "allure-framework/allure-codeception": "dev-master", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "vlucas/phpdotenv": "~2.4", + "magento/magento2-functional-testing-framework": "dev-develop" + }, + "suggest": { + "magento/magento2-functional-test-module-wishlist": "dev-master" + }, + "type": "magento2-test-module", + "version": "dev-master", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-0": { + "Yandex": "vendor/allure-framework/allure-codeception/src/" + }, + "psr-4": { + "Magento\\FunctionalTestingFramework\\": [ + "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" + ], + "Magento\\FunctionalTest\\": [ + "tests/functional/Magento/FunctionalTest", + "generated/Magento/FunctionalTest" + ] + } + }, + "extra": { + "map": [ + [ + "*", + "tests/functional/Magento/FunctionalTest/WishlistAnalytics" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/_bootstrap.php b/dev/tests/acceptance/tests/functional/_bootstrap.php new file mode 100644 index 0000000000000..b142e36191e4c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/_bootstrap.php @@ -0,0 +1,13 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +// Here you can initialize variables that will be available to your tests +require_once dirname(__DIR__) . '/_bootstrap.php'; + +$RELATIVE_TESTS_MODULE_PATH = '/Magento/FunctionalTest'; + +defined('TESTS_BP') || define('TESTS_BP', __DIR__); +defined('TESTS_MODULE_PATH') || define('TESTS_MODULE_PATH', TESTS_BP . $RELATIVE_TESTS_MODULE_PATH); From 11b1d094497ea7acd12d015a9859cf979cb088a6 Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Wed, 20 Sep 2017 16:59:12 +0300 Subject: [PATCH 058/653] MQE-279: Create repositories in magento organization --- .../Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml | 2 +- .../Magento/FunctionalTest/Backend/Data/BackenedData.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml index c46766e6acfcc..ad97cbaa825b7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml @@ -26,4 +26,4 @@ <seeInCurrentUrl url="{{AdminLoginPage}}" mergeKey="seeAdminLoginUrl"/> </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Data/BackenedData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Data/BackenedData.xml index 039472445b43b..5cf22e022a344 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Data/BackenedData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Data/BackenedData.xml @@ -2,7 +2,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> - <entity name="backendDatadOne" type="backend"> + <entity name="backendDataOne" type="backend"> <data key="backendConfigName">data</data> </entity> -</config> \ No newline at end of file +</config> From 2ebc272c4f53b28911459ed7d0fa8838481fccad Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Wed, 20 Sep 2017 17:58:47 +0300 Subject: [PATCH 059/653] MQE-279: Create repositories in magento organization --- .../FunctionalTest/Backend/Cest/AdminLoginCest.xml | 6 ++++++ .../Magento/FunctionalTest/Backend/Data/BackenedData.xml | 6 ++++++ .../FunctionalTest/Backend/Page/AdminLoginPage.xml | 6 ++++++ .../Backend/Section/AdminLoginFormSection.xml | 6 ++++++ .../Backend/Section/AdminMessagesSection.xml | 6 ++++++ .../Catalog/Cest/AdminCreateCategoryCest.xml | 6 ++++++ .../Catalog/Cest/AdminCreateConfigurableProductCest.xml | 6 ++++++ .../Catalog/Cest/AdminCreateSimpleProductCest.xml | 6 ++++++ .../Magento/FunctionalTest/Catalog/Data/CategoryData.xml | 6 ++++++ .../Catalog/Data/CustomAttributeCategoryUrlKeyData.xml | 6 ++++++ .../Catalog/Data/CustomAttributeProductUrlKeyData.xml | 6 ++++++ .../Catalog/Data/ProductConfigurableAttributeData.xml | 6 ++++++ .../Magento/FunctionalTest/Catalog/Data/ProductData.xml | 6 ++++++ .../Catalog/Data/ProductExtensionAttributeData.xml | 6 ++++++ .../Magento/FunctionalTest/Catalog/Data/StockItemData.xml | 6 ++++++ .../FunctionalTest/Catalog/Metadata/category-meta.xml | 6 ++++++ .../Catalog/Metadata/custom_attribute-meta.xml | 6 ++++++ .../FunctionalTest/Catalog/Metadata/product-meta.xml | 6 ++++++ .../Catalog/Metadata/product_extension_attribute-meta.xml | 6 ++++++ .../FunctionalTest/Catalog/Metadata/product_link-meta.xml | 6 ++++++ .../Metadata/product_link_extension_attribute-meta.xml | 6 ++++++ .../Catalog/Metadata/product_option-meta.xml | 6 ++++++ .../Catalog/Metadata/product_option_value-meta.xml | 6 ++++++ .../FunctionalTest/Catalog/Metadata/stock_item-meta.xml | 6 ++++++ .../FunctionalTest/Catalog/Page/AdminCategoryPage.xml | 6 ++++++ .../FunctionalTest/Catalog/Page/AdminProductEditPage.xml | 6 ++++++ .../FunctionalTest/Catalog/Page/AdminProductIndexPage.xml | 6 ++++++ .../Catalog/Page/StorefrontCategoryPage.xml | 6 ++++++ .../FunctionalTest/Catalog/Page/StorefrontProductPage.xml | 6 ++++++ .../Catalog/Section/AdminCategoryBasicFieldSection.xml | 6 ++++++ .../Catalog/Section/AdminCategoryMainActionsSection.xml | 6 ++++++ .../Catalog/Section/AdminCategoryMessagesSection.xml | 6 ++++++ .../Catalog/Section/AdminCategorySEOSection.xml | 6 ++++++ .../Catalog/Section/AdminCategorySidebarActionSection.xml | 6 ++++++ .../Catalog/Section/AdminCategorySidebarTreeSection.xml | 6 ++++++ .../Catalog/Section/AdminProductFormActionSection.xml | 6 ++++++ .../Catalog/Section/AdminProductFormSection.xml | 6 ++++++ .../Catalog/Section/AdminProductGridActionSection.xml | 6 ++++++ .../Catalog/Section/AdminProductGridSection.xml | 6 ++++++ .../Catalog/Section/AdminProductMessagesSection.xml | 6 ++++++ .../Catalog/Section/AdminProductSEOSection.xml | 6 ++++++ .../Catalog/Section/StorefrontCategoryMainSection.xml | 6 ++++++ .../Catalog/Section/StorefrontMessagesSection.xml | 6 ++++++ .../Catalog/Section/StorefrontMiniCartSection.xml | 6 ++++++ .../Section/StorefrontProductInfoDetailsSection.xml | 6 ++++++ .../Catalog/Section/StorefrontProductInfoMainSection.xml | 6 ++++++ .../Checkout/Cest/StorefrontCustomerCheckoutCest.xml | 6 ++++++ .../Checkout/Cest/StorefrontGuestCheckoutCest.xml | 6 ++++++ .../Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml | 6 ++++++ .../FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml | 6 ++++++ .../FunctionalTest/Checkout/Page/GuestCheckoutPage.xml | 6 ++++++ .../Checkout/Section/CheckoutOrderSummarySection.xml | 6 ++++++ .../Checkout/Section/CheckoutPaymentSection.xml | 6 ++++++ .../Checkout/Section/CheckoutShippingGuestInfoSection.xml | 6 ++++++ .../Checkout/Section/CheckoutShippingMethodsSection.xml | 6 ++++++ .../Checkout/Section/CheckoutShippingSection.xml | 6 ++++++ .../Checkout/Section/CheckoutSuccessMainSection.xml | 6 ++++++ .../Checkout/Section/GuestCheckoutPaymentSection.xml | 6 ++++++ .../Checkout/Section/GuestCheckoutShippingSection.xml | 6 ++++++ .../FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml | 6 ++++++ .../Magento/FunctionalTest/Cms/Data/CmsPageData.xml | 6 ++++++ .../Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml | 6 ++++++ .../Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml | 8 +++++++- .../Cms/Section/CmsNewPagePageActionsSection.xml | 6 ++++++ .../Cms/Section/CmsNewPagePageBasicFieldsSection.xml | 6 ++++++ .../Cms/Section/CmsNewPagePageContentSection.xml | 6 ++++++ .../Cms/Section/CmsNewPagePageSeoSection.xml | 6 ++++++ .../Cms/Section/CmsPagesPageActionsSection.xml | 6 ++++++ .../ConfigurableProduct/Data/ConfigurableProductData.xml | 6 ++++++ .../Customer/Cest/AdminCreateCustomerCest.xml | 6 ++++++ .../Customer/Cest/StorefrontCreateCustomerCest.xml | 6 ++++++ .../Customer/Cest/StorefrontExistingCustomerLoginCest.xml | 6 ++++++ .../Magento/FunctionalTest/Customer/Data/AddressData.xml | 6 ++++++ .../FunctionalTest/Customer/Data/CustomAttributeData.xml | 6 ++++++ .../Magento/FunctionalTest/Customer/Data/CustomerData.xml | 6 ++++++ .../Customer/Data/ExtensionAttributeSimple.xml | 6 ++++++ .../Magento/FunctionalTest/Customer/Data/RegionData.xml | 6 ++++++ .../FunctionalTest/Customer/Metadata/address-meta.xml | 6 ++++++ .../Customer/Metadata/custom_attribute-meta.xml | 6 ++++++ .../FunctionalTest/Customer/Metadata/customer-meta.xml | 6 ++++++ .../Metadata/customer_extension_attribute-meta.xml | 6 ++++++ .../Metadata/customer_nested_extension_attribute-meta.xml | 6 ++++++ .../Customer/Metadata/empty_extension_attribute-meta.xml | 6 ++++++ .../FunctionalTest/Customer/Metadata/region-meta.xml | 6 ++++++ .../FunctionalTest/Customer/Page/AdminCustomerPage.xml | 6 ++++++ .../FunctionalTest/Customer/Page/AdminNewCustomerPage.xml | 6 ++++++ .../Customer/Page/StorefrontCustomerCreatePage.xml | 6 ++++++ .../Customer/Page/StorefrontCustomerDashboardPage.xml | 6 ++++++ .../Customer/Page/StorefrontCustomerSignInPage.xml | 6 ++++++ .../FunctionalTest/Customer/Page/StorefrontHomePage.xml | 6 ++++++ .../Customer/Section/AdminCustomerFiltersSection.xml | 6 ++++++ .../Customer/Section/AdminCustomerGridSection.xml | 6 ++++++ .../Customer/Section/AdminCustomerMainActionsSection.xml | 6 ++++++ .../Customer/Section/AdminCustomerMessagesSection.xml | 6 ++++++ .../Section/AdminNewCustomerAccountInformationSection.xml | 6 ++++++ .../Section/AdminNewCustomerMainActionsSection.xml | 6 ++++++ .../Section/StorefrontCustomerCreateFormSection.xml | 6 ++++++ ...orefrontCustomerDashboardAccountInformationSection.xml | 6 ++++++ .../Section/StorefrontCustomerSignInFormSection.xml | 6 ++++++ .../Customer/Section/StorefrontPanelHeaderSection.xml | 6 ++++++ .../FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml | 6 ++++++ .../Magento/FunctionalTest/Sales/Data/SalesData.xml | 6 ++++++ .../FunctionalTest/Sales/Page/InvoiceDetailsPage.xml | 6 ++++++ .../Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml | 6 ++++++ .../Magento/FunctionalTest/Sales/Page/InvoicesPage.xml | 6 ++++++ .../FunctionalTest/Sales/Page/OrderDetailsPage.xml | 6 ++++++ .../Magento/FunctionalTest/Sales/Page/OrdersPage.xml | 6 ++++++ .../Sales/Section/InvoiceDetailsInformationSection.xml | 6 ++++++ .../FunctionalTest/Sales/Section/InvoiceNewSection.xml | 6 ++++++ .../Sales/Section/InvoicesFiltersSection.xml | 6 ++++++ .../FunctionalTest/Sales/Section/InvoicesGridSection.xml | 6 ++++++ .../Sales/Section/OrderDetailsInformationSection.xml | 6 ++++++ .../Sales/Section/OrderDetailsInvoicesSection.xml | 6 ++++++ .../Sales/Section/OrderDetailsMainActionsSection.xml | 6 ++++++ .../Sales/Section/OrderDetailsMessagesSection.xml | 6 ++++++ .../Sales/Section/OrderDetailsOrderViewSection.xml | 6 ++++++ .../FunctionalTest/Sales/Section/OrdersGridSection.xml | 6 ++++++ .../FunctionalTest/SampleTests/Cest/MinimumTestCest.xml | 6 ++++++ .../SampleTests/Cest/PersistMultipleEntitiesCest.xml | 6 ++++++ .../FunctionalTest/SampleTests/Cest/SampleCest.xml | 6 ++++++ .../SampleTests/Templates/TemplateCestFile.xml | 6 ++++++ .../SampleTests/Templates/TemplateDataFile.xml | 6 ++++++ .../SampleTests/Templates/TemplateMetaDataFile.xml | 6 ++++++ .../SampleTests/Templates/TemplatePageFile.xml | 6 ++++++ .../SampleTests/Templates/TemplateSectionFile.xml | 6 ++++++ .../Magento/FunctionalTest/User/Data/UserData.xml | 6 ++++++ 126 files changed, 757 insertions(+), 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml index ad97cbaa825b7..bb36605b3cd26 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Data/BackenedData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Data/BackenedData.xml index 5cf22e022a344..43bd1ad96f173 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Data/BackenedData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Data/BackenedData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml index 910450187adb1..582c0733ff5cd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminLoginFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminLoginFormSection.xml index 11768b4c83ddf..532a354da12dd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminLoginFormSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminLoginFormSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminMessagesSection.xml index ebc99031eac84..b77233ab260d7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminMessagesSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml index f731830f2915a..bb22cb72910cc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml index fa5cbd2d2f0f6..b8fbb0a93e71c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml index a32a80a6d9125..7508d00f134e1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CategoryData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CategoryData.xml index 5c6a03c46b3ec..b2877aebe72de 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CategoryData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CategoryData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeCategoryUrlKeyData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeCategoryUrlKeyData.xml index 43348890b944c..911fd3d73a21e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeCategoryUrlKeyData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeCategoryUrlKeyData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeProductUrlKeyData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeProductUrlKeyData.xml index ccaed86c1e786..acc9517d22920 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeProductUrlKeyData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeProductUrlKeyData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductConfigurableAttributeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductConfigurableAttributeData.xml index 3cdb6c30c4f5a..ba472fc91b809 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductConfigurableAttributeData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductConfigurableAttributeData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml index 6ac89d0c2a7a8..cdbcd2d130d09 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductExtensionAttributeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductExtensionAttributeData.xml index d884bebf36d85..199c945cd8761 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductExtensionAttributeData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductExtensionAttributeData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/StockItemData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/StockItemData.xml index 7711f5dce8ec4..6caf6ec9fd321 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/StockItemData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/StockItemData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml index 453fe74bfa38e..7299e47ae1d34 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml index 7ad804465c7ff..b019ab3ff42bb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml index a2b77297796ea..4f313af3f7fc8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml index 86d3629f48a6e..f68459121f3e6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml index 6400211dedf4e..8261ef0e99963 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml index 5371fa1f5e7a2..ea2c926430459 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml index 5e3f66c51e13f..dcb65c8032ebf 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml index 4be46958db312..c1b50759e0a7f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml index 70626de4211c5..15b4a47de15fd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml index b00effeb20e9f..0ff498d84fd34 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductEditPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductEditPage.xml index 907407acf8e31..ec19e6f3cc018 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductEditPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductEditPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductIndexPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductIndexPage.xml index b3f5ef1ba1151..e3ad5dac78ce7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductIndexPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductIndexPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml index 1346b05af4c53..7cc0fcf136404 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml index 4436742a13bf7..998bf0035f5df 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml index f83cc99b1b6b9..5720e198df098 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml index dbec4c295e4f3..425b98d2a4f00 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml index e21176d441b1e..f58e66f9cd994 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml index 3564a6ca78b69..f6780f1eb32c2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml index e3ff829d4ce89..0847d22984831 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml index ec537ba4830ba..6bbf3876fb4d1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormActionSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormActionSection.xml index 713e8b71c239c..f7b7b989ace1d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormActionSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormActionSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml index 1fef90bdd1156..a23112065fdde 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridActionSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridActionSection.xml index 1c32564485c9e..e45c67c0dcf85 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridActionSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridActionSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml index f48ece1a3f0e2..feecb1cc8f06f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml index c35d1fe21b571..860fdbe398ac7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml index c03899381d15a..d994a1d739020 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryMainSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryMainSection.xml index 47161b95b6268..c3dbe95bc6bce 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryMainSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryMainSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMessagesSection.xml index e662b0914ce3b..dcfc2564d3cab 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMessagesSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMiniCartSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMiniCartSection.xml index 85964f13a4d8d..fd814766ea6ea 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMiniCartSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMiniCartSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoDetailsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoDetailsSection.xml index 92b84d42a4dda..ebdff90a69da7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoDetailsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoDetailsSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoMainSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoMainSection.xml index be9cde517b59f..22b55bb879fb6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoMainSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoMainSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml index 1932ec0f6e1d9..8b7922bf453c2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml index 5f58cf04e6ae1..c30a7aac14807 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml index 650589ae6ee8d..54b9062425c72 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml index 98cfe538f52a1..4bf40301e5c81 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/GuestCheckoutPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/GuestCheckoutPage.xml index eaab3ece3bb88..a54db5eb82f8b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/GuestCheckoutPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/GuestCheckoutPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutOrderSummarySection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutOrderSummarySection.xml index f9f4957e796e6..319bafca8c250 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutOrderSummarySection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutOrderSummarySection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml index c5ed374d70b7e..fc616a51207cf 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingGuestInfoSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingGuestInfoSection.xml index 9af04542d85bc..a783d5ea7aa50 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingGuestInfoSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingGuestInfoSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingMethodsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingMethodsSection.xml index 5065571381c81..dbe09299929f7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingMethodsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingMethodsSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml index c13967e9b1262..364c2d92c1d46 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutSuccessMainSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutSuccessMainSection.xml index 28de9f94ae591..cb47bf9900e70 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutSuccessMainSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutSuccessMainSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml index 5b62584348bdf..7050068ba27af 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutShippingSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutShippingSection.xml index f7bc6e82e3ff1..a2606edb37972 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutShippingSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutShippingSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml index 1a15cda8d7ead..8553296fc96ef 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Data/CmsPageData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Data/CmsPageData.xml index ee3e483bba9b6..32bbec678fa41 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Data/CmsPageData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Data/CmsPageData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml index 9dd1fb299d23d..5624767bb253f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml index 4d52b0f0ba315..f8564145ae3d1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml @@ -1,4 +1,10 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageActionsSection.xml index dc6cafa655120..bb5e854078bb1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageActionsSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageBasicFieldsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageBasicFieldsSection.xml index e29cc86863610..e5f314a0fb538 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageBasicFieldsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageBasicFieldsSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageContentSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageContentSection.xml index cc1a98e31db18..c0da938d99bf4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageContentSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageContentSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageSeoSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageSeoSection.xml index 69b0b0faf6763..8f541c0bbf107 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageSeoSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageSeoSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsPagesPageActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsPagesPageActionsSection.xml index 88746b3b5b7de..75c1c46ed1bc9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsPagesPageActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsPagesPageActionsSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml index 0ae038de3e1a3..71fd665d09602 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml index 66a750304f3ce..8e4b2a8abd804 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml index cba18378530c7..45bc23e5a0d6b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml index 1c3722418cb64..11a2a27862ea5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/AddressData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/AddressData.xml index 34a8b89b9a274..c38dc9f1ad79a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/AddressData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/AddressData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomAttributeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomAttributeData.xml index 01ce261bfa024..ca98ffedd111b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomAttributeData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomAttributeData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml index b21e1ef130309..b2693d09b6e9d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/ExtensionAttributeSimple.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/ExtensionAttributeSimple.xml index 2e5072176edf7..39f7dd4fc2ba1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/ExtensionAttributeSimple.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/ExtensionAttributeSimple.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/RegionData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/RegionData.xml index a52c9134f9242..9ba5cb7b2c95d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/RegionData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/RegionData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml index 0238f8fe9f937..6e5ea909cbe1e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml index 7ad804465c7ff..b019ab3ff42bb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml index f2b6dbe682ea9..6ee3d020962c7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml index fee39b01336cb..4028b7f5ea92c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml index cf16e49fce69f..3f1ccd2e8b16c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml index 1a5377403e14a..ce07c28e6c952 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml index ed7d56e3d2a5e..8ad9ec81eafde 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml index c08116588f65f..40522af259daa 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml index c488e2c7cc79e..520021c16146d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml index a3e38d81549cf..1917f1bd352b7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml index 3699b1280d43f..179a4e62d06ee 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml index c170b25738799..a5835c2bcc29f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml index ce103f5add612..d54e1776c2c5f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml index 12284623e60d6..ea9961bb27515 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml index ecc9e966802cf..12055b5314afa 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml index 95fcc7ab799d9..fbdff1f9ca5c6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml index d27381aa0bc38..e82e4c1947e06 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml index 3b4b07309147e..5bdbef4407375 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml index a7e168ba9f21e..9366c7c50df6c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerCreateFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerCreateFormSection.xml index ef88114d02e53..33389a2013d7f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerCreateFormSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerCreateFormSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml index 8b1dbbed1d49a..1bff734763647 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerSignInFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerSignInFormSection.xml index 359a58ad7f052..00c6ed9282e43 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerSignInFormSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerSignInFormSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml index 63b39955281fd..cd9f84ce0f1f4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml index 832ede6b3dfbb..ed19d94bc53bb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Data/SalesData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Data/SalesData.xml index 637e7ef01babd..1a31a5a92cb74 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Data/SalesData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Data/SalesData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceDetailsPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceDetailsPage.xml index 4fde61b64d241..186097f404011 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceDetailsPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceDetailsPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml index 760a50d31ade9..185d89e80f821 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoicesPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoicesPage.xml index 93e997fee7b99..ae145b50a8e2e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoicesPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoicesPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml index 20470e31c8fb9..050254c7ee5c5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrdersPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrdersPage.xml index f215af9c21d0d..0d009bba52967 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrdersPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrdersPage.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceDetailsInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceDetailsInformationSection.xml index b1794d6d00f48..872e9ac007d28 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceDetailsInformationSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceDetailsInformationSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceNewSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceNewSection.xml index 6cbb05d4989d9..90e5c31f86637 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceNewSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceNewSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesFiltersSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesFiltersSection.xml index 1d3328fb1ed23..e14e651eb1aa2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesFiltersSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesFiltersSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesGridSection.xml index 275a4d3506d6d..aca1aaa747b7e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesGridSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesGridSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInformationSection.xml index b080c4b2e2c4e..4f971c755d2b9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInformationSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInformationSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInvoicesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInvoicesSection.xml index a05231646eac3..7039fb3e25022 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInvoicesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInvoicesSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMainActionsSection.xml index b9fb1751f0321..78613e58d468c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMainActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMainActionsSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMessagesSection.xml index 2c1b25dd2c0a3..b63c1da9a9887 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMessagesSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsOrderViewSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsOrderViewSection.xml index f17286060d8a3..63c80a085e0a3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsOrderViewSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsOrderViewSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrdersGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrdersGridSection.xml index c5e5efe0d15aa..2683305340f00 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrdersGridSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrdersGridSection.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml index 4a5603e643ce6..5f69f5d6c43e3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <!-- Test XML Example --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml index 59c47371b86b6..a46500143a82d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml index 92dd201812dce..32a18961bfa3c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <!-- Test XML Example --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateCestFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateCestFile.xml index 7ee5e2dfbc6ce..88c8639b977b3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateCestFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateCestFile.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateDataFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateDataFile.xml index 3682b7569fc07..74fce7e807110 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateDataFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateDataFile.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateMetaDataFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateMetaDataFile.xml index 952665b032301..28f9550871219 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateMetaDataFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateMetaDataFile.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplatePageFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplatePageFile.xml index b165e99020314..8aceda038555f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplatePageFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplatePageFile.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml index c6e284f76076b..9cf871a562ad3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/Data/UserData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/Data/UserData.xml index 55c934b171740..bb704038a51bd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/Data/UserData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/Data/UserData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> From a8ae4a5ffcfdc4f1db6b8964f0ae63e853f5e64f Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Wed, 27 Sep 2017 21:49:35 +0300 Subject: [PATCH 060/653] MQE-350: Demos for Core and SE Teams - Updating the README, replacing "Acceptance" with "Functional", adding "./vendor/bin/" to all commands so they will run if you don't have it in your $PATH. - Updating Robo commands to include "./vendor/bin/" so they will run. --- dev/tests/acceptance/README.md | 142 +++++++++++++++++------------- dev/tests/acceptance/RoboFile.php | 24 ++--- 2 files changed, 88 insertions(+), 78 deletions(-) diff --git a/dev/tests/acceptance/README.md b/dev/tests/acceptance/README.md index df6c804815b00..d55625a64420e 100755 --- a/dev/tests/acceptance/README.md +++ b/dev/tests/acceptance/README.md @@ -8,21 +8,39 @@ ---- # Prerequisites +* **IMPORTANT**: Configure your Magento Store for [Automated Testing](http://devdocs.magento.com/guides/v2.0/mtf/mtf_quickstart/mtf_quickstart_magento.html) * [PHP v7.x](http://php.net/manual/en/install.php) * [Composer v1.4.x](https://getcomposer.org/download/) * [Java](https://www.java.com/en/download/) -* [Selenium Server](http://www.seleniumhq.org/download/) +* [Selenium Server](http://www.seleniumhq.org/download/) - [v2.53.x](http://selenium-release.storage.googleapis.com/index.html?path=2.53/) * [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/downloads) * [Allure CLI](https://docs.qameta.io/allure/latest/#_installing_a_commandline) * [GitHub](https://desktop.github.com/) -* GitHub Repos: - * [CE Tests](https://github.com/magento-pangolin/magento2ce-acceptance-tests) - * [EE Tests](https://github.com/magento-pangolin/magento2ee-acceptance-tests) -* Configure Magento for [Automated Testing](http://devdocs.magento.com/guides/v2.0/mtf/mtf_quickstart/mtf_quickstart_magento.html) ### Recommendations * We recommend using [PHPStorm 2017](https://www.jetbrains.com/phpstorm/) for your IDE. They recently added support for [Codeception Test execution](https://blog.jetbrains.com/phpstorm/2017/03/codeception-support-comes-to-phpstorm-2017-1/) which is helpful when debugging. -* We also recommend updating your [$PATH to include](https://stackoverflow.com/questions/7703041/editing-path-variable-on-mac) `vendor/bin` so you can easily execute the necessary `robo` and `codecept` commands instead of `vendor/bin/robo` or `vendor/bin/codecept`. +* We also recommend updating your [$PATH to include](https://stackoverflow.com/questions/7703041/editing-path-variable-on-mac) `./vendor/bin` so you can easily execute the necessary `robo` and `codecept` commands instead of `./vendor/bin/robo` or `./vendor/bin/codecept`. + +---- + +# TEMPORARY INSTALLATION INSTRUCTIONS +Due to the current setup of the Framework you will need to do the following: + + * `mkdir [DIRECTORY_NAME]` + * `cd [DIRECTORY_NAME]` + * Pull down - [EE](https://github.com/magento-pangolin/magento2ee) + * Pull down - [CE](https://github.com/magento-pangolin/magento2ce) + * `cd magento2ee` + * `php -f dev/tools/build-ee.php -- --command=link --exclude=true` + * Generate a `github-oauth` token: [Instructions](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token) + * `touch magento2ce/dev/tests/acceptance/auth.json` + * `nano magento2ce/dev/tests/acceptance/auth.json` + * Replace `<personal access token>` with the token you generated in GitHub. + * Save your work. + * `cd ../magento2ce` + * `cd dev/tests/acceptance` + * `composer install` + * **PLEASE IGNORE THE "Installation" SECTION THAT FOLLOWS, START WITH THE "Building The Framework" SECTION INSTEAD.** ---- @@ -31,7 +49,7 @@ You can **either** install through composer **or** clone from git repository. ## Git ``` git clone GITHUB_REPO_URL -cd magento2ce-acceptance-tests +cd magento2ce composer install ``` @@ -50,85 +68,85 @@ Robo is a task runner for PHP that allows you to alias long complex CLI commands ### Example * Original: `allure generate tests/_output/allure-results/ -o tests/_output/allure-report/` -* Robo: `robo allure1:generate` +* Robo: `./vendor/bin/robo allure1:generate` ## Available Robo Commands -You can see a list of all available Robo commands by calling `robo` directly in the Terminal. +You can see a list of all available Robo commands by calling `./vendor/bin/robo` in the Terminal. ##### Codeception Robo Commands -* `robo` +* `./vendor/bin/robo` * Lists all available Robo commands. -* `robo clone:files` +* `./vendor/bin/robo clone:files` * Duplicate the Example configuration files used to customize the Project -* `robo build:project` +* `./vendor/bin/robo build:project` * Build the Codeception project -* `robo generate:pages` +* `./vendor/bin/robo generate:pages` * Generate all Page Objects -* `robo generate:tests` +* `./vendor/bin/robo generate:tests` * Generate all Tests in PHP -* `robo example` +* `./vendor/bin/robo example` * Run all Tests marked with the @group tag 'example', using the Chrome environment -* `robo chrome` - * Run all Acceptance tests using the Chrome environment -* `robo firefox` - * Run all Acceptance tests using the FireFox environment -* `robo phantomjs` - * Run all Acceptance tests using the PhantomJS environment -* `robo folder ______` - * Run all Acceptance tests located under the Directory Path provided using the Chrome environment -* `robo group ______` +* `./vendor/bin/robo chrome` + * Run all Functional tests using the Chrome environment +* `./vendor/bin/robo firefox` + * Run all Functional tests using the FireFox environment +* `./vendor/bin/robo phantomjs` + * Run all Functional tests using the PhantomJS environment +* `./vendor/bin/robo folder ______` + * Run all Functional tests located under the Directory Path provided using the Chrome environment +* `./vendor/bin/robo group ______` * Run all Tests with the specified @group tag, excluding @group 'skip', using the Chrome environment ##### Allure Robo Commands To determine which version of the Allure command you need to use please run `allure --version`. -* `robo allure1:generate` +* `./vendor/bin/robo allure1:generate` * Allure v1.x.x - Generate the HTML for the Allure report based on the Test XML output -* `robo allure1:open` +* `./vendor/bin/robo allure1:open` * Allure v1.x.x - Open the HTML Allure report -* `robo allure1:report` +* `./vendor/bin/robo allure1:report` * Allure v1.x.x - Generate and open the HTML Allure report -* `robo allure2:generate` +* `./vendor/bin/robo allure2:generate` * Allure v2.x.x - Generate the HTML for the Allure report based on the Test XML output -* `robo allure2:open` +* `./vendor/bin/robo allure2:open` * Allure v2.x.x - Open the HTML Allure report -* `robo allure2:report` +* `./vendor/bin/robo allure2:report` * Allure v2.x.x - Generate and open the HTML Allure report ---- # Building The Framework -After installing the dependencies you will want to build the Codeception project in the [Acceptance Test Framework](https://github.com/magento-pangolin/magento2-acceptance-test-framework), which is a dependency of the CE or EE Tests repo. Run `robo build:project` to complete this task. +After installing the dependencies you will want to build the Codeception project in the [Magento 2 Functional Testing Framework](https://github.com/magento-pangolin/magento2-functional-testing-framework), which is a dependency of the CE or EE Tests repo. Run `./vendor/bin/robo build:project` to complete this task. -`robo build:project` +`./vendor/bin/robo build:project` ---- # Configure the Framework -Before you can generate or run the Tests you will need to clone the Example Configuration files and edit them for your specific Store settings. You can edit these files with out the fear of accidentally committing your credentials or other sensitive information as these files are listed in the *.gitignore* file. -Run the following command to generate these files: +Before you can generate or run the Tests you will need to edit the Configuration files and configure them for your specific Store settings. You can edit these files with out the fear of accidentally committing your credentials or other sensitive information as these files are listed in the *.gitignore* file. -`robo setup` +In the `.env` file you will find key pieces of information that are unique to your local Magento setup that will need to be edited before you can generate tests: +* **MAGENTO_BASE_URL** +* **MAGENTO_BACKEND_NAME** +* **MAGENTO_ADMIN_USERNAME** +* **MAGENTO_ADMIN_PASSWORD** -In these files you will find key pieces of information that are unique to your local Magento setup that will need to be edited (ex **MAGENTO_BASE_URL**, **MAGENTO_BACKEND_NAME**, **MAGENTO_ADMIN_USERNAME**, **MAGENTO_ADMIN_PASSWORD**, etc...). -* **tests/acceptance.suite.yml** +##### Additional Codeception settings can be found in the following files: +* **tests/functional.suite.yml** * **codeception.dist.yml** -* **.env** ---- # Generate PHP files for Tests -All Tests in the Framework are written in XML and need to have the PHP generated for Codeception to run. Run the following command to generate the PHP files into the following directory: `tests/acceptance/Magento/AcceptanceTest/_generated` +All Tests in the Framework are written in XML and need to have the PHP generated for Codeception to run. Run the following command to generate the PHP files in the following directory (If this directory does not exist it will be created): `dev/tests/acceptance/tests/functional/Magento/FunctionalTest/_generated` -If this directory doesn't exist it will be created. - -`robo generate:tests` +`./vendor/bin/robo generate:tests` ---- # Running Tests ## Start the Selenium Server -PLEASE NOTE: You will need to have an instance of the Selenium Server running on your machine before you can execute the Tests. +**PLEASE NOTE**: You will need to have an instance of the Selenium Server running on your machine before you can execute the Tests. ``` cd [LOCATION_OF_SELENIUM_JAR] @@ -136,7 +154,7 @@ java -jar selenium-server-standalone-X.X.X.jar ``` ## Run Tests Manually -You can run the Codeception tests directly without using Robo if you'd like. To do so please run `codecept run acceptance` to execute all Acceptance tests that DO NOT include @env tags. IF a Test includes an [@env tag](http://codeception.com/docs/07-AdvancedUsage#Environments) you MUST include the `--env ENV_NAME` flag. +You can run the Codeception tests directly without using Robo if you'd like. To do so please run `./vendor/bin/codecept run functional` to execute all Functional tests that DO NOT include @env tags. IF a Test includes an [@env tag](http://codeception.com/docs/07-AdvancedUsage#Environments) you MUST include the `--env ENV_NAME` flag. #### Common Codeception Flags: @@ -150,17 +168,17 @@ You can run the Codeception tests directly without using Robo if you'd like. To #### Examples -* Run ALL Acceptance Tests without an @env tag: `codecept run acceptance` -* Run ALL Acceptance Tests without the "skip" @group: `codecept run acceptance --skip-group skip` -* Run ALL Acceptance Tests with the @group tag "example" without the "skip" @group tests: `codecept run acceptance --group example --skip-group skip` +* Run ALL Functional Tests without an @env tag: `./vendor/bin/codecept run functional` +* Run ALL Functional Tests without the "skip" @group: `./vendor/bin/codecept run functional --skip-group skip` +* Run ALL Functional Tests with the @group tag "example" without the "skip" @group tests: `./vendor/bin/codecept run functional --group example --skip-group skip` ## Run Tests using Robo -* Run all Acceptance Tests using the @env tag "chrome": `robo chrome` -* Run all Acceptance Tests using the @env tag "firefox": `robo firefox` -* Run all Acceptance Tests using the @env tag "phantomjs": `robo phantomjs` -* Run all Acceptance Tests using the @group tag "example": `robo example` -* Run all Acceptance Tests using the provided @group tag: `robo group GROUP_NAME` -* Run all Acceptance Tests listed under the provided Folder Path: `robo folder tests/acceptance/Magento/AcceptanceTest/MODULE_NAME` +* Run all Functional Tests using the @env tag "chrome": `./vendor/bin/robo chrome` +* Run all Functional Tests using the @env tag "firefox": `./vendor/bin/robo firefox` +* Run all Functional Tests using the @env tag "phantomjs": `./vendor/bin/robo phantomjs` +* Run all Functional Tests using the @group tag "example": `./vendor/bin/robo example` +* Run all Functional Tests using the provided @group tag: `./vendor/bin/robo group GROUP_NAME` +* Run all Functional Tests listed under the provided Folder Path: `./vendor/bin/robo folder dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MODULE_NAME` ---- @@ -180,14 +198,14 @@ You can run the following commands in the Terminal to generate and open an Allur You can run the following Robo commands in the Terminal to generate and open an Allure report (Run the following terminal command for the Allure version: `allure --version`): ##### Allure v1.x.x -* Build the Report: `robo allure1:generate` -* Open the Report: `robo allure1:open` -* Build/Open the Report: `robo allure1:report` +* Build the Report: `./vendor/bin/robo allure1:generate` +* Open the Report: `./vendor/bin/robo allure1:open` +* Build/Open the Report: `./vendor/bin/robo allure1:report` ##### Allure v2.x.x -* Build the Report: `robo allure2:generate` -* Open the Report: `robo allure2:open` -* Build/Open the Report: `robo allure2:report` +* Build the Report: `./vendor/bin/robo allure2:generate` +* Open the Report: `./vendor/bin/robo allure2:open` +* Build/Open the Report: `./vendor/bin/robo allure2:report` ---- @@ -199,9 +217,9 @@ Due to the interdependent nature of the 2 repos it is recommended to Symlink the # Troubleshooting * TimeZone Error - http://stackoverflow.com/questions/18768276/codeception-datetime-error * TimeZone List - http://php.net/manual/en/timezones.america.php -* System PATH - Make sure you have `vendor/bin/` and `vendor/` listed in your system path so you can run the `codecept` and `robo` commands directly: +* System PATH - Make sure you have `./vendor/bin/`, `vendor/bin/` and `vendor/` listed in your system path so you can run the `codecept` and `robo` commands directly: - `sudo nano /etc/private/paths` + `sudo nano /etc/paths` * StackOverflow Help: https://stackoverflow.com/questions/7703041/editing-path-variable-on-mac * Allure `@env error` - Allure recently changed their Codeception Adapter that breaks Codeception when tests include the `@env` tag. A workaround for this error is to revert the changes they made to a function. @@ -225,4 +243,4 @@ public function _initialize(array $ignoredAnnotations = []) Model\Provider::setOutputDirectory($outputDirectory); } } -``` \ No newline at end of file +``` diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php index e41816cccbf11..4f6346de148ed 100644 --- a/dev/tests/acceptance/RoboFile.php +++ b/dev/tests/acceptance/RoboFile.php @@ -13,15 +13,6 @@ class RoboFile extends \Robo\Tasks { use Robo\Task\Base\loadShortcuts; - /** - * Complete all Project Setup tasks - */ - function setup() - { - $this->_exec('vendor/bin/robo clone:files'); - $this->_exec('vendor/bin/codecept build'); - } - /** * Duplicate the Example configuration files used to customize the Project for customization */ @@ -33,12 +24,13 @@ function cloneFiles() } /** + * Clone the Example configuration files * Build the Codeception project */ function buildProject() { $this->cloneFiles(); - $this->_exec('vendor/bin/codecept build'); + $this->_exec('./vendor/bin/codecept build'); } /** @@ -56,7 +48,7 @@ function generateTests() */ function chrome() { - $this->_exec('codecept run functional --env chrome --skip-group skip'); + $this->_exec('./vendor/bin/codecept run functional --env chrome --skip-group skip'); } /** @@ -64,7 +56,7 @@ function chrome() */ function firefox() { - $this->_exec('codecept run functional --env firefox --skip-group skip'); + $this->_exec('./vendor/bin/codecept run functional --env firefox --skip-group skip'); } /** @@ -72,7 +64,7 @@ function firefox() */ function phantomjs() { - $this->_exec('codecept run functional --env phantomjs --skip-group skip'); + $this->_exec('./vendor/bin/codecept run functional --env phantomjs --skip-group skip'); } /** @@ -80,7 +72,7 @@ function phantomjs() */ function group($args = '') { - $this->taskExec('codecept run functional --verbose --steps --env chrome --skip-group skip --group')->args($args)->run(); + $this->taskExec('./vendor/bin/codecept run functional --verbose --steps --env chrome --skip-group skip --group')->args($args)->run(); } /** @@ -88,7 +80,7 @@ function group($args = '') */ function folder($args = '') { - $this->taskExec('codecept run functional --env chrome')->args($args)->run(); + $this->taskExec('./vendor/bin/codecept run functional --env chrome')->args($args)->run(); } /** @@ -96,7 +88,7 @@ function folder($args = '') */ function example() { - $this->_exec('codecept run --env chrome --group example --skip-group skip'); + $this->_exec('./vendor/bin/codecept run --env chrome --group example --skip-group skip'); } /** From e536c491955f7fc3836106c62ec37deb066d0ad2 Mon Sep 17 00:00:00 2001 From: Kevin Kozan <kkozan@magento.com> Date: Wed, 27 Sep 2017 21:14:51 +0300 Subject: [PATCH 061/653] MQE-292: Use "selector" name consistently instead of "locator" - Renamed all occurences of locator to selector. --- .../Backend/Section/AdminLoginFormSection.xml | 6 +- .../Backend/Section/AdminMessagesSection.xml | 4 +- .../AdminCategoryBasicFieldSection.xml | 6 +- .../AdminCategoryMainActionsSection.xml | 2 +- .../Section/AdminCategoryMessagesSection.xml | 2 +- .../Section/AdminCategorySEOSection.xml | 10 +-- .../AdminCategorySidebarActionSection.xml | 4 +- .../AdminCategorySidebarTreeSection.xml | 4 +- .../Section/AdminProductFormActionSection.xml | 2 +- .../Section/AdminProductFormSection.xml | 66 +++++++++---------- .../Section/AdminProductGridActionSection.xml | 6 +- .../Section/AdminProductGridSection.xml | 4 +- .../Section/AdminProductMessagesSection.xml | 2 +- .../Section/AdminProductSEOSection.xml | 4 +- .../Section/StorefrontCategoryMainSection.xml | 10 +-- .../Section/StorefrontMessagesSection.xml | 2 +- .../Section/StorefrontMiniCartSection.xml | 6 +- .../StorefrontProductInfoDetailsSection.xml | 2 +- .../StorefrontProductInfoMainSection.xml | 12 ++-- .../Section/CheckoutOrderSummarySection.xml | 8 +-- .../Section/CheckoutPaymentSection.xml | 6 +- .../CheckoutShippingGuestInfoSection.xml | 16 ++--- .../CheckoutShippingMethodsSection.xml | 4 +- .../Section/CheckoutShippingSection.xml | 4 +- .../Section/CheckoutSuccessMainSection.xml | 6 +- .../Section/GuestCheckoutPaymentSection.xml | 6 +- .../Section/GuestCheckoutShippingSection.xml | 20 +++--- .../Section/CmsNewPagePageActionsSection.xml | 2 +- .../CmsNewPagePageBasicFieldsSection.xml | 2 +- .../Section/CmsNewPagePageContentSection.xml | 6 +- .../Cms/Section/CmsNewPagePageSeoSection.xml | 4 +- .../Section/CmsPagesPageActionsSection.xml | 2 +- .../Section/AdminCustomerFiltersSection.xml | 6 +- .../Section/AdminCustomerGridSection.xml | 2 +- .../AdminCustomerMainActionsSection.xml | 2 +- .../Section/AdminCustomerMessagesSection.xml | 2 +- ...inNewCustomerAccountInformationSection.xml | 6 +- .../AdminNewCustomerMainActionsSection.xml | 2 +- .../StorefrontCustomerCreateFormSection.xml | 12 ++-- ...omerDashboardAccountInformationSection.xml | 2 +- .../StorefrontCustomerSignInFormSection.xml | 6 +- .../Section/StorefrontPanelHeaderSection.xml | 2 +- .../InvoiceDetailsInformationSection.xml | 2 +- .../Sales/Section/InvoiceNewSection.xml | 2 +- .../Sales/Section/InvoicesFiltersSection.xml | 2 +- .../Sales/Section/InvoicesGridSection.xml | 6 +- .../OrderDetailsInformationSection.xml | 10 +-- .../Section/OrderDetailsInvoicesSection.xml | 4 +- .../OrderDetailsMainActionsSection.xml | 16 ++--- .../Section/OrderDetailsMessagesSection.xml | 2 +- .../Section/OrderDetailsOrderViewSection.xml | 4 +- .../Sales/Section/OrdersGridSection.xml | 14 ++-- .../Templates/TemplateSectionFile.xml | 2 +- 53 files changed, 173 insertions(+), 173 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminLoginFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminLoginFormSection.xml index 532a354da12dd..762aa002492cf 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminLoginFormSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminLoginFormSection.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminLoginFormSection"> - <element name="username" type="input" locator="#username"/> - <element name="password" type="input" locator="#login"/> - <element name="signIn" type="button" locator=".actions .action-primary" timeout="30"/> + <element name="username" type="input" selector="#username"/> + <element name="password" type="input" selector="#login"/> + <element name="signIn" type="button" selector=".actions .action-primary" timeout="30"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminMessagesSection.xml index b77233ab260d7..591731f53e0a8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Section/AdminMessagesSection.xml @@ -7,8 +7,8 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + xsi:noNamespaceSchemaLocation="../../../../../../../../../../magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminMessagesSection"> - <element name="test" type="input" locator=".test"/> + <element name="test" type="input" selector=".test"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml index 5720e198df098..4a55b4db465b3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCategoryBasicFieldSection"> - <element name="IncludeInMenu" type="checkbox" locator="input[name='include_in_menu']"/> - <element name="EnableCategory" type="checkbox" locator="input[name='is_active']"/> - <element name="CategoryNameInput" type="input" locator="input[name='name']"/> + <element name="IncludeInMenu" type="checkbox" selector="input[name='include_in_menu']"/> + <element name="EnableCategory" type="checkbox" selector="input[name='is_active']"/> + <element name="CategoryNameInput" type="input" selector="input[name='name']"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml index 425b98d2a4f00..2ca068f0c10e2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCategoryMainActionsSection"> - <element name="SaveButton" type="button" locator=".page-actions-inner #save" timeout="30"/> + <element name="SaveButton" type="button" selector=".page-actions-inner #save" timeout="30"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml index f58e66f9cd994..bf8b4f7954251 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCategoryMessagesSection"> - <element name="SuccessMessage" type="text" locator=".message-success"/> + <element name="SuccessMessage" type="text" selector=".message-success"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml index f6780f1eb32c2..078e591b535e0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml @@ -9,10 +9,10 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCategorySEOSection"> - <element name="SectionHeader" type="button" locator="div[data-index='search_engine_optimization']" timeout="30"/> - <element name="UrlKeyInput" type="input" locator="input[name='url_key']"/> - <element name="MetaTitleInput" type="input" locator="input[name='meta_title']"/> - <element name="MetaKeywordsInput" type="textarea" locator="textarea[name='meta_keywords']"/> - <element name="MetaDescriptionInput" type="textarea" locator="textarea[name='meta_description']"/> + <element name="SectionHeader" type="button" selector="div[data-index='search_engine_optimization']" timeout="30"/> + <element name="UrlKeyInput" type="input" selector="input[name='url_key']"/> + <element name="MetaTitleInput" type="input" selector="input[name='meta_title']"/> + <element name="MetaKeywordsInput" type="textarea" selector="textarea[name='meta_keywords']"/> + <element name="MetaDescriptionInput" type="textarea" selector="textarea[name='meta_description']"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml index 0847d22984831..99ec25950216e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml @@ -9,7 +9,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCategorySidebarActionSection"> - <element name="AddRootCategoryButton" type="button" locator="#add_root_category_button" timeout="30"/> - <element name="AddSubcategoryButton" type="button" locator="#add_subcategory_button" timeout="30"/> + <element name="AddRootCategoryButton" type="button" selector="#add_root_category_button" timeout="30"/> + <element name="AddSubcategoryButton" type="button" selector="#add_subcategory_button" timeout="30"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml index 6bbf3876fb4d1..d6ddd44bda5b5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml @@ -9,7 +9,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCategorySidebarTreeSection"> - <element name="Collapse All" type="button" locator=".tree-actions a:first-child"/> - <element name="Expand All" type="button" locator=".tree-actions a:last-child"/> + <element name="Collapse All" type="button" selector=".tree-actions a:first-child"/> + <element name="Expand All" type="button" selector=".tree-actions a:last-child"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormActionSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormActionSection.xml index f7b7b989ace1d..696e6cacc3e24 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormActionSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormActionSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminProductFormActionSection"> - <element name="saveButton" type="button" locator="#save-button" timeout="30"/> + <element name="saveButton" type="button" selector="#save-button" timeout="30"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml index a23112065fdde..7b3f629290842 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml @@ -9,49 +9,49 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminProductFormSection"> - <element name="productName" type="input" locator=".admin__field[data-index=name] input"/> - <element name="productSku" type="input" locator=".admin__field[data-index=sku] input"/> - <element name="productPrice" type="input" locator=".admin__field[data-index=price] input"/> - <element name="categoriesDropdown" type="multiselect" locator="div[data-index='category_ids']"/> - <element name="productQuantity" type="input" locator=".admin__field[data-index=qty] input"/> + <element name="productName" type="input" selector=".admin__field[data-index=name] input"/> + <element name="productSku" type="input" selector=".admin__field[data-index=sku] input"/> + <element name="productPrice" type="input" selector=".admin__field[data-index=price] input"/> + <element name="categoriesDropdown" type="multiselect" selector="div[data-index='category_ids']"/> + <element name="productQuantity" type="input" selector=".admin__field[data-index=qty] input"/> </section> <section name="AdminProductFormConfigurationsSection"> - <element name="createConfigurations" type="button" locator="button[data-index='create_configurable_products_button']" timeout="30"/> - <element name="currentVariationsRows" type="button" locator=".data-row"/> - <element name="currentVariationsNameCells" type="textarea" locator=".admin__control-fields[data-index='name_container']"/> - <element name="currentVariationsSkuCells" type="textarea" locator=".admin__control-fields[data-index='sku_container']"/> - <element name="currentVariationsPriceCells" type="textarea" locator=".admin__control-fields[data-index='price_container']"/> - <element name="currentVariationsQuantityCells" type="textarea" locator=".admin__control-fields[data-index='quantity_container']"/> - <element name="currentVariationsAttributesCells" type="textarea" locator=".admin__control-fields[data-index='attributes']"/> + <element name="createConfigurations" type="button" selector="button[data-index='create_configurable_products_button']" timeout="30"/> + <element name="currentVariationsRows" type="button" selector=".data-row"/> + <element name="currentVariationsNameCells" type="textarea" selector=".admin__control-fields[data-index='name_container']"/> + <element name="currentVariationsSkuCells" type="textarea" selector=".admin__control-fields[data-index='sku_container']"/> + <element name="currentVariationsPriceCells" type="textarea" selector=".admin__control-fields[data-index='price_container']"/> + <element name="currentVariationsQuantityCells" type="textarea" selector=".admin__control-fields[data-index='quantity_container']"/> + <element name="currentVariationsAttributesCells" type="textarea" selector=".admin__control-fields[data-index='attributes']"/> </section> <section name="AdminCreateProductConfigurationsPanel"> - <element name="next" type="button" locator=".steps-wizard-navigation .action-next-step" timeout="30"/> - <element name="createNewAttribute" type="button" locator=".select-attributes-actions button[title='Create New Attribute']" timeout="30"/> - <element name="filters" type="button" locator="button[data-action='grid-filter-expand']"/> - <element name="attributeCode" type="input" locator=".admin__control-text[name='attribute_code']"/> - <element name="applyFilters" type="button" locator="button[data-action='grid-filter-apply']" timeout="30"/> - <element name="firstCheckbox" type="input" locator="tr[data-repeat-index='0'] .admin__control-checkbox"/> + <element name="next" type="button" selector=".steps-wizard-navigation .action-next-step" timeout="30"/> + <element name="createNewAttribute" type="button" selector=".select-attributes-actions button[title='Create New Attribute']" timeout="30"/> + <element name="filters" type="button" selector="button[data-action='grid-filter-expand']"/> + <element name="attributeCode" type="input" selector=".admin__control-text[name='attribute_code']"/> + <element name="applyFilters" type="button" selector="button[data-action='grid-filter-apply']" timeout="30"/> + <element name="firstCheckbox" type="input" selector="tr[data-repeat-index='0'] .admin__control-checkbox"/> - <element name="selectAll" type="button" locator=".action-select-all"/> - <element name="createNewValue" type="input" locator=".action-create-new" timeout="30"/> - <element name="attributeName" type="input" locator="li[data-attribute-option-title=''] .admin__field-create-new .admin__control-text"/> - <element name="saveAttribute" type="button" locator="li[data-attribute-option-title=''] .action-save" timeout="30"/> + <element name="selectAll" type="button" selector=".action-select-all"/> + <element name="createNewValue" type="input" selector=".action-create-new" timeout="30"/> + <element name="attributeName" type="input" selector="li[data-attribute-option-title=''] .admin__field-create-new .admin__control-text"/> + <element name="saveAttribute" type="button" selector="li[data-attribute-option-title=''] .action-save" timeout="30"/> - <element name="applyUniquePricesByAttributeToEachSku" type="radio" locator=".admin__field-label[for='apply-unique-prices-radio']"/> - <element name="selectAttribute" type="select" locator="#select-each-price" timeout="30"/> - <element name="attribute1" type="input" locator="#apply-single-price-input-0"/> - <element name="attribute2" type="input" locator="#apply-single-price-input-1"/> - <element name="attribute3" type="input" locator="#apply-single-price-input-2"/> + <element name="applyUniquePricesByAttributeToEachSku" type="radio" selector=".admin__field-label[for='apply-unique-prices-radio']"/> + <element name="selectAttribute" type="select" selector="#select-each-price" timeout="30"/> + <element name="attribute1" type="input" selector="#apply-single-price-input-0"/> + <element name="attribute2" type="input" selector="#apply-single-price-input-1"/> + <element name="attribute3" type="input" selector="#apply-single-price-input-2"/> - <element name="applySingleQuantityToEachSkus" type="radio" locator=".admin__field-label[for='apply-single-inventory-radio']" timeout="30"/> - <element name="quantity" type="input" locator="#apply-single-inventory-input"/> + <element name="applySingleQuantityToEachSkus" type="radio" selector=".admin__field-label[for='apply-single-inventory-radio']" timeout="30"/> + <element name="quantity" type="input" selector="#apply-single-inventory-input"/> </section> <section name="AdminNewAttributePanel"> - <element name="saveAttribute" type="button" locator="#save" timeout="30"/> - <element name="newAttributeIFrame" type="iframe" locator="create_new_attribute_container"/> - <element name="defaultLabel" type="input" locator="#attribute_label"/> + <element name="saveAttribute" type="button" selector="#save" timeout="30"/> + <element name="newAttributeIFrame" type="iframe" selector="create_new_attribute_container"/> + <element name="defaultLabel" type="input" selector="#attribute_label"/> </section> <section name="AdminChooseAffectedAttributeSetPopup"> - <element name="confirm" type="button" locator="button[data-index='confirm_button']" timeout="30"/> + <element name="confirm" type="button" selector="button[data-index='confirm_button']" timeout="30"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridActionSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridActionSection.xml index e45c67c0dcf85..866bcb4223e9f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridActionSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridActionSection.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminProductGridActionSection"> - <element name="addProductToggle" type="button" locator=".action-toggle.primary.add" timeout="30"/> - <element name="addSimpleProduct" type="button" locator=".item[data-ui-id='products-list-add-new-product-button-item-simple']" timeout="30"/> - <element name="addConfigurableProduct" type="button" locator=".item[data-ui-id='products-list-add-new-product-button-item-configurable']" timeout="30"/> + <element name="addProductToggle" type="button" selector=".action-toggle.primary.add" timeout="30"/> + <element name="addSimpleProduct" type="button" selector=".item[data-ui-id='products-list-add-new-product-button-item-simple']" timeout="30"/> + <element name="addConfigurableProduct" type="button" selector=".item[data-ui-id='products-list-add-new-product-button-item-configurable']" timeout="30"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml index feecb1cc8f06f..db8b641c9d2f4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductGridSection.xml @@ -9,7 +9,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminProductGridSection"> - <element name="productGridElement1" type="input" locator="#addLocator" /> - <element name="productGridElement2" type="text" locator="#addLocator" /> + <element name="productGridElement1" type="input" selector="#addselector" /> + <element name="productGridElement2" type="text" selector="#addselector" /> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml index 860fdbe398ac7..f20d3f51becde 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminProductMessagesSection"> - <element name="successMessage" type="text" locator=".message-success"/> + <element name="successMessage" type="text" selector=".message-success"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml index d994a1d739020..1f9fc4fc3fc61 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml @@ -9,7 +9,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminProductSEOSection"> - <element name="sectionHeader" type="button" locator="div[data-index='search-engine-optimization']" timeout="30"/> - <element name="urlKeyInput" type="input" locator="input[name='product[url_key]']"/> + <element name="sectionHeader" type="button" selector="div[data-index='search-engine-optimization']" timeout="30"/> + <element name="urlKeyInput" type="input" selector="input[name='product[url_key]']"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryMainSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryMainSection.xml index c3dbe95bc6bce..83622dd759f24 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryMainSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontCategoryMainSection.xml @@ -9,10 +9,10 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="StorefrontCategoryMainSection"> - <element name="CategoryTitle" type="text" locator="#page-title-heading span"/> - <element name="ProductItemInfo" type="button" locator=".product-item-info"/> - <element name="AddToCartBtn" type="button" locator="button.action.tocart.primary"/> - <element name="SuccessMsg" type="button" locator="div.message-success"/> - <element name="productCount" type="text" locator="#toolbar-amount"/> + <element name="CategoryTitle" type="text" selector="#page-title-heading span"/> + <element name="ProductItemInfo" type="button" selector=".product-item-info"/> + <element name="AddToCartBtn" type="button" selector="button.action.tocart.primary"/> + <element name="SuccessMsg" type="button" selector="div.message-success"/> + <element name="productCount" type="text" selector="#toolbar-amount"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMessagesSection.xml index dcfc2564d3cab..a7036388814df 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMessagesSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="StorefrontMessagesSection"> - <element name="test" type="input" locator=".test"/> + <element name="test" type="input" selector=".test"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMiniCartSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMiniCartSection.xml index fd814766ea6ea..db9e1cd4b23ed 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMiniCartSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontMiniCartSection.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="StorefrontMiniCartSection"> - <element name="quantity" type="button" locator="span.counter-number"/> - <element name="show" type="button" locator="a.showcart"/> - <element name="goToCheckout" type="button" locator="#top-cart-btn-checkout"/> + <element name="quantity" type="button" selector="span.counter-number"/> + <element name="show" type="button" selector="a.showcart"/> + <element name="goToCheckout" type="button" selector="#top-cart-btn-checkout"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoDetailsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoDetailsSection.xml index ebdff90a69da7..742dbac0e0886 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoDetailsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoDetailsSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="StorefrontProductInfoDetailsSection"> - <element name="productNameForReview" type="text" locator=".legend.review-legend>strong" /> + <element name="productNameForReview" type="text" selector=".legend.review-legend>strong" /> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoMainSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoMainSection.xml index 22b55bb879fb6..78940343506be 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoMainSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/StorefrontProductInfoMainSection.xml @@ -9,12 +9,12 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="StorefrontProductInfoMainSection"> - <element name="productName" type="text" locator=".base"/> - <element name="productSku" type="text" locator=".product.attribute.sku>.value"/> - <element name="productPrice" type="text" locator=".price"/> - <element name="productStockStatus" type="text" locator=".stock[title=Availability]>span"/> + <element name="productName" type="text" selector=".base"/> + <element name="productSku" type="text" selector=".product.attribute.sku>.value"/> + <element name="productPrice" type="text" selector=".price"/> + <element name="productStockStatus" type="text" selector=".stock[title=Availability]>span"/> - <element name="productAttributeTitle1" type="text" locator="#product-options-wrapper div[tabindex='0'] label"/> - <element name="productAttributeOptions1" type="select" locator="#product-options-wrapper div[tabindex='0'] option"/> + <element name="productAttributeTitle1" type="text" selector="#product-options-wrapper div[tabindex='0'] label"/> + <element name="productAttributeOptions1" type="select" selector="#product-options-wrapper div[tabindex='0'] option"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutOrderSummarySection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutOrderSummarySection.xml index 319bafca8c250..5b45d1a24b3aa 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutOrderSummarySection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutOrderSummarySection.xml @@ -9,9 +9,9 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="CheckoutOrderSummarySection"> - <element name="miniCartTab" type="button" locator=".title[role='tab']"/> - <element name="productItemName" type="text" locator=".product-item-name"/> - <element name="productItemQty" type="text" locator=".value"/> - <element name="productItemPrice" type="text" locator=".price"/> + <element name="miniCartTab" type="button" selector=".title[role='tab']"/> + <element name="productItemName" type="text" selector=".product-item-name"/> + <element name="productItemQty" type="text" selector=".value"/> + <element name="productItemPrice" type="text" selector=".price"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml index fc616a51207cf..29f97e8defaff 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutPaymentSection.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="CheckoutPaymentSection"> - <element name="cartItems" type="text" locator=".minicart-items"/> - <element name="billingAddress" type="text" locator="div.billing-address-details"/> - <element name="placeOrder" type="button" locator="button.action.primary.checkout" timeout="30"/> + <element name="cartItems" type="text" selector=".minicart-items"/> + <element name="billingAddress" type="text" selector="div.billing-address-details"/> + <element name="placeOrder" type="button" selector="button.action.primary.checkout" timeout="30"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingGuestInfoSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingGuestInfoSection.xml index a783d5ea7aa50..bbe8b0b1fee5f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingGuestInfoSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingGuestInfoSection.xml @@ -9,13 +9,13 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="CheckoutShippingGuestInfoSection"> - <element name="email" type="input" locator="#customer-email"/> - <element name="firstName" type="input" locator="input[name=firstname]"/> - <element name="lastName" type="input" locator="input[name=lastname]"/> - <element name="street" type="input" locator="input[name='street[0]']"/> - <element name="city" type="input" locator="input[name=city]"/> - <element name="region" type="select" locator="select[name=region_id]"/> - <element name="postcode" type="input" locator="input[name=postcode]"/> - <element name="telephone" type="input" locator="input[name=telephone]"/> + <element name="email" type="input" selector="#customer-email"/> + <element name="firstName" type="input" selector="input[name=firstname]"/> + <element name="lastName" type="input" selector="input[name=lastname]"/> + <element name="street" type="input" selector="input[name='street[0]']"/> + <element name="city" type="input" selector="input[name=city]"/> + <element name="region" type="select" selector="select[name=region_id]"/> + <element name="postcode" type="input" selector="input[name=postcode]"/> + <element name="telephone" type="input" selector="input[name=telephone]"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingMethodsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingMethodsSection.xml index dbe09299929f7..52653d15c41c5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingMethodsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingMethodsSection.xml @@ -9,7 +9,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="CheckoutShippingMethodsSection"> - <element name="next" type="button" locator="button.button.action.continue.primary"/> - <element name="firstShippingMethod" type="radio" locator=".row:nth-of-type(1) .col-method .radio"/> + <element name="next" type="button" selector="button.button.action.continue.primary"/> + <element name="firstShippingMethod" type="radio" selector=".row:nth-of-type(1) .col-method .radio"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml index 364c2d92c1d46..3e507dbb898a8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutShippingSection.xml @@ -9,7 +9,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="CheckoutShippingSection"> - <element name="selectedShippingAddress" type="text" locator=".shipping-address-item.selected-item"/> - <element name="newAddressButton" type="button" locator="#checkout-step-shipping button"/> + <element name="selectedShippingAddress" type="text" selector=".shipping-address-item.selected-item"/> + <element name="newAddressButton" type="button" selector="#checkout-step-shipping button"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutSuccessMainSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutSuccessMainSection.xml index cb47bf9900e70..9204bf51344ce 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutSuccessMainSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/CheckoutSuccessMainSection.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="CheckoutSuccessMainSection"> - <element name="success" type="text" locator="div.checkout-success"/> - <element name="orderNumber" type="text" locator="div.checkout-success > p:nth-child(1) > span"/> - <element name="orderNumber22" type="text" locator=".order-number>strong"/> + <element name="success" type="text" selector="div.checkout-success"/> + <element name="orderNumber" type="text" selector="div.checkout-success > p:nth-child(1) > span"/> + <element name="orderNumber22" type="text" selector=".order-number>strong"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml index 7050068ba27af..200a699d2bb51 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="GuestCheckoutPaymentSection"> - <element name="cartItems" type="text" locator=".minicart-items"/> - <element name="billingAddress" type="text" locator="div.billing-address-details"/> - <element name="placeOrder" type="button" locator="button.action.primary.checkout" timeout="30"/> + <element name="cartItems" type="text" selector=".minicart-items"/> + <element name="billingAddress" type="text" selector="div.billing-address-details"/> + <element name="placeOrder" type="button" selector="button.action.primary.checkout" timeout="30"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutShippingSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutShippingSection.xml index a2606edb37972..b2cca4d8f37ba 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutShippingSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutShippingSection.xml @@ -9,15 +9,15 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="GuestCheckoutShippingSection"> - <element name="email" type="input" locator="#customer-email"/> - <element name="firstName" type="input" locator="input[name=firstname]"/> - <element name="lastName" type="input" locator="input[name=lastname]"/> - <element name="street" type="input" locator="input[name='street[0]']"/> - <element name="city" type="input" locator="input[name=city]"/> - <element name="region" type="select" locator="select[name=region_id]"/> - <element name="postcode" type="input" locator="input[name=postcode]"/> - <element name="telephone" type="input" locator="input[name=telephone]"/> - <element name="next" type="button" locator="button.button.action.continue.primary"/> - <element name="firstShippingMethod" type="radio" locator=".row:nth-of-type(1) .col-method .radio"/> + <element name="email" type="input" selector="#customer-email"/> + <element name="firstName" type="input" selector="input[name=firstname]"/> + <element name="lastName" type="input" selector="input[name=lastname]"/> + <element name="street" type="input" selector="input[name='street[0]']"/> + <element name="city" type="input" selector="input[name=city]"/> + <element name="region" type="select" selector="select[name=region_id]"/> + <element name="postcode" type="input" selector="input[name=postcode]"/> + <element name="telephone" type="input" selector="input[name=telephone]"/> + <element name="next" type="button" selector="button.button.action.continue.primary"/> + <element name="firstShippingMethod" type="radio" selector=".row:nth-of-type(1) .col-method .radio"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageActionsSection.xml index bb5e854078bb1..521489186e4ca 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageActionsSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="CmsNewPagePageActionsSection"> - <element name="savePage" type="button" locator="#save" timeout="30"/> + <element name="savePage" type="button" selector="#save" timeout="30"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageBasicFieldsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageBasicFieldsSection.xml index e5f314a0fb538..6cd0bfc98c881 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageBasicFieldsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageBasicFieldsSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="CmsNewPagePageBasicFieldsSection"> - <element name="pageTitle" type="input" locator="input[name=title]"/> + <element name="pageTitle" type="input" selector="input[name=title]"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageContentSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageContentSection.xml index c0da938d99bf4..3983259632cd8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageContentSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageContentSection.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="CmsNewPagePageContentSection"> - <element name="header" type="button" locator="div[data-index=content]"/> - <element name="contentHeading" type="input" locator="input[name=content_heading]"/> - <element name="content" type="input" locator="#cms_page_form_content"/> + <element name="header" type="button" selector="div[data-index=content]"/> + <element name="contentHeading" type="input" selector="input[name=content_heading]"/> + <element name="content" type="input" selector="#cms_page_form_content"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageSeoSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageSeoSection.xml index 8f541c0bbf107..56dbe2fad0058 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageSeoSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsNewPagePageSeoSection.xml @@ -9,7 +9,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="CmsNewPagePageSeoSection"> - <element name="header" type="button" locator="div[data-index=search_engine_optimisation]" timeout="30"/> - <element name="urlKey" type="input" locator="input[name=identifier]"/> + <element name="header" type="button" selector="div[data-index=search_engine_optimisation]" timeout="30"/> + <element name="urlKey" type="input" selector="input[name=identifier]"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsPagesPageActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsPagesPageActionsSection.xml index 75c1c46ed1bc9..fe759a66cd6d9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsPagesPageActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Section/CmsPagesPageActionsSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="CmsPagesPageActionsSection"> - <element name="addNewPage" type="button" locator="#add" timeout="30"/> + <element name="addNewPage" type="button" selector="#add" timeout="30"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml index ea9961bb27515..40a5fc2f11927 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCustomerFiltersSection"> - <element name="filtersButton" type="button" locator="#container > div > div.admin__data-grid-header > div:nth-child(1) > div.data-grid-filters-actions-wrap > div > button" timeout="30"/> - <element name="nameInput" type="input" locator="input[name=name]"/> - <element name="apply" type="button" locator="button[data-action=grid-filter-apply]" timeout="30"/> + <element name="filtersButton" type="button" selector="#container > div > div.admin__data-grid-header > div:nth-child(1) > div.data-grid-filters-actions-wrap > div > button" timeout="30"/> + <element name="nameInput" type="input" selector="input[name=name]"/> + <element name="apply" type="button" selector="button[data-action=grid-filter-apply]" timeout="30"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml index 12055b5314afa..ec6dd21c9ed1f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCustomerGridSection"> - <element name="customerGrid" type="text" locator="table[data-role='grid']"/> + <element name="customerGrid" type="text" selector="table[data-role='grid']"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml index fbdff1f9ca5c6..148958c49d675 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCustomerMainActionsSection"> - <element name="addNewCustomer" type="button" locator="#add" timeout="30"/> + <element name="addNewCustomer" type="button" selector="#add" timeout="30"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml index e82e4c1947e06..5871da67356fc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminCustomerMessagesSection"> - <element name="successMessage" type="text" locator=".message-success"/> + <element name="successMessage" type="text" selector=".message-success"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml index 5bdbef4407375..2e2c2930807c5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminNewCustomerAccountInformationSection"> - <element name="firstName" type="input" locator="input[name='customer[firstname]']"/> - <element name="lastName" type="input" locator="input[name='customer[lastname]']"/> - <element name="email" type="input" locator="input[name='customer[email]']"/> + <element name="firstName" type="input" selector="input[name='customer[firstname]']"/> + <element name="lastName" type="input" selector="input[name='customer[lastname]']"/> + <element name="email" type="input" selector="input[name='customer[email]']"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml index 9366c7c50df6c..18e7e45f992e7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminNewCustomerMainActionsSection"> - <element name="saveButton" type="button" locator="#save" timeout="30"/> + <element name="saveButton" type="button" selector="#save" timeout="30"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerCreateFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerCreateFormSection.xml index 33389a2013d7f..e578d9c064c87 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerCreateFormSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerCreateFormSection.xml @@ -9,11 +9,11 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="StorefrontCustomerCreateFormSection"> - <element name="firstnameField" type="input" locator="#firstname"/> - <element name="lastnameField" type="input" locator="#lastname"/> - <element name="emailField" type="input" locator="#email_address"/> - <element name="passwordField" type="input" locator="#password"/> - <element name="confirmPasswordField" type="input" locator="#password-confirmation"/> - <element name="createAccountButton" type="button" locator="button.action.submit.primary" timeout="30"/> + <element name="firstnameField" type="input" selector="#firstname"/> + <element name="lastnameField" type="input" selector="#lastname"/> + <element name="emailField" type="input" selector="#email_address"/> + <element name="passwordField" type="input" selector="#password"/> + <element name="confirmPasswordField" type="input" selector="#password-confirmation"/> + <element name="createAccountButton" type="button" selector="button.action.submit.primary" timeout="30"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml index 1bff734763647..0ed3b4cceed86 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="StorefrontCustomerDashboardAccountInformationSection"> - <element name="ContactInformation" type="textarea" locator=".box.box-information .box-content"/> + <element name="ContactInformation" type="textarea" selector=".box.box-information .box-content"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerSignInFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerSignInFormSection.xml index 00c6ed9282e43..41b14ac84c0a9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerSignInFormSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerSignInFormSection.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="StorefrontCustomerSignInFormSection"> - <element name="emailField" type="input" locator="#email"/> - <element name="passwordField" type="input" locator="#pass"/> - <element name="signInAccountButton" type="button" locator="#send2" timeout="30"/> + <element name="emailField" type="input" selector="#email"/> + <element name="passwordField" type="input" selector="#pass"/> + <element name="signInAccountButton" type="button" selector="#send2" timeout="30"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml index cd9f84ce0f1f4..0ada8563eee96 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="StorefrontPanelHeaderSection"> - <element name="createAnAccountLink" type="select" locator=".panel.header li:nth-child(3)"/> + <element name="createAnAccountLink" type="select" selector=".panel.header li:nth-child(3)"/> </section> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceDetailsInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceDetailsInformationSection.xml index 872e9ac007d28..0549247e8aa9d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceDetailsInformationSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceDetailsInformationSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="InvoiceDetailsInformationSection"> - <element name="orderStatus" type="text" locator="#order_status"/> + <element name="orderStatus" type="text" selector="#order_status"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceNewSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceNewSection.xml index 90e5c31f86637..282c9e675e2b4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceNewSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoiceNewSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="InvoiceNewSection"> - <element name="submitInvoice" type="button" locator=".action-default.scalable.save.submit-button.primary"/> + <element name="submitInvoice" type="button" selector=".action-default.scalable.save.submit-button.primary"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesFiltersSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesFiltersSection.xml index e14e651eb1aa2..9598199dcb7b4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesFiltersSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesFiltersSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="InvoicesFiltersSection"> - <element name="orderNum" type="input" locator="input[name='order_increment_id']"/> + <element name="orderNum" type="input" selector="input[name='order_increment_id']"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesGridSection.xml index aca1aaa747b7e..024b3db714142 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesGridSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/InvoicesGridSection.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="InvoicesGridSection"> - <element name="spinner" type="button" locator=".spinner"/> - <element name="filter" type="button" locator="#container > div > div.admin__data-grid-header > div:nth-child(1) > div.data-grid-filters-actions-wrap > div > button"/> - <element name="firstRow" type="button" locator="tr.data-row:nth-of-type(1)"/> + <element name="spinner" type="button" selector=".spinner"/> + <element name="filter" type="button" selector="#container > div > div.admin__data-grid-header > div:nth-child(1) > div.data-grid-filters-actions-wrap > div > button"/> + <element name="firstRow" type="button" selector="tr.data-row:nth-of-type(1)"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInformationSection.xml index 4f971c755d2b9..a8f8b3dc1e0e0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInformationSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInformationSection.xml @@ -9,10 +9,10 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="OrderDetailsInformationSection"> - <element name="orderStatus" type="text" locator="#order_status"/> - <element name="accountInformation" type="text" locator=".order-account-information-table"/> - <element name="billingAddress" type="text" locator=".order-billing-address"/> - <element name="shippingAddress" type="text" locator=".order-shipping-address"/> - <element name="itemsOrdered" type="text" locator=".edit-order-table"/> + <element name="orderStatus" type="text" selector="#order_status"/> + <element name="accountInformation" type="text" selector=".order-account-information-table"/> + <element name="billingAddress" type="text" selector=".order-billing-address"/> + <element name="shippingAddress" type="text" selector=".order-shipping-address"/> + <element name="itemsOrdered" type="text" selector=".edit-order-table"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInvoicesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInvoicesSection.xml index 7039fb3e25022..34d42ed419ba6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInvoicesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsInvoicesSection.xml @@ -9,7 +9,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="OrderDetailsInvoicesSection"> - <element name="spinner" type="button" locator=".spinner"/> - <element name="content" type="text" locator="#sales_order_view_tabs_order_invoices_content"/> + <element name="spinner" type="button" selector=".spinner"/> + <element name="content" type="text" selector="#sales_order_view_tabs_order_invoices_content"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMainActionsSection.xml index 78613e58d468c..9632c5e5ddb1f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMainActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMainActionsSection.xml @@ -9,13 +9,13 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="OrderDetailsMainActionsSection"> - <element name="back" type="button" locator="#back"/> - <element name="cancel" type="button" locator="#order-view-cancel-button"/> - <element name="sendEmail" type="button" locator="#send_notification"/> - <element name="hold" type="button" locator="#order-view-hold-button"/> - <element name="invoice" type="button" locator="#order_invoice"/> - <element name="ship" type="button" locator="#order_ship"/> - <element name="reorder" type="button" locator="#order_reorder"/> - <element name="edit" type="button" locator="#order_edit"/> + <element name="back" type="button" selector="#back"/> + <element name="cancel" type="button" selector="#order-view-cancel-button"/> + <element name="sendEmail" type="button" selector="#send_notification"/> + <element name="hold" type="button" selector="#order-view-hold-button"/> + <element name="invoice" type="button" selector="#order_invoice"/> + <element name="ship" type="button" selector="#order_ship"/> + <element name="reorder" type="button" selector="#order_reorder"/> + <element name="edit" type="button" selector="#order_edit"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMessagesSection.xml index b63c1da9a9887..dc32b61bde935 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsMessagesSection.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="OrderDetailsMessagesSection"> - <element name="successMessage" type="text" locator="div.message-success"/> + <element name="successMessage" type="text" selector="div.message-success"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsOrderViewSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsOrderViewSection.xml index 63c80a085e0a3..a3c48ecfc61bb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsOrderViewSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrderDetailsOrderViewSection.xml @@ -9,7 +9,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="OrderDetailsOrderViewSection"> - <element name="information" type="button" locator="#sales_order_view_tabs_order_info"/> - <element name="invoices" type="button" locator="#sales_order_view_tabs_order_invoices"/> + <element name="information" type="button" selector="#sales_order_view_tabs_order_info"/> + <element name="invoices" type="button" selector="#sales_order_view_tabs_order_invoices"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrdersGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrdersGridSection.xml index 2683305340f00..c0b3c84fb430f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrdersGridSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Section/OrdersGridSection.xml @@ -9,12 +9,12 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="OrdersGridSection"> - <element name="spinner" type="button" locator=".spinner"/> - <element name="gridLoadingMask" type="button" locator=".admin__data-grid-loading-mask"/> - <element name="search" type="input" locator="#fulltext"/> - <element name="submitSearch" type="button" locator=".//*[@id='container']/div/div[2]/div[1]/div[2]/button"/> - <element name="submitSearch22" type="button" locator=".//*[@class="admin__data-grid-filters-wrap"]/parent::*/div[@class="data-grid-search-control-wrap"]/button"/> - <element name="firstRow" type="button" locator="tr.data-row:nth-of-type(1)"/> - <element name="createNewOrder" type="button" locator="button[title='Create New Order'"/> + <element name="spinner" type="button" selector=".spinner"/> + <element name="gridLoadingMask" type="button" selector=".admin__data-grid-loading-mask"/> + <element name="search" type="input" selector="#fulltext"/> + <element name="submitSearch" type="button" selector=".//*[@id='container']/div/div[2]/div[1]/div[2]/button"/> + <element name="submitSearch22" type="button" selector=".//*[@class="admin__data-grid-filters-wrap"]/parent::*/div[@class="data-grid-search-control-wrap"]/button"/> + <element name="firstRow" type="button" selector="tr.data-row:nth-of-type(1)"/> + <element name="createNewOrder" type="button" selector="button[title='Create New Order'"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml index 9cf871a562ad3..df29d4c6a545a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml @@ -9,6 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name=""> - <element name="" type="" locator=""/> + <element name="" type="" selector=""/> </section> </config> \ No newline at end of file From 92664471f9097a7964a87979bd51138462655cc1 Mon Sep 17 00:00:00 2001 From: John S <ivy00johns@users.noreply.github.com> Date: Thu, 21 Sep 2017 22:03:39 +0300 Subject: [PATCH 062/653] MQE-350: Demos for Core and SE Teams - Adding unique="suffix" to data that was missed during the merge. 1 test fails without it. --- .../Magento/FunctionalTest/Catalog/Data/ProductData.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml index cdbcd2d130d09..55b7192405a87 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml @@ -24,7 +24,7 @@ <data key="sku" unique="suffix">SimpleProduct</data> <data key="type_id">simple</data> <data key="attribute_set_id">4</data> - <data key="name">SimpleProduct</data> + <data key="name" unique="suffix">SimpleProduct</data> <data key="price">123.00</data> <data key="visibility">4</data> <data key="status">1</data> From 995f013be0cf8a1c8ea723fd8a9913e2b50940fa Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Thu, 28 Sep 2017 22:32:29 +0300 Subject: [PATCH 063/653] MQE-369: [Data Input] Non Web Api Data Persistence --- .../Catalog/Metadata/category-meta.xml | 72 ++++++------ .../Metadata/custom_attribute-meta.xml | 19 ---- .../Catalog/Metadata/product-meta.xml | 68 ++++++------ .../product_extension_attribute-meta.xml | 4 +- .../Catalog/Metadata/product_link-meta.xml | 20 ++-- .../product_link_extension_attribute-meta.xml | 4 +- .../Catalog/Metadata/product_option-meta.xml | 52 ++++----- .../Metadata/product_option_value-meta.xml | 24 ++-- .../Catalog/Metadata/stock_item-meta.xml | 8 +- .../Customer/Metadata/address-meta.xml | 70 ++++++------ .../Metadata/custom_attribute-meta.xml | 8 +- .../Customer/Metadata/customer-meta.xml | 104 +++++++++--------- .../customer_extension_attribute-meta.xml | 8 +- ...stomer_nested_extension_attribute-meta.xml | 12 +- .../Customer/Metadata/region-meta.xml | 16 +-- .../Store/Cest/AdminCreateStoreGroupCest.xml | 47 ++++++++ .../FunctionalTest/Store/Data/StoreData.xml | 14 +++ .../Store/Data/StoreGroupData.xml | 13 +++ .../Store/Metadata/store-meta.xml | 17 +++ .../Store/Metadata/store_group-meta.xml | 18 +++ .../Store/Page/AdminSystemStorePage.xml | 8 ++ .../Section/AdminNewStoreGroupSection.xml | 7 ++ .../Store/Section/AdminNewStoreSection.xml | 9 ++ .../Store/Section/AdminStoresGridSection.xml | 13 +++ .../Section/AdminStoresMainActionsSection.xml | 9 ++ 25 files changed, 387 insertions(+), 257 deletions(-) delete mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreGroupData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store_group-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Page/AdminSystemStorePage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreGroupSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresGridSection.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresMainActionsSection.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml index 7299e47ae1d34..2594124265180 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml @@ -1,62 +1,56 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- - /** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ ---> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> - <operation name="CreateCategory" dataType="category" type="create" auth="/rest/V1/integration/admin/token" url="/rest/V1/categories" method="POST"> - <header param="Content-Type">application/json</header> - <jsonObject key="category" dataType="category"> - <entry key="parent_id">integer</entry> - <entry key="name">string</entry> - <entry key="is_active">boolean</entry> - <entry key="position">integer</entry> - <entry key="level">integer</entry> - <entry key="children">string</entry> - <entry key="created_at">string</entry> - <entry key="updated_at">string</entry> - <entry key="path">string</entry> - <entry key="include_in_menu">boolean</entry> + <operation name="CreateCategory" dataType="category" type="create" auth="adminOauth" url="/V1/categories" method="POST"> + <contentType>application/json</contentType> + <object key="category" dataType="category"> + <field key="parent_id">integer</field> + <field key="name">string</field> + <field key="is_active">boolean</field> + <field key="position">integer</field> + <field key="level">integer</field> + <field key="children">string</field> + <field key="created_at">string</field> + <field key="updated_at">string</field> + <field key="path">string</field> + <field key="include_in_menu">boolean</field> <array key="available_sort_by"> <value>string</value> </array> - <entry key="extension_attributes">empty_extension_attribute</entry> + <field key="extension_attributes">empty_extension_attribute</field> <array key="custom_attributes"> <value>custom_attribute</value> </array> - </jsonObject> + </object> </operation> - <operation name="UpdateCategory" dataType="category" type="update" auth="/rest/V1/integration/admin/token" url="/rest/V1/categories" method="PUT"> - <header param="Content-Type">application/json</header> - <jsonObject key="category" dataType="category"> - <entry key="id">integer</entry> - <entry key="parent_id">integer</entry> - <entry key="name">string</entry> - <entry key="is_active">boolean</entry> - <entry key="position">integer</entry> - <entry key="level">integer</entry> - <entry key="children">string</entry> - <entry key="created_at">string</entry> - <entry key="updated_at">string</entry> - <entry key="path">string</entry> + <operation name="UpdateCategory" dataType="category" type="update" auth="adminOauth" url="/V1/categories" method="PUT"> + <contentType>application/json</contentType> + <object key="category" dataType="category"> + <field key="id">integer</field> + <field key="parent_id">integer</field> + <field key="name">string</field> + <field key="is_active">boolean</field> + <field key="position">integer</field> + <field key="level">integer</field> + <field key="children">string</field> + <field key="created_at">string</field> + <field key="updated_at">string</field> + <field key="path">string</field> <array key="available_sort_by"> <value>string</value> </array> - <entry key="include_in_menu">boolean</entry> - <entry key="extension_attributes">empty_extension_attribute</entry> + <field key="include_in_menu">boolean</field> + <field key="extension_attributes">empty_extension_attribute</field> <array key="custom_attributes"> <value>custom_attribute</value> </array> - </jsonObject> + </object> </operation> - <operation name="DeleteCategory" dataType="category" type="delete" auth="/rest/V1/integration/admin/token" url="/rest/V1/categories" method="DELETE"> - <header param="Content-Type">application/json</header> + <operation name="DeleteCategory" dataType="category" type="delete" auth="adminOauth" url="/V1/categories" method="DELETE"> + <contentType>application/json</contentType> <param key="categoryId" type="path">{id}</param> </operation> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml deleted file mode 100644 index b019ab3ff42bb..0000000000000 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - /** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ ---> - -<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> - <operation name="CreateCustomAttribute" dataType="custom_attribute" type="create"> - <entry key="attribute_code">string</entry> - <entry key="value">string</entry> - </operation> - <operation name="UpdateCustomAttribute" dataType="custom_attribute" type="update"> - <entry key="attribute_code">string</entry> - <entry key="value">string</entry> - </operation> -</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml index 4f313af3f7fc8..37880ef4355b4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml @@ -8,20 +8,20 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> - <operation name="CreateProduct" dataType="product" type="create" auth="/rest/V1/integration/admin/token" url="/rest/V1/products" method="POST"> - <header param="Content-Type">application/json</header> - <jsonObject dataType="product" key="product"> - <entry key="sku">string</entry> - <entry key="name">string</entry> - <entry key="attribute_set_id">integer</entry> - <entry key="price">integer</entry> - <entry key="status">integer</entry> - <entry key="visibility">integer</entry> - <entry key="type_id">string</entry> - <entry key="created_at">string</entry> - <entry key="updated_at">string</entry> - <entry key="weight">integer</entry> - <entry key="extension_attributes">product_extension_attribute</entry> + <operation name="CreateProduct" dataType="product" type="create" auth="adminOauth" url="/V1/products" method="POST"> + <contentType>application/json</contentType> + <object dataType="product" key="product"> + <field key="sku">string</field> + <field key="name">string</field> + <field key="attribute_set_id">integer</field> + <field key="price">integer</field> + <field key="status">integer</field> + <field key="visibility">integer</field> + <field key="type_id">string</field> + <field key="created_at">string</field> + <field key="updated_at">string</field> + <field key="weight">integer</field> + <field key="extension_attributes">product_extension_attribute</field> <array key="product_links"> <value>product_link</value> </array> @@ -31,23 +31,23 @@ <array key="options"> <value>product_option</value> </array> - </jsonObject> + </object> </operation> - <operation name="UpdateProduct" dataType="product" type="update" auth="/rest/V1/integration/admin/token" url="/rest/V1/products" method="PUT"> - <header param="Content-Type">application/json</header> - <jsonObject dataType="product" key="product"> - <entry key="id">integer</entry> - <entry key="sku">string</entry> - <entry key="name">string</entry> - <entry key="attribute_set_id">integer</entry> - <entry key="price">integer</entry> - <entry key="status">integer</entry> - <entry key="visibility">integer</entry> - <entry key="type_id">string</entry> - <entry key="created_at">string</entry> - <entry key="updated_at">string</entry> - <entry key="weight">integer</entry> - <entry key="extension_attributes">product_extension_attribute</entry> + <operation name="UpdateProduct" dataType="product" type="update" auth="adminOauth" url="/V1/products" method="PUT"> + <contentType>application/json</contentType> + <object dataType="product" key="product"> + <field key="id">integer</field> + <field key="sku">string</field> + <field key="name">string</field> + <field key="attribute_set_id">integer</field> + <field key="price">integer</field> + <field key="status">integer</field> + <field key="visibility">integer</field> + <field key="type_id">string</field> + <field key="created_at">string</field> + <field key="updated_at">string</field> + <field key="weight">integer</field> + <field key="extension_attributes">product_extension_attribute</field> <array key="product_links"> <value>product_link</value> </array> @@ -63,11 +63,11 @@ <array key="tier_prices"> <value>tier_prices</value> </array--> - </jsonObject> - <entry key="saveOptions">boolean</entry> + </object> + <field key="saveOptions">boolean</field> </operation> - <operation name="deleteProduct" dataType="product" type="delete" auth="/rest/V1/integration/admin/token" url="/rest/V1/products" method="DELETE"> - <header param="Content-Type">application/json</header> + <operation name="deleteProduct" dataType="product" type="delete" auth="adminOauth" url="/V1/products" method="DELETE"> + <contentType>application/json</contentType> <param key="sku" type="path">{sku}</param> </operation> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml index f68459121f3e6..7d55badaebf53 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml @@ -9,9 +9,9 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateProductExtensionAttribute" dataType="product_extension_attribute" type="create"> - <entry key="stock_item">stock_item</entry> + <field key="stock_item">stock_item</field> </operation> <operation name="UpdateProductExtensionAttribute" dataType="product_extension_attribute" type="update"> - <entry key="stock_item">stock_item</entry> + <field key="stock_item">stock_item</field> </operation> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml index 8261ef0e99963..1cb109442a169 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml @@ -9,21 +9,21 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateProductLink" dataType="product_link" type="create"> - <entry key="sku">string</entry> - <entry key="link_type">string</entry> - <entry key="linked_product_sku">string</entry> - <entry key="linked_product_type">string</entry> - <entry key="position">integer</entry> + <field key="sku">string</field> + <field key="link_type">string</field> + <field key="linked_product_sku">string</field> + <field key="linked_product_type">string</field> + <field key="position">integer</field> <array key="extension_attributes"> <value>product_link_extension_attribute</value> </array> </operation> <operation name="UpdateProductLink" dataType="product_link" type="update"> - <entry key="sku">string</entry> - <entry key="link_type">string</entry> - <entry key="linked_product_sku">string</entry> - <entry key="linked_product_type">string</entry> - <entry key="position">integer</entry> + <field key="sku">string</field> + <field key="link_type">string</field> + <field key="linked_product_sku">string</field> + <field key="linked_product_type">string</field> + <field key="position">integer</field> <array key="extension_attributes"> <value>product_link_extension_attribute</value> </array> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml index ea2c926430459..261c0113b27a1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml @@ -10,10 +10,10 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateProductLinkExtensionAttribute" dataType="product_link_extension_attribute" type="create"> <header param="Content-Type">application/json</header> - <entry key="qty">integer</entry> + <field key="qty">integer</field> </operation> <operation name="UpdateProductLinkExtensionAttribute" dataType="product_link_extension_attribute" type="update"> <header param="Content-Type">application/json</header> - <entry key="qty">integer</entry> + <field key="qty">integer</field> </operation> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml index dcb65c8032ebf..33be20a90a8f8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml @@ -9,37 +9,37 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateProductOption" dataType="product_option" type="create"> - <entry key="product_sku">string</entry> - <entry key="option_id">integer</entry> - <entry key="title">string</entry> - <entry key="type">string</entry> - <entry key="sort_order">integer</entry> - <entry key="is_require">boolean</entry> - <entry key="price">integer</entry> - <entry key="price_type">string</entry> - <entry key="sku">string</entry> - <entry key="file_extension">string</entry> - <entry key="max_characters">integer</entry> - <entry key="max_size_x">integer</entry> - <entry key="max_size_y">integer</entry> + <field key="product_sku">string</field> + <field key="option_id">integer</field> + <field key="title">string</field> + <field key="type">string</field> + <field key="sort_order">integer</field> + <field key="is_require">boolean</field> + <field key="price">integer</field> + <field key="price_type">string</field> + <field key="sku">string</field> + <field key="file_extension">string</field> + <field key="max_characters">integer</field> + <field key="max_size_x">integer</field> + <field key="max_size_y">integer</field> <array key="values"> <value>product_option_value</value> </array> </operation> <operation name="UpdateProductOption" dataType="product_option" type="update"> - <entry key="product_sku">string</entry> - <entry key="option_id">integer</entry> - <entry key="title">string</entry> - <entry key="type">string</entry> - <entry key="sort_order">integer</entry> - <entry key="is_require">boolean</entry> - <entry key="price">integer</entry> - <entry key="price_type">string</entry> - <entry key="sku">string</entry> - <entry key="file_extension">string</entry> - <entry key="max_characters">integer</entry> - <entry key="max_size_x">integer</entry> - <entry key="max_size_y">integer</entry> + <field key="product_sku">string</field> + <field key="option_id">integer</field> + <field key="title">string</field> + <field key="type">string</field> + <field key="sort_order">integer</field> + <field key="is_require">boolean</field> + <field key="price">integer</field> + <field key="price_type">string</field> + <field key="sku">string</field> + <field key="file_extension">string</field> + <field key="max_characters">integer</field> + <field key="max_size_x">integer</field> + <field key="max_size_y">integer</field> <array key="values"> <value>product_option_value</value> </array> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml index c1b50759e0a7f..abe43e0dc2d21 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml @@ -9,19 +9,19 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateProductOptionValue" dataType="product_option_value" type="create"> - <entry key="title">string</entry> - <entry key="sort_order">integer</entry> - <entry key="price">integer</entry> - <entry key="price_type">string</entry> - <entry key="sku">string</entry> - <entry key="option_type_id">integer</entry> + <field key="title">string</field> + <field key="sort_order">integer</field> + <field key="price">integer</field> + <field key="price_type">string</field> + <field key="sku">string</field> + <field key="option_type_id">integer</field> </operation> <operation name="UpdateProductOptionValue" dataType="product_option_value" type="update"> - <entry key="title">string</entry> - <entry key="sort_order">integer</entry> - <entry key="price">integer</entry> - <entry key="price_type">string</entry> - <entry key="sku">string</entry> - <entry key="option_type_id">integer</entry> + <field key="title">string</field> + <field key="sort_order">integer</field> + <field key="price">integer</field> + <field key="price_type">string</field> + <field key="sku">string</field> + <field key="option_type_id">integer</field> </operation> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml index 15b4a47de15fd..4f883469432bc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml @@ -9,11 +9,11 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateStockItem" dataType="stock_item" type="create"> - <entry key="qty">integer</entry> - <entry key="is_in_stock">boolean</entry> + <field key="qty">integer</field> + <field key="is_in_stock">boolean</field> </operation> <operation name="UpdateStockItem" dataType="stock_item" type="update"> - <entry key="qty">integer</entry> - <entry key="is_in_stock">boolean</entry> + <field key="qty">integer</field> + <field key="is_in_stock">boolean</field> </operation> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml index 6e5ea909cbe1e..af789417ab766 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml @@ -9,52 +9,52 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateAddress" dataType="address" type="create"> - <entry key="region">region</entry> - <entry key="country_id">string</entry> + <field key="region">region</field> + <field key="country_id">string</field> <array key="street"> <value>string</value> </array> - <entry key="company">string</entry> - <entry key="telephone">string</entry> - <entry key="fax">string</entry> - <entry key="postcode">string</entry> - <entry key="city">string</entry> - <entry key="firstname">string</entry> - <entry key="lastname">string</entry> - <entry key="middlename">string</entry> - <entry key="prefix">string</entry> - <entry key="suffix">string</entry> - <entry key="vat_id">string</entry> - <entry key="default_shipping">boolean</entry> - <entry key="default_billing">boolean</entry> - <entry key="extension_attributes">empty_extension_attribute</entry> + <field key="company">string</field> + <field key="telephone">string</field> + <field key="fax">string</field> + <field key="postcode">string</field> + <field key="city">string</field> + <field key="firstname">string</field> + <field key="lastname">string</field> + <field key="middlename">string</field> + <field key="prefix">string</field> + <field key="suffix">string</field> + <field key="vat_id">string</field> + <field key="default_shipping">boolean</field> + <field key="default_billing">boolean</field> + <field key="extension_attributes">empty_extension_attribute</field> <array key="custom_attributes"> <value>custom_attribute</value> </array> </operation> <operation name="UpdateAddress" dataType="address" type="update"> - <entry key="id">integer</entry> - <entry key="customer_id">integer</entry> - <entry key="region">region</entry> - <entry key="region_id">integer</entry> - <entry key="country_id">string</entry> + <field key="id">integer</field> + <field key="customer_id">integer</field> + <field key="region">region</field> + <field key="region_id">integer</field> + <field key="country_id">string</field> <array key="street"> <value>string</value> </array> - <entry key="company">string</entry> - <entry key="telephone">string</entry> - <entry key="fax">string</entry> - <entry key="postcode">string</entry> - <entry key="city">string</entry> - <entry key="firstname">string</entry> - <entry key="lastname">string</entry> - <entry key="middlename">string</entry> - <entry key="prefix">string</entry> - <entry key="suffix">string</entry> - <entry key="vat_id">string</entry> - <entry key="default_shipping">boolean</entry> - <entry key="default_billing">boolean</entry> - <entry key="extension_attributes">empty_extension_attribute</entry> + <field key="company">string</field> + <field key="telephone">string</field> + <field key="fax">string</field> + <field key="postcode">string</field> + <field key="city">string</field> + <field key="firstname">string</field> + <field key="lastname">string</field> + <field key="middlename">string</field> + <field key="prefix">string</field> + <field key="suffix">string</field> + <field key="vat_id">string</field> + <field key="default_shipping">boolean</field> + <field key="default_billing">boolean</field> + <field key="extension_attributes">empty_extension_attribute</field> <array key="custom_attributes"> <value>custom_attribute</value> </array> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml index b019ab3ff42bb..3414ba7694c79 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml @@ -9,11 +9,11 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateCustomAttribute" dataType="custom_attribute" type="create"> - <entry key="attribute_code">string</entry> - <entry key="value">string</entry> + <field key="attribute_code">string</field> + <field key="value">string</field> </operation> <operation name="UpdateCustomAttribute" dataType="custom_attribute" type="update"> - <entry key="attribute_code">string</entry> - <entry key="value">string</entry> + <field key="attribute_code">string</field> + <field key="value">string</field> </operation> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml index 6ee3d020962c7..bbad0da9b8f3f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml @@ -8,72 +8,72 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> - <operation name="CreateCustomer" dataType="customer" type="create" auth="/rest/V1/integration/admin/token" url="/rest/V1/customers" method="POST"> - <header param="Content-Type">application/json</header> - <jsonObject dataType="customer" key="customer"> - <entry key="group_id">integer</entry> - <entry key="default_billing">string</entry> - <entry key="default_shipping">string</entry> - <entry key="confirmation">string</entry> - <entry key="created_at">string</entry> - <entry key="updated_at">string</entry> - <entry key="created_in">string</entry> - <entry key="dob">string</entry> - <entry key="email">string</entry> - <entry key="firstname">string</entry> - <entry key="lastname">string</entry> - <entry key="middlename">string</entry> - <entry key="prefix">string</entry> - <entry key="suffix">string</entry> - <entry key="gender">integer</entry> - <entry key="store_id">integer</entry> - <entry key="taxvat">string</entry> - <entry key="website_id">integer</entry> + <operation name="CreateCustomer" dataType="customer" type="create" auth="adminOauth" url="/V1/customers" method="POST"> + <contentType>application/json</contentType> + <object dataType="customer" key="customer"> + <field key="group_id">integer</field> + <field key="default_billing">string</field> + <field key="default_shipping">string</field> + <field key="confirmation">string</field> + <field key="created_at">string</field> + <field key="updated_at">string</field> + <field key="created_in">string</field> + <field key="dob">string</field> + <field key="email">string</field> + <field key="firstname">string</field> + <field key="lastname">string</field> + <field key="middlename">string</field> + <field key="prefix">string</field> + <field key="suffix">string</field> + <field key="gender">integer</field> + <field key="store_id">integer</field> + <field key="taxvat">string</field> + <field key="website_id">integer</field> <array key="addresses"> <value>address</value> </array> - <entry key="disable_auto_group_change">integer</entry> - <entry key="extension_attributes">customer_extension_attribute</entry> + <field key="disable_auto_group_change">integer</field> + <field key="extension_attributes">customer_extension_attribute</field> <array key="custom_attributes"> <value>custom_attribute</value> </array> - </jsonObject> - <entry key="password">string</entry> + </object> + <field key="password">string</field> </operation> - <operation name="UpdateCustomer" dataType="customer" type="update" auth="/rest/V1/integration/admin/token" url="/rest/V1/customers" method="PUT"> - <header param="Content-Type">application/json</header> - <entry key="id">integer</entry> - <entry key="group_id">integer</entry> - <entry key="default_billing">string</entry> - <entry key="default_shipping">string</entry> - <entry key="confirmation">string</entry> - <entry key="created_at">string</entry> - <entry key="updated_at">string</entry> - <entry key="created_in">string</entry> - <entry key="dob">string</entry> - <entry key="email">string</entry> - <entry key="firstname">string</entry> - <entry key="lastname">string</entry> - <entry key="middlename">string</entry> - <entry key="prefix">string</entry> - <entry key="suffix">string</entry> - <entry key="gender">integer</entry> - <entry key="store_id">integer</entry> - <entry key="taxvat">string</entry> - <entry key="website_id">integer</entry> + <operation name="UpdateCustomer" dataType="customer" type="update" auth="adminOauth" url="/V1/customers" method="PUT"> + <contentType>application/json</contentType> + <field key="id">integer</field> + <field key="group_id">integer</field> + <field key="default_billing">string</field> + <field key="default_shipping">string</field> + <field key="confirmation">string</field> + <field key="created_at">string</field> + <field key="updated_at">string</field> + <field key="created_in">string</field> + <field key="dob">string</field> + <field key="email">string</field> + <field key="firstname">string</field> + <field key="lastname">string</field> + <field key="middlename">string</field> + <field key="prefix">string</field> + <field key="suffix">string</field> + <field key="gender">integer</field> + <field key="store_id">integer</field> + <field key="taxvat">string</field> + <field key="website_id">integer</field> <array key="addresses"> <value>address</value> </array> - <entry key="disable_auto_group_change">integer</entry> - <entry key="extension_attributes">customer_extension_attribute</entry> + <field key="disable_auto_group_change">integer</field> + <field key="extension_attributes">customer_extension_attribute</field> <array key="custom_attributes"> <value>custom_attribute</value> </array> - <entry key="password">string</entry> - <entry key="redirectUrl">string</entry> + <field key="password">string</field> + <field key="redirectUrl">string</field> </operation> - <operation name="DeleteCustomer" dataType="customer" type="delete" auth="/rest/V1/integration/admin/token" url="/rest/V1/customers" method="DELETE"> - <header param="Content-Type">application/json</header> + <operation name="DeleteCustomer" dataType="customer" type="delete" auth="adminOauth" url="/V1/customers" method="DELETE"> + <contentType>application/json</contentType> <param key="id" type="path">{id}</param> </operation> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml index 4028b7f5ea92c..c148081c4bebe 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml @@ -9,11 +9,11 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateCustomerExtensionAttribute" dataType="customer_extension_attribute" type="create"> - <entry key="is_subscribed">boolean</entry> - <entry key="extension_attribute">customer_nested_extension_attribute</entry> + <field key="is_subscribed">boolean</field> + <field key="extension_attribute">customer_nested_extension_attribute</field> </operation> <operation name="UpdateCustomerExtensionAttribute" dataType="customer_extension_attribute" type="update"> - <entry key="is_subscribed">boolean</entry> - <entry key="extension_attribute">customer_nested_extension_attribute</entry> + <field key="is_subscribed">boolean</field> + <field key="extension_attribute">customer_nested_extension_attribute</field> </operation> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml index 3f1ccd2e8b16c..5b189e186f401 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml @@ -9,13 +9,13 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateNestedExtensionAttribute" dataType="customer_nested_extension_attribute" type="create"> - <entry key="id">integer</entry> - <entry key="customer_id">integer</entry> - <entry key="value">string</entry> + <field key="id">integer</field> + <field key="customer_id">integer</field> + <field key="value">string</field> </operation> <operation name="UpdateNestedExtensionAttribute" dataType="customer_nested_extension_attribute" type="update"> - <entry key="id">integer</entry> - <entry key="customer_id">integer</entry> - <entry key="value">string</entry> + <field key="id">integer</field> + <field key="customer_id">integer</field> + <field key="value">string</field> </operation> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml index 8ad9ec81eafde..6982b4a6ae5b6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml @@ -9,15 +9,15 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateRegion" dataType="region" type="create"> - <entry key="region_code">string</entry> - <entry key="region">string</entry> - <entry key="region_id">string</entry> - <entry key="extension_attributes">extension_attributes</entry> + <field key="region_code">string</field> + <field key="region">string</field> + <field key="region_id">string</field> + <field key="extension_attributes">extension_attributes</field> </operation> <operation name="UpdateRegion" dataType="region" type="update"> - <entry key="region_code">string</entry> - <entry key="region">string</entry> - <entry key="region_id">string</entry> - <entry key="extension_attributes">empty_extension_attribute</entry> + <field key="region_code">string</field> + <field key="region">string</field> + <field key="region_id">string</field> + <field key="extension_attributes">empty_extension_attribute</field> </operation> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml new file mode 100644 index 0000000000000..87d40cb40bf56 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Test XML Example --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="AdminCreateStoreGroupCest"> + <annotations> + <features value="Create a store group in admin"/> + <stories value="Create a store group in admin"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + <group value="store"/> + </annotations> + <before> + <createData mergeKey="b1" entity="customStoreGroup"/> + <createData mergeKey="b2" entity="customStoreGroup"/> + </before> + <test name="AdminCreateStoreGroupTest"> + <annotations> + <title value="Create a store group in admin"/> + <description value="Create a store group in admin"/> + <severity value="CRITICAL"/> + <testCaseId value="MAGETWO-?????"/> + </annotations> + <amOnPage mergeKey="s1" url="{{AdminLoginPage}}"/> + <fillField mergeKey="s3" selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}"/> + <fillField mergeKey="s5" selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}"/> + <click mergeKey="s7" selector="{{AdminLoginFormSection.signIn}}"/> + <amOnPage mergeKey="s9" url="{{AdminSystemStorePage}}"/> + + <click mergeKey="s11" selector="{{AdminStoresGridSection.resetButton}}"/> + <waitForPageLoad mergeKey="s15" time="10"/> + + <!-- Uncomment after MFTF Bug MQE-391 is fixed --> + <!--fillField mergeKey="s17" selector="{{AdminStoresGridSection.storeGrpFilterTextField}}" userInput="$$b1.group[name]$$"/--> + <click mergeKey="s19" selector="{{AdminStoresGridSection.searchButton}}"/> + <waitForPageLoad mergeKey="s21" time="10"/> + <!--see mergeKey="s23" selector="{{AdminStoresGridSection.storeGrpNameInFirstRow}}" userInput="$$b1.group[name]$$"/--> + + <click mergeKey="s31" selector="{{AdminStoresGridSection.resetButton}}"/> + <waitForPageLoad mergeKey="s35" time="10"/> + <!--fillField mergeKey="s37" selector="{{AdminStoresGridSection.storeGrpFilterTextField}}" userInput="$$b2.group[name]$$"/--> + <click mergeKey="s39" selector="{{AdminStoresGridSection.searchButton}}"/> + <waitForPageLoad mergeKey="s41" time="10"/> + <!--see mergeKey="s43" selector="{{AdminStoresGridSection.storeGrpNameInFirstRow}}" userInput="$$b2.group[name]$$"/--> + </test> + </cest> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreData.xml new file mode 100644 index 0000000000000..4b5bc9a8d832a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreData.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="customStore" type="store"> + <!--data key="group_id">customStoreGroup.id</data--> + <data key="name" unique="suffix">store</data> + <data key="code" unique="suffix">store</data> + <data key="is_active">1</data> + <data key="store_id">null</data> + <data key="store_action">add</data> + <data key="store_type">group</data> + <required-entity type="storeGroup">customStoreGroup</required-entity> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreGroupData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreGroupData.xml new file mode 100644 index 0000000000000..c0124b206d138 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreGroupData.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="customStoreGroup" type="group"> + <data key="group_id">null</data> + <data key="name" unique="suffix">store</data> + <data key="code" unique="suffix">store</data> + <data key="root_category_id">2</data> + <data key="website_id">1</data> + <data key="store_action">add</data> + <data key="store_type">group</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store-meta.xml new file mode 100644 index 0000000000000..5b9f0022755eb --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store-meta.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateStore" dataType="store" type="create" + auth="adminFormKey" url="/admin/system_store/save" method="POST" successRegex="messages-message-success" returnRegex="" > + <object dataType="store" key="store"> + <field key="group_id">string</field> + <field key="name">string</field> + <field key="code">string</field> + <field key="is_active">boolean</field> + <field key="store_id">integer</field> + </object> + <field key="store_action">string</field> + <field key="store_type">string</field> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store_group-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store_group-meta.xml new file mode 100644 index 0000000000000..6f1667398a648 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store_group-meta.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateStoreGroup" dataType="group" type="create" + auth="adminFormKey" url="/admin/system_store/save" method="POST" successRegex="messages-message-success" returnRegex="" > + <contentType>application/x-www-form-urlencoded</contentType> + <object dataType="group" key="group"> + <field key="group_id">string</field> + <field key="name">string</field> + <field key="code">string</field> + <field key="root_category_id">integer</field> + <field key="website_id">integer</field> + </object> + <field key="store_action">string</field> + <field key="store_type">string</field> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Page/AdminSystemStorePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Page/AdminSystemStorePage.xml new file mode 100644 index 0000000000000..542c618171dc1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Page/AdminSystemStorePage.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="AdminSystemStorePage" urlPath="/admin/admin/system_store/" module="Store"> + <section name="AdminStoresMainActionsSection"/> + <section name="AdminStoresGridSection"/> + </page> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreGroupSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreGroupSection.xml new file mode 100644 index 0000000000000..1471832d52883 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreGroupSection.xml @@ -0,0 +1,7 @@ +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminNewStoreGroupSection"> + <element name="storeGrpNameTextField" type="input" selector="#group_name"/> + <element name="storeGrpCodeTextField" type="input" selector="#group_code"/> + <element name="storeRootCategoryDropdown" type="button" selector="#group_root_category_id"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreSection.xml new file mode 100644 index 0000000000000..d44df4dc6f6a8 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreSection.xml @@ -0,0 +1,9 @@ +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminNewStoreSection"> + <element name="storeNameTextField" type="input" selector="#store_name"/> + <element name="storeCodeTextField" type="input" selector="#store_code"/> + <element name="statusDropdown" type="button" selector="#store_is_active"/> + <element name="storeGrpDropdown" type="button" selector="#store_group_id"/> + <element name="sortOrderTextField" type="input" selector="#store_sort_order"/> + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresGridSection.xml new file mode 100644 index 0000000000000..42b171cc5e8a7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresGridSection.xml @@ -0,0 +1,13 @@ +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminStoresGridSection"> + <element name="storeGrpFilterTextField" type="input" selector="#storeGrid_filter_group_title"/> + <element name="websiteFilterTextField" type="input" selector="#storeGrid_filter_website_title"/> + <element name="storeFilterTextField" type="input" selector="#storeGrid_filter_store_title"/> + <element name="searchButton" type="button" selector=".admin__data-grid-header button[title=Search]"/> + <element name="resetButton" type="button" selector="button[title='Reset Filter']"/> + <element name="websiteNameInFirstRow" type="text" selector=".col-website_title>a"/> + <element name="storeGrpNameInFirstRow" type="text" selector=".col-group_title>a"/> + <element name="storeNameInFirstRow" type="text" selector=".col-store_title>a"/> + + </section> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresMainActionsSection.xml new file mode 100644 index 0000000000000..cd136a0de1562 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresMainActionsSection.xml @@ -0,0 +1,9 @@ +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="AdminStoresMainActionsSection"> + <element name="createStoreViewButton" type="button" selector="#add_store"/> + <element name="createStoreButton" type="button" selector="#add_group"/> + <element name="createWebsiteButton" type="button" selector="#add"/> + <element name="saveButton" type="button" selector="#save"/> + <element name="backButton" type="button" selector="#back"/> + </section> +</config> \ No newline at end of file From 2879aae340d46bb9a8f127c0039a05f3ed6ea7ba Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Fri, 29 Sep 2017 21:50:20 +0300 Subject: [PATCH 064/653] MQE-378: Create API metadata for Coupon Code --- .../Checkout/Data/CouponData.xml | 18 +++++++++++ .../Checkout/Metadata/coupon-meta.xml | 32 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Data/CouponData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Data/CouponData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Data/CouponData.xml new file mode 100644 index 0000000000000..d33ac172d44e2 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Data/CouponData.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="_defaultCoupon" type="coupon"> + <data key="rule_id">4</data> + <data key="code">FREESHIPPING123</data> + <data key="times_used">0</data> + <data key="is_primary">false</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml new file mode 100644 index 0000000000000..450c80065b6b5 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateCoupon" dataType="coupon" type="create" auth="/rest/V1/integration/admin/token" url="/rest/V1/coupons" method="POST"> + <header param="Content-Type">application/json</header> + <jsonObject key="coupon" dataType="coupon"> + <entry key="rule_id" required="true">integer</entry> + <entry key="times_used" required="true">integer</entry> + <entry key="is_primary" required="true">boolean</entry> + <entry key="code">string</entry> + <entry key="usage_limit">integer</entry> + <entry key="usage_per_customer">integer</entry> + <entry key="expiration_date">string</entry> + <entry key="created_at">string</entry> + <entry key="type">integer</entry> + <entry key="extension_attributes">empty_extension_attribute</entry> + </jsonObject> + </operation> + + <operation name="DeleteCoupon" dataType="coupon" type="delete" auth="/rest/V1/integration/admin/token" url="/rest/V1/coupons" method="DELETE"> + <header param="Content-Type">application/json</header> + <param key="couponId" type="path">{coupon_id}</param> + </operation> +</config> From 1865c60f0f6a0370779c4fb97a219ebb9138abc4 Mon Sep 17 00:00:00 2001 From: Ian Meron <imeron@magento.com> Date: Mon, 2 Oct 2017 21:25:45 +0300 Subject: [PATCH 065/653] MQE-309: [Customizability] Update nested API dependency schema and execution --- ...goryUrlKeyData.xml => CustomAttributeData.xml} | 8 ++++++++ .../Data/CustomAttributeProductUrlKeyData.xml | 15 --------------- .../FunctionalTest/Catalog/Data/ProductData.xml | 2 ++ .../Catalog/Metadata/product-meta.xml | 4 ++-- .../Cest/StorefrontCustomerCheckoutCest.xml | 6 +----- .../Checkout/Cest/StorefrontGuestCheckoutCest.xml | 6 +----- .../Customer/Metadata/custom_attribute-meta.xml | 6 ++++++ .../Sales/Cest/AdminCreateInvoiceCest.xml | 6 +----- .../Cest/PersistMultipleEntitiesCest.xml | 9 ++------- 9 files changed, 23 insertions(+), 39 deletions(-) rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/{CustomAttributeCategoryUrlKeyData.xml => CustomAttributeData.xml} (60%) delete mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeProductUrlKeyData.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeCategoryUrlKeyData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeData.xml similarity index 60% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeCategoryUrlKeyData.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeData.xml index 911fd3d73a21e..46383269b88e8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeCategoryUrlKeyData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeData.xml @@ -12,4 +12,12 @@ <data key="attribute_code">url_key</data> <data key="value" unique="suffix">category</data> </entity> + <entity name="CustomAttributeProductUrlKey" type="custom_attribute"> + <data key="attribute_code">url_key</data> + <data key="value" unique="suffix">product</data> + </entity> + <entity name="CustomAttributeCategoryIds" type="custom_attribute_array"> + <data key="attribute_code">category_ids</data> + <var key="value" entityType="category" entityKey="id"/> + </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeProductUrlKeyData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeProductUrlKeyData.xml deleted file mode 100644 index acc9517d22920..0000000000000 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeProductUrlKeyData.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - /** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ ---> - -<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> - <entity name="CustomAttributeProductUrlKey" type="custom_attribute"> - <data key="attribute_code">url_key</data> - <data key="value" unique="suffix">product</data> - </entity> -</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml index 55b7192405a87..5be4b73510c51 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml @@ -19,6 +19,7 @@ <data key="status">1</data> <data key="quantity">100</data> <required-entity type="product_extension_attribute">EavStockItem</required-entity> + <required-entity type="custom_attribute_array">CustomAttributeCategoryIds</required-entity> </entity> <entity name="SimpleProduct" type="product"> <data key="sku" unique="suffix">SimpleProduct</data> @@ -29,6 +30,7 @@ <data key="visibility">4</data> <data key="status">1</data> <required-entity type="product_extension_attribute">EavStockItem</required-entity> + <required-entity type="custom_attribute_array">CustomAttributeCategoryIds</required-entity> <!--required-entity type="custom_attribute">CustomAttributeProductUrlKey</required-entity--> </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml index 37880ef4355b4..068eb692a4668 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml @@ -26,7 +26,7 @@ <value>product_link</value> </array> <array key="custom_attributes"> - <value>custom_attribute</value> + <value>custom_attribute_array</value> </array> <array key="options"> <value>product_option</value> @@ -52,7 +52,7 @@ <value>product_link</value> </array> <array key="custom_attributes"> - <value>custom_attribute</value> + <value>custom_attribute_array</value> </array> <array key="options"> <value>product_option</value> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml index 8b7922bf453c2..67e48feb8e419 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml @@ -19,12 +19,8 @@ </annotations> <before> <createData entity="SimpleSubCategory" mergeKey="simplecategory"/> - <entity name="categoryLink" type="custom_attribute" mergeKey="categoryLink"> - <data key="attribute_code">category_ids</data> - <data key="value">$$simplecategory.id$$</data> - </entity> <createData entity="SimpleProduct" mergeKey="simpleproduct1"> - <required-entity name="categoryLink"/> + <required-entity persistedKey="simplecategory"/> </createData> <createData entity="Simple_US_Customer" mergeKey="simpleuscustomer"/> </before> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml index c30a7aac14807..d4d6fcb9572ce 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml @@ -19,12 +19,8 @@ </annotations> <before> <createData entity="_defaultCategory" mergeKey="createCategory"/> - <entity name="categoryLink" type="custom_attribute" mergeKey="categoryLink"> - <data key="attribute_code">category_ids</data> - <data key="value">$$createCategory.id$$</data> - </entity> <createData entity="_defaultProduct" mergeKey="createProduct"> - <required-entity name="categoryLink"/> + <required-entity persistedKey="createCategory"/> </createData> </before> <after> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml index 3414ba7694c79..5188675e4e932 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml @@ -12,6 +12,12 @@ <field key="attribute_code">string</field> <field key="value">string</field> </operation> + <operation name="CreateCustomAttributeArray" dataType="custom_attribute_array" type="create"> + <field key="attribute_code">string</field> + <array key="value"> + <value>string</value> + </array> + </operation> <operation name="UpdateCustomAttribute" dataType="custom_attribute" type="update"> <field key="attribute_code">string</field> <field key="value">string</field> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml index ed19d94bc53bb..e374ffbd6f182 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml @@ -19,12 +19,8 @@ </annotations> <before> <createData entity="_defaultCategory" mergeKey="createCategory"/> - <entity name="categoryLink" type="custom_attribute" mergeKey="categoryLink"> - <data key="attribute_code">category_ids</data> - <data key="value">$$createCategory.id$$</data> - </entity> <createData entity="_defaultProduct" mergeKey="createProduct"> - <required-entity name="categoryLink"/> + <required-entity persistedKey="createCategory"/> </createData> </before> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml index a46500143a82d..560b3b46cb5f7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml @@ -15,16 +15,11 @@ </annotations> <before> <createData entity="simplesubcategory" mergeKey="simplecategory"/> - <entity name="categoryLink" type="custom_attribute" mergeKey="categoryLink"> - <data key="attribute_code">category_ids</data> - <data key="value">$$simplecategory.id$$</data> - </entity> - <createData entity="simpleproduct" mergeKey="simpleproduct1"> - <required-entity name="categoryLink"/> + <required-entity persistedKey="simplecategory"/> </createData> <createData entity="simpleproduct" mergeKey="simpleproduct2"> - <required-entity name="categoryLink"/> + <required-entity persistedKey="categoryLink"/> </createData> </before> <after> From 497e3ecfe38a043cde68fe09db6caed5b9d856f9 Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Mon, 2 Oct 2017 23:25:18 +0300 Subject: [PATCH 066/653] MQE-365: Template Files - Adding a note for "<!-- ADD TEST STEPS HERE -->" to the Cest and ActionGroup files. - Adding a Template file for ActionGroup. - Moving the Template files to their own directory. - Listing each file under the correct directory name it needs to live under for a Module. --- .../ActionGroup/TemplateActionGroupFile.xml | 14 ++++++++++++++ .../Cest}/TemplateCestFile.xml | 1 + .../Data}/TemplateDataFile.xml | 0 .../Metadata/TemplateMetaFile.xml} | 15 ++++++--------- .../Page}/TemplatePageFile.xml | 0 .../Section}/TemplateSectionFile.xml | 0 6 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/ActionGroup/TemplateActionGroupFile.xml rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/{SampleTests/Templates => SampleTemplates/Cest}/TemplateCestFile.xml (95%) rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/{SampleTests/Templates => SampleTemplates/Data}/TemplateDataFile.xml (100%) rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/{SampleTests/Templates/TemplateMetaDataFile.xml => SampleTemplates/Metadata/TemplateMetaFile.xml} (62%) rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/{SampleTests/Templates => SampleTemplates/Page}/TemplatePageFile.xml (100%) rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/{SampleTests/Templates => SampleTemplates/Section}/TemplateSectionFile.xml (100%) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/ActionGroup/TemplateActionGroupFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/ActionGroup/TemplateActionGroupFile.xml new file mode 100644 index 0000000000000..13e1467cbd2ce --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/ActionGroup/TemplateActionGroupFile.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <actionGroup name=""> + <!-- ADD TEST STEPS HERE --> + </actionGroup> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateCestFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml similarity index 95% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateCestFile.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml index 88c8639b977b3..5e45eeed07c4d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateCestFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml @@ -28,6 +28,7 @@ <severity value=""/> <testCaseId value=""/> </annotations> + <!-- ADD TEST STEPS HERE --> </test> </cest> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateDataFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Data/TemplateDataFile.xml similarity index 100% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateDataFile.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Data/TemplateDataFile.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateMetaDataFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Metadata/TemplateMetaFile.xml similarity index 62% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateMetaDataFile.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Metadata/TemplateMetaFile.xml index 28f9550871219..3e0114464141a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateMetaDataFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Metadata/TemplateMetaFile.xml @@ -9,14 +9,11 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="" dataType="" type="" auth="" url="" method=""> - <header param="">application/json</header> - <param key="" type="">{}</param> - <jsonObject dataType="" key=""> - <entry key=""></entry> - <array key=""> - <value></value> - </array> - </jsonObject> - <entry key=""></entry> + <contentType>application/json</contentType> + <field key=""></field> + <array key=""> + <value></value> + </array> + <param key="" type=""></param> </operation> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplatePageFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Page/TemplatePageFile.xml similarity index 100% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplatePageFile.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Page/TemplatePageFile.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Section/TemplateSectionFile.xml similarity index 100% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Templates/TemplateSectionFile.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Section/TemplateSectionFile.xml From 41d67c236d4ca8a5313a8c0149965c972c5ced6b Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Fri, 20 Oct 2017 13:08:41 +0300 Subject: [PATCH 067/653] MAGETWO-81915: Magento 2.1.3 to 2.2.1 upgrade issue - Add correct processing for a case when design/theme/theme_id is empty --- .../Model/Config/Processor/DesignTheme.php | 4 +-- .../Config/Processor/DesignThemeTest.php | 18 ++++++++++++- .../Config/Processor/DesignThemeTest.php | 27 +++++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Theme/Model/Config/Processor/DesignThemeTest.php diff --git a/app/code/Magento/Theme/Model/Config/Processor/DesignTheme.php b/app/code/Magento/Theme/Model/Config/Processor/DesignTheme.php index 258be67979ed2..d9d2c0e041e99 100644 --- a/app/code/Magento/Theme/Model/Config/Processor/DesignTheme.php +++ b/app/code/Magento/Theme/Model/Config/Processor/DesignTheme.php @@ -72,8 +72,8 @@ public function process(array $config) private function changeThemeFullPathToIdentifier($configItems) { $theme = null; - if ($this->arrayManager->exists(DesignInterface::XML_PATH_THEME_ID, $configItems)) { - $themeIdentifier = $this->arrayManager->get(DesignInterface::XML_PATH_THEME_ID, $configItems); + $themeIdentifier = $this->arrayManager->get(DesignInterface::XML_PATH_THEME_ID, $configItems); + if (!empty($themeIdentifier)) { if (!is_numeric($themeIdentifier)) { // workaround for case when db is not available try { diff --git a/app/code/Magento/Theme/Test/Unit/Model/Config/Processor/DesignThemeTest.php b/app/code/Magento/Theme/Test/Unit/Model/Config/Processor/DesignThemeTest.php index 1f3ab5642f471..bb2160f1e293d 100644 --- a/app/code/Magento/Theme/Test/Unit/Model/Config/Processor/DesignThemeTest.php +++ b/app/code/Magento/Theme/Test/Unit/Model/Config/Processor/DesignThemeTest.php @@ -5,7 +5,6 @@ */ namespace Magento\Theme\Test\Unit\Model\Config\Processor; -use Magento\Config\App\Config\Source\DumpConfigSourceAggregated; use Magento\Framework\Stdlib\ArrayManager; use Magento\Framework\View\Design\Theme\ListInterface; use Magento\Theme\Model\Config\Processor\DesignTheme; @@ -78,6 +77,7 @@ private function prepareThemeMock() /** * @return array + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function getDumpConfigDataProvider() { @@ -163,6 +163,22 @@ public function getDumpConfigDataProvider() ], ], ], + [ + [ + 'websites' => [ + 'base' => [ + 'design' => ['theme' => ['theme_id' => '']], + ], + ], + ], + [ + 'websites' => [ + 'base' => [ + 'design' => ['theme' => ['theme_id' => '']], + ], + ], + ], + ], ]; } } diff --git a/dev/tests/integration/testsuite/Magento/Theme/Model/Config/Processor/DesignThemeTest.php b/dev/tests/integration/testsuite/Magento/Theme/Model/Config/Processor/DesignThemeTest.php new file mode 100644 index 0000000000000..01c8ebca57ac2 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Theme/Model/Config/Processor/DesignThemeTest.php @@ -0,0 +1,27 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Theme\Model\Config\Processor; + +use Magento\TestFramework\Helper\Bootstrap; + +class DesignThemeTest extends \PHPUnit\Framework\TestCase +{ + /** + * Verifies that empty 'design/theme/theme_id' config value is processed without errors. + */ + public function testProcessWithEmptyThemeId() + { + $designTheme = Bootstrap::getObjectManager()->create(DesignTheme::class); + + $config = [ + 'default' => [ + 'design' => ['theme' => ['theme_id' => '']], + ], + ]; + + $this->assertEquals($config, $designTheme->process($config)); + } +} From e3d3e311b018e46538462daa69d3b5c0ca0d6295 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Mon, 2 Oct 2017 23:18:47 +0300 Subject: [PATCH 068/653] MQE-411: Fixed template and coupon meta data files. --- .../Checkout/Metadata/coupon-meta.xml | 28 +++++++++---------- .../Metadata/TemplateMetaFile.xml | 17 ++++++----- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml index 450c80065b6b5..5be13e54fc571 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml @@ -9,23 +9,23 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> - <operation name="CreateCoupon" dataType="coupon" type="create" auth="/rest/V1/integration/admin/token" url="/rest/V1/coupons" method="POST"> + <operation name="CreateCoupon" dataType="coupon" type="create" auth="adminOauth" url="/rest/V1/coupons" method="POST"> <header param="Content-Type">application/json</header> - <jsonObject key="coupon" dataType="coupon"> - <entry key="rule_id" required="true">integer</entry> - <entry key="times_used" required="true">integer</entry> - <entry key="is_primary" required="true">boolean</entry> - <entry key="code">string</entry> - <entry key="usage_limit">integer</entry> - <entry key="usage_per_customer">integer</entry> - <entry key="expiration_date">string</entry> - <entry key="created_at">string</entry> - <entry key="type">integer</entry> - <entry key="extension_attributes">empty_extension_attribute</entry> - </jsonObject> + <object key="coupon" dataType="coupon"> + <field key="rule_id" required="true">integer</field> + <field key="times_used" required="true">integer</field> + <field key="is_primary" required="true">boolean</field> + <field key="code">string</field> + <field key="usage_limit">integer</field> + <field key="usage_per_customer">integer</field> + <field key="expiration_date">string</field> + <field key="created_at">string</field> + <field key="type">integer</field> + <field key="extension_attributes">empty_extension_attribute</field> + </object> </operation> - <operation name="DeleteCoupon" dataType="coupon" type="delete" auth="/rest/V1/integration/admin/token" url="/rest/V1/coupons" method="DELETE"> + <operation name="DeleteCoupon" dataType="coupon" type="delete" auth="adminOauth" url="/rest/V1/coupons" method="DELETE"> <header param="Content-Type">application/json</header> <param key="couponId" type="path">{coupon_id}</param> </operation> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Metadata/TemplateMetaFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Metadata/TemplateMetaFile.xml index 3e0114464141a..3610dc9793514 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Metadata/TemplateMetaFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Metadata/TemplateMetaFile.xml @@ -8,12 +8,15 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> - <operation name="" dataType="" type="" auth="" url="" method=""> - <contentType>application/json</contentType> + <operation name="" dataType="" type="" auth="adminOauth" url="" method=""> + <header param="">application/json</header> + <param key="" type="">{}</param> + <object dataType="" key=""> + <field key=""></field> + <array key=""> + <value></value> + </array> + </object> <field key=""></field> - <array key=""> - <value></value> - </array> - <param key="" type=""></param> </operation> -</config> \ No newline at end of file +</config> From 257c757ce8a63352f63753e4886e024d0b021f6e Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Tue, 3 Oct 2017 22:47:26 +0300 Subject: [PATCH 069/653] MQE-402: Workshop Feedback - Updating the README, adding instructions that we missed that were pointed out in the Workshop sessions. - Adding an additional work around for the Allure @env error. --- dev/tests/acceptance/README.md | 93 +++++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 30 deletions(-) diff --git a/dev/tests/acceptance/README.md b/dev/tests/acceptance/README.md index d55625a64420e..ea6eedd3f84c2 100755 --- a/dev/tests/acceptance/README.md +++ b/dev/tests/acceptance/README.md @@ -8,18 +8,20 @@ ---- # Prerequisites -* **IMPORTANT**: Configure your Magento Store for [Automated Testing](http://devdocs.magento.com/guides/v2.0/mtf/mtf_quickstart/mtf_quickstart_magento.html) +* **IMPORTANT** + * You will need to have a running instance of Magento that you can access. + * You will need to configure your instance of Magento for [Automated Testing](http://devdocs.magento.com/guides/v2.0/mtf/mtf_quickstart/mtf_quickstart_magento.html). * [PHP v7.x](http://php.net/manual/en/install.php) * [Composer v1.4.x](https://getcomposer.org/download/) -* [Java](https://www.java.com/en/download/) +* [Java v1.8.x](https://www.java.com/en/download/) * [Selenium Server](http://www.seleniumhq.org/download/) - [v2.53.x](http://selenium-release.storage.googleapis.com/index.html?path=2.53/) -* [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/downloads) -* [Allure CLI](https://docs.qameta.io/allure/latest/#_installing_a_commandline) +* [ChromeDriver v2.32.x](https://sites.google.com/a/chromium.org/chromedriver/downloads) +* [Allure CLI v2.3.x](https://docs.qameta.io/allure/latest/#_installing_a_commandline) * [GitHub](https://desktop.github.com/) ### Recommendations * We recommend using [PHPStorm 2017](https://www.jetbrains.com/phpstorm/) for your IDE. They recently added support for [Codeception Test execution](https://blog.jetbrains.com/phpstorm/2017/03/codeception-support-comes-to-phpstorm-2017-1/) which is helpful when debugging. -* We also recommend updating your [$PATH to include](https://stackoverflow.com/questions/7703041/editing-path-variable-on-mac) `./vendor/bin` so you can easily execute the necessary `robo` and `codecept` commands instead of `./vendor/bin/robo` or `./vendor/bin/codecept`. +* We also recommend updating your [$PATH to include](https://stackoverflow.com/questions/7703041/editing-path-variable-on-mac) `./vendor/bin` so you can easily execute the necessary `robo` and `codecept` commands instead of using `./vendor/bin/robo` or `./vendor/bin/codecept`. ---- @@ -32,15 +34,34 @@ Due to the current setup of the Framework you will need to do the following: * Pull down - [CE](https://github.com/magento-pangolin/magento2ce) * `cd magento2ee` * `php -f dev/tools/build-ee.php -- --command=link --exclude=true` - * Generate a `github-oauth` token: [Instructions](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token) + * `cd ..` + * Generate a `github-oauth` token: + * [How to setup an auth.json file for the Composer?](https://mage2.pro/t/topic/743) + * [Creating a personal access token for the command line.](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token) * `touch magento2ce/dev/tests/acceptance/auth.json` * `nano magento2ce/dev/tests/acceptance/auth.json` + * Copy/Paste the following: + ``` + { + "github-oauth": { + "github.com": "<personal access token>" + } + } + ``` * Replace `<personal access token>` with the token you generated in GitHub. * Save your work. * `cd ../magento2ce` * `cd dev/tests/acceptance` + * Open the `composer.json` file. + * Make the following edits: + * `url`: + 1. ORIGINAL: `"url": "git@github.com:magento/magento2-functional-testing-framework.git"` + 1. UPDATED: `"url": "git@github.com:magento-pangolin/magento2-functional-testing-framework.git"` + * `magento/magento2-functional-testing-framework`: + 1. ORIGINAL: `"magento/magento2-functional-testing-framework": "dev-develop"` + 1. UPDATED: `"magento/magento2-functional-testing-framework": "dev-sprint-develop"` * `composer install` - * **PLEASE IGNORE THE "Installation" SECTION THAT FOLLOWS, START WITH THE "Building The Framework" SECTION INSTEAD.** + * **PLEASE IGNORE THE "Installation" SECTION THAT FOLLOWS, START WITH THE "Building The Framework" SECTION INSTEAD.** ---- @@ -116,7 +137,7 @@ To determine which version of the Allure command you need to use please run `all ---- # Building The Framework -After installing the dependencies you will want to build the Codeception project in the [Magento 2 Functional Testing Framework](https://github.com/magento-pangolin/magento2-functional-testing-framework), which is a dependency of the CE or EE Tests repo. Run `./vendor/bin/robo build:project` to complete this task. +After installing the dependencies you will want to build the Codeception project in the [Magento 2 Functional Testing Framework](https://github.com/magento-pangolin/magento2-functional-testing-framework), which is a dependency of the CE or EE Tests repo. Run the following to complete this task: `./vendor/bin/robo build:project` @@ -127,9 +148,15 @@ Before you can generate or run the Tests you will need to edit the Configuration In the `.env` file you will find key pieces of information that are unique to your local Magento setup that will need to be edited before you can generate tests: * **MAGENTO_BASE_URL** + * Example: `MAGENTO_BASE_URL=http://127.0.0.1:32772/` + * Note: Please end the URL with a `/`. * **MAGENTO_BACKEND_NAME** + * Example: `MAGENTO_BACKEND_NAME=admin` + * Note: Set this variable to `admin`. * **MAGENTO_ADMIN_USERNAME** + * Example: `MAGENTO_ADMIN_USERNAME=admin` * **MAGENTO_ADMIN_PASSWORD** + * Example: `MAGENTO_ADMIN_PASSWORD=123123` ##### Additional Codeception settings can be found in the following files: * **tests/functional.suite.yml** @@ -222,25 +249,31 @@ Due to the interdependent nature of the 2 repos it is recommended to Symlink the `sudo nano /etc/paths` * StackOverflow Help: https://stackoverflow.com/questions/7703041/editing-path-variable-on-mac -* Allure `@env error` - Allure recently changed their Codeception Adapter that breaks Codeception when tests include the `@env` tag. A workaround for this error is to revert the changes they made to a function. - * Locate the `AllureAdapter.php` file here: `vendor/allure-framework/allure-codeception/src/Yandex/Allure/Adapter/AllureAdapter.php` - * Edit the `_initialize()` function found on line 77 and replace it with the following: -``` -public function _initialize(array $ignoredAnnotations = []) - { - parent::_initialize(); - Annotation\AnnotationProvider::registerAnnotationNamespaces(); - // Add standard PHPUnit annotations - Annotation\AnnotationProvider::addIgnoredAnnotations($this->ignoredAnnotations); - // Add custom ignored annotations - $ignoredAnnotations = $this->tryGetOption('ignoredAnnotations', []); - Annotation\AnnotationProvider::addIgnoredAnnotations($ignoredAnnotations); - $outputDirectory = $this->getOutputDirectory(); - $deletePreviousResults = - $this->tryGetOption(DELETE_PREVIOUS_RESULTS_PARAMETER, false); - $this->prepareOutputDirectory($outputDirectory, $deletePreviousResults); - if (is_null(Model\Provider::getOutputDirectory())) { - Model\Provider::setOutputDirectory($outputDirectory); - } - } -``` +* Allure `@env error` - Allure recently changed their Codeception Adapter that breaks Codeception when tests include the `@env` tag. There are 2 workarounds for this issue currently. + 1. You can edit the `composer.json` and point the Allure-Codeception Adapter to a previous commit: + * Edit the `composer.json` file. + * Make the following change: + * ORIGINAL: `“allure-framework/allure-codeception”: "dev-master"` + * UPDATED: `“allure-framework/allure-codeception”: “dev-master#af40af5ae2b717618a42fe3e137d75878508c75d”` + 1. You can revert the changes that they made manually: + * Locate the `AllureAdapter.php` file here: `vendor/allure-framework/allure-codeception/src/Yandex/Allure/Adapter/AllureAdapter.php` + * Edit the `_initialize()` function found on line 77 and replace it with the following: + ``` + public function _initialize(array $ignoredAnnotations = []) + { + parent::_initialize(); + Annotation\AnnotationProvider::registerAnnotationNamespaces(); + // Add standard PHPUnit annotations + Annotation\AnnotationProvider::addIgnoredAnnotations($this->ignoredAnnotations); + // Add custom ignored annotations + $ignoredAnnotations = $this->tryGetOption('ignoredAnnotations', []); + Annotation\AnnotationProvider::addIgnoredAnnotations($ignoredAnnotations); + $outputDirectory = $this->getOutputDirectory(); + $deletePreviousResults = + $this->tryGetOption(DELETE_PREVIOUS_RESULTS_PARAMETER, false); + $this->prepareOutputDirectory($outputDirectory, $deletePreviousResults); + if (is_null(Model\Provider::getOutputDirectory())) { + Model\Provider::setOutputDirectory($outputDirectory); + } + } + ``` From b8f403474290b48903b9fb45ef052c416fb78e6b Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Wed, 27 Sep 2017 23:21:00 +0300 Subject: [PATCH 070/653] MQE-352: Review and Update SampleCest.xml for added functionality --- .../ActionGroup/SampleActionGroup.xml | 12 +++++ .../SampleTests/Cest/AdvancedSampleCest.xml | 53 +++++++++++++++++++ .../SampleTests/Cest/SampleCest.xml | 25 ++++++++- .../SampleTests/Data/SampleData.xml | 22 ++++++++ .../SampleTests/Page/SamplePage.xml | 14 +++++ .../SampleTests/Section/SampleSection.xml | 17 ++++++ 6 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Data/SampleData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Page/SamplePage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Section/SampleSection.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml new file mode 100644 index 0000000000000..ac03b2e349bee --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <actionGroup name="SampleActionGroup"> + <arguments> + <argument name="person" defaultValue="SamplePerson"/> + </arguments> + <fillField selector="#foo" userInput="{{person.foo}}" mergeKey="fillField1"/> + <fillField selector="#bar" userInput="{{person.bar}}" mergeKey="fillField2"/> + </actionGroup> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml new file mode 100644 index 0000000000000..cce5b0c2c9ff0 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="AdvancedSampleCest"> + <annotations> + <features value=""/> + <stories value=""/> + <group value="skip"/> + </annotations> + <before> + <createData entity="SamplePerson" mergeKey="beforeData"/> + </before> + <after> + + </after> + <test name="OneTest"> + <annotations> + <title value=""/> + <description value=""/> + <severity value="CRITICAL"/> + <testCaseId value="#"/> + </annotations> + + <!-- Create an entity that depends on another entity --> + <createData entity="_defaultCategory" mergeKey="createCategory"/> + <createData entity="_defaultProduct" mergeKey="createProduct"> + <required-entity persistedKey="createCategory"/> + </createData> + + <!-- Parameterized url --> + <amOnPage url="{{SamplePage('foo', SamplePerson.bar)}}" mergeKey="amOnPage"/> + + <!-- Parameterized selector --> + <grabTextFrom selector="{{SampleSection.twoParamElement(SamplePerson.foo, 'bar')}}" returnVariable="myReturnVar" mergeKey="grabTextFrom"/> + + <!-- Element with a timeout --> + <click selector="{{SampleSection.timeoutElement}}" mergeKey="click"/> + + <!-- ActionGroup --> + <actionGroup ref="SampleActionGroup" mergeKey="actionGroup"> + <argument name="person" value="OverrideDefaultPerson"/> + </actionGroup> + </test> + </cest> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml index 32a18961bfa3c..0eea2c79a39a0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml @@ -8,7 +8,7 @@ <!-- Test XML Example --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> - <cest name="SampleGeneratorCest"> + <cest name="SampleCest"> <annotations> <features value="Test Generator"/> <stories value="Verify each Codeception command is generated correctly."/> @@ -247,5 +247,26 @@ <unselectOption selector="#option" variable="randomStuff" mergeKey="unselectOption1"/> <waitForText variable="randomStuff" time="5" mergeKey="waitForText1"/> </test> + <test name="AllReplacementTest"> + <annotations> + <title value="Exercise reference replacement."/> + <description value="Exercises {{foo}}, $foo$, and $$foo$$ replacement."/> + <severity value="CRITICAL"/> + <testCaseId value="#"/> + </annotations> + <createData entity="CustomerEntity1" mergeKey="testScopeData"/> + <amOnPage url="{{SamplePage.url('success','success2')}}" mergeKey="a0"/> + <amOnPage url="/$testScopeData.firstname$.html" mergeKey="a1"/> + <amOnPage url="/$$createData1.firstname$$.html" mergeKey="a2"/> + <amOnPage url="{{SamplePage.url($testScopeData.firstname$,$testScopeData.lastname$)}}" mergeKey="a3"/> + <amOnPage url="{{SamplePage.url($$createData1.firstname$$,$$createData1.lastname$$)}}" mergeKey="a4"/> + <click selector="{{SampleSection.oneParamElement('success')}}" mergeKey="c1"/> + <click selector="{{SampleSection.twoParamElement('success','success2')}}" mergeKey="c2"/> + <click selector="{{SampleSection.threeParamElement('John', SamplePerson.lastname, $testScopeData.lastname$)}}" mergeKey="c3"/> + <click selector="#$testScopeData.firstname$ .$testScopeData.lastname$" mergeKey="c4"/> + <click selector="#$$createData1.firstname$$ .$$createData1.lastname$$" mergeKey="c5"/> + <fillField selector="#sample" userInput="Hello $testScopeData.firstname$ $testScopeData.lastname$" mergeKey="f1"/> + <fillField selector="#sample" userInput="Hello $$createData1.firstname$$ $$createData1.lastname$$" mergeKey="f2"/> + </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Data/SampleData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Data/SampleData.xml new file mode 100644 index 0000000000000..7f5fbde6217fc --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Data/SampleData.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="SamplePerson" type="samplePerson"> + <data key="foo">foo</data> + <data key="bar">bar</data> + <data key="lastName">Doe</data> + <data key="email" unique="prefix">.email@gmail.com</data> + </entity> + <entity name="OverrideDefaultPerson" type="samplePerson"> + <data key="foo">fizz</data> + <data key="bar">buzz</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Page/SamplePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Page/SamplePage.xml new file mode 100644 index 0000000000000..034e0dd50dd6e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Page/SamplePage.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="SamplePage" urlPath="/{{var1}}/{{var2}}.html" module="SampleTests" parameterized="true"> + <section name="SampleSection"/> + </page> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Section/SampleSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Section/SampleSection.xml new file mode 100644 index 0000000000000..789e8dfd3a7a6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Section/SampleSection.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="SampleSection"> + <element name="oneParamElement" type="button" selector="#element .{{var1}}" parameterized="true"/> + <element name="twoParamElement" type="button" selector="#{{var1}} .{{var2}}" parameterized="true"/> + <element name="threeParamElement" type="button" selector="#{{var1}}-{{var2}} .{{var3}}" parameterized="true"/> + <element name="timeoutElement" type="button" selector="#foo" timeout="30"/> + </section> +</config> From 5477a1098504f04cba67e916e4ef5b0f86754089 Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Wed, 4 Oct 2017 21:33:49 +0300 Subject: [PATCH 071/653] MQE-419: README.MD should not reference the magento-pangolin org --- dev/tests/acceptance/README.md | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/dev/tests/acceptance/README.md b/dev/tests/acceptance/README.md index ea6eedd3f84c2..805c89e126d1e 100755 --- a/dev/tests/acceptance/README.md +++ b/dev/tests/acceptance/README.md @@ -30,8 +30,8 @@ Due to the current setup of the Framework you will need to do the following: * `mkdir [DIRECTORY_NAME]` * `cd [DIRECTORY_NAME]` - * Pull down - [EE](https://github.com/magento-pangolin/magento2ee) - * Pull down - [CE](https://github.com/magento-pangolin/magento2ce) + * Pull down - [EE](https://github.com/magento/magento2ee) + * Pull down - [CE](https://github.com/magento/magento2ce) * `cd magento2ee` * `php -f dev/tools/build-ee.php -- --command=link --exclude=true` * `cd ..` @@ -50,16 +50,7 @@ Due to the current setup of the Framework you will need to do the following: ``` * Replace `<personal access token>` with the token you generated in GitHub. * Save your work. - * `cd ../magento2ce` - * `cd dev/tests/acceptance` - * Open the `composer.json` file. - * Make the following edits: - * `url`: - 1. ORIGINAL: `"url": "git@github.com:magento/magento2-functional-testing-framework.git"` - 1. UPDATED: `"url": "git@github.com:magento-pangolin/magento2-functional-testing-framework.git"` - * `magento/magento2-functional-testing-framework`: - 1. ORIGINAL: `"magento/magento2-functional-testing-framework": "dev-develop"` - 1. UPDATED: `"magento/magento2-functional-testing-framework": "dev-sprint-develop"` + * `cd magento2ce/dev/tests/acceptance` * `composer install` * **PLEASE IGNORE THE "Installation" SECTION THAT FOLLOWS, START WITH THE "Building The Framework" SECTION INSTEAD.** @@ -137,7 +128,7 @@ To determine which version of the Allure command you need to use please run `all ---- # Building The Framework -After installing the dependencies you will want to build the Codeception project in the [Magento 2 Functional Testing Framework](https://github.com/magento-pangolin/magento2-functional-testing-framework), which is a dependency of the CE or EE Tests repo. Run the following to complete this task: +After installing the dependencies you will want to build the Codeception project in the [Magento 2 Functional Testing Framework](https://github.com/magento/magento2-functional-testing-framework), which is a dependency of the CE or EE Tests repo. Run the following to complete this task: `./vendor/bin/robo build:project` From aa1035a22ffa92c3921bab014ae0eaaa807fdb64 Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Thu, 5 Oct 2017 15:16:05 +0300 Subject: [PATCH 072/653] MQE-424: Fix static code issues in MFTF tests and MFTF --- .../FunctionalTest/Catalog/Metadata/category-meta.xml | 7 ++++++- .../Metadata/product_extension_attribute-meta.xml | 2 +- .../Catalog/Metadata/product_link-meta.xml | 2 +- .../Metadata/product_link_extension_attribute-meta.xml | 2 +- .../Catalog/Metadata/product_option-meta.xml | 2 +- .../Catalog/Metadata/product_option_value-meta.xml | 2 +- .../FunctionalTest/Catalog/Metadata/stock_item-meta.xml | 2 +- .../FunctionalTest/Catalog/Page/AdminCategoryPage.xml | 2 +- .../Catalog/Section/AdminCategoryBasicFieldSection.xml | 2 +- .../Catalog/Section/AdminCategoryMainActionsSection.xml | 2 +- .../Catalog/Section/AdminCategoryMessagesSection.xml | 2 +- .../Catalog/Section/AdminCategorySEOSection.xml | 2 +- .../Section/AdminCategorySidebarActionSection.xml | 2 +- .../Catalog/Section/AdminCategorySidebarTreeSection.xml | 2 +- .../Catalog/Section/AdminProductFormSection.xml | 2 +- .../Catalog/Section/AdminProductMessagesSection.xml | 2 +- .../Catalog/Section/AdminProductSEOSection.xml | 2 +- .../FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml | 2 +- .../ConfigurableProduct/Data/ConfigurableProductData.xml | 2 +- .../Customer/Cest/AdminCreateCustomerCest.xml | 2 +- .../Cest/StorefrontExistingCustomerLoginCest.xml | 2 +- .../FunctionalTest/Customer/Metadata/address-meta.xml | 2 +- .../Customer/Metadata/custom_attribute-meta.xml | 2 +- .../FunctionalTest/Customer/Metadata/customer-meta.xml | 2 +- .../Metadata/customer_extension_attribute-meta.xml | 2 +- .../customer_nested_extension_attribute-meta.xml | 2 +- .../Customer/Metadata/empty_extension_attribute-meta.xml | 2 +- .../FunctionalTest/Customer/Metadata/region-meta.xml | 2 +- .../FunctionalTest/Customer/Page/AdminCustomerPage.xml | 2 +- .../Customer/Page/AdminNewCustomerPage.xml | 2 +- .../Customer/Page/StorefrontCustomerCreatePage.xml | 2 +- .../Customer/Page/StorefrontCustomerDashboardPage.xml | 2 +- .../Customer/Page/StorefrontCustomerSignInPage.xml | 2 +- .../FunctionalTest/Customer/Page/StorefrontHomePage.xml | 2 +- .../Customer/Section/AdminCustomerFiltersSection.xml | 2 +- .../Customer/Section/AdminCustomerGridSection.xml | 2 +- .../Customer/Section/AdminCustomerMainActionsSection.xml | 2 +- .../Customer/Section/AdminCustomerMessagesSection.xml | 2 +- .../AdminNewCustomerAccountInformationSection.xml | 2 +- .../Section/AdminNewCustomerMainActionsSection.xml | 2 +- ...refrontCustomerDashboardAccountInformationSection.xml | 2 +- .../Customer/Section/StorefrontPanelHeaderSection.xml | 2 +- .../Magento/FunctionalTest/Sales/Data/SalesData.xml | 2 +- .../ActionGroup/TemplateActionGroupFile.xml | 2 +- .../SampleTemplates/Cest/TemplateCestFile.xml | 2 +- .../SampleTemplates/Page/TemplatePageFile.xml | 2 +- .../SampleTemplates/Section/TemplateSectionFile.xml | 2 +- .../SampleTests/ActionGroup/SampleActionGroup.xml | 6 ++++++ .../FunctionalTest/SampleTests/Cest/MinimumTestCest.xml | 2 +- .../Store/Cest/AdminCreateStoreGroupCest.xml | 8 +++++++- .../Magento/FunctionalTest/Store/Data/StoreData.xml | 7 ++++++- .../Magento/FunctionalTest/Store/Data/StoreGroupData.xml | 7 ++++++- .../Magento/FunctionalTest/Store/Metadata/store-meta.xml | 9 +++++++-- .../FunctionalTest/Store/Metadata/store_group-meta.xml | 9 +++++++-- .../FunctionalTest/Store/Page/AdminSystemStorePage.xml | 9 +++++++-- .../Store/Section/AdminNewStoreGroupSection.xml | 9 ++++++++- .../Store/Section/AdminNewStoreSection.xml | 9 ++++++++- .../Store/Section/AdminStoresGridSection.xml | 9 ++++++++- .../Store/Section/AdminStoresMainActionsSection.xml | 9 ++++++++- .../Magento/FunctionalTest/User/Data/UserData.xml | 2 +- 60 files changed, 132 insertions(+), 62 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml index 2594124265180..0ab9bd1f56229 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml @@ -1,5 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> - +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateCategory" dataType="category" type="create" auth="adminOauth" url="/V1/categories" method="POST"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml index 7d55badaebf53..d8d20b5e1ed05 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_extension_attribute-meta.xml @@ -14,4 +14,4 @@ <operation name="UpdateProductExtensionAttribute" dataType="product_extension_attribute" type="update"> <field key="stock_item">stock_item</field> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml index 1cb109442a169..7a07ffc3d689f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link-meta.xml @@ -28,4 +28,4 @@ <value>product_link_extension_attribute</value> </array> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml index 261c0113b27a1..eaeedafe042ee 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml @@ -16,4 +16,4 @@ <header param="Content-Type">application/json</header> <field key="qty">integer</field> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml index 33be20a90a8f8..a6f2d2a8f5ab1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option-meta.xml @@ -44,4 +44,4 @@ <value>product_option_value</value> </array> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml index abe43e0dc2d21..ebf9a82a13475 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_option_value-meta.xml @@ -24,4 +24,4 @@ <field key="sku">string</field> <field key="option_type_id">integer</field> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml index 4f883469432bc..97556fb932b45 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/stock_item-meta.xml @@ -16,4 +16,4 @@ <field key="qty">integer</field> <field key="is_in_stock">boolean</field> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml index 0ff498d84fd34..5cb797de26cd1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml @@ -14,4 +14,4 @@ <section name="AdminCategoryBasicFieldSection"/> <section name="AdminCategorySEOSection"/> </page> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml index 4a55b4db465b3..10d55fab9ebb9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml @@ -13,4 +13,4 @@ <element name="EnableCategory" type="checkbox" selector="input[name='is_active']"/> <element name="CategoryNameInput" type="input" selector="input[name='name']"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml index 2ca068f0c10e2..f6223b6b5f29a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml @@ -11,4 +11,4 @@ <section name="AdminCategoryMainActionsSection"> <element name="SaveButton" type="button" selector=".page-actions-inner #save" timeout="30"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml index bf8b4f7954251..e496968dd2b6b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMessagesSection.xml @@ -11,4 +11,4 @@ <section name="AdminCategoryMessagesSection"> <element name="SuccessMessage" type="text" selector=".message-success"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml index 078e591b535e0..83aef318c28d6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml @@ -15,4 +15,4 @@ <element name="MetaKeywordsInput" type="textarea" selector="textarea[name='meta_keywords']"/> <element name="MetaDescriptionInput" type="textarea" selector="textarea[name='meta_description']"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml index 99ec25950216e..f8ca01d7a007f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarActionSection.xml @@ -12,4 +12,4 @@ <element name="AddRootCategoryButton" type="button" selector="#add_root_category_button" timeout="30"/> <element name="AddSubcategoryButton" type="button" selector="#add_subcategory_button" timeout="30"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml index d6ddd44bda5b5..450c13a70a0e1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySidebarTreeSection.xml @@ -12,4 +12,4 @@ <element name="Collapse All" type="button" selector=".tree-actions a:first-child"/> <element name="Expand All" type="button" selector=".tree-actions a:last-child"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml index 7b3f629290842..b91c9145ee43d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductFormSection.xml @@ -54,4 +54,4 @@ <section name="AdminChooseAffectedAttributeSetPopup"> <element name="confirm" type="button" selector="button[data-index='confirm_button']" timeout="30"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml index f20d3f51becde..b99e365352cd6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductMessagesSection.xml @@ -11,4 +11,4 @@ <section name="AdminProductMessagesSection"> <element name="successMessage" type="text" selector=".message-success"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml index 1f9fc4fc3fc61..ffc2bcc0a5634 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminProductSEOSection.xml @@ -12,4 +12,4 @@ <element name="sectionHeader" type="button" selector="div[data-index='search-engine-optimization']" timeout="30"/> <element name="urlKeyInput" type="input" selector="input[name='product[url_key]']"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml index 4bf40301e5c81..44b82ab9270f6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml @@ -11,4 +11,4 @@ <page name="CheckoutSuccessPage" urlPath="/checkout/onepage/success/" module="Checkout"> <section name="CheckoutSuccessMainSection"/> </page> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml index 71fd665d09602..1e5538dae880f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml @@ -11,4 +11,4 @@ <entity name="ConfigurableProductOne" type="configurableProduct"> <data key="configurableProductName">data</data> </entity> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml index 8e4b2a8abd804..47939e42d5cbc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml @@ -46,4 +46,4 @@ <see userInput="{{CustomerEntityOne.email}}" selector="{{AdminCustomerGridSection.customerGrid}}" mergeKey="assertEmail"/> </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml index 11a2a27862ea5..ae2609221c5a1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml @@ -39,4 +39,4 @@ <see mergeKey="seeEmail" userInput="$$Simple_US_Customer.email$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml index af789417ab766..6c2b1c002ff99 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/address-meta.xml @@ -59,4 +59,4 @@ <value>custom_attribute</value> </array> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml index 5188675e4e932..f3312bb08c3c3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml @@ -22,4 +22,4 @@ <field key="attribute_code">string</field> <field key="value">string</field> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml index bbad0da9b8f3f..797ffff72f8b1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml @@ -76,4 +76,4 @@ <contentType>application/json</contentType> <param key="id" type="path">{id}</param> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml index c148081c4bebe..49f6ae1f2642e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_extension_attribute-meta.xml @@ -16,4 +16,4 @@ <field key="is_subscribed">boolean</field> <field key="extension_attribute">customer_nested_extension_attribute</field> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml index 5b189e186f401..d7c24c59f7119 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer_nested_extension_attribute-meta.xml @@ -18,4 +18,4 @@ <field key="customer_id">integer</field> <field key="value">string</field> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml index ce07c28e6c952..76c3e39bd6f31 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml @@ -12,4 +12,4 @@ </operation> <operation name="UpdateEmptyExtensionAttribute" dataType="empty_extension_attribute" type="update"> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml index 6982b4a6ae5b6..c126ef3709d86 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/region-meta.xml @@ -20,4 +20,4 @@ <field key="region_id">string</field> <field key="extension_attributes">empty_extension_attribute</field> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml index 40522af259daa..450372d2d8ba3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml @@ -14,4 +14,4 @@ <section name="AdminCustomerGridSection"/> <section name="AdminCustomerFiltersSection"/> </page> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml index 520021c16146d..725fe9f9618f9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml @@ -12,4 +12,4 @@ <section name="AdminNewCustomerAccountInformationSection"/> <section name="AdminNewCustomerMainActionsSection"/> </page> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml index 1917f1bd352b7..12f6c61f7620d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml @@ -11,4 +11,4 @@ <page name="StorefrontCustomerCreatePage" urlPath="/customer/account/create/" module="Magento_Customer"> <section name="StorefrontCustomerCreateFormSection" /> </page> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml index 179a4e62d06ee..498c39a1f6ad7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml @@ -11,4 +11,4 @@ <page name="StorefrontCustomerDashboardPage" urlPath="/customer/account/" module="Magento_Customer"> <section name="StorefrontCustomerDashboardAccountInformationSection" /> </page> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml index a5835c2bcc29f..ddf5769bdcb76 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml @@ -11,4 +11,4 @@ <page name="StorefrontCustomerSignInPage" urlPath="/customer/account/login/" module="Magento_Customer"> <section name="StorefrontCustomerSignInFormSection" /> </page> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml index d54e1776c2c5f..3d826553ab8aa 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml @@ -11,4 +11,4 @@ <page name="StorefrontProductPage" urlPath="/" module="Magento_Customer"> <section name="StorefrontPanelHeader" /> </page> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml index 40a5fc2f11927..57449d2b22bfb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml @@ -13,4 +13,4 @@ <element name="nameInput" type="input" selector="input[name=name]"/> <element name="apply" type="button" selector="button[data-action=grid-filter-apply]" timeout="30"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml index ec6dd21c9ed1f..efc54c77c5f86 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerGridSection.xml @@ -11,4 +11,4 @@ <section name="AdminCustomerGridSection"> <element name="customerGrid" type="text" selector="table[data-role='grid']"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml index 148958c49d675..e673dfd75771b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMainActionsSection.xml @@ -11,4 +11,4 @@ <section name="AdminCustomerMainActionsSection"> <element name="addNewCustomer" type="button" selector="#add" timeout="30"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml index 5871da67356fc..972a8cd6feac0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerMessagesSection.xml @@ -11,4 +11,4 @@ <section name="AdminCustomerMessagesSection"> <element name="successMessage" type="text" selector=".message-success"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml index 2e2c2930807c5..7ba2dd5937d56 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerAccountInformationSection.xml @@ -13,4 +13,4 @@ <element name="lastName" type="input" selector="input[name='customer[lastname]']"/> <element name="email" type="input" selector="input[name='customer[email]']"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml index 18e7e45f992e7..c8ca91e9eec61 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminNewCustomerMainActionsSection.xml @@ -11,4 +11,4 @@ <section name="AdminNewCustomerMainActionsSection"> <element name="saveButton" type="button" selector="#save" timeout="30"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml index 0ed3b4cceed86..6d5eb53adc9d8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontCustomerDashboardAccountInformationSection.xml @@ -11,4 +11,4 @@ <section name="StorefrontCustomerDashboardAccountInformationSection"> <element name="ContactInformation" type="textarea" selector=".box.box-information .box-content"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml index 0ada8563eee96..e7072579cc79b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/StorefrontPanelHeaderSection.xml @@ -11,4 +11,4 @@ <section name="StorefrontPanelHeaderSection"> <element name="createAnAccountLink" type="select" selector=".panel.header li:nth-child(3)"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Data/SalesData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Data/SalesData.xml index 1a31a5a92cb74..b96d8fe088fae 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Data/SalesData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Data/SalesData.xml @@ -11,4 +11,4 @@ <entity name="salesRecordOne" type="sales"> <data key="salesId">data</data> </entity> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/ActionGroup/TemplateActionGroupFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/ActionGroup/TemplateActionGroupFile.xml index 13e1467cbd2ce..7a235e041ecef 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/ActionGroup/TemplateActionGroupFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/ActionGroup/TemplateActionGroupFile.xml @@ -11,4 +11,4 @@ <actionGroup name=""> <!-- ADD TEST STEPS HERE --> </actionGroup> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml index 5e45eeed07c4d..f0d843581a475 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml @@ -31,4 +31,4 @@ <!-- ADD TEST STEPS HERE --> </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Page/TemplatePageFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Page/TemplatePageFile.xml index 8aceda038555f..17be26f6b6f7e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Page/TemplatePageFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Page/TemplatePageFile.xml @@ -11,4 +11,4 @@ <page name="" urlPath="" module=""> <section name=""/> </page> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Section/TemplateSectionFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Section/TemplateSectionFile.xml index df29d4c6a545a..a85e72c274d59 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Section/TemplateSectionFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Section/TemplateSectionFile.xml @@ -11,4 +11,4 @@ <section name=""> <element name="" type="" selector=""/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml index ac03b2e349bee..858d5017dd9ef 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml index 5f69f5d6c43e3..8eb88ad53ce6f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml @@ -31,4 +31,4 @@ <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml index 87d40cb40bf56..7d1c8895b415f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <!-- Test XML Example --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> <cest name="AdminCreateStoreGroupCest"> @@ -44,4 +50,4 @@ <!--see mergeKey="s43" selector="{{AdminStoresGridSection.storeGrpNameInFirstRow}}" userInput="$$b2.group[name]$$"/--> </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreData.xml index 4b5bc9a8d832a..9625fa3152796 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreData.xml @@ -1,5 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> - +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> <entity name="customStore" type="store"> <!--data key="group_id">customStoreGroup.id</data--> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreGroupData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreGroupData.xml index c0124b206d138..81ee940acf78a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreGroupData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Data/StoreGroupData.xml @@ -1,5 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> - +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> <entity name="customStoreGroup" type="group"> <data key="group_id">null</data> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store-meta.xml index 5b9f0022755eb..0cf7683f87ca1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store-meta.xml @@ -1,5 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> - +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateStore" dataType="store" type="create" @@ -14,4 +19,4 @@ <field key="store_action">string</field> <field key="store_type">string</field> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store_group-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store_group-meta.xml index 6f1667398a648..a4820aea080f8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store_group-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store_group-meta.xml @@ -1,5 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> - +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateStoreGroup" dataType="group" type="create" @@ -15,4 +20,4 @@ <field key="store_action">string</field> <field key="store_type">string</field> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Page/AdminSystemStorePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Page/AdminSystemStorePage.xml index 542c618171dc1..4d981b218b7ee 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Page/AdminSystemStorePage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Page/AdminSystemStorePage.xml @@ -1,8 +1,13 @@ <?xml version="1.0" encoding="utf-8"?> - +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> <page name="AdminSystemStorePage" urlPath="/admin/admin/system_store/" module="Store"> <section name="AdminStoresMainActionsSection"/> <section name="AdminStoresGridSection"/> </page> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreGroupSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreGroupSection.xml index 1471832d52883..1bc347d0c5aa7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreGroupSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreGroupSection.xml @@ -1,7 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminNewStoreGroupSection"> <element name="storeGrpNameTextField" type="input" selector="#group_name"/> <element name="storeGrpCodeTextField" type="input" selector="#group_code"/> <element name="storeRootCategoryDropdown" type="button" selector="#group_root_category_id"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreSection.xml index d44df4dc6f6a8..50e009c88f4bd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminNewStoreSection.xml @@ -1,3 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminNewStoreSection"> <element name="storeNameTextField" type="input" selector="#store_name"/> @@ -6,4 +13,4 @@ <element name="storeGrpDropdown" type="button" selector="#store_group_id"/> <element name="sortOrderTextField" type="input" selector="#store_sort_order"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresGridSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresGridSection.xml index 42b171cc5e8a7..ef9c27faa1954 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresGridSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresGridSection.xml @@ -1,3 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminStoresGridSection"> <element name="storeGrpFilterTextField" type="input" selector="#storeGrid_filter_group_title"/> @@ -10,4 +17,4 @@ <element name="storeNameInFirstRow" type="text" selector=".col-store_title>a"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresMainActionsSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresMainActionsSection.xml index cd136a0de1562..5f8d1800aabc6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresMainActionsSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Section/AdminStoresMainActionsSection.xml @@ -1,3 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="AdminStoresMainActionsSection"> <element name="createStoreViewButton" type="button" selector="#add_store"/> @@ -6,4 +13,4 @@ <element name="saveButton" type="button" selector="#save"/> <element name="backButton" type="button" selector="#back"/> </section> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/Data/UserData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/Data/UserData.xml index bb704038a51bd..a8461be7f49db 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/Data/UserData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/Data/UserData.xml @@ -12,4 +12,4 @@ <data key="email">admin@magento.com</data> <data key="password">admin123</data> </entity> -</config> \ No newline at end of file +</config> From e973f95e0e266def85cf28cbedc2961564795883 Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Fri, 6 Oct 2017 17:35:55 +0300 Subject: [PATCH 073/653] MQE-335: Headless Browser Spike - Updating all @env tags for tests. Only listing the ones that the test works in currently. - Updating README. Replacing "Acceptance" with "Functional". - Adding Headless command to robo. --- dev/tests/acceptance/RoboFile.php | 18 ++++++++++++++---- .../acceptance/tests/functional.suite.dist.yml | 2 +- .../Backend/Cest/AdminLoginCest.xml | 11 ++++++----- .../Catalog/Cest/AdminCreateCategoryCest.xml | 7 +++---- .../AdminCreateConfigurableProductCest.xml | 8 +++----- .../Cest/AdminCreateSimpleProductCest.xml | 7 +++---- .../Cest/StorefrontCustomerCheckoutCest.xml | 7 +++---- .../Cest/StorefrontGuestCheckoutCest.xml | 7 +++---- .../Cms/Cest/AdminCreateCmsPageCest.xml | 8 ++++---- .../Customer/Cest/AdminCreateCustomerCest.xml | 8 ++++---- .../Cest/StorefrontCreateCustomerCest.xml | 9 +++++---- .../StorefrontExistingCustomerLoginCest.xml | 9 +++++---- .../Sales/Cest/AdminCreateInvoiceCest.xml | 7 +++---- .../SampleTemplates/Cest/TemplateCestFile.xml | 4 ++-- .../SampleTests/Cest/MinimumTestCest.xml | 9 +++++---- .../Cest/PersistMultipleEntitiesCest.xml | 8 ++++---- 16 files changed, 68 insertions(+), 61 deletions(-) diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php index 4f6346de148ed..ac1e9f407637a 100644 --- a/dev/tests/acceptance/RoboFile.php +++ b/dev/tests/acceptance/RoboFile.php @@ -44,7 +44,7 @@ function generateTests() } /** - * Run all Acceptance tests using the Chrome environment + * Run all Functional tests using the Chrome environment */ function chrome() { @@ -52,7 +52,7 @@ function chrome() } /** - * Run all Acceptance tests using the FireFox environment + * Run all Functional tests using the FireFox environment */ function firefox() { @@ -60,15 +60,24 @@ function firefox() } /** - * Run all Acceptance tests using the PhantomJS environment + * Run all Functional tests using the PhantomJS environment */ function phantomjs() { $this->_exec('./vendor/bin/codecept run functional --env phantomjs --skip-group skip'); } + /** + * Run all Functional tests using the Chrome Headless environment + */ + function headless() + { + $this->_exec('./vendor/bin/codecept run functional --env headless --skip-group skip'); + } + /** * Run all Tests with the specified @group tag, excluding @group 'skip', using the Chrome environment + * @param string $args */ function group($args = '') { @@ -76,7 +85,8 @@ function group($args = '') } /** - * Run all Acceptance tests located under the Directory Path provided using the Chrome environment + * Run all Functional tests located under the Directory Path provided using the Chrome environment + * @param string $args */ function folder($args = '') { diff --git a/dev/tests/acceptance/tests/functional.suite.dist.yml b/dev/tests/acceptance/tests/functional.suite.dist.yml index 12ca2eae436d5..afba145ca9a0c 100644 --- a/dev/tests/acceptance/tests/functional.suite.dist.yml +++ b/dev/tests/acceptance/tests/functional.suite.dist.yml @@ -26,7 +26,7 @@ modules: \Magento\FunctionalTestingFramework\Module\MagentoWebDriver: url: "%MAGENTO_BASE_URL%" backend_name: admin - browser: chrome + browser: 'chrome' window_size: maximize username: "%MAGENTO_ADMIN_USERNAME%" password: "%MAGENTO_ADMIN_PASSWORD%" diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml index bb36605b3cd26..4b14e76edb074 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml @@ -12,11 +12,6 @@ <annotations> <features value="Admin Login"/> <stories value="Login on the Admin Login page"/> - <group value="example"/> - <group value="login"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> </annotations> <test name="LoginAsAdmin"> <annotations> @@ -24,6 +19,12 @@ <description value="You should be able to log into the Magento Admin backend."/> <severity value="CRITICAL"/> <testCaseId value="MAGETWO-71572"/> + <group value="example"/> + <group value="login"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage}}" mergeKey="amOnAdminLoginPage"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml index bb22cb72910cc..0cb12ebe6df01 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml @@ -12,10 +12,6 @@ <annotations> <features value="Category Creation"/> <stories value="Create a Category via the Admin"/> - <group value="category"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> </annotations> <after> <amOnPage url="admin/admin/auth/logout/" mergeKey="amOnLogoutPage"/> @@ -26,6 +22,9 @@ <description value="You should be able to create a Category in the admin back-end."/> <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72102"/> + <group value="category"/> + <env value="chrome"/> + <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage}}" mergeKey="amOnAdminLoginPage"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml index b8fbb0a93e71c..a595cf8b47625 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml @@ -12,11 +12,6 @@ <annotations> <features value="Product Creation"/> <stories value="Create a Configurable Product via the Admin"/> - <group value="configurable"/> - <group value="product"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> </annotations> <before> <loginAsAdmin mergeKey="loginAsAdmin"/> @@ -30,6 +25,9 @@ <description value="You should be able to create a Configurable Product via the Admin."/> <severity value="CRITICAL"/> <testCaseId value="MAGETWO-26041"/> + <group value="configurable"/> + <group value="product"/> + <env value="chrome"/> </annotations> <amOnPage url="{{AdminCategoryPage.urlPath}}" mergeKey="amOnCategoryGridPage"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml index 7508d00f134e1..87b8e2a1d9435 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml @@ -12,10 +12,6 @@ <annotations> <features value="Product Creation"/> <stories value="Create a Simple Product via Admin"/> - <group value="product"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> </annotations> <before> <createData entity="_defaultCategory" mergeKey="createPreReqCategory"/> @@ -26,6 +22,9 @@ <description value="You should be able to create a Simple Product in the admin back-end."/> <severity value="CRITICAL"/> <testCaseId value="MAGETWO-23414"/> + <group value="product"/> + <env value="chrome"/> + <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml index 67e48feb8e419..e8d03c447f340 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml @@ -12,10 +12,6 @@ <annotations> <features value="Checkout"/> <stories value="Checkout via the Admin"/> - <group value="checkout"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> </annotations> <before> <createData entity="SimpleSubCategory" mergeKey="simplecategory"/> @@ -35,6 +31,9 @@ <description value="Should be able to place an order as a customer."/> <severity value="CRITICAL"/> <testCaseId value="#"/> + <group value="checkout"/> + <env value="chrome"/> + <env value="headless"/> </annotations> <amOnPage mergeKey="s1" url="customer/account/login/"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml index d4d6fcb9572ce..15f7db461e5ec 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml @@ -12,10 +12,6 @@ <annotations> <features value="Checkout"/> <stories value="Checkout via Guest Checkout"/> - <group value="checkout"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> </annotations> <before> <createData entity="_defaultCategory" mergeKey="createCategory"/> @@ -33,6 +29,9 @@ <description value="Should be able to place an order as a Guest."/> <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72094"/> + <group value="checkout"/> + <env value="chrome"/> + <env value="headless"/> </annotations> <amOnPage url="{{StorefrontCategoryPage.url($$createCategory.name$$)}}" mergeKey="onCategoryPage"/> <waitForPageLoad mergeKey="waitForPageLoad1"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml index 8553296fc96ef..cf1f9564c4b32 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml @@ -12,10 +12,6 @@ <annotations> <features value="CMS Page Creation"/> <stories value="Create a CMS Page via the Admin"/> - <group value="cms"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> </annotations> <after> <amOnPage url="admin/admin/auth/logout/" mergeKey="amOnLogoutPage"/> @@ -26,6 +22,10 @@ <description value="You should be able to create a CMS Page via the Admin."/> <severity value="CRITICAL"/> <testCaseId value="MAGETWO-25580"/> + <group value="cms"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage}}" mergeKey="navigateToAdmin"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml index 47939e42d5cbc..b577bca92e34f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml @@ -12,10 +12,6 @@ <annotations> <features value="Customer Creation"/> <stories value="Create a Customer via the Admin"/> - <group value="customer"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> </annotations> <test name="CreateCustomerViaAdminCest"> <annotations> @@ -23,6 +19,10 @@ <description value="You should be able to create a customer in the Admin back-end."/> <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72095"/> + <group value="customer"/> + <group value="create"/> + <env value="chrome"/> + <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml index 45bc23e5a0d6b..37fe0017b8685 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml @@ -12,17 +12,18 @@ <annotations> <features value="Customer Creation"/> <stories value="Create a Customer via the Storefront"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> </annotations> <test name="CreateCustomerViaStorefront"> <annotations> <title value="You should be able to create a customer via the storefront"/> <description value="You should be able to create a customer via the storefront."/> <severity value="CRITICAL"/> - <group value="create"/> <testCaseId value="MAGETWO-23546"/> + <group value="customer"/> + <group value="create"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="headless"/> </annotations> <amOnPage mergeKey="amOnStorefrontPage" url="/"/> <click mergeKey="clickOnCreateAccountLink" selector="{{StorefrontPanelHeaderSection.createAnAccountLink}}"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml index ae2609221c5a1..0d6212a96e751 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml @@ -12,10 +12,6 @@ <annotations> <features value="Customer Login"/> <stories value="Existing Customer can Login on the Storefront"/> - <group value="customer"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> </annotations> <before> <createData entity="Simple_US_Customer" mergeKey="Simple_US_Customer"/> @@ -29,6 +25,11 @@ <description value="You should be able to create a customer via the storefront."/> <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72103"/> + <group value="customer"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + <env value="headless"/> </annotations> <amOnPage mergeKey="amOnSignInPage" url="customer/account/login/"/> <fillField mergeKey="fillEmail" userInput="$$Simple_US_Customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml index e374ffbd6f182..57e3837e9727d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml @@ -12,10 +12,6 @@ <annotations> <features value="Invoice Creation"/> <stories value="Create an Invoice via the Admin"/> - <group value="sales"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> </annotations> <before> <createData entity="_defaultCategory" mergeKey="createCategory"/> @@ -30,6 +26,9 @@ <description value="Should be able to create an invoice via the admin."/> <severity value="NORMAL"/> <testCaseId value="MAGETWO-72096"/> + <group value="sales"/> + <env value="chrome"/> + <env value="headless"/> </annotations> <!-- todo: Create an order via the api instead of driving the browser --> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml index f0d843581a475..bc29e788f9025 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml @@ -12,8 +12,6 @@ <annotations> <features value=""/> <stories value=""/> - <group value=""/> - <env value=""/> </annotations> <before> @@ -27,6 +25,8 @@ <description value=""/> <severity value=""/> <testCaseId value=""/> + <group value=""/> + <env value=""/> </annotations> <!-- ADD TEST STEPS HERE --> </test> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml index 8eb88ad53ce6f..6d4e6a73c8707 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml @@ -12,10 +12,6 @@ <annotations> <features value="Minimum Test"/> <stories value="Minimum Test"/> - <group value="example"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> </annotations> <after> <seeInCurrentUrl url="/admin/admin/" mergeKey="seeInCurrentUrl"/> @@ -24,6 +20,11 @@ <annotations> <title value="Minimum Test"/> <description value="Minimum Test"/> + <group value="example"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage}}" mergeKey="navigateToAdmin"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml index 560b3b46cb5f7..ae64bf4cdb6c6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml @@ -9,10 +9,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> <cest name="PersistMultipleEntitiesCest"> - <annotations> - <group value="ff"/> - <group value="skip"/> - </annotations> <before> <createData entity="simplesubcategory" mergeKey="simplecategory"/> <createData entity="simpleproduct" mergeKey="simpleproduct1"> @@ -28,6 +24,10 @@ <deleteData createDataKey="simplecategory" mergeKey="deleteCategory"/> </after> <test name="PersistMultipleEntitiesTest"> + <annotations> + <group value="ff"/> + <group value="skip"/> + </annotations> <amOnPage mergeKey="s11" url="/$$simplecategory.name$$.html" /> <waitForPageLoad mergeKey="s33"/> <see mergeKey="s35" selector="{{StorefrontCategoryMainSection.productCount}}" userInput="2"/> From fe072e060092fcb52ace562999366ec713907e13 Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Fri, 6 Oct 2017 17:49:51 +0300 Subject: [PATCH 074/653] MQE-415: Change required-entity's persistedKey in test schema to createDataKey --- .../Checkout/Cest/StorefrontCustomerCheckoutCest.xml | 2 +- .../Checkout/Cest/StorefrontGuestCheckoutCest.xml | 2 +- .../FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml | 2 +- .../FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml | 2 +- .../SampleTests/Cest/PersistMultipleEntitiesCest.xml | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml index e8d03c447f340..20442a4873301 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml @@ -16,7 +16,7 @@ <before> <createData entity="SimpleSubCategory" mergeKey="simplecategory"/> <createData entity="SimpleProduct" mergeKey="simpleproduct1"> - <required-entity persistedKey="simplecategory"/> + <required-entity createDataKey="simplecategory"/> </createData> <createData entity="Simple_US_Customer" mergeKey="simpleuscustomer"/> </before> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml index 15f7db461e5ec..03e36ff28d9d7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml @@ -16,7 +16,7 @@ <before> <createData entity="_defaultCategory" mergeKey="createCategory"/> <createData entity="_defaultProduct" mergeKey="createProduct"> - <required-entity persistedKey="createCategory"/> + <required-entity createDataKey="createCategory"/> </createData> </before> <after> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml index 57e3837e9727d..7ff96a3bed9de 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml @@ -16,7 +16,7 @@ <before> <createData entity="_defaultCategory" mergeKey="createCategory"/> <createData entity="_defaultProduct" mergeKey="createProduct"> - <required-entity persistedKey="createCategory"/> + <required-entity createDataKey="createCategory"/> </createData> </before> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml index cce5b0c2c9ff0..50a3793fb2dad 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml @@ -32,7 +32,7 @@ <!-- Create an entity that depends on another entity --> <createData entity="_defaultCategory" mergeKey="createCategory"/> <createData entity="_defaultProduct" mergeKey="createProduct"> - <required-entity persistedKey="createCategory"/> + <required-entity createDataKey="createCategory"/> </createData> <!-- Parameterized url --> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml index ae64bf4cdb6c6..74bde899cb4a9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml @@ -12,10 +12,10 @@ <before> <createData entity="simplesubcategory" mergeKey="simplecategory"/> <createData entity="simpleproduct" mergeKey="simpleproduct1"> - <required-entity persistedKey="simplecategory"/> + <required-entity createDataKey="simplecategory"/> </createData> <createData entity="simpleproduct" mergeKey="simpleproduct2"> - <required-entity persistedKey="categoryLink"/> + <required-entity createDataKey="categoryLink"/> </createData> </before> <after> From 13b1dbf61b1359ac8b156cc8519987ed804bc1d5 Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Fri, 6 Oct 2017 19:21:01 +0300 Subject: [PATCH 075/653] MQE-352: Review and Update SampleCest.xml for added functionality --- .../SampleTests/Cest/SampleCest.xml | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml index 0eea2c79a39a0..21c3e6ef3472e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml @@ -254,17 +254,34 @@ <severity value="CRITICAL"/> <testCaseId value="#"/> </annotations> + <createData entity="CustomerEntity1" mergeKey="testScopeData"/> + + <!-- parameterized url that uses literal params --> <amOnPage url="{{SamplePage.url('success','success2')}}" mergeKey="a0"/> - <amOnPage url="/$testScopeData.firstname$.html" mergeKey="a1"/> - <amOnPage url="/$$createData1.firstname$$.html" mergeKey="a2"/> + + <!-- url referencing data that was created in this <test> --> + <amOnPage url="$testScopeData.firstname$.html" mergeKey="a1"/> + + <!-- url referencing data that was created in a <before> --> + <amOnPage url="$$createData1.firstname$$.html" mergeKey="a2"/> + + <!-- parameterized url that uses created data params --> <amOnPage url="{{SamplePage.url($testScopeData.firstname$,$testScopeData.lastname$)}}" mergeKey="a3"/> <amOnPage url="{{SamplePage.url($$createData1.firstname$$,$$createData1.lastname$$)}}" mergeKey="a4"/> + + <!-- parameterized selector that uses literal params --> <click selector="{{SampleSection.oneParamElement('success')}}" mergeKey="c1"/> <click selector="{{SampleSection.twoParamElement('success','success2')}}" mergeKey="c2"/> + + <!-- parameterized selector with literal, static data, and created data --> <click selector="{{SampleSection.threeParamElement('John', SamplePerson.lastname, $testScopeData.lastname$)}}" mergeKey="c3"/> + + <!-- selector that uses created data --> <click selector="#$testScopeData.firstname$ .$testScopeData.lastname$" mergeKey="c4"/> <click selector="#$$createData1.firstname$$ .$$createData1.lastname$$" mergeKey="c5"/> + + <!-- userInput that uses created data --> <fillField selector="#sample" userInput="Hello $testScopeData.firstname$ $testScopeData.lastname$" mergeKey="f1"/> <fillField selector="#sample" userInput="Hello $$createData1.firstname$$ $$createData1.lastname$$" mergeKey="f2"/> </test> From dd1a467993fb3e1514e036064609ab3b94aedbee Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Sat, 7 Oct 2017 02:17:24 +0300 Subject: [PATCH 076/653] MQE-428: Update Magento2 Acceptance Readme File --- dev/tests/acceptance/README.md | 270 --------------------------------- 1 file changed, 270 deletions(-) delete mode 100755 dev/tests/acceptance/README.md diff --git a/dev/tests/acceptance/README.md b/dev/tests/acceptance/README.md deleted file mode 100755 index 805c89e126d1e..0000000000000 --- a/dev/tests/acceptance/README.md +++ /dev/null @@ -1,270 +0,0 @@ -# Magento 2 Functional Tests - -# Built With -* [Codeception](http://codeception.com/) -* [Robo](http://robo.li/) -* [Allure](http://allure.qatools.ru/) - ----- - -# Prerequisites -* **IMPORTANT** - * You will need to have a running instance of Magento that you can access. - * You will need to configure your instance of Magento for [Automated Testing](http://devdocs.magento.com/guides/v2.0/mtf/mtf_quickstart/mtf_quickstart_magento.html). -* [PHP v7.x](http://php.net/manual/en/install.php) -* [Composer v1.4.x](https://getcomposer.org/download/) -* [Java v1.8.x](https://www.java.com/en/download/) -* [Selenium Server](http://www.seleniumhq.org/download/) - [v2.53.x](http://selenium-release.storage.googleapis.com/index.html?path=2.53/) -* [ChromeDriver v2.32.x](https://sites.google.com/a/chromium.org/chromedriver/downloads) -* [Allure CLI v2.3.x](https://docs.qameta.io/allure/latest/#_installing_a_commandline) -* [GitHub](https://desktop.github.com/) - -### Recommendations -* We recommend using [PHPStorm 2017](https://www.jetbrains.com/phpstorm/) for your IDE. They recently added support for [Codeception Test execution](https://blog.jetbrains.com/phpstorm/2017/03/codeception-support-comes-to-phpstorm-2017-1/) which is helpful when debugging. -* We also recommend updating your [$PATH to include](https://stackoverflow.com/questions/7703041/editing-path-variable-on-mac) `./vendor/bin` so you can easily execute the necessary `robo` and `codecept` commands instead of using `./vendor/bin/robo` or `./vendor/bin/codecept`. - ----- - -# TEMPORARY INSTALLATION INSTRUCTIONS -Due to the current setup of the Framework you will need to do the following: - - * `mkdir [DIRECTORY_NAME]` - * `cd [DIRECTORY_NAME]` - * Pull down - [EE](https://github.com/magento/magento2ee) - * Pull down - [CE](https://github.com/magento/magento2ce) - * `cd magento2ee` - * `php -f dev/tools/build-ee.php -- --command=link --exclude=true` - * `cd ..` - * Generate a `github-oauth` token: - * [How to setup an auth.json file for the Composer?](https://mage2.pro/t/topic/743) - * [Creating a personal access token for the command line.](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/#creating-a-token) - * `touch magento2ce/dev/tests/acceptance/auth.json` - * `nano magento2ce/dev/tests/acceptance/auth.json` - * Copy/Paste the following: - ``` - { - "github-oauth": { - "github.com": "<personal access token>" - } - } - ``` - * Replace `<personal access token>` with the token you generated in GitHub. - * Save your work. - * `cd magento2ce/dev/tests/acceptance` - * `composer install` - * **PLEASE IGNORE THE "Installation" SECTION THAT FOLLOWS, START WITH THE "Building The Framework" SECTION INSTEAD.** - ----- - -# Installation -You can **either** install through composer **or** clone from git repository. -## Git -``` -git clone GITHUB_REPO_URL -cd magento2ce -composer install -``` - -## Composer -``` -mkdir DIR_NAME -cd DIR_NAME -composer create-project --repository-url=GITHUB_REPO_URL magento/magento2ce-acceptance-tests-metapackage -``` - ----- - -# Robo -Robo is a task runner for PHP that allows you to alias long complex CLI commands to simple commands. - -### Example - -* Original: `allure generate tests/_output/allure-results/ -o tests/_output/allure-report/` -* Robo: `./vendor/bin/robo allure1:generate` - -## Available Robo Commands -You can see a list of all available Robo commands by calling `./vendor/bin/robo` in the Terminal. - -##### Codeception Robo Commands -* `./vendor/bin/robo` - * Lists all available Robo commands. -* `./vendor/bin/robo clone:files` - * Duplicate the Example configuration files used to customize the Project -* `./vendor/bin/robo build:project` - * Build the Codeception project -* `./vendor/bin/robo generate:pages` - * Generate all Page Objects -* `./vendor/bin/robo generate:tests` - * Generate all Tests in PHP -* `./vendor/bin/robo example` - * Run all Tests marked with the @group tag 'example', using the Chrome environment -* `./vendor/bin/robo chrome` - * Run all Functional tests using the Chrome environment -* `./vendor/bin/robo firefox` - * Run all Functional tests using the FireFox environment -* `./vendor/bin/robo phantomjs` - * Run all Functional tests using the PhantomJS environment -* `./vendor/bin/robo folder ______` - * Run all Functional tests located under the Directory Path provided using the Chrome environment -* `./vendor/bin/robo group ______` - * Run all Tests with the specified @group tag, excluding @group 'skip', using the Chrome environment - -##### Allure Robo Commands -To determine which version of the Allure command you need to use please run `allure --version`. - -* `./vendor/bin/robo allure1:generate` - * Allure v1.x.x - Generate the HTML for the Allure report based on the Test XML output -* `./vendor/bin/robo allure1:open` - * Allure v1.x.x - Open the HTML Allure report -* `./vendor/bin/robo allure1:report` - * Allure v1.x.x - Generate and open the HTML Allure report -* `./vendor/bin/robo allure2:generate` - * Allure v2.x.x - Generate the HTML for the Allure report based on the Test XML output -* `./vendor/bin/robo allure2:open` - * Allure v2.x.x - Open the HTML Allure report -* `./vendor/bin/robo allure2:report` - * Allure v2.x.x - Generate and open the HTML Allure report - ----- - -# Building The Framework -After installing the dependencies you will want to build the Codeception project in the [Magento 2 Functional Testing Framework](https://github.com/magento/magento2-functional-testing-framework), which is a dependency of the CE or EE Tests repo. Run the following to complete this task: - -`./vendor/bin/robo build:project` - ----- - -# Configure the Framework -Before you can generate or run the Tests you will need to edit the Configuration files and configure them for your specific Store settings. You can edit these files with out the fear of accidentally committing your credentials or other sensitive information as these files are listed in the *.gitignore* file. - -In the `.env` file you will find key pieces of information that are unique to your local Magento setup that will need to be edited before you can generate tests: -* **MAGENTO_BASE_URL** - * Example: `MAGENTO_BASE_URL=http://127.0.0.1:32772/` - * Note: Please end the URL with a `/`. -* **MAGENTO_BACKEND_NAME** - * Example: `MAGENTO_BACKEND_NAME=admin` - * Note: Set this variable to `admin`. -* **MAGENTO_ADMIN_USERNAME** - * Example: `MAGENTO_ADMIN_USERNAME=admin` -* **MAGENTO_ADMIN_PASSWORD** - * Example: `MAGENTO_ADMIN_PASSWORD=123123` - -##### Additional Codeception settings can be found in the following files: -* **tests/functional.suite.yml** -* **codeception.dist.yml** - ----- - -# Generate PHP files for Tests -All Tests in the Framework are written in XML and need to have the PHP generated for Codeception to run. Run the following command to generate the PHP files in the following directory (If this directory does not exist it will be created): `dev/tests/acceptance/tests/functional/Magento/FunctionalTest/_generated` - -`./vendor/bin/robo generate:tests` - ----- - -# Running Tests -## Start the Selenium Server -**PLEASE NOTE**: You will need to have an instance of the Selenium Server running on your machine before you can execute the Tests. - -``` -cd [LOCATION_OF_SELENIUM_JAR] -java -jar selenium-server-standalone-X.X.X.jar -``` - -## Run Tests Manually -You can run the Codeception tests directly without using Robo if you'd like. To do so please run `./vendor/bin/codecept run functional` to execute all Functional tests that DO NOT include @env tags. IF a Test includes an [@env tag](http://codeception.com/docs/07-AdvancedUsage#Environments) you MUST include the `--env ENV_NAME` flag. - -#### Common Codeception Flags: - -* --env -* --group -* --skip-group -* --steps -* --verbose -* --debug - * [Full List of CLI Flags](http://codeception.com/docs/reference/Commands#Run) - -#### Examples - -* Run ALL Functional Tests without an @env tag: `./vendor/bin/codecept run functional` -* Run ALL Functional Tests without the "skip" @group: `./vendor/bin/codecept run functional --skip-group skip` -* Run ALL Functional Tests with the @group tag "example" without the "skip" @group tests: `./vendor/bin/codecept run functional --group example --skip-group skip` - -## Run Tests using Robo -* Run all Functional Tests using the @env tag "chrome": `./vendor/bin/robo chrome` -* Run all Functional Tests using the @env tag "firefox": `./vendor/bin/robo firefox` -* Run all Functional Tests using the @env tag "phantomjs": `./vendor/bin/robo phantomjs` -* Run all Functional Tests using the @group tag "example": `./vendor/bin/robo example` -* Run all Functional Tests using the provided @group tag: `./vendor/bin/robo group GROUP_NAME` -* Run all Functional Tests listed under the provided Folder Path: `./vendor/bin/robo folder dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MODULE_NAME` - ----- - -# Allure Reports -### Manually -You can run the following commands in the Terminal to generate and open an Allure report. - -##### Allure v1.x.x -* Build the Report: `allure generate tests/_output/allure-results/ -o tests/_output/allure-report/` -* Open the Report: `allure report open --report-dir tests/_output/allure-report/` - -##### Allure v2.x.x -* Build the Report: `allure generate tests/_output/allure-results/ --output tests/_output/allure-report/ --clean` -* Open the Report: `allure open --port 0 tests/_output/allure-report/` - -### Using Robo -You can run the following Robo commands in the Terminal to generate and open an Allure report (Run the following terminal command for the Allure version: `allure --version`): - -##### Allure v1.x.x -* Build the Report: `./vendor/bin/robo allure1:generate` -* Open the Report: `./vendor/bin/robo allure1:open` -* Build/Open the Report: `./vendor/bin/robo allure1:report` - -##### Allure v2.x.x -* Build the Report: `./vendor/bin/robo allure2:generate` -* Open the Report: `./vendor/bin/robo allure2:open` -* Build/Open the Report: `./vendor/bin/robo allure2:report` - ----- - -# Composer SymLinking -Due to the interdependent nature of the 2 repos it is recommended to Symlink the repos so you develop locally easier. Please refer to this GitHub page: https://github.com/gossi/composer-localdev-plugin - ----- - -# Troubleshooting -* TimeZone Error - http://stackoverflow.com/questions/18768276/codeception-datetime-error -* TimeZone List - http://php.net/manual/en/timezones.america.php -* System PATH - Make sure you have `./vendor/bin/`, `vendor/bin/` and `vendor/` listed in your system path so you can run the `codecept` and `robo` commands directly: - - `sudo nano /etc/paths` - -* StackOverflow Help: https://stackoverflow.com/questions/7703041/editing-path-variable-on-mac -* Allure `@env error` - Allure recently changed their Codeception Adapter that breaks Codeception when tests include the `@env` tag. There are 2 workarounds for this issue currently. - 1. You can edit the `composer.json` and point the Allure-Codeception Adapter to a previous commit: - * Edit the `composer.json` file. - * Make the following change: - * ORIGINAL: `“allure-framework/allure-codeception”: "dev-master"` - * UPDATED: `“allure-framework/allure-codeception”: “dev-master#af40af5ae2b717618a42fe3e137d75878508c75d”` - 1. You can revert the changes that they made manually: - * Locate the `AllureAdapter.php` file here: `vendor/allure-framework/allure-codeception/src/Yandex/Allure/Adapter/AllureAdapter.php` - * Edit the `_initialize()` function found on line 77 and replace it with the following: - ``` - public function _initialize(array $ignoredAnnotations = []) - { - parent::_initialize(); - Annotation\AnnotationProvider::registerAnnotationNamespaces(); - // Add standard PHPUnit annotations - Annotation\AnnotationProvider::addIgnoredAnnotations($this->ignoredAnnotations); - // Add custom ignored annotations - $ignoredAnnotations = $this->tryGetOption('ignoredAnnotations', []); - Annotation\AnnotationProvider::addIgnoredAnnotations($ignoredAnnotations); - $outputDirectory = $this->getOutputDirectory(); - $deletePreviousResults = - $this->tryGetOption(DELETE_PREVIOUS_RESULTS_PARAMETER, false); - $this->prepareOutputDirectory($outputDirectory, $deletePreviousResults); - if (is_null(Model\Provider::getOutputDirectory())) { - Model\Provider::setOutputDirectory($outputDirectory); - } - } - ``` From 25ee497ea3a621e98b1d3428baa7a533c97257dd Mon Sep 17 00:00:00 2001 From: Kostyantyn Alexeyev <kalexeyev@magento.com> Date: Fri, 20 Oct 2017 13:17:27 +0300 Subject: [PATCH 077/653] MAGETWO-81318: [2.2.x] B2B functional test fail Magento\Customer\Test\TestCase\CreateExistingCustomerBackendEntity.test with data set "CreateExistingCustomerBackendEntity1_0" --- .../Test/TestCase/CreateExistingCustomerBackendEntity.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/CreateExistingCustomerBackendEntity.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/CreateExistingCustomerBackendEntity.xml index 4692d21575813..5990157d6c5ea 100644 --- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/CreateExistingCustomerBackendEntity.xml +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/CreateExistingCustomerBackendEntity.xml @@ -8,7 +8,6 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> <testCase name="Magento\Customer\Test\TestCase\CreateExistingCustomerBackendEntity" summary="Create Existing Customer from Backend" ticketId="MAGETWO-43685"> <variation name="CreateExistingCustomerBackendEntity1" summary="Create existing customer on Backend."> - <data name="tag" xsi:type="string">stable:no</data> <data name="customer/dataset" xsi:type="string">default</data> <constraint name="Magento\Customer\Test\Constraint\AssertCustomerBackendDuplicateErrorMessage" /> </variation> From e5f160a12d1e0b59f30ed4504e0e852db2f32e02 Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Fri, 20 Oct 2017 13:55:03 +0300 Subject: [PATCH 078/653] MAGETWO-82060: Incorrect products displayed after changing categories and running partial reindex --- .../Indexer/Category/Product/Action/Full.php | 26 ++- .../Model/Indexer/Product/CategoryTest.php | 209 ++++++++++++++++++ .../indexer_catalog_category_rollback.php | 2 +- .../indexer_catalog_product_categories.php | 56 +++++ ...er_catalog_product_categories_rollback.php | 26 +++ 5 files changed, 314 insertions(+), 5 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/CategoryTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories.php create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories_rollback.php diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Action/Full.php b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Action/Full.php index ae0c3554c0d32..f5e1596f23ce7 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Action/Full.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Action/Full.php @@ -52,7 +52,6 @@ class Full extends \Magento\Catalog\Model\Indexer\Category\Product\AbstractActio * @param \Magento\Framework\Indexer\BatchSizeManagementInterface|null $batchSizeManagement * @param \Magento\Framework\Indexer\BatchProviderInterface|null $batchProvider * @param \Magento\Framework\EntityManager\MetadataPool|null $metadataPool - * @param \Magento\Indexer\Model\Indexer\StateFactory|null $stateFactory * @param int|null $batchRowsCount * @param ActiveTableSwitcher|null $activeTableSwitcher */ @@ -87,6 +86,20 @@ public function __construct( $this->activeTableSwitcher = $activeTableSwitcher ?: $objectManager->get(ActiveTableSwitcher::class); } + /** + * Clear the table we'll be writing de-normalized data into + * to prevent archived data getting in the way of actual data. + * + * @return void + */ + private function clearCurrentTable() + { + $this->connection->delete( + $this->activeTableSwitcher + ->getAdditionalTableName($this->getMainTable()) + ); + } + /** * Refresh entities index * @@ -94,6 +107,7 @@ public function __construct( */ public function execute() { + $this->clearCurrentTable(); $this->reindex(); $this->activeTableSwitcher->switchTable($this->connection, [$this->getMainTable()]); return $this; @@ -103,6 +117,7 @@ public function execute() * Return select for remove unnecessary data * * @return \Magento\Framework\DB\Select + * @deprecated Not needed anymore. */ protected function getSelectUnnecessaryData() { @@ -127,12 +142,15 @@ protected function getSelectUnnecessaryData() * Remove unnecessary data * * @return void + * + * @deprecated Not needed anymore. */ protected function removeUnnecessaryData() { - $this->connection->query( - $this->connection->deleteFromSelect($this->getSelectUnnecessaryData(), $this->getMainTable()) - ); + //Called for backwards compatibility. + $this->getSelectUnnecessaryData(); + //This method is useless, + //left it here just in case somebody's using it in child classes. } /** diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/CategoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/CategoryTest.php new file mode 100644 index 0000000000000..cea50218638cb --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/CategoryTest.php @@ -0,0 +1,209 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Catalog\Model\Indexer\Product; + +use Magento\Catalog\Model\Category; +use Magento\Catalog\Model\Product; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\Catalog\Model\ResourceModel\Product as ProductResource; +use Magento\Indexer\Model\Indexer; +use PHPUnit\Framework\TestCase; + +/** + * @magentoDataFixture Magento/Catalog/_files/indexer_catalog_product_categories.php + * @magentoDataFixture Magento/Catalog/_files/indexer_catalog_products.php + * @magentoDbIsolation enabled + * @magentoAppIsolation enabled + */ +class CategoryTest extends TestCase +{ + const DEFAULT_ROOT_CATEGORY = 2; + + /** + * @var Indexer + */ + private $indexer; + + /** + * @var ProductResource + */ + private $productResource; + + protected function setUp() + { + /** @var Indexer indexer */ + $this->indexer = Bootstrap::getObjectManager()->create( + Indexer::class + ); + $this->indexer->load('catalog_product_category'); + /** @var ProductResource $productResource */ + $this->productResource = Bootstrap::getObjectManager()->get( + ProductResource::class + ); + } + + /** + * Check that given product is only visible in given categories. + * + * @param Product $product + * @param Category[] $categoriesIn Categories the product is supposed + * to be in. + * @param Category[] $categories Whole list of categories. + * + * @return void + */ + private function assertProductIn( + Product $product, + array $categoriesIn, + array $categories + ) { + foreach ($categories as $category) { + $visible = in_array($category, $categoriesIn, true); + $this->assertEquals( + $visible, + (bool)$this->productResource->canBeShowInCategory( + $product, + $category->getId() + ), + 'Product "' .$product->getName() .'" is' + .($visible? '' : ' not') .' supposed to be in category "' + .$category->getName() .'"' + ); + } + } + + /** + * @magentoAppArea adminhtml + */ + public function testReindexAll() + { + //Category #1 is base category for this case, Category #2 is non-anchor + //sub-category of Category #1, Category #3 is anchor sub-category of + //Category #2, Category #4 is anchor sub-category of Category #1 + //Products are not yet assigned to categories + $categories = $this->loadCategories(4); + $products = $this->loadProducts(3); + + //Leaving Product #1 unassigned, Product #2 is assigned to Category #3, + //Product #3 assigned to Category #3 and #4. + $products[0]->setCategoryIds(null); + $this->productResource->save($products[0]); + $products[1]->setCategoryIds([$categories[2]->getId()]); + $this->productResource->save($products[1]); + $products[2]->setCategoryIds([ + $categories[2]->getId(), + $categories[3]->getId(), + ]); + $this->productResource->save($products[2]); + //Reindexing + $this->clearIndex(); + $this->indexer->reindexAll(); + + //Checking that Category #1 shows only Product #2 and #3 since + //Product #1 is not assigned to any category, Product #2 is assigned to + //it's sub-subcategory and Product #3 is assigned to a sub-subcategory + //and a subcategory. + //Category #2 doesn't have any products on display because while it's + //sub-category has products it's a non-anchor category. + //Category #3 has 2 products directly assigned to it. + //Category #4 only has 1 product directly assigned to it. + $this->assertProductIn($products[0], [], $categories); + $this->assertProductIn( + $products[1], + [$categories[0],$categories[2]], + $categories + ); + $this->assertProductIn( + $products[2], + [$categories[0], $categories[2], $categories[3]], + $categories + ); + + //Reassigning products a bit + $products[0]->setCategoryIds([$categories[0]->getId()]); + $this->productResource->save($products[0]); + $products[1]->setCategoryIds([]); + $this->productResource->save($products[1]); + $products[2]->setCategoryIds([ + $categories[1]->getId(), + $categories[2]->getId(), + $categories[3]->getId(), + ]); + $this->productResource->save($products[2]); + //Reindexing + $this->clearIndex(); + $this->indexer->reindexAll(); + //Checking that Category #1 now also shows Product #1 because it was + //directly assigned to it and not showing Product #2 because it was + //unassigned from Category #3. + //Category #2 now shows Product #3 because it was directly assigned + //to it. + //Category #3 now shows only Product #3 because Product #2 + //was unassigned. + //Category #4 still shows only Product #3. + $this->assertProductIn($products[0], [$categories[0]], $categories); + $this->assertProductIn($products[1], [], $categories); + $this->assertProductIn($products[2], $categories, $categories); + + $this->clearIndex(); + } + + /** + * Load categories from the fixture. + * + * @param int $limit + * @param int $offset + * @return Category[] + */ + private function loadCategories(int $limit, int $offset = 0): array + { + /** @var Category $category */ + $category = Bootstrap::getObjectManager()->create( + Category::class + ); + + $result = $category + ->getCollection() + ->addAttributeToSelect('name') + ->getItems(); + $result = array_slice($result, 2); + + return array_slice($result, $offset, $limit); + } + + /** + * Load products from the fixture. + * + * @param int $limit + * @param int $offset + * @return Product[] + */ + private function loadProducts(int $limit, int $offset = 0): array + { + /** @var Product[] $result */ + $result = []; + $ids = range($offset + 1, $offset + $limit); + foreach ($ids as $id) { + /** @var \Magento\Catalog\Model\Product $product */ + $product = Bootstrap::getObjectManager()->create( + Product::class + ); + $result[] = $product->load($id); + } + + return $result; + } + + /** + * Clear index data. + */ + private function clearIndex() + { + $this->productResource->getConnection()->delete( + $this->productResource->getTable('catalog_category_product_index') + ); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php index faa4fd6f4575e..51a8fc6b7e978 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php @@ -16,7 +16,7 @@ /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */ $collection = $objectManager->create(\Magento\Catalog\Model\ResourceModel\Category\Collection::class); $collection - ->addAttributeToFilter('level', 2) + ->addAttributeToFilter('level', ['gteq' => 2]) ->load() ->delete(); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories.php new file mode 100644 index 0000000000000..075422d5f0d78 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories.php @@ -0,0 +1,56 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/** @var $category \Magento\Catalog\Model\Category */ +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +/** @var \Magento\Catalog\Model\Category $categoryFirst */ +$categoryFirst = $objectManager->create(\Magento\Catalog\Model\Category::class); +$categoryFirst->setName('Category 1') + ->setPath('1/2') + ->setLevel(2) + ->setAvailableSortBy('name') + ->setIsActive(true) + ->setPosition(1) + ->setDefaultSortBy('name') + ->setIsAnchor(true) + ->save(); + +/** @var \Magento\Catalog\Model\Category $categorySecond */ +$categorySecond = $objectManager->create(\Magento\Catalog\Model\Category::class); +$categorySecond->setName('Category 2') + ->setPath($categoryFirst->getPath()) + ->setLevel(3) + ->setAvailableSortBy('name') + ->setIsActive(true) + ->setPosition(1) + ->setDefaultSortBy('name') + ->setIsAnchor(false) + ->save(); + +/** @var \Magento\Catalog\Model\Category $categoryThird */ +$categoryThird = $objectManager->create(\Magento\Catalog\Model\Category::class); +$categoryThird->setName('Category 3') + ->setPath($categorySecond->getPath()) + ->setLevel(4) + ->setAvailableSortBy('name') + ->setIsActive(true) + ->setPosition(1) + ->setDefaultSortBy('name') + ->setIsAnchor(true) + ->save(); + +/** @var \Magento\Catalog\Model\Category $categoryFourth */ +$categoryFourth = $objectManager->create(\Magento\Catalog\Model\Category::class); +$categoryFourth->setName('Category 4') + ->setPath($categoryFirst->getPath()) + ->setLevel(3) + ->setAvailableSortBy('name') + ->setIsActive(true) + ->setPosition(2) + ->setDefaultSortBy('name') + ->setIsAnchor(true) + ->save(); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories_rollback.php new file mode 100644 index 0000000000000..755f324b18cb2 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories_rollback.php @@ -0,0 +1,26 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/** @var \Magento\Framework\ObjectManagerInterface $objectManager */ +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +/** @var \Magento\Framework\Registry $registry */ +$registry = $objectManager->get(\Magento\Framework\Registry::class); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', true); + +/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */ +$collection = $objectManager->create( + \Magento\Catalog\Model\ResourceModel\Category\Collection::class +); +$collection + ->addAttributeToFilter('level', ['gteq' => 2]) + ->load() + ->delete(); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', false); From 0e2912d08a581a6fb33a5c3d1eba964445047a76 Mon Sep 17 00:00:00 2001 From: Yevhen Miroshnychenko <ymiroshnychenko@magento.com> Date: Fri, 20 Oct 2017 17:29:54 +0300 Subject: [PATCH 079/653] MAGETWO-81905: Cannot upgrade to 2.2.1-develop from 2.1.9 if DB was split --- app/code/Magento/Quote/Setup/UpgradeSchema.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Quote/Setup/UpgradeSchema.php b/app/code/Magento/Quote/Setup/UpgradeSchema.php index e4912892dbe17..1bb20a669bdf2 100644 --- a/app/code/Magento/Quote/Setup/UpgradeSchema.php +++ b/app/code/Magento/Quote/Setup/UpgradeSchema.php @@ -48,17 +48,17 @@ public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $con } //drop foreign key for single DB case if (version_compare($context->getVersion(), '2.0.3', '<') - && $setup->tableExists($setup->getTable('quote_item')) + && $setup->tableExists($setup->getTable('quote_item', self::$connectionName)) ) { - $setup->getConnection()->dropForeignKey( - $setup->getTable('quote_item'), + $setup->getConnection(self::$connectionName)->dropForeignKey( + $setup->getTable('quote_item', self::$connectionName), $setup->getFkName('quote_item', 'product_id', 'catalog_product_entity', 'entity_id') ); } if (version_compare($context->getVersion(), '2.0.5', '<')) { - $connection = $setup->getConnection(); + $connection = $setup->getConnection(self::$connectionName); $connection->modifyColumn( - $setup->getTable('quote_address'), + $setup->getTable('quote_address', self::$connectionName), 'shipping_method', [ 'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, From 72cf40179b42b0afd02ebb10592297585a12855f Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Fri, 20 Oct 2017 17:46:16 +0300 Subject: [PATCH 080/653] MAGETWO-82060: Incorrect products displayed after changing categories and running partial reindex --- .../Model/Indexer/Product/CategoryTest.php | 209 ------------------ .../indexer_catalog_category_rollback.php | 2 +- .../indexer_catalog_product_categories.php | 56 ----- ...er_catalog_product_categories_rollback.php | 26 --- 4 files changed, 1 insertion(+), 292 deletions(-) delete mode 100644 dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/CategoryTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories.php delete mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories_rollback.php diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/CategoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/CategoryTest.php deleted file mode 100644 index cea50218638cb..0000000000000 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/CategoryTest.php +++ /dev/null @@ -1,209 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Catalog\Model\Indexer\Product; - -use Magento\Catalog\Model\Category; -use Magento\Catalog\Model\Product; -use Magento\TestFramework\Helper\Bootstrap; -use Magento\Catalog\Model\ResourceModel\Product as ProductResource; -use Magento\Indexer\Model\Indexer; -use PHPUnit\Framework\TestCase; - -/** - * @magentoDataFixture Magento/Catalog/_files/indexer_catalog_product_categories.php - * @magentoDataFixture Magento/Catalog/_files/indexer_catalog_products.php - * @magentoDbIsolation enabled - * @magentoAppIsolation enabled - */ -class CategoryTest extends TestCase -{ - const DEFAULT_ROOT_CATEGORY = 2; - - /** - * @var Indexer - */ - private $indexer; - - /** - * @var ProductResource - */ - private $productResource; - - protected function setUp() - { - /** @var Indexer indexer */ - $this->indexer = Bootstrap::getObjectManager()->create( - Indexer::class - ); - $this->indexer->load('catalog_product_category'); - /** @var ProductResource $productResource */ - $this->productResource = Bootstrap::getObjectManager()->get( - ProductResource::class - ); - } - - /** - * Check that given product is only visible in given categories. - * - * @param Product $product - * @param Category[] $categoriesIn Categories the product is supposed - * to be in. - * @param Category[] $categories Whole list of categories. - * - * @return void - */ - private function assertProductIn( - Product $product, - array $categoriesIn, - array $categories - ) { - foreach ($categories as $category) { - $visible = in_array($category, $categoriesIn, true); - $this->assertEquals( - $visible, - (bool)$this->productResource->canBeShowInCategory( - $product, - $category->getId() - ), - 'Product "' .$product->getName() .'" is' - .($visible? '' : ' not') .' supposed to be in category "' - .$category->getName() .'"' - ); - } - } - - /** - * @magentoAppArea adminhtml - */ - public function testReindexAll() - { - //Category #1 is base category for this case, Category #2 is non-anchor - //sub-category of Category #1, Category #3 is anchor sub-category of - //Category #2, Category #4 is anchor sub-category of Category #1 - //Products are not yet assigned to categories - $categories = $this->loadCategories(4); - $products = $this->loadProducts(3); - - //Leaving Product #1 unassigned, Product #2 is assigned to Category #3, - //Product #3 assigned to Category #3 and #4. - $products[0]->setCategoryIds(null); - $this->productResource->save($products[0]); - $products[1]->setCategoryIds([$categories[2]->getId()]); - $this->productResource->save($products[1]); - $products[2]->setCategoryIds([ - $categories[2]->getId(), - $categories[3]->getId(), - ]); - $this->productResource->save($products[2]); - //Reindexing - $this->clearIndex(); - $this->indexer->reindexAll(); - - //Checking that Category #1 shows only Product #2 and #3 since - //Product #1 is not assigned to any category, Product #2 is assigned to - //it's sub-subcategory and Product #3 is assigned to a sub-subcategory - //and a subcategory. - //Category #2 doesn't have any products on display because while it's - //sub-category has products it's a non-anchor category. - //Category #3 has 2 products directly assigned to it. - //Category #4 only has 1 product directly assigned to it. - $this->assertProductIn($products[0], [], $categories); - $this->assertProductIn( - $products[1], - [$categories[0],$categories[2]], - $categories - ); - $this->assertProductIn( - $products[2], - [$categories[0], $categories[2], $categories[3]], - $categories - ); - - //Reassigning products a bit - $products[0]->setCategoryIds([$categories[0]->getId()]); - $this->productResource->save($products[0]); - $products[1]->setCategoryIds([]); - $this->productResource->save($products[1]); - $products[2]->setCategoryIds([ - $categories[1]->getId(), - $categories[2]->getId(), - $categories[3]->getId(), - ]); - $this->productResource->save($products[2]); - //Reindexing - $this->clearIndex(); - $this->indexer->reindexAll(); - //Checking that Category #1 now also shows Product #1 because it was - //directly assigned to it and not showing Product #2 because it was - //unassigned from Category #3. - //Category #2 now shows Product #3 because it was directly assigned - //to it. - //Category #3 now shows only Product #3 because Product #2 - //was unassigned. - //Category #4 still shows only Product #3. - $this->assertProductIn($products[0], [$categories[0]], $categories); - $this->assertProductIn($products[1], [], $categories); - $this->assertProductIn($products[2], $categories, $categories); - - $this->clearIndex(); - } - - /** - * Load categories from the fixture. - * - * @param int $limit - * @param int $offset - * @return Category[] - */ - private function loadCategories(int $limit, int $offset = 0): array - { - /** @var Category $category */ - $category = Bootstrap::getObjectManager()->create( - Category::class - ); - - $result = $category - ->getCollection() - ->addAttributeToSelect('name') - ->getItems(); - $result = array_slice($result, 2); - - return array_slice($result, $offset, $limit); - } - - /** - * Load products from the fixture. - * - * @param int $limit - * @param int $offset - * @return Product[] - */ - private function loadProducts(int $limit, int $offset = 0): array - { - /** @var Product[] $result */ - $result = []; - $ids = range($offset + 1, $offset + $limit); - foreach ($ids as $id) { - /** @var \Magento\Catalog\Model\Product $product */ - $product = Bootstrap::getObjectManager()->create( - Product::class - ); - $result[] = $product->load($id); - } - - return $result; - } - - /** - * Clear index data. - */ - private function clearIndex() - { - $this->productResource->getConnection()->delete( - $this->productResource->getTable('catalog_category_product_index') - ); - } -} diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php index 51a8fc6b7e978..faa4fd6f4575e 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php @@ -16,7 +16,7 @@ /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */ $collection = $objectManager->create(\Magento\Catalog\Model\ResourceModel\Category\Collection::class); $collection - ->addAttributeToFilter('level', ['gteq' => 2]) + ->addAttributeToFilter('level', 2) ->load() ->delete(); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories.php deleted file mode 100644 index 075422d5f0d78..0000000000000 --- a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -/** @var $category \Magento\Catalog\Model\Category */ -$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - -/** @var \Magento\Catalog\Model\Category $categoryFirst */ -$categoryFirst = $objectManager->create(\Magento\Catalog\Model\Category::class); -$categoryFirst->setName('Category 1') - ->setPath('1/2') - ->setLevel(2) - ->setAvailableSortBy('name') - ->setIsActive(true) - ->setPosition(1) - ->setDefaultSortBy('name') - ->setIsAnchor(true) - ->save(); - -/** @var \Magento\Catalog\Model\Category $categorySecond */ -$categorySecond = $objectManager->create(\Magento\Catalog\Model\Category::class); -$categorySecond->setName('Category 2') - ->setPath($categoryFirst->getPath()) - ->setLevel(3) - ->setAvailableSortBy('name') - ->setIsActive(true) - ->setPosition(1) - ->setDefaultSortBy('name') - ->setIsAnchor(false) - ->save(); - -/** @var \Magento\Catalog\Model\Category $categoryThird */ -$categoryThird = $objectManager->create(\Magento\Catalog\Model\Category::class); -$categoryThird->setName('Category 3') - ->setPath($categorySecond->getPath()) - ->setLevel(4) - ->setAvailableSortBy('name') - ->setIsActive(true) - ->setPosition(1) - ->setDefaultSortBy('name') - ->setIsAnchor(true) - ->save(); - -/** @var \Magento\Catalog\Model\Category $categoryFourth */ -$categoryFourth = $objectManager->create(\Magento\Catalog\Model\Category::class); -$categoryFourth->setName('Category 4') - ->setPath($categoryFirst->getPath()) - ->setLevel(3) - ->setAvailableSortBy('name') - ->setIsActive(true) - ->setPosition(2) - ->setDefaultSortBy('name') - ->setIsAnchor(true) - ->save(); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories_rollback.php deleted file mode 100644 index 755f324b18cb2..0000000000000 --- a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories_rollback.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -/** @var \Magento\Framework\ObjectManagerInterface $objectManager */ -$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - -/** @var \Magento\Framework\Registry $registry */ -$registry = $objectManager->get(\Magento\Framework\Registry::class); - -$registry->unregister('isSecureArea'); -$registry->register('isSecureArea', true); - -/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */ -$collection = $objectManager->create( - \Magento\Catalog\Model\ResourceModel\Category\Collection::class -); -$collection - ->addAttributeToFilter('level', ['gteq' => 2]) - ->load() - ->delete(); - -$registry->unregister('isSecureArea'); -$registry->register('isSecureArea', false); From fa83cae933095b1935e74a7a07b4b1e6fb9d5e4b Mon Sep 17 00:00:00 2001 From: Dmytro Voskoboinikov <dvoskoboinikov@magento.com> Date: Fri, 20 Oct 2017 19:16:01 +0300 Subject: [PATCH 081/653] MAGETWO-82060: Incorrect products displayed after changing categories and running partial reindex --- .../Model/Indexer/Product/CategoryTest.php | 209 ++++++++++++++++++ .../indexer_catalog_category_rollback.php | 2 +- .../indexer_catalog_product_categories.php | 56 +++++ ...er_catalog_product_categories_rollback.php | 26 +++ 4 files changed, 292 insertions(+), 1 deletion(-) create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/CategoryTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories.php create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories_rollback.php diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/CategoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/CategoryTest.php new file mode 100644 index 0000000000000..cea50218638cb --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/CategoryTest.php @@ -0,0 +1,209 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Catalog\Model\Indexer\Product; + +use Magento\Catalog\Model\Category; +use Magento\Catalog\Model\Product; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\Catalog\Model\ResourceModel\Product as ProductResource; +use Magento\Indexer\Model\Indexer; +use PHPUnit\Framework\TestCase; + +/** + * @magentoDataFixture Magento/Catalog/_files/indexer_catalog_product_categories.php + * @magentoDataFixture Magento/Catalog/_files/indexer_catalog_products.php + * @magentoDbIsolation enabled + * @magentoAppIsolation enabled + */ +class CategoryTest extends TestCase +{ + const DEFAULT_ROOT_CATEGORY = 2; + + /** + * @var Indexer + */ + private $indexer; + + /** + * @var ProductResource + */ + private $productResource; + + protected function setUp() + { + /** @var Indexer indexer */ + $this->indexer = Bootstrap::getObjectManager()->create( + Indexer::class + ); + $this->indexer->load('catalog_product_category'); + /** @var ProductResource $productResource */ + $this->productResource = Bootstrap::getObjectManager()->get( + ProductResource::class + ); + } + + /** + * Check that given product is only visible in given categories. + * + * @param Product $product + * @param Category[] $categoriesIn Categories the product is supposed + * to be in. + * @param Category[] $categories Whole list of categories. + * + * @return void + */ + private function assertProductIn( + Product $product, + array $categoriesIn, + array $categories + ) { + foreach ($categories as $category) { + $visible = in_array($category, $categoriesIn, true); + $this->assertEquals( + $visible, + (bool)$this->productResource->canBeShowInCategory( + $product, + $category->getId() + ), + 'Product "' .$product->getName() .'" is' + .($visible? '' : ' not') .' supposed to be in category "' + .$category->getName() .'"' + ); + } + } + + /** + * @magentoAppArea adminhtml + */ + public function testReindexAll() + { + //Category #1 is base category for this case, Category #2 is non-anchor + //sub-category of Category #1, Category #3 is anchor sub-category of + //Category #2, Category #4 is anchor sub-category of Category #1 + //Products are not yet assigned to categories + $categories = $this->loadCategories(4); + $products = $this->loadProducts(3); + + //Leaving Product #1 unassigned, Product #2 is assigned to Category #3, + //Product #3 assigned to Category #3 and #4. + $products[0]->setCategoryIds(null); + $this->productResource->save($products[0]); + $products[1]->setCategoryIds([$categories[2]->getId()]); + $this->productResource->save($products[1]); + $products[2]->setCategoryIds([ + $categories[2]->getId(), + $categories[3]->getId(), + ]); + $this->productResource->save($products[2]); + //Reindexing + $this->clearIndex(); + $this->indexer->reindexAll(); + + //Checking that Category #1 shows only Product #2 and #3 since + //Product #1 is not assigned to any category, Product #2 is assigned to + //it's sub-subcategory and Product #3 is assigned to a sub-subcategory + //and a subcategory. + //Category #2 doesn't have any products on display because while it's + //sub-category has products it's a non-anchor category. + //Category #3 has 2 products directly assigned to it. + //Category #4 only has 1 product directly assigned to it. + $this->assertProductIn($products[0], [], $categories); + $this->assertProductIn( + $products[1], + [$categories[0],$categories[2]], + $categories + ); + $this->assertProductIn( + $products[2], + [$categories[0], $categories[2], $categories[3]], + $categories + ); + + //Reassigning products a bit + $products[0]->setCategoryIds([$categories[0]->getId()]); + $this->productResource->save($products[0]); + $products[1]->setCategoryIds([]); + $this->productResource->save($products[1]); + $products[2]->setCategoryIds([ + $categories[1]->getId(), + $categories[2]->getId(), + $categories[3]->getId(), + ]); + $this->productResource->save($products[2]); + //Reindexing + $this->clearIndex(); + $this->indexer->reindexAll(); + //Checking that Category #1 now also shows Product #1 because it was + //directly assigned to it and not showing Product #2 because it was + //unassigned from Category #3. + //Category #2 now shows Product #3 because it was directly assigned + //to it. + //Category #3 now shows only Product #3 because Product #2 + //was unassigned. + //Category #4 still shows only Product #3. + $this->assertProductIn($products[0], [$categories[0]], $categories); + $this->assertProductIn($products[1], [], $categories); + $this->assertProductIn($products[2], $categories, $categories); + + $this->clearIndex(); + } + + /** + * Load categories from the fixture. + * + * @param int $limit + * @param int $offset + * @return Category[] + */ + private function loadCategories(int $limit, int $offset = 0): array + { + /** @var Category $category */ + $category = Bootstrap::getObjectManager()->create( + Category::class + ); + + $result = $category + ->getCollection() + ->addAttributeToSelect('name') + ->getItems(); + $result = array_slice($result, 2); + + return array_slice($result, $offset, $limit); + } + + /** + * Load products from the fixture. + * + * @param int $limit + * @param int $offset + * @return Product[] + */ + private function loadProducts(int $limit, int $offset = 0): array + { + /** @var Product[] $result */ + $result = []; + $ids = range($offset + 1, $offset + $limit); + foreach ($ids as $id) { + /** @var \Magento\Catalog\Model\Product $product */ + $product = Bootstrap::getObjectManager()->create( + Product::class + ); + $result[] = $product->load($id); + } + + return $result; + } + + /** + * Clear index data. + */ + private function clearIndex() + { + $this->productResource->getConnection()->delete( + $this->productResource->getTable('catalog_category_product_index') + ); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php index faa4fd6f4575e..51a8fc6b7e978 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php @@ -16,7 +16,7 @@ /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */ $collection = $objectManager->create(\Magento\Catalog\Model\ResourceModel\Category\Collection::class); $collection - ->addAttributeToFilter('level', 2) + ->addAttributeToFilter('level', ['gteq' => 2]) ->load() ->delete(); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories.php new file mode 100644 index 0000000000000..075422d5f0d78 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories.php @@ -0,0 +1,56 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/** @var $category \Magento\Catalog\Model\Category */ +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +/** @var \Magento\Catalog\Model\Category $categoryFirst */ +$categoryFirst = $objectManager->create(\Magento\Catalog\Model\Category::class); +$categoryFirst->setName('Category 1') + ->setPath('1/2') + ->setLevel(2) + ->setAvailableSortBy('name') + ->setIsActive(true) + ->setPosition(1) + ->setDefaultSortBy('name') + ->setIsAnchor(true) + ->save(); + +/** @var \Magento\Catalog\Model\Category $categorySecond */ +$categorySecond = $objectManager->create(\Magento\Catalog\Model\Category::class); +$categorySecond->setName('Category 2') + ->setPath($categoryFirst->getPath()) + ->setLevel(3) + ->setAvailableSortBy('name') + ->setIsActive(true) + ->setPosition(1) + ->setDefaultSortBy('name') + ->setIsAnchor(false) + ->save(); + +/** @var \Magento\Catalog\Model\Category $categoryThird */ +$categoryThird = $objectManager->create(\Magento\Catalog\Model\Category::class); +$categoryThird->setName('Category 3') + ->setPath($categorySecond->getPath()) + ->setLevel(4) + ->setAvailableSortBy('name') + ->setIsActive(true) + ->setPosition(1) + ->setDefaultSortBy('name') + ->setIsAnchor(true) + ->save(); + +/** @var \Magento\Catalog\Model\Category $categoryFourth */ +$categoryFourth = $objectManager->create(\Magento\Catalog\Model\Category::class); +$categoryFourth->setName('Category 4') + ->setPath($categoryFirst->getPath()) + ->setLevel(3) + ->setAvailableSortBy('name') + ->setIsActive(true) + ->setPosition(2) + ->setDefaultSortBy('name') + ->setIsAnchor(true) + ->save(); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories_rollback.php new file mode 100644 index 0000000000000..755f324b18cb2 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_product_categories_rollback.php @@ -0,0 +1,26 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/** @var \Magento\Framework\ObjectManagerInterface $objectManager */ +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +/** @var \Magento\Framework\Registry $registry */ +$registry = $objectManager->get(\Magento\Framework\Registry::class); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', true); + +/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */ +$collection = $objectManager->create( + \Magento\Catalog\Model\ResourceModel\Category\Collection::class +); +$collection + ->addAttributeToFilter('level', ['gteq' => 2]) + ->load() + ->delete(); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', false); From 158e47e1b4004513a6c88bb074771344fd668f78 Mon Sep 17 00:00:00 2001 From: Pieter Cappelle <pieter@newance.be> Date: Fri, 20 Oct 2017 20:24:01 +0200 Subject: [PATCH 082/653] Fix issue 10347 --- app/code/Magento/Tax/Model/Plugin/OrderSave.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Tax/Model/Plugin/OrderSave.php b/app/code/Magento/Tax/Model/Plugin/OrderSave.php index 7203285248688..c7bef8b69a41a 100644 --- a/app/code/Magento/Tax/Model/Plugin/OrderSave.php +++ b/app/code/Magento/Tax/Model/Plugin/OrderSave.php @@ -97,8 +97,12 @@ protected function saveOrderTax(\Magento\Sales\Api\Data\OrderInterface $order) } else { $percentSum = 0; foreach ($taxRates as $rate) { - $realAmount = $rates['amount'] * $rate['percent'] / $rates['percent']; - $realBaseAmount = $rates['base_amount'] * $rate['percent'] / $rates['percent']; + $percentSum += $rate['percent']; + } + + foreach ($taxRates as $rate) { + $realAmount = $rates['amount'] * $rate['percent'] / $percentSum; + $realBaseAmount = $rates['base_amount'] * $rate['percent'] / $percentSum; $ratesIdQuoteItemId[$rates['id']][] = [ 'id' => $taxesArray['item_id'], 'percent' => $rate['percent'], @@ -110,7 +114,6 @@ protected function saveOrderTax(\Magento\Sales\Api\Data\OrderInterface $order) 'real_amount' => $realAmount, 'real_base_amount' => $realBaseAmount, ]; - $percentSum += $rate['percent']; } } } From 4c26acf6b73655ee741b4fa38d7adf75e4ff3249 Mon Sep 17 00:00:00 2001 From: peterjaap <peterjaap@elgentos.nl> Date: Fri, 20 Oct 2017 20:25:18 +0200 Subject: [PATCH 083/653] Added CLI command to enable and disable profiler --- app/bootstrap.php | 5 +- .../Command/ProfilerDisableCommand.php | 72 ++++++++++++ .../Console/Command/ProfilerEnableCommand.php | 108 ++++++++++++++++++ app/code/Magento/Developer/etc/di.xml | 2 + 4 files changed, 185 insertions(+), 2 deletions(-) create mode 100644 app/code/Magento/Developer/Console/Command/ProfilerDisableCommand.php create mode 100644 app/code/Magento/Developer/Console/Command/ProfilerEnableCommand.php diff --git a/app/bootstrap.php b/app/bootstrap.php index 6701a9f4dd51e..e9eb72380c161 100644 --- a/app/bootstrap.php +++ b/app/bootstrap.php @@ -49,12 +49,13 @@ unset($_SERVER['ORIG_PATH_INFO']); } -if (!empty($_SERVER['MAGE_PROFILER']) +if ( + (!empty($_SERVER['MAGE_PROFILER']) || file_exists(BP . '/var/profiler.flag')) && isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'], 'text/html') !== false ) { \Magento\Framework\Profiler::applyConfig( - $_SERVER['MAGE_PROFILER'], + (isset($_SERVER['MAGE_PROFILER']) && strlen($_SERVER['MAGE_PROFILER'])) ? $_SERVER['MAGE_PROFILER'] : trim(file_get_contents(BP . '/var/profiler.flag')), BP, !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ); diff --git a/app/code/Magento/Developer/Console/Command/ProfilerDisableCommand.php b/app/code/Magento/Developer/Console/Command/ProfilerDisableCommand.php new file mode 100644 index 0000000000000..267ddcb75929f --- /dev/null +++ b/app/code/Magento/Developer/Console/Command/ProfilerDisableCommand.php @@ -0,0 +1,72 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Developer\Console\Command; + +use Magento\Framework\Filesystem\Io\File; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class ProfilerDisableCommand extends Command +{ + /** + * Profiler flag file + */ + const PROFILER_FLAG_FILE = 'var/profiler.flag'; + + /** + * Command name + */ + const COMMAND_NAME = 'dev:profiler:disable'; + + /** + * Success message + */ + const SUCCESS_MESSAGE = 'Profiler disabled.'; + + /** + * @var File + */ + protected $filesystem; + + /** + * Initialize dependencies. + * + * @param File $filesystem + * @internal param ConfigInterface $resourceConfig + */ + public function __construct(File $filesystem) + { + parent::__construct(); + $this->filesystem = $filesystem; + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this->setName(self::COMMAND_NAME) + ->setDescription('Disable the profiler.'); + + parent::configure(); + } + + /** + * {@inheritdoc} + * @throws \InvalidArgumentException + */ + protected function execute(InputInterface $input, OutputInterface $output) + { + $this->filesystem->rm(BP . '/' . self::PROFILER_FLAG_FILE); + if (!$this->filesystem->fileExists(BP . '/' . self::PROFILER_FLAG_FILE)) { + $output->writeln('<info>'. self::SUCCESS_MESSAGE . '</info>'); + return; + } + $output->writeln('<error>Something went wrong while disabling the profiler.</error>'); + } +} diff --git a/app/code/Magento/Developer/Console/Command/ProfilerEnableCommand.php b/app/code/Magento/Developer/Console/Command/ProfilerEnableCommand.php new file mode 100644 index 0000000000000..3bfe804d9ac5e --- /dev/null +++ b/app/code/Magento/Developer/Console/Command/ProfilerEnableCommand.php @@ -0,0 +1,108 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Developer\Console\Command; + +use Magento\Framework\Filesystem\Io\File; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Input\InputArgument; + +class ProfilerEnableCommand extends Command +{ + /** + * Profiler flag file + */ + const PROFILER_FLAG_FILE = 'var/profiler.flag'; + + /** + * Profiler type default setting + */ + const TYPE_DEFAULT = 'html'; + + /** + * Built in profiler types + */ + const BUILT_IN_TYPES = ['html', 'csvfile']; + + /** + * Command name + */ + const COMMAND_NAME = 'dev:profiler:enable'; + + /** + * Success message + */ + const SUCCESS_MESSAGE = 'Profiler enabled with %s output.'; + + /** + * @var File + */ + protected $filesystem; + + /** + * Initialize dependencies. + * + * @param File $filesystem + * @internal param ConfigInterface $resourceConfig + */ + public function __construct(File $filesystem) + { + parent::__construct(); + $this->filesystem = $filesystem; + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this->setName(self::COMMAND_NAME) + ->setDescription('Enable the profiler.') + ->addArgument('type', InputArgument::OPTIONAL, 'Profiler type'); + + parent::configure(); + } + + /** + * {@inheritdoc} + * @throws \InvalidArgumentException + */ + protected function execute(InputInterface $input, OutputInterface $output) + { + $type = $input->getArgument('type'); + if (!$type) { + $type = self::TYPE_DEFAULT; + } + + if (!in_array($type, self::BUILT_IN_TYPES)) { + $builtInTypes = implode(', ', self::BUILT_IN_TYPES); + $output->writeln( + '<comment>' . sprintf('Type %s is not one of the built-in output types (%s).', $type) . + sprintf('Make sure the necessary class exists.', $type, $builtInTypes) . '</comment>' + ); + } + + $this->filesystem->write(BP . '/' . self::PROFILER_FLAG_FILE, $type); + if ($this->filesystem->fileExists(BP . '/' . self::PROFILER_FLAG_FILE)) { + $output->write('<info>'. sprintf(self::SUCCESS_MESSAGE, $type) . '</info>'); + if ($type == 'csvfile') { + $output->write( + '<info> ' . sprintf( + 'Output will be saved in %s', + \Magento\Framework\Profiler\Driver\Standard\Output\Csvfile::DEFAULT_FILEPATH + ) + . '</info>' + ); + } + $output->write(PHP_EOL); + return; + } + + $output->writeln('<error>Something went wrong while enabling the profiler.</error>'); + } +} diff --git a/app/code/Magento/Developer/etc/di.xml b/app/code/Magento/Developer/etc/di.xml index ca35c38a31b68..85b28c90132af 100644 --- a/app/code/Magento/Developer/etc/di.xml +++ b/app/code/Magento/Developer/etc/di.xml @@ -102,6 +102,8 @@ <item name="dev_query_log_disable" xsi:type="object">Magento\Developer\Console\Command\QueryLogDisableCommand</item> <item name="dev_template_hints_disable" xsi:type="object">Magento\Developer\Console\Command\TemplateHintsDisableCommand</item> <item name="dev_template_hints_enable" xsi:type="object">Magento\Developer\Console\Command\TemplateHintsEnableCommand</item> + <item name="dev_profiler_disable" xsi:type="object">Magento\Developer\Console\Command\ProfilerDisableCommand</item> + <item name="dev_profiler_enable" xsi:type="object">Magento\Developer\Console\Command\ProfilerEnableCommand</item> </argument> </arguments> </type> From 40d51e4646e47eb3b25ae68b3673ff06e1c51270 Mon Sep 17 00:00:00 2001 From: root <sylink@gmail.com> Date: Sat, 21 Oct 2017 02:09:18 +0000 Subject: [PATCH 084/653] fix for issue 9633 setup wizard and memcache --- lib/internal/Magento/Framework/Session/Config.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/internal/Magento/Framework/Session/Config.php b/lib/internal/Magento/Framework/Session/Config.php index 26ae1635f18f1..73a5eb26df433 100644 --- a/lib/internal/Magento/Framework/Session/Config.php +++ b/lib/internal/Magento/Framework/Session/Config.php @@ -133,6 +133,14 @@ public function __construct( if ($savePath) { $this->setSavePath($savePath); } + /** + * Session save handler - memcache,files,etc + */ + $saveHandler=$deploymentConfig->get(self::PARAM_SESSION_SAVE_METHOD); + if ($saveHandler) { + $this->setOption('session.save_handler', $saveHandler); + } + /** * Session cache limiter From 8a6c3f2d833b9ec4a9cea76c3926b1a193a038f7 Mon Sep 17 00:00:00 2001 From: Anton Evers <anton@eve.rs> Date: Sun, 22 Oct 2017 13:54:46 +0600 Subject: [PATCH 085/653] Loose integer check for creditmemo state `$creditmemo->getState() = "1"` `Creditmemo::STATE_OPEN = 1` --- app/code/Magento/Sales/Model/Service/CreditmemoService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Model/Service/CreditmemoService.php b/app/code/Magento/Sales/Model/Service/CreditmemoService.php index c7541e6cb7e48..24f56c0dbd595 100644 --- a/app/code/Magento/Sales/Model/Service/CreditmemoService.php +++ b/app/code/Magento/Sales/Model/Service/CreditmemoService.php @@ -195,7 +195,7 @@ public function refund( */ protected function validateForRefund(\Magento\Sales\Api\Data\CreditmemoInterface $creditmemo) { - if ($creditmemo->getId() && $creditmemo->getState() !== \Magento\Sales\Model\Order\Creditmemo::STATE_OPEN) { + if ($creditmemo->getId() && $creditmemo->getState() != \Magento\Sales\Model\Order\Creditmemo::STATE_OPEN) { throw new \Magento\Framework\Exception\LocalizedException( __('We cannot register an existing credit memo.') ); From be9bd1ab26f2899d067fe76e85d8d406a4d0a524 Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Mon, 23 Oct 2017 13:46:04 +0300 Subject: [PATCH 086/653] MAGETWO-81153: Backward incompatible changes of 2.2.1 release - get rid from helper interface --- .../Magento/Customer/Block/Address/Edit.php | 24 ++++++++++++++++++- .../{Helper => Model}/AttributeChecker.php | 9 ++----- .../AttributeCheckerTest.php | 4 ++-- 3 files changed, 27 insertions(+), 10 deletions(-) rename app/code/Magento/Customer/{Helper => Model}/AttributeChecker.php (87%) rename app/code/Magento/Customer/Test/Unit/{Helper => Model}/AttributeCheckerTest.php (97%) diff --git a/app/code/Magento/Customer/Block/Address/Edit.php b/app/code/Magento/Customer/Block/Address/Edit.php index 6362f28a4f96d..bae098e529fba 100644 --- a/app/code/Magento/Customer/Block/Address/Edit.php +++ b/app/code/Magento/Customer/Block/Address/Edit.php @@ -5,7 +5,9 @@ */ namespace Magento\Customer\Block\Address; +use Magento\Customer\Model\AttributeChecker; use Magento\Framework\Exception\NoSuchEntityException; +use Magento\Framework\App\ObjectManager; /** * Customer address edit block @@ -45,6 +47,10 @@ class Edit extends \Magento\Directory\Block\Data * @var \Magento\Framework\Api\DataObjectHelper */ protected $dataObjectHelper; + /** + * @var AttributeChecker|null + */ + private $attributeChecker; /** * Constructor @@ -62,6 +68,7 @@ class Edit extends \Magento\Directory\Block\Data * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper * @param array $data * + * @param AttributeChecker|null $attributeChecker * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -76,13 +83,16 @@ public function __construct( \Magento\Customer\Api\Data\AddressInterfaceFactory $addressDataFactory, \Magento\Customer\Helper\Session\CurrentCustomer $currentCustomer, \Magento\Framework\Api\DataObjectHelper $dataObjectHelper, - array $data = [] + array $data = [], + AttributeChecker $attributeChecker = null ) { $this->_customerSession = $customerSession; $this->_addressRepository = $addressRepository; $this->addressDataFactory = $addressDataFactory; $this->currentCustomer = $currentCustomer; $this->dataObjectHelper = $dataObjectHelper; + $this->attributeChecker = $attributeChecker ?: ObjectManager::getInstance()->get(AttributeChecker::class); + parent::__construct( $context, $directoryHelper, @@ -352,4 +362,16 @@ public function getConfig($path) { return $this->_scopeConfig->getValue($path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE); } + + /** + * Checks whether it is allowed to show an attribute on the form. + * + * @param string $attributeCode + * @param string $formName + * @return bool + */ + public function isAttributeAllowedOnForm($attributeCode, $formName) + { + return $this->attributeChecker->isAttributeAllowedOnForm($attributeCode, $formName); + } } diff --git a/app/code/Magento/Customer/Helper/AttributeChecker.php b/app/code/Magento/Customer/Model/AttributeChecker.php similarity index 87% rename from app/code/Magento/Customer/Helper/AttributeChecker.php rename to app/code/Magento/Customer/Model/AttributeChecker.php index d8766a67c8b21..6cc27697ccff7 100644 --- a/app/code/Magento/Customer/Helper/AttributeChecker.php +++ b/app/code/Magento/Customer/Model/AttributeChecker.php @@ -3,19 +3,17 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Customer\Helper; +namespace Magento\Customer\Model; use Magento\Customer\Api\AddressMetadataInterface; use Magento\Customer\Api\AddressMetadataManagementInterface; -use Magento\Customer\Model\Attribute; use Magento\Customer\Model\Metadata\AttributeResolver; -use Magento\Framework\App\Helper\AbstractHelper; use Magento\Framework\App\Helper\Context; /** * Customer attribute checker. */ -class AttributeChecker extends AbstractHelper +class AttributeChecker { /** * @var AddressMetadataInterface @@ -28,18 +26,15 @@ class AttributeChecker extends AbstractHelper private $attributeResolver; /** - * @param Context $context * @param AddressMetadataInterface $addressMetadata * @param AttributeResolver $attributeResolver */ public function __construct( - Context $context, AddressMetadataInterface $addressMetadata, AttributeResolver $attributeResolver ) { $this->addressMetadata = $addressMetadata; $this->attributeResolver = $attributeResolver; - parent::__construct($context); } /** diff --git a/app/code/Magento/Customer/Test/Unit/Helper/AttributeCheckerTest.php b/app/code/Magento/Customer/Test/Unit/Model/AttributeCheckerTest.php similarity index 97% rename from app/code/Magento/Customer/Test/Unit/Helper/AttributeCheckerTest.php rename to app/code/Magento/Customer/Test/Unit/Model/AttributeCheckerTest.php index 3ec2ded413bbb..ebe5ee2680b86 100644 --- a/app/code/Magento/Customer/Test/Unit/Helper/AttributeCheckerTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/AttributeCheckerTest.php @@ -4,12 +4,12 @@ * See COPYING.txt for license details. */ -namespace Magento\Customer\Test\Unit\Helper; +namespace Magento\Customer\Test\Unit\Model; use Magento\Customer\Api\AddressMetadataInterface; use Magento\Customer\Api\AddressMetadataManagementInterface; use Magento\Customer\Api\Data\AttributeMetadataInterface; -use Magento\Customer\Helper\AttributeChecker; +use Magento\Customer\Model\AttributeChecker; use Magento\Customer\Model\Attribute; use Magento\Customer\Model\Metadata\AttributeResolver; use Magento\Framework\App\Helper\Context; From 760c0bd54bddd0abbbb3761e72a82483a820ae70 Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Mon, 23 Oct 2017 14:07:59 +0300 Subject: [PATCH 087/653] MAGETWO-81153: Backward incompatible changes of 2.2.1 release - get rid from helper interface --- app/code/Magento/Customer/Block/Address/Edit.php | 6 +++--- .../Customer/Test/Unit/Model/AttributeCheckerTest.php | 8 -------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/Customer/Block/Address/Edit.php b/app/code/Magento/Customer/Block/Address/Edit.php index bae098e529fba..e9e894b2bc130 100644 --- a/app/code/Magento/Customer/Block/Address/Edit.php +++ b/app/code/Magento/Customer/Block/Address/Edit.php @@ -47,8 +47,9 @@ class Edit extends \Magento\Directory\Block\Data * @var \Magento\Framework\Api\DataObjectHelper */ protected $dataObjectHelper; + /** - * @var AttributeChecker|null + * @var AttributeChecker */ private $attributeChecker; @@ -67,8 +68,7 @@ class Edit extends \Magento\Directory\Block\Data * @param \Magento\Customer\Helper\Session\CurrentCustomer $currentCustomer * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper * @param array $data - * - * @param AttributeChecker|null $attributeChecker + * @param AttributeChecker $attributeChecker * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( diff --git a/app/code/Magento/Customer/Test/Unit/Model/AttributeCheckerTest.php b/app/code/Magento/Customer/Test/Unit/Model/AttributeCheckerTest.php index ebe5ee2680b86..480f5be96e318 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/AttributeCheckerTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/AttributeCheckerTest.php @@ -12,16 +12,12 @@ use Magento\Customer\Model\AttributeChecker; use Magento\Customer\Model\Attribute; use Magento\Customer\Model\Metadata\AttributeResolver; -use Magento\Framework\App\Helper\Context; class AttributeCheckerTest extends \PHPUnit\Framework\TestCase { /** @var AttributeChecker|\PHPUnit_Framework_MockObject_MockObject */ private $model; - /** @var Context */ - private $context; - /** @var AttributeResolver|\PHPUnit_Framework_MockObject_MockObject */ private $attributeResolver; @@ -30,16 +26,12 @@ class AttributeCheckerTest extends \PHPUnit\Framework\TestCase protected function setUp() { - $this->context = $this->getMockBuilder(Context::class) - ->disableOriginalConstructor() - ->getMock(); $this->addressMetadataService = $this->getMockForAbstractClass(AddressMetadataInterface::class); $this->attributeResolver = $this->getMockBuilder(AttributeResolver::class) ->disableOriginalConstructor() ->getMock(); $this->model = new AttributeChecker( - $this->context, $this->addressMetadataService, $this->attributeResolver ); From 48d511b878ffbcb4708d64a4159c3a8f2160a7be Mon Sep 17 00:00:00 2001 From: Oleksandr Dubovyk <odubovyk@magento.com> Date: Mon, 23 Oct 2017 15:47:44 +0300 Subject: [PATCH 088/653] MAGETWO-53332: [FT] InstallTest variations 2 & 5 fail --- .../app/Magento/Install/Test/TestCase/InstallTest.xml | 1 - .../tests/app/Magento/Install/Test/etc/di.xml | 11 +++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 dev/tests/functional/tests/app/Magento/Install/Test/etc/di.xml diff --git a/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.xml b/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.xml index 9d1c356136130..2b407e3d39200 100644 --- a/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.xml +++ b/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.xml @@ -42,7 +42,6 @@ <constraint name="Magento\Install\Test\Constraint\AssertRewritesEnabled" /> </variation> <variation name="InstallTestVariation5" summary="Install with enabled secure urls"> - <data name="tag" xsi:type="string">stable:no</data> <data name="user/dataset" xsi:type="string">default</data> <data name="install/httpsFront" xsi:type="string">Use HTTPS for Magento Storefront</data> <data name="install/httpsAdmin" xsi:type="string">Use HTTPS for Magento Admin</data> diff --git a/dev/tests/functional/tests/app/Magento/Install/Test/etc/di.xml b/dev/tests/functional/tests/app/Magento/Install/Test/etc/di.xml new file mode 100644 index 0000000000000..aea0106d1ca16 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Install/Test/etc/di.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" ?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> + <preference for="Magento\Config\Test\Handler\ConfigData\ConfigDataInterface" type="Magento\Config\Test\Handler\ConfigData\Curl" /> + <preference for="Magento\Integration\Test\Handler\Integration\IntegrationInterface" type="Magento\Integration\Test\Handler\Integration\Curl" /> +</config> From d582277ea270ce339be4e4af7b13d8c173cfd60a Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko <okorshenko@magento.com> Date: Mon, 23 Oct 2017 13:59:00 -0500 Subject: [PATCH 089/653] MAGETWO-81841: Added CLI command to enable and disable the Profiler #11407 - fixed code style issues --- app/bootstrap.php | 6 +++++- .../Console/Command/ProfilerDisableCommand.php | 12 +++++++----- .../Console/Command/ProfilerEnableCommand.php | 17 ++++++++--------- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/app/bootstrap.php b/app/bootstrap.php index e9eb72380c161..3d474cea45432 100644 --- a/app/bootstrap.php +++ b/app/bootstrap.php @@ -54,8 +54,12 @@ && isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'], 'text/html') !== false ) { + $profilerFlag = isset($_SERVER['MAGE_PROFILER']) && strlen($_SERVER['MAGE_PROFILER']) + ? $_SERVER['MAGE_PROFILER'] + : trim(file_get_contents(BP . '/var/profiler.flag')); + \Magento\Framework\Profiler::applyConfig( - (isset($_SERVER['MAGE_PROFILER']) && strlen($_SERVER['MAGE_PROFILER'])) ? $_SERVER['MAGE_PROFILER'] : trim(file_get_contents(BP . '/var/profiler.flag')), + $profilerFlag, BP, !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ); diff --git a/app/code/Magento/Developer/Console/Command/ProfilerDisableCommand.php b/app/code/Magento/Developer/Console/Command/ProfilerDisableCommand.php index 267ddcb75929f..f1b2458bbdc90 100644 --- a/app/code/Magento/Developer/Console/Command/ProfilerDisableCommand.php +++ b/app/code/Magento/Developer/Console/Command/ProfilerDisableCommand.php @@ -11,6 +11,9 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +/** + * CLI Command to disable Magento profiler. + */ class ProfilerDisableCommand extends Command { /** @@ -37,11 +40,12 @@ class ProfilerDisableCommand extends Command * Initialize dependencies. * * @param File $filesystem + * @param string|null $name The name of the command; passing null means it must be set in configure() * @internal param ConfigInterface $resourceConfig */ - public function __construct(File $filesystem) + public function __construct(File $filesystem, $name = null) { - parent::__construct(); + parent::__construct($name ?: self::COMMAND_NAME); $this->filesystem = $filesystem; } @@ -50,9 +54,7 @@ public function __construct(File $filesystem) */ protected function configure() { - $this->setName(self::COMMAND_NAME) - ->setDescription('Disable the profiler.'); - + $this->setDescription('Disable the profiler.'); parent::configure(); } diff --git a/app/code/Magento/Developer/Console/Command/ProfilerEnableCommand.php b/app/code/Magento/Developer/Console/Command/ProfilerEnableCommand.php index 3bfe804d9ac5e..6117223eab06a 100644 --- a/app/code/Magento/Developer/Console/Command/ProfilerEnableCommand.php +++ b/app/code/Magento/Developer/Console/Command/ProfilerEnableCommand.php @@ -12,6 +12,9 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputArgument; +/** + * CLI Command to enable Magento profiler. + */ class ProfilerEnableCommand extends Command { /** @@ -48,11 +51,12 @@ class ProfilerEnableCommand extends Command * Initialize dependencies. * * @param File $filesystem + * @param string|null $name The name of the command; passing null means it must be set in configure() * @internal param ConfigInterface $resourceConfig */ - public function __construct(File $filesystem) + public function __construct(File $filesystem, $name = null) { - parent::__construct(); + parent::__construct($name ?: self::COMMAND_NAME); $this->filesystem = $filesystem; } @@ -61,9 +65,8 @@ public function __construct(File $filesystem) */ protected function configure() { - $this->setName(self::COMMAND_NAME) - ->setDescription('Enable the profiler.') - ->addArgument('type', InputArgument::OPTIONAL, 'Profiler type'); + $this->setDescription('Enable the profiler.') + ->addArgument('type', InputArgument::OPTIONAL, 'Profiler type', self::TYPE_DEFAULT); parent::configure(); } @@ -75,10 +78,6 @@ protected function configure() protected function execute(InputInterface $input, OutputInterface $output) { $type = $input->getArgument('type'); - if (!$type) { - $type = self::TYPE_DEFAULT; - } - if (!in_array($type, self::BUILT_IN_TYPES)) { $builtInTypes = implode(', ', self::BUILT_IN_TYPES); $output->writeln( From cfd92c4ff13bcd55d0ac6b06a820d74ee78f2558 Mon Sep 17 00:00:00 2001 From: Anton Evers <anton@eve.rs> Date: Tue, 24 Oct 2017 11:41:51 +0600 Subject: [PATCH 090/653] save invoice ID on credit memo when using API method salesRefundInvoiceV1 --- .../Magento/Sales/Model/Order/Creditmemo.php | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo.php b/app/code/Magento/Sales/Model/Order/Creditmemo.php index 68339e7db9390..771b8ea459aad 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo.php @@ -9,8 +9,10 @@ namespace Magento\Sales\Model\Order; use Magento\Framework\Api\AttributeValueFactory; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Pricing\PriceCurrencyInterface; use Magento\Sales\Api\Data\CreditmemoInterface; +use Magento\Sales\Api\InvoiceRepositoryInterface; use Magento\Sales\Model\AbstractModel; use Magento\Sales\Model\EntityInterface; @@ -114,6 +116,11 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt */ protected $priceCurrency; + /** + * @var InvoiceRepository + */ + private $invoiceRepository; + /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry @@ -130,6 +137,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data + * @param InvoiceRepository $invoiceRepository * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -147,7 +155,8 @@ public function __construct( PriceCurrencyInterface $priceCurrency, \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, - array $data = [] + array $data = [], + InvoiceRepository $invoiceRepository = null ) { $this->_creditmemoConfig = $creditmemoConfig; $this->_orderFactory = $orderFactory; @@ -157,6 +166,7 @@ public function __construct( $this->_commentFactory = $commentFactory; $this->_commentCollectionFactory = $commentCollectionFactory; $this->priceCurrency = $priceCurrency; + $this->invoiceRepository = $invoiceRepository; parent::__construct( $context, $registry, @@ -379,6 +389,9 @@ public function canRefund() */ public function getInvoice() { + if (!$this->getData('invoice') instanceof \Magento\Sales\Model\Order\Invoice && $this->getInvoiceId()) { + $this->setInvoice($this->getInvoiceRepository()->get($this->getInvoiceId())); + } return $this->getData('invoice'); } @@ -391,6 +404,7 @@ public function getInvoice() public function setInvoice(Invoice $invoice) { $this->setData('invoice', $invoice); + $this->setInvoiceId($invoice->getId()); return $this; } @@ -1525,5 +1539,12 @@ public function setExtensionAttributes(\Magento\Sales\Api\Data\CreditmemoExtensi return $this->_setExtensionAttributes($extensionAttributes); } + /** + * @return InvoiceRepositoryInterface|mixed + * @deprecated + */ + private function getInvoiceRepository() { + return $this->invoiceRepository ?: ObjectManager::getInstance()->get(InvoiceRepositoryInterface::class); + } //@codeCoverageIgnoreEnd } From 6c9a8b258446950e2bd8b41844c529a7be67f335 Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Tue, 24 Oct 2017 09:06:42 +0300 Subject: [PATCH 091/653] MAGETWO-82469: Can't save "Minimum Qty Allowed" configuration option in Catalog->Inventory->Product Stock Options --- .../Magento/Config/Block/System/Config/Form.php | 13 +++++++++++++ .../Config/Model/Config/Backend/Serialized.php | 11 +---------- .../Test/Unit/Block/System/Config/FormTest.php | 4 ++-- .../Block/System/Config/_files/test_config.xml | 2 +- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/app/code/Magento/Config/Block/System/Config/Form.php b/app/code/Magento/Config/Block/System/Config/Form.php index c540b8a3b0bb7..c17df229cf549 100644 --- a/app/code/Magento/Config/Block/System/Config/Form.php +++ b/app/code/Magento/Config/Block/System/Config/Form.php @@ -8,6 +8,7 @@ use Magento\Config\App\Config\Type\System; use Magento\Config\Model\Config\Reader\Source\Deployed\SettingChecker; use Magento\Config\Model\Config\Structure\ElementVisibilityInterface; +use Magento\Framework\App\Config\Data\ProcessorInterface; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\ObjectManager; @@ -429,6 +430,18 @@ private function getFieldData(\Magento\Config\Model\Config\Structure\Element\Fie if ($data === null) { $path = $field->getConfigPath() !== null ? $field->getConfigPath() : $path; $data = $this->getConfigValue($path); + if ($field->hasBackendModel()) { + $backendModel = $field->getBackendModel(); + // Backend models which implement ProcessorInterface are processed by ScopeConfigInterface + if (!$backendModel instanceof ProcessorInterface) { + $backendModel->setPath($path) + ->setValue($data) + ->setWebsite($this->getWebsiteCode()) + ->setStore($this->getStoreCode()) + ->afterLoad(); + $data = $backendModel->getValue(); + } + } } return $data; diff --git a/app/code/Magento/Config/Model/Config/Backend/Serialized.php b/app/code/Magento/Config/Model/Config/Backend/Serialized.php index 634f470e87567..3d5713357c39c 100644 --- a/app/code/Magento/Config/Model/Config/Backend/Serialized.php +++ b/app/code/Magento/Config/Model/Config/Backend/Serialized.php @@ -5,7 +5,6 @@ */ namespace Magento\Config\Model\Config\Backend; -use Magento\Framework\App\Config\Data\ProcessorInterface; use Magento\Framework\App\ObjectManager; use Magento\Framework\Serialize\Serializer\Json; @@ -13,7 +12,7 @@ * @api * @since 100.0.2 */ -class Serialized extends \Magento\Framework\App\Config\Value implements ProcessorInterface +class Serialized extends \Magento\Framework\App\Config\Value { /** * @var Json @@ -68,12 +67,4 @@ public function beforeSave() parent::beforeSave(); return $this; } - - /** - * @inheritdoc - */ - public function processValue($value) - { - return empty($value) ? '' : $this->serializer->unserialize($value); - } } diff --git a/app/code/Magento/Config/Test/Unit/Block/System/Config/FormTest.php b/app/code/Magento/Config/Test/Unit/Block/System/Config/FormTest.php index e4170fbe8732e..72e8386bddaf6 100644 --- a/app/code/Magento/Config/Test/Unit/Block/System/Config/FormTest.php +++ b/app/code/Magento/Config/Test/Unit/Block/System/Config/FormTest.php @@ -548,7 +548,7 @@ public function initFieldsDataProvider() false, 'some_value', null, - 0, + 1, false, false, false @@ -560,7 +560,7 @@ public function initFieldsDataProvider() true, 'Config Value', null, - 0, + 1, true, false, true diff --git a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_config.xml b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_config.xml index ab530e01f8b6a..2fd972939117b 100644 --- a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_config.xml +++ b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_config.xml @@ -10,7 +10,7 @@ <test_section> <test_group> <test_field_encrypted backend_model="Magento\Config\Model\Config\Backend\Encrypted">{ENCRYPTED_VALUE}</test_field_encrypted> - <test_field_serialized backend_model="Magento\Config\Model\Config\Backend\Serialized">["value1","value2"]</test_field_serialized> + <test_field_serialized>["value1","value2"]</test_field_serialized> <test_field>test config value</test_field> </test_group> </test_section> From 94ae23d423c1647e2d9722f6a5cdd42c9bb7902d Mon Sep 17 00:00:00 2001 From: Anton Evers <anton@eve.rs> Date: Tue, 24 Oct 2017 12:21:44 +0600 Subject: [PATCH 092/653] Move deprecated method logic to constructor --- app/code/Magento/Sales/Model/Order/Creditmemo.php | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo.php b/app/code/Magento/Sales/Model/Order/Creditmemo.php index 771b8ea459aad..cea854cae6cd2 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo.php @@ -166,7 +166,7 @@ public function __construct( $this->_commentFactory = $commentFactory; $this->_commentCollectionFactory = $commentCollectionFactory; $this->priceCurrency = $priceCurrency; - $this->invoiceRepository = $invoiceRepository; + $this->invoiceRepository = $invoiceRepository ?: ObjectManager::getInstance()->get(InvoiceRepositoryInterface::class); parent::__construct( $context, $registry, @@ -1538,13 +1538,5 @@ public function setExtensionAttributes(\Magento\Sales\Api\Data\CreditmemoExtensi { return $this->_setExtensionAttributes($extensionAttributes); } - - /** - * @return InvoiceRepositoryInterface|mixed - * @deprecated - */ - private function getInvoiceRepository() { - return $this->invoiceRepository ?: ObjectManager::getInstance()->get(InvoiceRepositoryInterface::class); - } //@codeCoverageIgnoreEnd } From 00fb31626b2847144ab86cf0fdec1d81042470a1 Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Tue, 24 Oct 2017 10:34:16 +0300 Subject: [PATCH 093/653] MAGETWO-82469: Can't save "Minimum Qty Allowed" configuration option in Catalog->Inventory->Product Stock Options - fix integration test isolation --- .../PageCache/Block/System/Config/Form/Field/ExportTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev/tests/integration/testsuite/Magento/PageCache/Block/System/Config/Form/Field/ExportTest.php b/dev/tests/integration/testsuite/Magento/PageCache/Block/System/Config/Form/Field/ExportTest.php index 8abe1e9711d99..19e6bf450e01c 100644 --- a/dev/tests/integration/testsuite/Magento/PageCache/Block/System/Config/Form/Field/ExportTest.php +++ b/dev/tests/integration/testsuite/Magento/PageCache/Block/System/Config/Form/Field/ExportTest.php @@ -15,6 +15,8 @@ class ExportTest extends \Magento\TestFramework\TestCase\AbstractBackendControll * @covers \Magento\PageCache\Block\System\Config\Form\Field\Export::_getElementHtml * @covers \Magento\PageCache\Block\System\Config\Form\Field\Export\Varnish5::getVarnishVersion * @covers \Magento\PageCache\Block\System\Config\Form\Field\Export\Varnish4::getVarnishVersion + * @magentoAppIsolation enabled + * @magentoDbIsolation enabled */ public function testExportButtons() { From 02bc89297aad77fbd68c6263d421a0d254af7a41 Mon Sep 17 00:00:00 2001 From: Jeroen van Leusden <jeroen@h-o.nl> Date: Fri, 13 Oct 2017 15:38:45 +0200 Subject: [PATCH 094/653] Remove unused eavConfig in Order Model --- app/code/Magento/Sales/Model/Order.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/app/code/Magento/Sales/Model/Order.php b/app/code/Magento/Sales/Model/Order.php index 50497e8d47ba1..85443ee7f4f11 100644 --- a/app/code/Magento/Sales/Model/Order.php +++ b/app/code/Magento/Sales/Model/Order.php @@ -214,11 +214,6 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface */ protected $_currencyFactory; - /** - * @var \Magento\Eav\Model\Config - */ - private $_eavConfig; - /** * @var \Magento\Sales\Model\Order\Status\HistoryFactory */ @@ -309,6 +304,7 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface * @param array $data * @param ResolverInterface $localeResolver * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( \Magento\Framework\Model\Context $context, @@ -349,7 +345,6 @@ public function __construct( $this->_productVisibility = $productVisibility; $this->invoiceManagement = $invoiceManagement; $this->_currencyFactory = $currencyFactory; - $this->_eavConfig = $eavConfig; $this->_orderHistoryFactory = $orderHistoryFactory; $this->_addressCollectionFactory = $addressCollectionFactory; $this->_paymentCollectionFactory = $paymentCollectionFactory; From 914520985b2ed374a57dd74df8688fff46f06e5b Mon Sep 17 00:00:00 2001 From: Anton Evers <anton@eve.rs> Date: Tue, 24 Oct 2017 15:59:23 +0600 Subject: [PATCH 095/653] Replace call to removed method --- app/code/Magento/Sales/Model/Order/Creditmemo.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo.php b/app/code/Magento/Sales/Model/Order/Creditmemo.php index cea854cae6cd2..d29a4bc58d5fc 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo.php @@ -390,7 +390,7 @@ public function canRefund() public function getInvoice() { if (!$this->getData('invoice') instanceof \Magento\Sales\Model\Order\Invoice && $this->getInvoiceId()) { - $this->setInvoice($this->getInvoiceRepository()->get($this->getInvoiceId())); + $this->setInvoice($this->invoiceRepository->get($this->getInvoiceId())); } return $this->getData('invoice'); } From 177e540938631fbb749dcc028d4f8f864e290b4e Mon Sep 17 00:00:00 2001 From: Timon de Groot <tdegroot96@gmail.com> Date: Tue, 24 Oct 2017 12:39:42 +0200 Subject: [PATCH 096/653] Fix error when generating urn catalog for empty misc.xml --- .../Model/XmlCatalog/Format/PhpStorm.php | 34 ++++++------- .../Format/PhpStorm/DomDocumentFactory.php | 49 +++++++++++++++++++ .../DomDocument/DomDocumentFactory.php | 27 +++++++++- 3 files changed, 89 insertions(+), 21 deletions(-) create mode 100644 app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php diff --git a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php index 30684b7177c99..54b7526b0d1a8 100644 --- a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php +++ b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php @@ -6,11 +6,11 @@ namespace Magento\Developer\Model\XmlCatalog\Format; +use Magento\Developer\Model\XmlCatalog\Format\PhpStorm\DomDocumentFactory; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Filesystem\Directory\ReadFactory; use Magento\Framework\Filesystem\Directory\ReadInterface; -use Magento\Framework\Filesystem\Directory\WriteFactory; -use Magento\Framework\Filesystem\Directory\WriteInterface; +use Magento\Framework\Filesystem\File\WriteFactory as FileWriteFactory; /** * Class PhpStorm generates URN catalog for PhpStorm 9 @@ -23,20 +23,28 @@ class PhpStorm implements FormatInterface private $currentDirRead; /** - * @var \Magento\Framework\Filesystem\File\WriteFactory + * @var FileWriteFactory */ private $fileWriteFactory; + /** + * @var DomDocumentFactory + */ + private $domDocumentFactory; + /** * @param ReadFactory $readFactory - * @param \Magento\Framework\Filesystem\File\WriteFactory $fileWriteFactory + * @param FileWriteFactory $fileWriteFactory + * @param DomDocumentFactory $domDocumentFactory */ public function __construct( ReadFactory $readFactory, - \Magento\Framework\Filesystem\File\WriteFactory $fileWriteFactory + FileWriteFactory $fileWriteFactory, + DomDocumentFactory $domDocumentFactory ) { $this->currentDirRead = $readFactory->create(getcwd()); $this->fileWriteFactory = $fileWriteFactory; + $this->domDocumentFactory = $domDocumentFactory; } /** @@ -57,26 +65,14 @@ public function generateCatalog(array $dictionary, $configFilePath) \Magento\Framework\Filesystem\DriverPool::FILE, 'r' ); - $dom = new \DOMDocument(); - $dom->loadXML($file->readAll()); + $dom = $this->domDocumentFactory->create($file->readAll()); $xpath = new \DOMXPath($dom); $nodeList = $xpath->query('/project'); $projectNode = $nodeList->item(0); $file->close(); } catch (FileSystemException $f) { //create file if does not exists - $dom = new \DOMDocument(); - $projectNode = $dom->createElement('project'); - - //PhpStorm 9 version for component is "4" - $projectNode->setAttribute('version', '4'); - $dom->appendChild($projectNode); - $rootComponentNode = $dom->createElement('component'); - - //PhpStorm 9 version for ProjectRootManager is "2" - $rootComponentNode->setAttribute('version', '2'); - $rootComponentNode->setAttribute('name', 'ProjectRootManager'); - $projectNode->appendChild($rootComponentNode); + $dom = $this->domDocumentFactory->create(); } $xpath = new \DOMXPath($dom); diff --git a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php new file mode 100644 index 0000000000000..3a04b28db8332 --- /dev/null +++ b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php @@ -0,0 +1,49 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Developer\Model\XmlCatalog\Format\PhpStorm; + +use DOMDocument; + +class DomDocumentFactory extends \Magento\Framework\DomDocument\DomDocumentFactory +{ + /** + * {@inheritdoc} + */ + public function create($data = null) + { + $dom = parent::create($data); + + if (empty($data)) { + $this->initializeDocument($dom); + } + + return $dom; + } + + /** + * Initialize document to be used as 'misc.xml' + * + * @param DOMDocument $document + * @return DOMDocument + */ + private function initializeDocument(DOMDocument $document) + { + $document->xmlVersion = '1.0'; + $projectNode = $document->createElement('project'); + + //PhpStorm 9 version for component is "4" + $projectNode->setAttribute('version', '4'); + $document->appendChild($projectNode); + $rootComponentNode = $document->createElement('component'); + + //PhpStorm 9 version for ProjectRootManager is "2" + $rootComponentNode->setAttribute('version', '2'); + $rootComponentNode->setAttribute('name', 'ProjectRootManager'); + $projectNode->appendChild($rootComponentNode); + + return $document; + } +} diff --git a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php index 677e4d654e52c..1f365d6defdac 100644 --- a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php +++ b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Framework\DomDocument; /** @@ -10,13 +11,35 @@ */ class DomDocumentFactory { + /** + * @var \Magento\Framework\ObjectManagerInterface + */ + private $objectManager; + + /** + * DomDocumentFactory constructor. + * @param \Magento\Framework\ObjectManagerInterface $objectManager + */ + public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager) + { + $this->objectManager = $objectManager; + } + /** * Create empty DOM document instance. * + * @param string $data the data to be loaded into the object + * * @return \DOMDocument */ - public function create() + public function create($data = null) { - return new \DOMDocument(); + $dom = $this->objectManager->create('DOMDocument'); + + if (!empty($data) && is_string($data)) { + $dom->loadXML($data); + } + + return $dom; } } From 480f8ae7f4948918cffcf9d63838a584dce9b5b4 Mon Sep 17 00:00:00 2001 From: Anton Evers <anton@eve.rs> Date: Tue, 24 Oct 2017 17:06:17 +0600 Subject: [PATCH 097/653] add tests for refunding pending credit memos --- .../Model/Service/CreditmemoServiceTest.php | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/app/code/Magento/Sales/Test/Unit/Model/Service/CreditmemoServiceTest.php b/app/code/Magento/Sales/Test/Unit/Model/Service/CreditmemoServiceTest.php index 9ecab6cf9ab52..2e668f0b0d6f1 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Service/CreditmemoServiceTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Service/CreditmemoServiceTest.php @@ -243,6 +243,78 @@ public function testRefund() $this->assertSame($creditMemoMock, $this->creditmemoService->refund($creditMemoMock, true)); } + public function testRefundPendingCreditMemo() + { + $creditMemoMock = $this->getMockBuilder(\Magento\Sales\Api\Data\CreditmemoInterface::class) + ->setMethods(['getId', 'getOrder', 'getState', 'getInvoice']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $creditMemoMock->expects($this->once())->method('getId')->willReturn(444); + $creditMemoMock->expects($this->once())->method('getState') + ->willReturn(\Magento\Sales\Model\Order\Creditmemo::STATE_OPEN); + $orderMock = $this->getMockBuilder(Order::class)->disableOriginalConstructor()->getMock(); + + $creditMemoMock->expects($this->atLeastOnce())->method('getOrder')->willReturn($orderMock); + $orderMock->expects($this->once())->method('getBaseTotalRefunded')->willReturn(0); + $orderMock->expects($this->once())->method('getBaseTotalPaid')->willReturn(10); + $creditMemoMock->expects($this->once())->method('getBaseGrandTotal')->willReturn(10); + + $this->priceCurrencyMock->expects($this->any()) + ->method('round') + ->willReturnArgument(0); + + // Set payment adapter dependency + $refundAdapterMock = $this->getMockBuilder(\Magento\Sales\Model\Order\RefundAdapterInterface::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $this->objectManagerHelper->setBackwardCompatibleProperty( + $this->creditmemoService, + 'refundAdapter', + $refundAdapterMock + ); + + // Set resource dependency + $resourceMock = $this->getMockBuilder(\Magento\Framework\App\ResourceConnection::class) + ->disableOriginalConstructor() + ->getMock(); + $this->objectManagerHelper->setBackwardCompatibleProperty( + $this->creditmemoService, + 'resource', + $resourceMock + ); + + // Set order repository dependency + $orderRepositoryMock = $this->getMockBuilder(\Magento\Sales\Api\OrderRepositoryInterface::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $this->objectManagerHelper->setBackwardCompatibleProperty( + $this->creditmemoService, + 'orderRepository', + $orderRepositoryMock + ); + + $adapterMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\AdapterInterface::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $resourceMock->expects($this->once())->method('getConnection')->with('sales')->willReturn($adapterMock); + $adapterMock->expects($this->once())->method('beginTransaction'); + $refundAdapterMock->expects($this->once()) + ->method('refund') + ->with($creditMemoMock, $orderMock, false) + ->willReturn($orderMock); + $orderRepositoryMock->expects($this->once()) + ->method('save') + ->with($orderMock); + $creditMemoMock->expects($this->once()) + ->method('getInvoice') + ->willReturn(null); + $adapterMock->expects($this->once())->method('commit'); + $this->creditmemoRepositoryMock->expects($this->once()) + ->method('save'); + + $this->assertSame($creditMemoMock, $this->creditmemoService->refund($creditMemoMock, true)); + } + /** * @expectedExceptionMessage The most money available to refund is 1. * @expectedException \Magento\Framework\Exception\LocalizedException From cbda7b821c976d82eb3c513c435cd941e4b287fb Mon Sep 17 00:00:00 2001 From: Marius <mariuscris@users.noreply.github.com> Date: Tue, 24 Oct 2017 14:39:44 +0300 Subject: [PATCH 098/653] Remove FQCN Remove FQCN --- .../Magento/Catalog/Block/Product/ListProduct.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php index abcc106337617..5bb0b772f90de 100644 --- a/app/code/Magento/Catalog/Block/Product/ListProduct.php +++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php @@ -37,29 +37,29 @@ class ListProduct extends AbstractProduct implements IdentityInterface /** * Product Collection * - * @var \Magento\Eav\Model\Entity\Collection\AbstractCollection + * @var AbstractCollection */ protected $_productCollection; /** * Catalog layer * - * @var \Magento\Catalog\Model\Layer + * @var Layer */ protected $_catalogLayer; /** - * @var \Magento\Framework\Data\Helper\PostHelper + * @var PostHelper */ protected $_postDataHelper; /** - * @var \Magento\Framework\Url\Helper\Data + * @var Data */ protected $urlHelper; /** - * @var \Magento\Catalog\Api\CategoryRepositoryInterface + * @var CategoryRepositoryInterface */ protected $categoryRepository; @@ -151,7 +151,7 @@ public function getMode() /** * Get listing mode for products if toolbar is removed from layout. * Use the general configuration for product list mode from config path catalog/frontend/list_mode as default value - // or mode data from block declaration from layout. + * or mode data from block declaration from layout. * * @return string */ From 0d652139889d882dd6646741070e12d04ebd8a5b Mon Sep 17 00:00:00 2001 From: Timon de Groot <tdegroot96@gmail.com> Date: Tue, 24 Oct 2017 14:00:05 +0200 Subject: [PATCH 099/653] Add unit test for \Magento\Framework\DomDocument\DomDocumentFactory --- .../DomDocument/DomDocumentFactory.php | 6 +- .../DomDocument/DomDocumentFactoryTest.php | 95 +++++++++++++++++++ 2 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php diff --git a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php index 1f365d6defdac..91c1f91577cbc 100644 --- a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php +++ b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php @@ -6,6 +6,8 @@ namespace Magento\Framework\DomDocument; +use DOMDocument; + /** * DOM document factory */ @@ -30,11 +32,11 @@ public function __construct(\Magento\Framework\ObjectManagerInterface $objectMan * * @param string $data the data to be loaded into the object * - * @return \DOMDocument + * @return DOMDocument */ public function create($data = null) { - $dom = $this->objectManager->create('DOMDocument'); + $dom = $this->objectManager->create(DOMDocument::class); if (!empty($data) && is_string($data)) { $dom->loadXML($data); diff --git a/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php b/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php new file mode 100644 index 0000000000000..d04a9be97306a --- /dev/null +++ b/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php @@ -0,0 +1,95 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Framework\Test\Unit\DomDocument; + +use DOMDocument; +use Magento\Framework\DomDocument\DomDocumentFactory; +use Magento\Framework\ObjectManagerInterface; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; + +class DomDocumentFactoryTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var ObjectManagerHelper + */ + private $objectManagerHelper; + + /** + * @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $objectManagerMock; + + /** + * @var DOMDocument|\PHPUnit_Framework_MockObject_MockObject + */ + private $domDocumentMock; + + /** + * @var DomDocumentFactory + */ + private $domDocumentFactory; + + /** + * @var string + */ + private $xmlSample = <<<EOT +<?xml version="1.0"?> +<root> +</root> +EOT; + + /** + * {@inheritdoc} + */ + protected function setUp() + { + $this->objectManagerHelper = new ObjectManagerHelper($this); + $this->objectManagerMock = $this->createMock(ObjectManagerInterface::class); + $this->domDocumentMock = $this->createMock(DOMDocument::class); + $this->domDocumentFactory = $this->objectManagerHelper->getObject( + DomDocumentFactory::class, + [ + 'objectManager' => $this->objectManagerMock + ] + ); + } + + /** + * @dataProvider createDataProvider + */ + public function testCreate($data = null) + { + $this->objectManagerMock->expects($this->once()) + ->method('create') + ->with(DOMDocument::class) + ->willReturn($this->domDocumentMock); + + if (empty($data) || !is_string($data)) { + $this->domDocumentMock->expects($this->never()) + ->method('loadXML'); + } else { + $this->domDocumentMock->expects($this->once()) + ->method('loadXML') + ->with($data) + ->willReturn(true); + } + + $this->domDocumentFactory->create($data); + } + + /** + * @return array + */ + public function createDataProvider(): array + { + return [ + [null], + [''], + [$this->xmlSample] + ]; + } +} From 0eea3b38ae20f690187e858457a7e97d7547347c Mon Sep 17 00:00:00 2001 From: Timon de Groot <tdegroot96@gmail.com> Date: Tue, 24 Oct 2017 19:37:17 +0200 Subject: [PATCH 100/653] Fix getReservedOrderId() to use current store instead of default store --- app/code/Magento/Quote/Model/ResourceModel/Quote.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote.php b/app/code/Magento/Quote/Model/ResourceModel/Quote.php index 9f491b749a812..f38ea81b3dd89 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote.php @@ -167,7 +167,7 @@ public function getReservedOrderId($quote) { return $this->sequenceManager->getSequence( \Magento\Sales\Model\Order::ENTITY, - $quote->getStore()->getGroup()->getDefaultStoreId() + $quote->getStore()->getStoreId() ) ->getNextValue(); } From 73b4aa5dec630cf1529afd43a6c44e18ce0f4dbe Mon Sep 17 00:00:00 2001 From: Timon de Groot <tdegroot96@gmail.com> Date: Tue, 24 Oct 2017 19:54:26 +0200 Subject: [PATCH 101/653] Refactor method substractProductFromQuotes to subtractProductFromQuotes --- .../Magento/Quote/Model/ResourceModel/Quote.php | 17 ++++++++++++++++- .../Backend/SubtractQtyFromQuotesObserver.php | 2 +- .../SubtractQtyFromQuotesObserverTest.php | 6 +++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote.php b/app/code/Magento/Quote/Model/ResourceModel/Quote.php index f38ea81b3dd89..4ab0c803c879c 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote.php @@ -211,7 +211,7 @@ public function markQuotesRecollectOnCatalogRules() * @param \Magento\Catalog\Model\Product $product * @return $this */ - public function substractProductFromQuotes($product) + public function subtractProductFromQuotes($product) { $productId = (int)$product->getId(); if (!$productId) { @@ -251,6 +251,21 @@ public function substractProductFromQuotes($product) return $this; } + /** + * Subtract product from all quotes quantities + * + * @param \Magento\Catalog\Model\Product $product + * + * @deprecated 101.0.0 + * @see \Magento\Quote\Model\ResourceModel\Quote::subtractProductFromQuotes + * + * @return $this + */ + public function substractProductFromQuotes($product) + { + return $this->subtractProductFromQuotes($product); + } + /** * Mark recollect contain product(s) quotes * diff --git a/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php b/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php index 775a7dab95cfe..cd8c705750d6c 100644 --- a/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php +++ b/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php @@ -31,6 +31,6 @@ public function __construct(\Magento\Quote\Model\ResourceModel\Quote $quote) public function execute(\Magento\Framework\Event\Observer $observer) { $product = $observer->getEvent()->getProduct(); - $this->_quote->substractProductFromQuotes($product); + $this->_quote->subtractProductFromQuotes($product); } } diff --git a/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php b/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php index a6a828c888fc0..6b94605108866 100644 --- a/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php +++ b/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php @@ -15,12 +15,12 @@ class SubtractQtyFromQuotesObserverTest extends \PHPUnit\Framework\TestCase protected $_model; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Quote\Model\ResourceModel\Quote|\PHPUnit_Framework_MockObject_MockObject */ protected $_quoteMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject */ protected $_observerMock; @@ -48,7 +48,7 @@ public function testSubtractQtyFromQuotes() ['getId', 'getStatus', '__wakeup'] ); $this->_eventMock->expects($this->once())->method('getProduct')->will($this->returnValue($productMock)); - $this->_quoteMock->expects($this->once())->method('substractProductFromQuotes')->with($productMock); + $this->_quoteMock->expects($this->once())->method('subtractProductFromQuotes')->with($productMock); $this->_model->execute($this->_observerMock); } } From 7ff22bf30987dc0902d10eae1b11f797a3b9ff75 Mon Sep 17 00:00:00 2001 From: marina <marina.gociu@gmail.com> Date: Tue, 24 Oct 2017 23:07:16 +0300 Subject: [PATCH 102/653] Update product option value getPrice unit test --- .../Unit/Model/Product/Option/ValueTest.php | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/ValueTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/ValueTest.php index a2d31f377e925..3f0df9bcd5556 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/ValueTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/ValueTest.php @@ -164,13 +164,27 @@ private function getMockedOption() private function getMockedProduct() { $mockBuilder = $this->getMockBuilder(\Magento\Catalog\Model\Product::class) - ->setMethods(['getFinalPrice', '__wakeup']) + ->setMethods(['getPriceInfo', '__wakeup']) ->disableOriginalConstructor(); $mock = $mockBuilder->getMock(); - $mock->expects($this->any()) - ->method('getFinalPrice') - ->will($this->returnValue(10)); + $priceInfoMock = $this->getMockForAbstractClass( + \Magento\Framework\Pricing\PriceInfoInterface::class, + [], + '', + false, + false, + true, + ['getPrice'] + ); + + $priceMock = $this->getMockForAbstractClass(\Magento\Framework\Pricing\Price\PriceInterface::class); + + $priceInfoMock->expects($this->any())->method('getPrice')->willReturn($priceMock); + + $mock->expects($this->any())->method('getPriceInfo')->willReturn($priceInfoMock); + + $priceMock->expects($this->any())->method('getValue')->willReturn(10); return $mock; } From f6121da1dd59ba4097a9c706b25d6fcbc9202279 Mon Sep 17 00:00:00 2001 From: marina <marina.gociu@gmail.com> Date: Tue, 24 Oct 2017 23:15:12 +0300 Subject: [PATCH 103/653] Add suppress warning for cyclomatic complexity threshold --- .../Magento/SalesRule/Model/Rule/Condition/Product/Subselect.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/SalesRule/Model/Rule/Condition/Product/Subselect.php b/app/code/Magento/SalesRule/Model/Rule/Condition/Product/Subselect.php index 51b5aea31143f..1e8fbf43ec3bc 100644 --- a/app/code/Magento/SalesRule/Model/Rule/Condition/Product/Subselect.php +++ b/app/code/Magento/SalesRule/Model/Rule/Condition/Product/Subselect.php @@ -136,6 +136,7 @@ public function asHtml() * * @param \Magento\Framework\Model\AbstractModel $model * @return bool + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function validate(\Magento\Framework\Model\AbstractModel $model) { From ce20c0a5a9b27ace8d9891e38e864ffecadb2eff Mon Sep 17 00:00:00 2001 From: Anton Evers <anton@eve.rs> Date: Wed, 25 Oct 2017 11:08:09 +0600 Subject: [PATCH 104/653] Refactor invoice id persistance and retrieval to be more like the get and setOrder --- app/code/Magento/Sales/Model/Order/Creditmemo.php | 15 +++++++-------- .../Model/ResourceModel/Order/Creditmemo.php | 4 ++++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo.php b/app/code/Magento/Sales/Model/Order/Creditmemo.php index d29a4bc58d5fc..a516b52bcb3de 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo.php @@ -12,9 +12,9 @@ use Magento\Framework\App\ObjectManager; use Magento\Framework\Pricing\PriceCurrencyInterface; use Magento\Sales\Api\Data\CreditmemoInterface; -use Magento\Sales\Api\InvoiceRepositoryInterface; use Magento\Sales\Model\AbstractModel; use Magento\Sales\Model\EntityInterface; +use Magento\Sales\Model\InvoiceFactory; /** * Order creditmemo model @@ -117,9 +117,9 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt protected $priceCurrency; /** - * @var InvoiceRepository + * @var InvoiceFactory */ - private $invoiceRepository; + private $invoiceFactory; /** * @param \Magento\Framework\Model\Context $context @@ -137,7 +137,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data - * @param InvoiceRepository $invoiceRepository + * @param InvoiceFactory $invoiceFactory * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -156,7 +156,7 @@ public function __construct( \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [], - InvoiceRepository $invoiceRepository = null + InvoiceFactory $invoiceFactory = null ) { $this->_creditmemoConfig = $creditmemoConfig; $this->_orderFactory = $orderFactory; @@ -166,7 +166,7 @@ public function __construct( $this->_commentFactory = $commentFactory; $this->_commentCollectionFactory = $commentCollectionFactory; $this->priceCurrency = $priceCurrency; - $this->invoiceRepository = $invoiceRepository ?: ObjectManager::getInstance()->get(InvoiceRepositoryInterface::class); + $this->invoiceFactory = $invoiceFactory ?: ObjectManager::getInstance()->get(InvoiceFactory::class); parent::__construct( $context, $registry, @@ -390,7 +390,7 @@ public function canRefund() public function getInvoice() { if (!$this->getData('invoice') instanceof \Magento\Sales\Model\Order\Invoice && $this->getInvoiceId()) { - $this->setInvoice($this->invoiceRepository->get($this->getInvoiceId())); + $this->setInvoice($this->invoiceFactory->create()->load($this->getInvoiceId())); } return $this->getData('invoice'); } @@ -404,7 +404,6 @@ public function getInvoice() public function setInvoice(Invoice $invoice) { $this->setData('invoice', $invoice); - $this->setInvoiceId($invoice->getId()); return $this; } diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php index f95a3206ce786..5ecbbd777a14e 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php @@ -50,6 +50,10 @@ protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object) $object->setBillingAddressId($object->getOrder()->getBillingAddress()->getId()); } + if (!$object->getInvoiceId() && $object->getInvoice()) { + $object->setInvoiceId($object->getInvoice()->getId()); + } + return parent::_beforeSave($object); } } From 23f315c82601a3b89499b7a288833f5d36c798a2 Mon Sep 17 00:00:00 2001 From: Anton Evers <anton@eve.rs> Date: Wed, 25 Oct 2017 11:09:19 +0600 Subject: [PATCH 105/653] Fix IpnTest In the IpnTest creates a creditmemo for the invoice in $ipnModel->processIpnRequest() already So if Magento/Paypal/_files/order_express_with_invoice_and_creditmemo.php is used, the invoice is already refunded before the start of the test --- .../integration/testsuite/Magento/Paypal/Model/IpnTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Model/IpnTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Model/IpnTest.php index 2da602c52242d..1a22ea947f85a 100644 --- a/dev/tests/integration/testsuite/Magento/Paypal/Model/IpnTest.php +++ b/dev/tests/integration/testsuite/Magento/Paypal/Model/IpnTest.php @@ -123,7 +123,7 @@ public function testProcessIpnRequestPartialRefund() /** * Refund rest of order amount by Paypal Express IPN message service. * - * @magentoDataFixture Magento/Paypal/_files/order_express_with_invoice_and_creditmemo.php + * @magentoDataFixture Magento/Paypal/_files/order_express_with_invoice_and_shipping.php * @magentoConfigFixture current_store payment/paypal_express/active 1 * @magentoConfigFixture current_store paypal/general/merchant_country US */ @@ -147,7 +147,7 @@ public function testProcessIpnRequestRestRefund() $creditmemoItems = $order->getCreditmemosCollection()->getItems(); $this->assertEquals(Order::STATE_CLOSED, $order->getState()) ; - $this->assertEquals(2, count($creditmemoItems)); + $this->assertEquals(1, count($creditmemoItems)); $this->assertEquals(10, $order->getSubtotalRefunded()); $this->assertEquals(10, $order->getBaseSubtotalRefunded()); $this->assertEquals(20, $order->getShippingRefunded()); From 72533ad5801b3839398e1bd091495537a5429361 Mon Sep 17 00:00:00 2001 From: Anton Evers <anton@eve.rs> Date: Wed, 25 Oct 2017 11:15:10 +0600 Subject: [PATCH 106/653] specify the correct invoice factory --- app/code/Magento/Sales/Model/Order/Creditmemo.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo.php b/app/code/Magento/Sales/Model/Order/Creditmemo.php index a516b52bcb3de..3cf4d01727338 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo.php @@ -14,7 +14,7 @@ use Magento\Sales\Api\Data\CreditmemoInterface; use Magento\Sales\Model\AbstractModel; use Magento\Sales\Model\EntityInterface; -use Magento\Sales\Model\InvoiceFactory; +use Magento\Sales\Model\Order\InvoiceFactory; /** * Order creditmemo model From 5afcc52ed7a3a422f6b7dfa83e6db9e6164cc15a Mon Sep 17 00:00:00 2001 From: Timon de Groot <tdegroot96@gmail.com> Date: Wed, 25 Oct 2017 08:19:45 +0200 Subject: [PATCH 107/653] Add \Magento\Quote\Test\Unit\Model\ResourceModel\QuoteTest --- .../Unit/Model/ResourceModel/QuoteTest.php | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php diff --git a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php new file mode 100644 index 0000000000000..d60dd073d121d --- /dev/null +++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php @@ -0,0 +1,105 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Quote\Test\Unit\Model\ResourceModel; + +class QuoteTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var \Magento\Quote\Model\Quote|\PHPUnit_Framework_MockObject_MockObject + */ + private $quoteMock; + + /** + * @var \Magento\SalesSequence\Model\Manager|\PHPUnit_Framework_MockObject_MockObject + */ + private $sequenceManagerMock; + + /** + * @var \Magento\Framework\DB\Sequence\SequenceInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $sequenceMock; + + /** + * @var \Magento\Sales\Model\Order|\PHPUnit_Framework_MockObject_MockObject + */ + private $storeMock; + + /** + * @var \Magento\Quote\Model\ResourceModel\Quote + */ + private $quote; + + /** + * {@inheritdoc} + */ + protected function setUp() + { + $context = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\Db\Context::class) + ->disableOriginalConstructor() + ->getMock(); + $snapshot = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot::class) + ->disableOriginalConstructor() + ->getMock(); + $entityRelationComposite = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite::class) + ->disableOriginalConstructor() + ->getMock(); + $this->quoteMock = $this->getMockBuilder(\Magento\Quote\Model\Quote::class) + ->disableOriginalConstructor() + ->getMock(); + $this->sequenceManagerMock = $this->getMockBuilder(\Magento\SalesSequence\Model\Manager::class) + ->disableOriginalConstructor() + ->getMock(); + $this->sequenceMock = $this->getMockBuilder(\Magento\Framework\DB\Sequence\SequenceInterface::class) + ->disableOriginalConstructor() + ->getMock(); + $this->storeMock = $this->getMockBuilder(\Magento\Sales\Model\Order::class) + ->disableOriginalConstructor() + ->getMock(); + $this->quote = new \Magento\Quote\Model\ResourceModel\Quote( + $context, + $snapshot, + $entityRelationComposite, + $this->sequenceManagerMock, + null + ); + } + + /** + * @param $entityType + * @param $storeId + * @dataProvider getReservedOrderIdDataProvider + */ + public function testGetReservedOrderId($entityType, $storeId) + { + $this->sequenceManagerMock->expects($this->once()) + ->method('getSequence') + ->with(\Magento\Sales\Model\Order::ENTITY, $storeId) + ->willReturn($this->sequenceMock); + $this->quoteMock->expects($this->once()) + ->method('getStore') + ->willReturn($this->storeMock); + $this->storeMock->expects($this->once()) + ->method('getStoreId') + ->willReturn($storeId); + $this->sequenceMock->expects($this->once()) + ->method('getNextValue'); + + $this->quote->getReservedOrderId($this->quoteMock); + } + + /** + * @return array + */ + public function getReservedOrderIdDataProvider(): array + { + return [ + [\Magento\Sales\Model\Order::ENTITY, 1], + [\Magento\Sales\Model\Order::ENTITY, 2], + [\Magento\Sales\Model\Order::ENTITY, 3] + ]; + } +} \ No newline at end of file From 03fe593c691160208d553689372c8b4acaa8827a Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Wed, 25 Oct 2017 13:01:08 +0300 Subject: [PATCH 108/653] MAGETWO-70726: [GITHUB] [2.1] Store View Language switch leads to 404 on some cases #5416 --- .../Model/Storage/DbStorage.php | 6 ++ app/code/Magento/Store/Block/Switcher.php | 7 +- app/code/Magento/Store/Model/Store.php | 9 ++- .../Magento/UrlRewrite/Controller/Router.php | 69 ++++++++++++++----- 4 files changed, 72 insertions(+), 19 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php index 748589924d916..5945b8159962b 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php @@ -26,6 +26,12 @@ protected function prepareSelect(array $data) ->where('url_rewrite.entity_id IN (?)', $data['entity_id']) ->where('url_rewrite.entity_type = ?', $data['entity_type']) ->where('url_rewrite.store_id IN (?)', $data['store_id']); + if (array_key_exists(UrlRewrite::REDIRECT_TYPE, $data)) { + $select->where( + 'url_rewrite.redirect_type = ?', + $data[UrlRewrite::REDIRECT_TYPE] + ); + } if (empty($data[UrlRewrite::METADATA]['category_id'])) { $select->where('relation.category_id IS NULL'); } else { diff --git a/app/code/Magento/Store/Block/Switcher.php b/app/code/Magento/Store/Block/Switcher.php index 074dcb0262040..3d8d46983b5aa 100644 --- a/app/code/Magento/Store/Block/Switcher.php +++ b/app/code/Magento/Store/Block/Switcher.php @@ -223,9 +223,12 @@ public function getStoreName() */ public function getTargetStorePostData(\Magento\Store\Model\Store $store, $data = []) { - $data[\Magento\Store\Api\StoreResolverInterface::PARAM_NAME] = $store->getCode(); + $data[\Magento\Store\Api\StoreResolverInterface::PARAM_NAME] + = $store->getCode(); + //We need to fromStore as true because it will enable proper URL + //rewriting during store switching. return $this->_postDataHelper->getPostData( - $store->getCurrentUrl(false), + $store->getCurrentUrl(true), $data ); } diff --git a/app/code/Magento/Store/Model/Store.php b/app/code/Magento/Store/Model/Store.php index 1d100da274465..20baa6fd7a483 100644 --- a/app/code/Magento/Store/Model/Store.php +++ b/app/code/Magento/Store/Model/Store.php @@ -1136,7 +1136,14 @@ public function isDefault() public function getCurrentUrl($fromStore = true) { $sidQueryParam = $this->_sidResolver->getSessionIdQueryParam($this->_getSession()); - $requestString = $this->_url->escape(ltrim($this->_request->getRequestString(), '/')); + /** @var string $requestString Request path without query parameters */ + $requestString = $this->_url->escape( + preg_replace( + '/\?.*?$/', + '', + ltrim($this->_request->getRequestString(), '/') + ) + ); $storeUrl = $this->getUrl('', ['_secure' => $this->_storeManager->getStore()->isCurrentlySecure()]); diff --git a/app/code/Magento/UrlRewrite/Controller/Router.php b/app/code/Magento/UrlRewrite/Controller/Router.php index 66ba3d9bbabe1..47718e1e060c9 100644 --- a/app/code/Magento/UrlRewrite/Controller/Router.php +++ b/app/code/Magento/UrlRewrite/Controller/Router.php @@ -5,10 +5,12 @@ */ namespace Magento\UrlRewrite\Controller; +use Magento\Framework\App\Request\Http; use Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrite; use Magento\UrlRewrite\Model\OptionProvider; use Magento\UrlRewrite\Model\UrlFinderInterface; use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; +use Magento\Framework\UrlInterface; /** * UrlRewrite Controller Router @@ -23,7 +25,7 @@ class Router implements \Magento\Framework\App\RouterInterface protected $actionFactory; /** - * @var \Magento\Framework\UrlInterface + * @var UrlInterface */ protected $url; @@ -44,14 +46,14 @@ class Router implements \Magento\Framework\App\RouterInterface /** * @param \Magento\Framework\App\ActionFactory $actionFactory - * @param \Magento\Framework\UrlInterface $url + * @param UrlInterface $url * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Framework\App\ResponseInterface $response * @param UrlFinderInterface $urlFinder */ public function __construct( \Magento\Framework\App\ActionFactory $actionFactory, - \Magento\Framework\UrlInterface $url, + UrlInterface $url, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Framework\App\ResponseInterface $response, UrlFinderInterface $urlFinder @@ -66,40 +68,75 @@ public function __construct( /** * Match corresponding URL Rewrite and modify request * - * @param \Magento\Framework\App\RequestInterface $request + * @param \Magento\Framework\App\RequestInterface|Http $request * @return \Magento\Framework\App\ActionInterface|null */ public function match(\Magento\Framework\App\RequestInterface $request) { + //If we're in the process of switching stores then matching rewrite + //rule from previous store because the URL was not changed yet from + //old store's format. if ($fromStore = $request->getParam('___from_store')) { $oldStoreId = $this->storeManager->getStore($fromStore)->getId(); - $oldRewrite = $this->getRewrite($request->getPathInfo(), $oldStoreId); - if ($oldRewrite) { - $rewrite = $this->urlFinder->findOneByData( + $oldRewrite = $this->getRewrite( + $request->getPathInfo(), + $oldStoreId + ); + if ($oldRewrite && $oldRewrite->getRedirectType() === 0) { + //If there is a match and it's a correct URL then just + //redirecting to current store's URL equivalent, + //otherwise just continuing finding a rule within current store. + $currentRewrite = $this->urlFinder->findOneByData( [ UrlRewrite::ENTITY_TYPE => $oldRewrite->getEntityType(), UrlRewrite::ENTITY_ID => $oldRewrite->getEntityId(), - UrlRewrite::STORE_ID => $this->storeManager->getStore()->getId(), - UrlRewrite::IS_AUTOGENERATED => 1, + UrlRewrite::STORE_ID => + $this->storeManager->getStore()->getId(), + UrlRewrite::REDIRECT_TYPE => 0, ] ); - if ($rewrite && $rewrite->getRequestPath() !== $oldRewrite->getRequestPath()) { - return $this->redirect($request, $rewrite->getRequestPath(), OptionProvider::TEMPORARY); + if ( + $currentRewrite + && + $currentRewrite->getRequestPath() + !== + $oldRewrite->getRequestPath() + ) { + return $this->redirect( + $request, + $this->url->getUrl( + '', + ['_direct' => $currentRewrite->getRequestPath()] + ), + OptionProvider::TEMPORARY + ); } } } - $rewrite = $this->getRewrite($request->getPathInfo(), $this->storeManager->getStore()->getId()); + + $rewrite = $this->getRewrite( + $request->getPathInfo(), + $this->storeManager->getStore()->getId() + ); if ($rewrite === null) { + //No rewrite rule matching current URl found, continuing with + //processing of this URL. return null; } - if ($rewrite->getRedirectType()) { + //Rule requires the request to be redirected to another URL + //and cannot be processed further. return $this->processRedirect($request, $rewrite); } - - $request->setAlias(\Magento\Framework\UrlInterface::REWRITE_REQUEST_PATH_ALIAS, $rewrite->getRequestPath()); + //Rule provides actual URL that can be processed by a controller. + $request->setAlias( + UrlInterface::REWRITE_REQUEST_PATH_ALIAS, + $rewrite->getRequestPath() + ); $request->setPathInfo('/' . $rewrite->getTargetPath()); - return $this->actionFactory->create(\Magento\Framework\App\Action\Forward::class); + return $this->actionFactory->create( + \Magento\Framework\App\Action\Forward::class + ); } /** From 0a6b2401ca8af3ea7834bff637184d561ab45d50 Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Wed, 25 Oct 2017 16:40:45 +0300 Subject: [PATCH 109/653] MAGETWO-70726: [GITHUB] [2.1] Store View Language switch leads to 404 on some cases #5416 --- .../Model/Storage/DbStorage.php | 25 ++- .../Test/Unit/Model/Storage/DbStorageTest.php | 155 ++++++++++++++++++ .../Store/Test/Unit/Block/SwitcherTest.php | 2 +- .../Store/Test/Unit/Model/StoreTest.php | 59 +++++-- .../UrlRewrite/Controller/UrlRewriteTest.php | 16 +- .../Magento/UrlRewrite/_files/url_rewrite.php | 61 ++++++- 6 files changed, 293 insertions(+), 25 deletions(-) create mode 100644 app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php index 5945b8159962b..787b349a18b18 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php @@ -17,15 +17,34 @@ class DbStorage extends BaseDbStorage */ protected function prepareSelect(array $data) { + if ( + !array_key_exists(UrlRewrite::ENTITY_ID, $data) + || + !array_key_exists(UrlRewrite::ENTITY_TYPE, $data) + || + !array_key_exists(UrlRewrite::STORE_ID, $data) + ) { + throw new \InvalidArgumentException( + UrlRewrite::ENTITY_ID . ', ' . UrlRewrite::ENTITY_TYPE + . ' and ' . UrlRewrite::STORE_ID . ' parameters are required.' + ); + } + $select = $this->connection->select(); $select->from(['url_rewrite' => $this->resource->getTableName('url_rewrite')]) ->joinLeft( ['relation' => $this->resource->getTableName(Product::TABLE_NAME)], 'url_rewrite.url_rewrite_id = relation.url_rewrite_id' ) - ->where('url_rewrite.entity_id IN (?)', $data['entity_id']) - ->where('url_rewrite.entity_type = ?', $data['entity_type']) - ->where('url_rewrite.store_id IN (?)', $data['store_id']); + ->where( + 'url_rewrite.entity_id IN (?)', + $data[UrlRewrite::ENTITY_ID] + ) + ->where( + 'url_rewrite.entity_type = ?', + $data[UrlRewrite::ENTITY_TYPE] + ) + ->where('url_rewrite.store_id IN (?)', $data[UrlRewrite::STORE_ID]); if (array_key_exists(UrlRewrite::REDIRECT_TYPE, $data)) { $select->where( 'url_rewrite.redirect_type = ?', diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php new file mode 100644 index 0000000000000..3e8d7158c0ce3 --- /dev/null +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php @@ -0,0 +1,155 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\CatalogUrlRewrite\Test\Unit\Model\Storage; + +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\CatalogUrlRewrite\Model\Storage\DbStorage; +use PHPUnit\Framework\TestCase; +use Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory; +use PHPUnit_Framework_MockObject_MockObject as Mock; +use Magento\Framework\Api\DataObjectHelper; +use Magento\Framework\DB\Adapter\AdapterInterface; +use Magento\Framework\DB\Select; +use Magento\Framework\App\ResourceConnection; +use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; + +class DbStorageTest extends TestCase +{ + /** + * @var DbStorage + */ + private $storage; + + /** + * @var UrlRewriteFactory|Mock + */ + private $urlRewriteFactory; + + /** + * @var DataObjectHelper|Mock + */ + private $dataObjectHelper; + + /** + * @var AdapterInterface|Mock + */ + private $connectionMock; + + /** + * @var Select|Mock + */ + private $select; + + /** + * @var ResourceConnection|Mock + */ + private $resource; + + /** + * @inheritDoc + * + * Preparing mocks and target object. + */ + protected function setUp() + { + parent::setUp(); + + + $this->urlRewriteFactory = $this + ->getMockBuilder(UrlRewriteFactory::class) + ->setMethods(['create']) + ->disableOriginalConstructor() + ->getMock(); + $this->dataObjectHelper = $this->createMock(DataObjectHelper::class); + $this->connectionMock = $this->createMock(AdapterInterface::class); + $this->select = $this->createPartialMock( + Select::class, + ['from', 'where', 'deleteFromSelect', 'joinLeft'] + ); + $this->resource = $this->createMock(ResourceConnection::class); + + $this->resource->expects($this->any()) + ->method('getConnection') + ->will($this->returnValue($this->connectionMock)); + $this->connectionMock->expects($this->any()) + ->method('select') + ->will($this->returnValue($this->select)); + + $this->storage = (new ObjectManager($this))->getObject( + DbStorage::class, + [ + 'urlRewriteFactory' => $this->urlRewriteFactory, + 'dataObjectHelper' => $this->dataObjectHelper, + 'resource' => $this->resource, + ] + ); + } + + public function testPrepareSelect() + { + //Not passing requried parameters. + try { + $this->storage->findOneByData(['SomeOtherParam'=>42]); + $this->fail('Didn\'t ask for required parameters'); + } catch (\InvalidArgumentException $exception) { + $this->assertEquals( + UrlRewrite::ENTITY_ID . ', ' . UrlRewrite::ENTITY_TYPE + . ' and ' . UrlRewrite::STORE_ID . ' parameters are required.', + $exception->getMessage() + ); + } + + //Passing expected parameters, checking select built. + $entityType = 'custom'; + $entityId= 42; + $storeId = 0; + $categoryId = 2; + $redirectType = 301; + //Expecting this methods to be called on select + $this->select + ->expects($this->at(2)) + ->method('where') + ->with('url_rewrite.entity_id IN (?)', $entityId) + ->willReturn($this->select); + $this->select + ->expects($this->at(3)) + ->method('where') + ->with('url_rewrite.entity_type = ?', $entityType) + ->willReturn($this->select); + $this->select + ->expects($this->at(4)) + ->method('where') + ->with('url_rewrite.store_id IN (?)', $storeId) + ->willReturn($this->select); + $this->select + ->expects($this->at(5)) + ->method('where') + ->with('url_rewrite.redirect_type = ?', $redirectType) + ->willReturn($this->select); + $this->select + ->expects($this->at(6)) + ->method('where') + ->with('relation.category_id = ?', $categoryId) + ->willReturn($this->select); + //Preparing mocks to be used + $this->select + ->expects($this->any()) + ->method('from') + ->willReturn($this->select); + $this->select + ->expects($this->any()) + ->method('joinLeft') + ->willReturn($this->select); + //Indirectly calling prepareSelect + $this->storage->findOneByData([ + UrlRewrite::ENTITY_ID => $entityId, + UrlRewrite::ENTITY_TYPE => $entityType, + UrlRewrite::STORE_ID => $storeId, + UrlRewrite::REDIRECT_TYPE => $redirectType, + UrlRewrite::METADATA => ['category_id' => $categoryId] + ]); + } +} \ No newline at end of file diff --git a/app/code/Magento/Store/Test/Unit/Block/SwitcherTest.php b/app/code/Magento/Store/Test/Unit/Block/SwitcherTest.php index 5f0ba6c0b42d3..8b4799d2b3437 100644 --- a/app/code/Magento/Store/Test/Unit/Block/SwitcherTest.php +++ b/app/code/Magento/Store/Test/Unit/Block/SwitcherTest.php @@ -53,7 +53,7 @@ public function testGetTargetStorePostData() $storeSwitchUrl = 'http://domain.com/stores/store/switch'; $store->expects($this->atLeastOnce()) ->method('getCurrentUrl') - ->with(false) + ->with(true) ->willReturn($storeSwitchUrl); $this->corePostDataHelper->expects($this->any()) ->method('getPostData') diff --git a/app/code/Magento/Store/Test/Unit/Model/StoreTest.php b/app/code/Magento/Store/Test/Unit/Model/StoreTest.php index aef54a47971ff..c05584c2d8bcb 100644 --- a/app/code/Magento/Store/Test/Unit/Model/StoreTest.php +++ b/app/code/Magento/Store/Test/Unit/Model/StoreTest.php @@ -370,10 +370,11 @@ public function testGetBaseUrlWrongType() * @param boolean $secure * @param string $url * @param string $expected + * @param bool|string $fromStore */ - public function testGetCurrentUrl($secure, $url, $expected) + public function testGetCurrentUrl($secure, $url, $expected, $fromStore) { - $defaultStore = $this->createPartialMock(\Magento\Store\Model\Store::class, [ + $defaultStore = $this->createPartialMock(Store::class, [ 'getId', 'isCurrentlySecure', '__wakeup' @@ -386,15 +387,31 @@ public function testGetCurrentUrl($secure, $url, $expected) $config = $this->getMockForAbstractClass(\Magento\Framework\App\Config\ReinitableConfigInterface::class); - $this->requestMock->expects($this->atLeastOnce())->method('getRequestString')->will($this->returnValue('')); + $requestString = preg_replace( + '/http(s?)\:\/\/[a-z0-9\-]+\//i', + '', + $url + ); + $this->requestMock + ->expects($this->atLeastOnce()) + ->method('getRequestString') + ->willReturn($requestString); $this->requestMock->expects($this->atLeastOnce())->method('getQueryValue')->will($this->returnValue([ 'SID' => 'sid' ])); $urlMock = $this->getMockForAbstractClass(\Magento\Framework\UrlInterface::class); - $urlMock->expects($this->atLeastOnce())->method('setScope')->will($this->returnSelf()); - $urlMock->expects($this->any())->method('getUrl') - ->will($this->returnValue($url)); + $urlMock + ->expects($this->atLeastOnce()) + ->method('setScope') + ->will($this->returnSelf()); + $urlMock->expects($this->any()) + ->method('getUrl') + ->will($this->returnValue(str_replace($requestString, '', $url))); + $urlMock + ->expects($this->atLeastOnce()) + ->method('escape') + ->willReturnArgument(0); $storeManager = $this->getMockForAbstractClass(\Magento\Store\Model\StoreManagerInterface::class); $storeManager->expects($this->any()) @@ -409,7 +426,7 @@ public function testGetCurrentUrl($secure, $url, $expected) $model->setStoreId(2); $model->setCode('scope_code'); - $this->assertEquals($expected, $model->getCurrentUrl(false)); + $this->assertEquals($expected, $model->getCurrentUrl($fromStore)); } /** @@ -418,9 +435,31 @@ public function testGetCurrentUrl($secure, $url, $expected) public function getCurrentUrlDataProvider() { return [ - [true, 'http://test/url', 'http://test/url?SID=sid&___store=scope_code'], - [true, 'http://test/url?SID=sid1&___store=scope', 'http://test/url?SID=sid&___store=scope_code'], - [false, 'https://test/url', 'https://test/url?SID=sid&___store=scope_code'] + [ + true, + 'http://test/url', + 'http://test/url?SID=sid&___store=scope_code', + false + ], + [ + true, + 'http://test/url?SID=sid1&___store=scope', + 'http://test/url?SID=sid&___store=scope_code', + false + ], + [ + false, + 'https://test/url', + 'https://test/url?SID=sid&___store=scope_code', + false + ], + [ + true, + 'http://test/u/u.2?__store=scope_code', + 'http://test/u/u.2?' + . 'SID=sid&___store=scope_code&___from_store=old-store', + 'old-store' + ] ]; } diff --git a/dev/tests/integration/testsuite/Magento/UrlRewrite/Controller/UrlRewriteTest.php b/dev/tests/integration/testsuite/Magento/UrlRewrite/Controller/UrlRewriteTest.php index a356406a95a65..525d7d66abd79 100644 --- a/dev/tests/integration/testsuite/Magento/UrlRewrite/Controller/UrlRewriteTest.php +++ b/dev/tests/integration/testsuite/Magento/UrlRewrite/Controller/UrlRewriteTest.php @@ -16,16 +16,20 @@ class UrlRewriteTest extends \Magento\TestFramework\TestCase\AbstractController * * @param string $request * @param string $redirect + * @param int $expectedCode * * @dataProvider requestDataProvider */ - public function testMatchUrlRewrite($request, $redirect) - { + public function testMatchUrlRewrite( + $request, + $redirect, + $expectedCode = 301 + ) { $this->dispatch($request); $code = $this->getResponse()->getHttpResponseCode(); $location = $this->getResponse()->getHeader('Location')->getFieldValue(); - $this->assertEquals(301, $code, 'Invalid response code'); + $this->assertEquals($expectedCode, $code, 'Invalid response code'); $this->assertStringEndsWith($redirect, $location, 'Invalid location header'); } @@ -56,6 +60,12 @@ public function requestDataProvider() 'request' => '/page-similar/', 'redirect' => '/page-b', ], + 'Use Case #7: Rewrite during stores switching' => [ + 'request' => '/page-c-on-2nd-store' + . '?___store=default&___from_store=fixture_second_store', + 'redirect' => '/page-c-on-1st-store', + 'expectedCode' => 302 + ] ]; } } diff --git a/dev/tests/integration/testsuite/Magento/UrlRewrite/_files/url_rewrite.php b/dev/tests/integration/testsuite/Magento/UrlRewrite/_files/url_rewrite.php index 37cb86aff3be8..a8c40d148de4b 100644 --- a/dev/tests/integration/testsuite/Magento/UrlRewrite/_files/url_rewrite.php +++ b/dev/tests/integration/testsuite/Magento/UrlRewrite/_files/url_rewrite.php @@ -6,35 +6,62 @@ use \Magento\UrlRewrite\Model\OptionProvider; use \Magento\UrlRewrite\Model\UrlRewrite; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\Store\Model\StoreManagerInterface; +use Magento\Store\Model\Store; + +/** Create fixture store */ +require dirname(dirname(__DIR__)) . '/Store/_files/second_store.php'; /** @var UrlRewrite $rewrite */ /** @var \Magento\Framework\ObjectManagerInterface $objectManager */ $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var \Magento\UrlRewrite\Model\ResourceModel\UrlRewrite $rewriteResource */ -$rewriteResource = $objectManager->create(\Magento\UrlRewrite\Model\ResourceModel\UrlRewrite::class); +$rewriteResource = $objectManager->create( + \Magento\UrlRewrite\Model\ResourceModel\UrlRewrite::class +); /** @var \Magento\Cms\Model\ResourceModel\Page $pageResource */ -$pageResource = $objectManager->create(\Magento\Cms\Model\ResourceModel\Page::class); +$pageResource = $objectManager->create( + \Magento\Cms\Model\ResourceModel\Page::class +); +/** @var StoreManagerInterface $storeManager */ +$storeManager = Bootstrap::getObjectManager() + ->get(StoreManagerInterface::class); +/** @var Store $secondStore */ +$secondStore = Bootstrap::getObjectManager()->create(Store::class); +$secondStore->load('fixture_second_store'); +$secondStoreId = $secondStore->getId(); $storeID = 1; /** @var $page \Magento\Cms\Model\Page */ -$page = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Cms\Model\Page::class); +$page = Bootstrap::getObjectManager()->create(\Magento\Cms\Model\Page::class); $page->setTitle('Cms Page A') ->setIdentifier('page-a') - ->setStores([$storeID]) ->setIsActive(1) ->setContent('<h1>Cms Page A</h1>') - ->setPageLayout('1column'); + ->setPageLayout('1column') + ->setStores([$storeID, $secondStoreId]); $pageResource->save($page); -$page = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Cms\Model\Page::class); +$page = Bootstrap::getObjectManager()->create(\Magento\Cms\Model\Page::class); $page->setTitle('Cms B') ->setIdentifier('page-b') - ->setStores([$storeID]) ->setIsActive(1) ->setContent('<h1>Cms Page B</h1>') ->setPageLayout('1column') - ->setCustomTheme('Magento/blank'); + ->setCustomTheme('Magento/blank') + ->setStores([$storeID, $secondStoreId]); +$pageResource->save($page); + +$page = Bootstrap::getObjectManager()->create(\Magento\Cms\Model\Page::class); +$page->setTitle('Cms C') + ->setIdentifier('page-c') + ->setIsActive(1) + ->setContent('<h1>Cms Page C</h1>') + ->setPageLayout('1column') + ->setCustomTheme('Magento/blank') + ->setStores([$storeID, $secondStoreId]); $pageResource->save($page); $rewrite = $objectManager->create(UrlRewrite::class); @@ -72,3 +99,21 @@ ->setStoreId($storeID) ->setDescription('From age-similar with trailing slash to page-b'); $rewriteResource->save($rewrite); + +//Emulating auto-generated aliases (like the ones used for categories). +//Rewrite rule for the 1st store. +$rewrite = $objectManager->create(UrlRewrite::class); +$rewrite->setEntityType('custom') + ->setRequestPath('page-c-on-1st-store') + ->setTargetPath('page-c') + ->setRedirectType(0) + ->setStoreId($storeID); +$rewriteResource->save($rewrite); +//Rewrite rule for the 2nd store. +$rewrite = $objectManager->create(UrlRewrite::class); +$rewrite->setEntityType('custom') + ->setRequestPath('page-c-on-2nd-store') + ->setTargetPath('page-c') + ->setRedirectType(0) + ->setStoreId($secondStoreId); +$rewriteResource->save($rewrite); From 6b325e1356a463fa9a3f435c91c5c149615e2fcd Mon Sep 17 00:00:00 2001 From: Timon de Groot <tdegroot96@gmail.com> Date: Wed, 25 Oct 2017 17:53:28 +0200 Subject: [PATCH 110/653] Use $quote->getStoreId() in Quote::getReservedOrderId() --- .../Quote/Model/ResourceModel/Quote.php | 2 +- .../Unit/Model/ResourceModel/QuoteTest.php | 27 +++++++------------ 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote.php b/app/code/Magento/Quote/Model/ResourceModel/Quote.php index 4ab0c803c879c..0efbc5145530e 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote.php @@ -167,7 +167,7 @@ public function getReservedOrderId($quote) { return $this->sequenceManager->getSequence( \Magento\Sales\Model\Order::ENTITY, - $quote->getStore()->getStoreId() + $quote->getStoreId() ) ->getNextValue(); } diff --git a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php index d60dd073d121d..27d113767029d 100644 --- a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php +++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php @@ -23,11 +23,6 @@ class QuoteTest extends \PHPUnit\Framework\TestCase */ private $sequenceMock; - /** - * @var \Magento\Sales\Model\Order|\PHPUnit_Framework_MockObject_MockObject - */ - private $storeMock; - /** * @var \Magento\Quote\Model\ResourceModel\Quote */ @@ -56,9 +51,6 @@ protected function setUp() $this->sequenceMock = $this->getMockBuilder(\Magento\Framework\DB\Sequence\SequenceInterface::class) ->disableOriginalConstructor() ->getMock(); - $this->storeMock = $this->getMockBuilder(\Magento\Sales\Model\Order::class) - ->disableOriginalConstructor() - ->getMock(); $this->quote = new \Magento\Quote\Model\ResourceModel\Quote( $context, $snapshot, @@ -71,24 +63,23 @@ protected function setUp() /** * @param $entityType * @param $storeId + * @param $reservedOrderId * @dataProvider getReservedOrderIdDataProvider */ - public function testGetReservedOrderId($entityType, $storeId) + public function testGetReservedOrderId($entityType, $storeId, $reservedOrderId) { $this->sequenceManagerMock->expects($this->once()) ->method('getSequence') - ->with(\Magento\Sales\Model\Order::ENTITY, $storeId) + ->with($entityType, $storeId) ->willReturn($this->sequenceMock); $this->quoteMock->expects($this->once()) - ->method('getStore') - ->willReturn($this->storeMock); - $this->storeMock->expects($this->once()) ->method('getStoreId') ->willReturn($storeId); $this->sequenceMock->expects($this->once()) - ->method('getNextValue'); + ->method('getNextValue') + ->willReturn($reservedOrderId); - $this->quote->getReservedOrderId($this->quoteMock); + $this->assertEquals($reservedOrderId, $this->quote->getReservedOrderId($this->quoteMock)); } /** @@ -97,9 +88,9 @@ public function testGetReservedOrderId($entityType, $storeId) public function getReservedOrderIdDataProvider(): array { return [ - [\Magento\Sales\Model\Order::ENTITY, 1], - [\Magento\Sales\Model\Order::ENTITY, 2], - [\Magento\Sales\Model\Order::ENTITY, 3] + [\Magento\Sales\Model\Order::ENTITY, 1, '1000000001'], + [\Magento\Sales\Model\Order::ENTITY, 2, '2000000001'], + [\Magento\Sales\Model\Order::ENTITY, 3, '3000000001'] ]; } } \ No newline at end of file From 3cf3ce650b4b7120cd31f920f2c035181dc6dc87 Mon Sep 17 00:00:00 2001 From: Timon de Groot <tdegroot96@gmail.com> Date: Thu, 26 Oct 2017 19:18:00 +0200 Subject: [PATCH 111/653] Fix variable exceeding max character length --- .../Unit/Model/ResourceModel/QuoteTest.php | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php index 27d113767029d..ab36746da5e73 100644 --- a/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php +++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/QuoteTest.php @@ -6,20 +6,27 @@ namespace Magento\Quote\Test\Unit\Model\ResourceModel; +use Magento\Framework\DB\Sequence\SequenceInterface; +use Magento\Framework\Model\ResourceModel\Db\Context; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite; +use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot; +use Magento\Quote\Model\Quote; +use Magento\SalesSequence\Model\Manager; + class QuoteTest extends \PHPUnit\Framework\TestCase { /** - * @var \Magento\Quote\Model\Quote|\PHPUnit_Framework_MockObject_MockObject + * @var Quote|\PHPUnit_Framework_MockObject_MockObject */ private $quoteMock; /** - * @var \Magento\SalesSequence\Model\Manager|\PHPUnit_Framework_MockObject_MockObject + * @var Manager|\PHPUnit_Framework_MockObject_MockObject */ private $sequenceManagerMock; /** - * @var \Magento\Framework\DB\Sequence\SequenceInterface|\PHPUnit_Framework_MockObject_MockObject + * @var SequenceInterface|\PHPUnit_Framework_MockObject_MockObject */ private $sequenceMock; @@ -33,28 +40,28 @@ class QuoteTest extends \PHPUnit\Framework\TestCase */ protected function setUp() { - $context = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\Db\Context::class) + $context = $this->getMockBuilder(Context::class) ->disableOriginalConstructor() ->getMock(); - $snapshot = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot::class) + $snapshot = $this->getMockBuilder(Snapshot::class) ->disableOriginalConstructor() ->getMock(); - $entityRelationComposite = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite::class) + $relationComposite = $this->getMockBuilder(RelationComposite::class) ->disableOriginalConstructor() ->getMock(); - $this->quoteMock = $this->getMockBuilder(\Magento\Quote\Model\Quote::class) + $this->quoteMock = $this->getMockBuilder(Quote::class) ->disableOriginalConstructor() ->getMock(); - $this->sequenceManagerMock = $this->getMockBuilder(\Magento\SalesSequence\Model\Manager::class) + $this->sequenceManagerMock = $this->getMockBuilder(Manager::class) ->disableOriginalConstructor() ->getMock(); - $this->sequenceMock = $this->getMockBuilder(\Magento\Framework\DB\Sequence\SequenceInterface::class) + $this->sequenceMock = $this->getMockBuilder(SequenceInterface::class) ->disableOriginalConstructor() ->getMock(); $this->quote = new \Magento\Quote\Model\ResourceModel\Quote( $context, $snapshot, - $entityRelationComposite, + $relationComposite, $this->sequenceManagerMock, null ); @@ -93,4 +100,4 @@ public function getReservedOrderIdDataProvider(): array [\Magento\Sales\Model\Order::ENTITY, 3, '3000000001'] ]; } -} \ No newline at end of file +} From f76d7cb4afe82c235fbaacae296656ca684b80f5 Mon Sep 17 00:00:00 2001 From: Timon de Groot <tdegroot96@gmail.com> Date: Thu, 26 Oct 2017 19:24:14 +0200 Subject: [PATCH 112/653] Change deprecation version to 101.0.1 in Magento\Quote\Model\ResourceModel\Quote::substractProductFromQuotes --- app/code/Magento/Quote/Model/ResourceModel/Quote.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote.php b/app/code/Magento/Quote/Model/ResourceModel/Quote.php index 0efbc5145530e..2645d52c87da5 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote.php @@ -256,7 +256,7 @@ public function subtractProductFromQuotes($product) * * @param \Magento\Catalog\Model\Product $product * - * @deprecated 101.0.0 + * @deprecated 101.0.1 * @see \Magento\Quote\Model\ResourceModel\Quote::subtractProductFromQuotes * * @return $this From 5728123cec3341662babb6779606ea2d84f53762 Mon Sep 17 00:00:00 2001 From: Andrii Dimov <adimov@magento.com> Date: Fri, 27 Oct 2017 13:24:32 +0300 Subject: [PATCH 113/653] MAGETWO-82881: Update Changelog based on delivered scope --- CHANGELOG.md | 690 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 690 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef841ec0337f2..8270f8908a3c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,693 @@ +2.2.1 +============= +* GitHub issues: + * [#4248](https://github.com/magento/magento2/issues/4248) -- Validations not working on customer registration on DOB field. (fixed in [#11067](https://github.com/magento/magento2/pull/11067)) + * [#6350](https://github.com/magento/magento2/issues/6350) -- Frontend: Datepicker/calendar control does not use the store locale (fixed in [#11067](https://github.com/magento/magento2/pull/11067)) + * [#6858](https://github.com/magento/magento2/issues/6858) -- DatePicker date format does not reflect user's locale (fixed in [#11067](https://github.com/magento/magento2/pull/11067)) + * [#6831](https://github.com/magento/magento2/issues/6831) -- Magento 2.1.1 Invalid input date format 'Invalid date' (fixed in [#11067](https://github.com/magento/magento2/pull/11067)) + * [#9743](https://github.com/magento/magento2/issues/9743) -- Invalid date when customer validate with French locale (fixed in [#11067](https://github.com/magento/magento2/pull/11067)) + * [#6712](https://github.com/magento/magento2/issues/6712) -- Footer Links Widget CSS Issue (fixed in [#11063](https://github.com/magento/magento2/pull/11063)) + * [#9008](https://github.com/magento/magento2/issues/9008) -- Error Message Is Confusing When Code Base Is Behind Database Module Version (fixed in [#11064](https://github.com/magento/magento2/pull/11064)) + * [#9981](https://github.com/magento/magento2/issues/9981) -- M2 suggests running setup:upgrade if version number of module is higher than expected (fixed in [#11064](https://github.com/magento/magento2/pull/11064)) + * [#10824](https://github.com/magento/magento2/issues/10824) -- Cannot add new columns to item grid in admin sales_order_view layout (fixed in [#11076](https://github.com/magento/magento2/pull/11076)) + * [#10417](https://github.com/magento/magento2/issues/10417) -- Wysywig editor shows broken image icons (fixed in [#11048](https://github.com/magento/magento2/pull/11048)) + * [#10697](https://github.com/magento/magento2/issues/10697) -- Product Import: Additional data: Invalid URL key (fixed in [#11049](https://github.com/magento/magento2/pull/11049)) + * [#10474](https://github.com/magento/magento2/issues/10474) -- Error message in product review form not being translated (fixed in [#11069](https://github.com/magento/magento2/pull/11069)) + * [#9877](https://github.com/magento/magento2/issues/9877) -- getCacheTags for price issue (fixed in [#11154](https://github.com/magento/magento2/pull/11154)) + * [#10738](https://github.com/magento/magento2/issues/10738) -- Empty attribute label is displayed on product page when other language used. (fixed in [#11168](https://github.com/magento/magento2/pull/11168)) + * [#9900](https://github.com/magento/magento2/issues/9900) -- Cms module collections missing event prefix (fixed in [#11223](https://github.com/magento/magento2/pull/11223)) + * [#11044](https://github.com/magento/magento2/issues/11044) -- magento setup:upgrade prompts to run compilation, even in developer mode (fixed in [#11050](https://github.com/magento/magento2/pull/11050)) + * [#10775](https://github.com/magento/magento2/issues/10775) -- 404 Forbidden sounds not right (fixed in [#11134](https://github.com/magento/magento2/pull/11134)) + * [#11231](https://github.com/magento/magento2/issues/11231) -- Can't close mobile search bar once typed (fixed in [#11246](https://github.com/magento/magento2/pull/11246)) + * [#10317](https://github.com/magento/magento2/issues/10317) -- Region is being overridden when changing from a required-state country to one that is not required (fixed in [#11254](https://github.com/magento/magento2/pull/11254)) + * [#11089](https://github.com/magento/magento2/issues/11089) -- setup:config:set --key append instead of replace (fixed in [#11155](https://github.com/magento/magento2/pull/11155)) + * [#7582](https://github.com/magento/magento2/issues/7582) -- Payment methods in payments title in wrong language (fixed in [#11165](https://github.com/magento/magento2/pull/11165)) + * [#5105](https://github.com/magento/magento2/issues/5105) -- Error While send Invoice with Grouped Products (fixed in [#11297](https://github.com/magento/magento2/pull/11297)) + * [#11163](https://github.com/magento/magento2/issues/11163) -- Magento 2.2.0 Pages showing error: Data key is missing: code-entity (fixed in [#11205](https://github.com/magento/magento2/pull/11205)) + * [#11329](https://github.com/magento/magento2/issues/11329) -- Unable to proceed massaction "Update attributes" with required multiple select attribute (fixed in [#11349](https://github.com/magento/magento2/pull/11349)) + * [#8958](https://github.com/magento/magento2/issues/8958) -- Hint mistake in english language (fixed in [#11390](https://github.com/magento/magento2/pull/11390)) +* GitHub pull requests: + * [#11067](https://github.com/magento/magento2/pull/11067) -- Fix dob date validation on custom locale (by @joachimVT) + * [#11054](https://github.com/magento/magento2/pull/11054) -- Add dev:tests:run parameter to pass arguments to phpunit (by @schmengler) + * [#11056](https://github.com/magento/magento2/pull/11056) -- Do not disable maintenance mode after running a backup. (by @stevenvdp) + * [#11058](https://github.com/magento/magento2/pull/11058) -- Escape html before replace new line with break (by @Quinten) + * [#11063](https://github.com/magento/magento2/pull/11063) -- 6712 Remove additional margin for footer links widget; prevents layou… (by @fragdochkarl) + * [#11064](https://github.com/magento/magento2/pull/11064) -- Show different message if DB module version is higher than code modul… (by @schmengler) + * [#11076](https://github.com/magento/magento2/pull/11076) -- Backport to 2.2 of #10824: add name for order items grid default renderer block (by @gsomoza) + * [#11048](https://github.com/magento/magento2/pull/11048) -- Fix #10417 (by @PieterCappelle) + * [#11049](https://github.com/magento/magento2/pull/11049) -- Vague error message for invalid url_key for category (by @avdb) + * [#11069](https://github.com/magento/magento2/pull/11069) -- Error message in product review form not being translated (by @Echron) + * [#11127](https://github.com/magento/magento2/pull/11127) -- Add missing return statements in setters (by @niccifor) + * [#11138](https://github.com/magento/magento2/pull/11138) -- Added template as argument to the store address renderer to allow custom formatting (by @jokeputs) + * [#11147](https://github.com/magento/magento2/pull/11147) -- Fix the correct removal of the images and the removal of all images in the catalog (by @raumatbel) + * [#11154](https://github.com/magento/magento2/pull/11154) -- Issue #9877: Backport of: getCacheTags for price issue #10930 (by @denysbabenko) + * [#11160](https://github.com/magento/magento2/pull/11160) -- Ported Down changes from PR#10919 (by @strell) + * [#11200](https://github.com/magento/magento2/pull/11200) -- Delete CallExit function for After plugin logic execution 2.2-develop [BackPort] (by @osrecio) + * [#11168](https://github.com/magento/magento2/pull/11168) -- Fixed issue #10738: Don't display attribute label if defined as "none" in layout (by @maksek) + * [#11223](https://github.com/magento/magento2/pull/11223) -- Cms page/block eventprefix fix issue 9900 (by @convenient) + * [#11229](https://github.com/magento/magento2/pull/11229) -- Disable secret key validation on admin noroute to fix redirect loop (by @convenient) + * [#11050](https://github.com/magento/magento2/pull/11050) -- Only prompt for deploy command in production mode (by @schmengler) + * [#11134](https://github.com/magento/magento2/pull/11134) -- Fix 404 status header (by @Zifius) + * [#11084](https://github.com/magento/magento2/pull/11084) -- Fix in stripped min length validation when value has special characters (by @rubenRP) + * [#11246](https://github.com/magento/magento2/pull/11246) -- Can't close mobile search bar (by @crissanclick) + * [#11254](https://github.com/magento/magento2/pull/11254) -- Fix for #10317 Disable region list when switching to a region optional country. (by @romainruaud) + * [#11155](https://github.com/magento/magento2/pull/11155) -- Refactor ConfigGenerator to replace/set crypt key instead of append (by @renttek) + * [#11291](https://github.com/magento/magento2/pull/11291) -- Fix #9243 - Upgrade ZF components. Zend_Service (by @dverkade) + * [#11165](https://github.com/magento/magento2/pull/11165) -- #7582: use setStoreId after custom load method to give storeId precedence (by @bka) + * [#11297](https://github.com/magento/magento2/pull/11297) -- Fix for issue #5105 - Error While send Invoice with Grouped Products (by @michielgerritsen) + * [#11327](https://github.com/magento/magento2/pull/11327) -- Fix #10812: htaccess Options override (by @dverkade) + * [#11081](https://github.com/magento/magento2/pull/11081) -- Text updated. (by @RakeshJesadiya) + * [#11183](https://github.com/magento/magento2/pull/11183) -- FIX for #11166 Index Handling Fatal Error (by @larsroettig) + * [#11205](https://github.com/magento/magento2/pull/11205) -- Fixes #11163 missing data key code-entity in CMS page edit form (by @Tomasz-Silpion) + * [#11219](https://github.com/magento/magento2/pull/11219) -- Fix typo in sessionStorage polyfill (by @mszydlo) + * [#11249](https://github.com/magento/magento2/pull/11249) -- Add a payload extender to the default shipping-save-processor (Backport to 2.2) (by @navarr) + * [#11345](https://github.com/magento/magento2/pull/11345) -- Use US English spelling for "Optimization". (by @davidangel) + * [#11349](https://github.com/magento/magento2/pull/11349) -- Bug fix update attributes (by @manuelson) + * [#11390](https://github.com/magento/magento2/pull/11390) -- Fix typo in design rule hint message (by @jahvi) + +2.2.0 +============= +* GitHub issues: + * [#8287](https://github.com/magento/magento2/issues/8287) -- InputException while updating cart with Minimum order amount enabled (fixed in [#8474](https://github.com/magento/magento2/pull/8474)) + * [#8315](https://github.com/magento/magento2/issues/8315) -- Error with StdoTest (fixed in [#8487](https://github.com/magento/magento2/pull/8487)) + * [#5808](https://github.com/magento/magento2/issues/5808) -- [2.1.0] Problem on mobile when catalog gallery allowfullscreen is false (fixed in [#8434](https://github.com/magento/magento2/pull/8434)) + * [#8392](https://github.com/magento/magento2/issues/8392) -- Initial loading of the related-products sorting fails in Edge-Mode (fixed in [#8467](https://github.com/magento/magento2/pull/8467)) + * [#8076](https://github.com/magento/magento2/issues/8076) -- Currency Setup in admin throws in_array error when a single value is selected (fixed in [#8077](https://github.com/magento/magento2/pull/8077)) + * [#8277](https://github.com/magento/magento2/issues/8277) -- CatalogImportExport uploader can't handle HTTPS images (fixed in [#8278](https://github.com/magento/magento2/pull/8278)) + * [#7353](https://github.com/magento/magento2/issues/7353) -- Crosssells are never shown when using product/list/items.phtml template (fixed in [#8602](https://github.com/magento/magento2/pull/8602)) + * [#8632](https://github.com/magento/magento2/issues/8632) -- Location of wishlist.js file is incorrect (fixed in [#8633](https://github.com/magento/magento2/pull/8633)) + * [#6634](https://github.com/magento/magento2/issues/6634) -- Yes/No attribute value is not shown on a product details page (fixed in [#8623](https://github.com/magento/magento2/pull/8623)) + * [#8566](https://github.com/magento/magento2/issues/8566) -- Setting 'show_out_of_stock' to 'No' has no effect (fixed in [#8736](https://github.com/magento/magento2/pull/8736)) + * [#6706](https://github.com/magento/magento2/issues/6706) -- Notice undefined index when changes swatch attribute (fixed in [#6707](https://github.com/magento/magento2/pull/6707)) + * [#6855](https://github.com/magento/magento2/issues/6855) -- Create order via backend doesn't work after using NL translation for order-header (fixed in [#6856](https://github.com/magento/magento2/pull/6856)) + * [#8515](https://github.com/magento/magento2/issues/8515) -- Downloadable product is available for download even if order state is set canceled. (fixed in [#8917](https://github.com/magento/magento2/pull/8917)) + * [#8871](https://github.com/magento/magento2/issues/8871) -- Typo in Pull Request Template (fixed in [#8908](https://github.com/magento/magento2/pull/8908)) + * [#3791](https://github.com/magento/magento2/issues/3791) -- Error review when customer is not logged (fixed in [#9001](https://github.com/magento/magento2/pull/9001)) + * [#9017](https://github.com/magento/magento2/issues/9017) -- Duplicate call to $this->getLinkField(); (fixed in [#9057](https://github.com/magento/magento2/pull/9057)) + * [#7498](https://github.com/magento/magento2/issues/7498) -- Grammar Mistake: You don't subscribe to our newsletter. (fixed in [#9080](https://github.com/magento/magento2/pull/9080)) + * [#9078](https://github.com/magento/magento2/issues/9078) -- Does not translate "Track All Shipments" in My Account, view order (fixed in [#9095](https://github.com/magento/magento2/pull/9095)) + * [#5731](https://github.com/magento/magento2/issues/5731) -- FPT label not translatable in the totals on the cart page. (fixed in [#9204](https://github.com/magento/magento2/pull/9204)) + * [#5040](https://github.com/magento/magento2/issues/5040) -- Change 'select' to 'query' in AbstractSearchResult (fixed in [#5043](https://github.com/magento/magento2/pull/5043)) + * [#8761](https://github.com/magento/magento2/issues/8761) -- Popup-Modal not closing on Safari/Windows (fixed in [#8824](https://github.com/magento/magento2/pull/8824)) + * [#7549](https://github.com/magento/magento2/issues/7549) -- Google API Tracking code missing single quote after account number (fixed in [#9084](https://github.com/magento/magento2/pull/9084)) + * [#1146](https://github.com/magento/magento2/issues/1146) -- A few issues when you use /pub as DocumentRoot (fixed in [#9094](https://github.com/magento/magento2/pull/9094)) + * [#2802](https://github.com/magento/magento2/issues/2802) -- Sitemap generation in wrong folder when vhost is connected to pub folder (fixed in [#9094](https://github.com/magento/magento2/pull/9094)) + * [#9200](https://github.com/magento/magento2/issues/9200) -- Create new CLI command: Enable DB logging (fixed in [#9264](https://github.com/magento/magento2/pull/9264)) + * [#9199](https://github.com/magento/magento2/issues/9199) -- Create New CLI command: Generate Varnish VCL file (fixed in [#9286](https://github.com/magento/magento2/pull/9286)) + * [#6822](https://github.com/magento/magento2/issues/6822) -- CSS Minify Option Breaks inline SVG XML (fixed in [#9027](https://github.com/magento/magento2/pull/9027)) + * [#8552](https://github.com/magento/magento2/issues/8552) -- CSS Minifying not compatible with CSS3 calc() function (fixed in [#9027](https://github.com/magento/magento2/pull/9027)) + * [#9236](https://github.com/magento/magento2/issues/9236) -- Upgrade ZF components. Zend_Json (fixed in [#9262](https://github.com/magento/magento2/pull/9262) and [#9261](https://github.com/magento/magento2/pull/9261) and [#9344](https://github.com/magento/magento2/pull/9344) and [#9753](https://github.com/magento/magento2/pull/9753) and [#9754](https://github.com/magento/magento2/pull/9754)) + * [#7523](https://github.com/magento/magento2/issues/7523) -- Zend_Db_Statement_Exception after refreshing browser with empty category (fixed in [#9400](https://github.com/magento/magento2/pull/9400)) + * [#9237](https://github.com/magento/magento2/issues/9237) -- Upgrade ZF components. Zend_Log (fixed in [#9285](https://github.com/magento/magento2/pull/9285)) + * [#9518](https://github.com/magento/magento2/issues/9518) -- Chrome version 58 causes problems with selections in the tinymce editor (fixed in [#9540](https://github.com/magento/magento2/pull/9540)) + * [#9241](https://github.com/magento/magento2/issues/9241) -- Upgrade ZF components. Zend_Wildfire (fixed in [#9622](https://github.com/magento/magento2/pull/9622)) + * [#9239](https://github.com/magento/magento2/issues/9239) -- Upgrade ZF components. Zend_Controller (fixed in [#9622](https://github.com/magento/magento2/pull/9622)) + * [#6455](https://github.com/magento/magento2/issues/6455) -- Cookie Restriction Mode Overlay is cached by Varnish (fixed in [#9711](https://github.com/magento/magento2/pull/9711)) + * [#5596](https://github.com/magento/magento2/issues/5596) -- Google Universal Analytics does not track when Cookie Restriction is enabled (fixed in [#9713](https://github.com/magento/magento2/pull/9713)) + * [#6441](https://github.com/magento/magento2/issues/6441) -- Google Analytics Tracking Code cached by Varnish if Cookie Restriction Settings are active (fixed in [#9713](https://github.com/magento/magento2/pull/9713)) + * [#9242](https://github.com/magento/magento2/issues/9242) -- Upgrade ZF components. Zend_Session (fixed in [#9348](https://github.com/magento/magento2/pull/9348)) + * [#7279](https://github.com/magento/magento2/issues/7279) -- Bill-to Name and Ship-to Name trancated to 20 characters in backend (fixed in [#9654](https://github.com/magento/magento2/pull/9654)) + * [#6151](https://github.com/magento/magento2/issues/6151) -- Can't delete last item in cart if Minimum Order is Enable (fixed in [#9714](https://github.com/magento/magento2/pull/9714)) + * [#4272](https://github.com/magento/magento2/issues/4272) -- v2.0.4 Credit memos with adjustment fees cannot be fully refunded with a second credit memo (fixed in [#9715](https://github.com/magento/magento2/pull/9715)) + * [#6207](https://github.com/magento/magento2/issues/6207) -- Checkbox IDs for Terms and Conditions should be unique in Checkout (fixed in [#9717](https://github.com/magento/magento2/pull/9717)) + * [#7844](https://github.com/magento/magento2/issues/7844) -- Customer with unique attribute can't be saved (fixed in [#9712](https://github.com/magento/magento2/pull/9712)) + * [#6244](https://github.com/magento/magento2/issues/6244) -- Promo code label not used (fixed in [#9721](https://github.com/magento/magento2/pull/9721)) + * [#9771](https://github.com/magento/magento2/issues/9771) -- XML instruction referenceBlock does not allow template= or does it? (fixed in [#9772](https://github.com/magento/magento2/pull/9772)) + * [#8221](https://github.com/magento/magento2/issues/8221) -- Javascript "mixins" doesn't works if 'urlArgs' is in requirejs-config.js (fixed in [#9665](https://github.com/magento/magento2/pull/9665)) + * [#9278](https://github.com/magento/magento2/issues/9278) -- Create new CLI command: Enable Template Hints (fixed in [#9778](https://github.com/magento/magento2/pull/9778)) + * [#9819](https://github.com/magento/magento2/issues/9819) -- Authentication_lock settings cannot be edited in the Backend (fixed in [#9820](https://github.com/magento/magento2/pull/9820)) + * [#9216](https://github.com/magento/magento2/issues/9216) -- Coupon codes not showing in invoice print out (fixed in [#9780](https://github.com/magento/magento2/pull/9780)) + * [#9679](https://github.com/magento/magento2/issues/9679) -- Translation for layered navigation attribute option not working (fixed in [#9873](https://github.com/magento/magento2/pull/9873)) + * [#3060](https://github.com/magento/magento2/issues/3060) -- setup:static-content:deploy, setup:di:compile and deploy:mode:set will not return a non-zero exit code if any error occurs (fixed in [#7780](https://github.com/magento/magento2/pull/7780)) + * [#9421](https://github.com/magento/magento2/issues/9421) -- Inconsistent Gift Options checkbox labels (fixed in [#9525](https://github.com/magento/magento2/pull/9525)) + * [#9805](https://github.com/magento/magento2/issues/9805) -- Static tests in Windows fail due to file path mismatches (fixed in [#9902](https://github.com/magento/magento2/pull/9902)) + * [#9924](https://github.com/magento/magento2/issues/9924) -- Prefix and suffix are not prefilled in the quote shipping address (fixed in [#9925](https://github.com/magento/magento2/pull/9925)) + * [#4237](https://github.com/magento/magento2/issues/4237) -- Cron times in the database have a double timezone correction (fixed in [#9943](https://github.com/magento/magento2/pull/9943)) + * [#9426](https://github.com/magento/magento2/issues/9426) -- Incorrect order date in Orders grid (fixed in [#9941](https://github.com/magento/magento2/pull/9941)) + * [#3380](https://github.com/magento/magento2/issues/3380) -- Remove scheduled jobs after changing cron settings (fixed in [#9957](https://github.com/magento/magento2/pull/9957)) + * [#7504](https://github.com/magento/magento2/issues/7504) -- sitemap image URLs do not match with those on product pages (fixed in [#9082](https://github.com/magento/magento2/pull/9082)) + * [#8732](https://github.com/magento/magento2/issues/8732) -- The country drop-down list display incorrect after upgrade to 2.1.4 in Admin (fixed in [#9429](https://github.com/magento/magento2/pull/9429)) + * [#9680](https://github.com/magento/magento2/issues/9680) -- Adding product configurations uses sku based name (fixed in [#9681](https://github.com/magento/magento2/pull/9681)) + * [#10017](https://github.com/magento/magento2/issues/10017) -- Customer Backend: Confirmation Flag is being overwritten by save of the Customer (fixed in [#9681](https://github.com/magento/magento2/pull/9681)) + * [#2266](https://github.com/magento/magento2/issues/2266) -- Action column menu does not stay over the action column (fixed in [#10082](https://github.com/magento/magento2/pull/10082)) + * [#5381](https://github.com/magento/magento2/issues/5381) -- Cannot create a `etc/view.xml` file with an `images` tag with an attribute `module` other than `Magento_Catalog` (fixed in [#10052](https://github.com/magento/magento2/pull/10052)) + * [#6337](https://github.com/magento/magento2/issues/6337) -- Not able to translate page layout head titles (fixed in [#9992](https://github.com/magento/magento2/pull/9992)) + * [#3872](https://github.com/magento/magento2/issues/3872) -- Slash as category URL suffix gives 404 error on all category pages (fixed in [#10043](https://github.com/magento/magento2/pull/10043)) + * [#4660](https://github.com/magento/magento2/issues/4660) -- Multiple URLs causes duplicated content (fixed in [#10043](https://github.com/magento/magento2/pull/10043)) + * [#4876](https://github.com/magento/magento2/issues/4876) -- Product URL Suffix "/" results in 404 error (fixed in [#10043](https://github.com/magento/magento2/pull/10043)) + * [#8264](https://github.com/magento/magento2/issues/8264) -- Custom URL Rewrite where the request path ends with a forward slash is not matched (fixed in [#10043](https://github.com/magento/magento2/pull/10043)) + * [#6396](https://github.com/magento/magento2/issues/6396) -- Cart Price Rules: Category selection UI for Conditions do not come up. (fixed in [#10094](https://github.com/magento/magento2/pull/10094)) + * [#10124](https://github.com/magento/magento2/issues/10124) -- Wrong order of "width" x "height" when uploading image to admin under Content>Design Config (fixed in [#10126](https://github.com/magento/magento2/pull/10126)) + * [#6594](https://github.com/magento/magento2/issues/6594) -- Magento 2.1 EE: simplexml_load_string() error in custom widget (fixed in [#10151](https://github.com/magento/magento2/pull/10151)) + * [#10148](https://github.com/magento/magento2/issues/10148) -- Developer ACL incorrect (fixed in [#10149](https://github.com/magento/magento2/pull/10149)) + * [#9445](https://github.com/magento/magento2/issues/9445) -- Cart 860 does not contain item 1204 (fixed in [#10059](https://github.com/magento/magento2/pull/10059)) +* GitHub pull requests: + * [#4078](https://github.com/magento/magento2/pull/4078) -- Add logo folder to list of allowed resources (by @thaiphan) + * [#4355](https://github.com/magento/magento2/pull/4355) -- Enforce password and password-confirm as strings (by @nevvermind) + * [#4175](https://github.com/magento/magento2/pull/4175) -- PHP 7 (by @rafaelstz) + * [#4669](https://github.com/magento/magento2/pull/4669) -- Php 5.5 support was removed (by @fooman) + * [#4766](https://github.com/magento/magento2/pull/4766) -- The time has come for splat operator (by @orlangur) + * [#4867](https://github.com/magento/magento2/pull/4867) -- Fix commandExecutor interface mismatch (by @wexo-team) + * [#3705](https://github.com/magento/magento2/pull/3705) -- fix issue #3704 regarding integer attribute values being cast to decimal (by @digitalpianism) + * [#3750](https://github.com/magento/magento2/pull/3750) -- Add ability to show custom error message on Authorizenet place order (by @ytorbyk) + * [#3859](https://github.com/magento/magento2/pull/3859) -- Fixes _toHtml method of Checkout/Block/Cart/Link class (by @ddonnini) + * [#4017](https://github.com/magento/magento2/pull/4017) -- Add the $t to translate the message (by @mamzellejuu) + * [#4239](https://github.com/magento/magento2/pull/4239) -- Attribute Model specifiable in Propertymapper (by @liolemaire) + * [#4583](https://github.com/magento/magento2/pull/4583) -- Fix desktop spelling in lib/web/css #4557 (by @BenSpace48) + * [#2735](https://github.com/magento/magento2/pull/2735) -- Add database port to Magento Setup Model Installer (by @tkn98) + * [#4275](https://github.com/magento/magento2/pull/4275) -- Database port missing in Magento\TestFramework\Db\Mysql #3529 (by @gordonknoppe) + * [#4372](https://github.com/magento/magento2/pull/4372) -- Remove unused property + use ::class (by @nevvermind) + * [#2274](https://github.com/magento/magento2/pull/2274) -- TypeError: this.trigger is not a function (by @daim2k5) + * [#3050](https://github.com/magento/magento2/pull/3050) -- Replace PrototypeJS (by @srenon) + * [#3436](https://github.com/magento/magento2/pull/3436) -- Fix stripped-min-length check (by @avoelkl) + * [#3638](https://github.com/magento/magento2/pull/3638) -- Fix #3637 Add missing catalogsearch layout for swatches. (by @romainruaud) + * [#3633](https://github.com/magento/magento2/pull/3633) -- #768 - fix Missing acl.xml for the Magento_Checkout module (by @tzyganu) + * [#3708](https://github.com/magento/magento2/pull/3708) -- Add 'yyyy' to nomalizedDate method map for adminhtml i18n (by @Amakata) + * [#3973](https://github.com/magento/magento2/pull/3973) -- fix bug on newsletter subscription action when user use an existing email already subscribed (by @manfrinm) + * [#3932](https://github.com/magento/magento2/pull/3932) -- Update Date.php (by @Maddesto) + * [#3907](https://github.com/magento/magento2/pull/3907) -- Update Layout.php (by @Maddesto) + * [#4051](https://github.com/magento/magento2/pull/4051) -- Fix "minimum-length" option of the "validate-length" JS validation (by @adragus-inviqa) + * [#4269](https://github.com/magento/magento2/pull/4269) -- ConfigurableProduct validator, first check if array item exists (by @BlackIkeEagle) + * [#4496](https://github.com/magento/magento2/pull/4496) -- Access element through jQuery (by @sikker) + * [#4631](https://github.com/magento/magento2/pull/4631) -- Previous is spelt incorrectly (by @BenSpace48) + * [#4882](https://github.com/magento/magento2/pull/4882) -- Fix handling is_region_required key as optional (by @komsitr) + * [#5028](https://github.com/magento/magento2/pull/5028) -- Load jquery using requirejs to print page (by @Bartlomiejsz) + * [#1957](https://github.com/magento/magento2/pull/1957) -- Add required interface implementation (by @udovicic) + * [#2492](https://github.com/magento/magento2/pull/2492) -- No translation from "Orders and Returns" footer links (by @mageho) + * [#3749](https://github.com/magento/magento2/pull/3749) -- Stop screen loader on payment error (by @ytorbyk) + * [#4901](https://github.com/magento/magento2/pull/4901) -- Fix XML validation value type of post-code to "boolean" (by @adragus-inviqa) + * [#5066](https://github.com/magento/magento2/pull/5066) -- Add underscore as dependency to quote.js (by @Bartlomiejsz) + * [#5116](https://github.com/magento/magento2/pull/5116) -- Fixes invalid json objects in the order email templates. (by @hostep) + * [#5095](https://github.com/magento/magento2/pull/5095) -- Fix integration test expectation to match count of countries in the database (by @Vinai) + * [#5200](https://github.com/magento/magento2/pull/5200) -- Adminhtml sales view - Escape remoteIp (by @convenient) + * [#4294](https://github.com/magento/magento2/pull/4294) -- Static deploy flags (by @denisristic) + * [#3137](https://github.com/magento/magento2/pull/3137) -- Update nginx.conf.sample (by @thaiphan) + * [#3746](https://github.com/magento/magento2/pull/3746) -- Add HttpInterface methods and add up-casts for type safety (by @Vinai) + * [#4354](https://github.com/magento/magento2/pull/4354) -- Adds test for getDataUsingMethod using digits (by @fooman) + * [#4396](https://github.com/magento/magento2/pull/4396) -- Don't hardcode the Magento_Backend::admin index (by @annybs) + * [#4491](https://github.com/magento/magento2/pull/4491) -- Correction: variable naming for user roles & role id (by @MagePsycho) + * [#4519](https://github.com/magento/magento2/pull/4519) -- Create auth.json.sample (by @rafaelstz) + * [#3688](https://github.com/magento/magento2/pull/3688) -- added partial fix for issue #2617. (by @whizkid79) + * [#3770](https://github.com/magento/magento2/pull/3770) -- Bugfix: Unable to activate search form on phone (by @vovayatsyuk) + * [#4011](https://github.com/magento/magento2/pull/4011) -- Fixed post var name for update attributes (by @Corefix) + * [#2791](https://github.com/magento/magento2/pull/2791) -- Update Template.php (by @liam-wiltshire) + * [#5496](https://github.com/magento/magento2/pull/5496) -- Fixes #5495 (Mobile navigation submenus need two clicks to open) (by @ajpevers) + * [#5725](https://github.com/magento/magento2/pull/5725) -- Fix/translation in validation files (by @dvynograd) + * [#5915](https://github.com/magento/magento2/pull/5915) -- Added missing translation to range grid filter (by @maqlec) + * [#5884](https://github.com/magento/magento2/pull/5884) -- Use alias already defined in requirejs-config.js (by @kassner) + * [#4388](https://github.com/magento/magento2/pull/4388) -- Fixed column description for "website_id" column (by @ikk0) + * [#1628](https://github.com/magento/magento2/pull/1628) -- Add cache of configuration files list (by @otakarmare) + * [#4791](https://github.com/magento/magento2/pull/4791) -- Replace fabpot/php-cs-fixer with friendsofphp/php-cs-fixer (by @GordonLesti) + * [#5983](https://github.com/magento/magento2/pull/5983) -- Fix 'Track your order' i18n. (by @peec) + * [#1988](https://github.com/magento/magento2/pull/1988) -- Use inline elements for inline links (by @chicgeek) + * [#6283](https://github.com/magento/magento2/pull/6283) -- Update elements.xsd (by @aholovan) + * [#1935](https://github.com/magento/magento2/pull/1935) -- Added 'target' attribute to the allowed attributes array for link block (by @fcapua-summa) + * [#4733](https://github.com/magento/magento2/pull/4733) -- Escape Js Quote for layout updates (by @bchatard) + * [#4565](https://github.com/magento/magento2/pull/4565) -- Update Container.php (by @Maddesto) + * [#4845](https://github.com/magento/magento2/pull/4845) -- Set return code for SetModeCommand (by @mc388) + * [#2037](https://github.com/magento/magento2/pull/2037) -- Correct the error message when creating wrong object for block (by @hiephm) + * [#3779](https://github.com/magento/magento2/pull/3779) -- Add dispatching of view_block_abstract_to_html_after event (by @aleron75) + * [#5741](https://github.com/magento/magento2/pull/5741) -- Update AbstractTemplate.php (by @vivek201) + * [#5145](https://github.com/magento/magento2/pull/5145) -- \Magento\CatalogInventory\Model\Stock\Status->getStockId() to return correct value (by @fe-lix-) + * [#6009](https://github.com/magento/magento2/pull/6009) -- Update README.md (by @fooman) + * [#6280](https://github.com/magento/magento2/pull/6280) -- Fixed layout for customer authentication popup (by @rogyar) + * [#6549](https://github.com/magento/magento2/pull/6549) -- Remove obsolete comment in catalog_category_view.xml (by @pdanzinger) + * [#6804](https://github.com/magento/magento2/pull/6804) -- Fix nav not working in mobile (by @slackerzz) + * [#6801](https://github.com/magento/magento2/pull/6801) -- Fixed unclosed span tag in Review module (by @PingusPepan) + * [#5045](https://github.com/magento/magento2/pull/5045) -- Fix runner for JsTestDriver based tests on OS X (by @Vinai) + * [#4958](https://github.com/magento/magento2/pull/4958) -- block newsletter title (by @slackerzz) + * [#5548](https://github.com/magento/magento2/pull/5548) -- Fix error with the WYSIWYG and Greek characters (by @sakisplus) + * [#7256](https://github.com/magento/magento2/pull/7256) -- Fix incorrect table name during catalog product indexing (by @nagno) + * [#6972](https://github.com/magento/magento2/pull/6972) -- Fix issue #6968 since checkout success title is not displayed (by @AngelVazquezArroyo) + * [#4121](https://github.com/magento/magento2/pull/4121) -- Ensure composer.json exists (by @dank00) + * [#4134](https://github.com/magento/magento2/pull/4134) -- Added call to action to compile command error (by @sammarcus) + * [#6974](https://github.com/magento/magento2/pull/6974) -- Fixed calling non exists order address->getCountry to getCountryId (by @magexo) + * [#4088](https://github.com/magento/magento2/pull/4088) -- Fix newsletter queue subscribers adding performance (by @DariuszMaciejewski) + * [#6952](https://github.com/magento/magento2/pull/6952) -- Update AccountLock.php (by @klict) + * [#5465](https://github.com/magento/magento2/pull/5465) -- Fix Magento\Review\Model\ResourceModel\Rating\Option not instantiable in setup scripts (by @adragus-inviqa) + * [#7799](https://github.com/magento/magento2/pull/7799) -- Remove duplicate code from template file. (by @dverkade) + * [#7919](https://github.com/magento/magento2/pull/7919) -- Using Dynamic Protocol Concatination (by @brobie) + * [#7921](https://github.com/magento/magento2/pull/7921) -- Removed un-used static version rewrite rule in nginx.conf.sample (by @careys7) + * [#8019](https://github.com/magento/magento2/pull/8019) -- added fr_CH to allowed locales list (by @annapivniak) + * [#8082](https://github.com/magento/magento2/pull/8082) -- issue 8080: Cron configuration loading from DB doesn't work (by @ytorbyk) + * [#8062](https://github.com/magento/magento2/pull/8062) -- Fix theme source model used in widget grid (by @Zefiryn) + * [#8232](https://github.com/magento/magento2/pull/8232) -- Fix notice during DI compilation (by @qrz-io) + * [#8306](https://github.com/magento/magento2/pull/8306) -- Remove warning from setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php (by @dmanners) + * [#8185](https://github.com/magento/magento2/pull/8185) -- Fix #7461 using the simplest approach for now (by @lazyguru) + * [#8183](https://github.com/magento/magento2/pull/8183) -- [BUGFIX] Fixed the credit memo guest email (by @nickgraz) + * [#8161](https://github.com/magento/magento2/pull/8161) -- Return focus to search input after closing autocomplete dropdown (by @evktalo) + * [#8155](https://github.com/magento/magento2/pull/8155) -- Correct php doc (by @angelomaragna) + * [#8341](https://github.com/magento/magento2/pull/8341) -- Use better function for 'Continue Shopping' url (by @dmatthew) + * [#8336](https://github.com/magento/magento2/pull/8336) -- fixing time format on admin sales order grid (by @magexo) + * [#8327](https://github.com/magento/magento2/pull/8327) -- Change order of parameters passed to LogicException in AbstractTemplate.php (by @bery) + * [#8307](https://github.com/magento/magento2/pull/8307) -- Allow digits in communication class type definition (by @cmuench) + * [#8354](https://github.com/magento/magento2/pull/8354) -- Display correctly "Add" button label for the block class \Magento\Con… (by @diglin) + * [#8246](https://github.com/magento/magento2/pull/8246) -- Fixes #7723 - saving multi select field in UI component form (by @Zefiryn) + * [#8353](https://github.com/magento/magento2/pull/8353) -- Replace into the layout adminhtml_order_shipment_new.xml block alias … (by @diglin) + * [#8395](https://github.com/magento/magento2/pull/8395) -- Added "editPost" action for customer sections.xml (by @rossluk) + * [#8383](https://github.com/magento/magento2/pull/8383) -- Issue/8382 (by @PascalBrouwers) + * [#8151](https://github.com/magento/magento2/pull/8151) -- Remove "<2.7" constraint on symfony/console (by @nicolas-grekas) + * [#8416](https://github.com/magento/magento2/pull/8416) -- Use configured product attributes in wishlist item collection (by @schmengler) + * [#8414](https://github.com/magento/magento2/pull/8414) -- Replace toGMTString with toUTCString (by @schmengler) + * [#8419](https://github.com/magento/magento2/pull/8419) -- Use page result instead of rendering layout directly in controllers (by @schmengler) + * [#8331](https://github.com/magento/magento2/pull/8331) -- Remove Zend1 Json from Magento Captcha module (by @dmanners) + * [#8252](https://github.com/magento/magento2/pull/8252) -- Customer account edit form: additional info block visible (by @Sylvco) + * [#8405](https://github.com/magento/magento2/pull/8405) -- Remove the unused Ajax/Serializer.php class (by @dmanners) + * [#8402](https://github.com/magento/magento2/pull/8402) -- Remove Zend1 db from captcha module (by @dmanners) + * [#8463](https://github.com/magento/magento2/pull/8463) -- Remove outdated comment (by @evktalo) + * [#8456](https://github.com/magento/magento2/pull/8456) -- Specifically ask for the Json Serializer object Mage Braintree (by @dmanners) + * [#8446](https://github.com/magento/magento2/pull/8446) -- Fix "each()" function call on potentially invalid data (by @giacmir) + * [#5928](https://github.com/magento/magento2/pull/5928) -- prevent double shipping method selection (by @danslo) + * [#8217](https://github.com/magento/magento2/pull/8217) -- Update DataProvider.php (by @redelschaap) + * [#8413](https://github.com/magento/magento2/pull/8413) -- Load translations for area, fixes #8412 (by @fooman) + * [#8356](https://github.com/magento/magento2/pull/8356) -- Remove Zend1 captcha from Magento2 Captcha module (by @dmanners) + * [#8474](https://github.com/magento/magento2/pull/8474) -- Fix for https://github.com/magento/magento2/issues/8287 (by @ericrisler) + * [#8487](https://github.com/magento/magento2/pull/8487) -- Mark the STDO test as skipped (by @dmanners) + * [#3155](https://github.com/magento/magento2/pull/3155) -- Remove unused variables in unit test (by @fooman) + * [#6049](https://github.com/magento/magento2/pull/6049) -- Added typo correction for table name comment (by @atishgoswami) + * [#4370](https://github.com/magento/magento2/pull/4370) -- update Catalog Helper (by @barbarich-p) + * [#4106](https://github.com/magento/magento2/pull/4106) -- Adds support for purging varnish cache based on an X-Pool header (by @davidalger) + * [#7982](https://github.com/magento/magento2/pull/7982) -- Add bin/magento commands to list store/website data (by @convenient) + * [#8434](https://github.com/magento/magento2/pull/8434) -- Problem on mobile when catalog gallery allowfullscreen is false #5808 (by @Crossmotion) + * [#8417](https://github.com/magento/magento2/pull/8417) -- add anonymize ip option for google analytics (by @thomas-villagers) + * [#8498](https://github.com/magento/magento2/pull/8498) -- Product->save() shouldn't be called directly (by @stansm) + * [#8581](https://github.com/magento/magento2/pull/8581) -- Fixed overly bold icons in Firefox Mac (by @TandyCorp) + * [#8481](https://github.com/magento/magento2/pull/8481) -- Remove zend json checkout (by @dmanners) + * [#8518](https://github.com/magento/magento2/pull/8518) -- Change link text from "Report Bugs" to "Report a Bug" (by @Zifius) + * [#8514](https://github.com/magento/magento2/pull/8514) -- Add missing name attributes to catalog_product_view layout xml (by @andrewnoble) + * [#8505](https://github.com/magento/magento2/pull/8505) -- Update the Adminhtml image tree JSON (by @dmanners) + * [#8467](https://github.com/magento/magento2/pull/8467) -- Fix for magento/magento2#8392 (by @kirashet666) + * [#8617](https://github.com/magento/magento2/pull/8617) -- Remove Zend_Json from Customer module (by @dmanners) + * [#8609](https://github.com/magento/magento2/pull/8609) -- [PHP 7.1 Compatibility] Void became a reserved word (by @orlangur) + * [#8611](https://github.com/magento/magento2/pull/8611) -- Fix #8308: test setup/src/Magento/Setup/Test/Unit/Model/Cron/JobSetCacheTest.php crashes in debug mode (by @orlangur) + * [#8610](https://github.com/magento/magento2/pull/8610) -- Fix #8315: test setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/Csv/StdoTest.php crashes in debug mode (by @orlangur) + * [#7339](https://github.com/magento/magento2/pull/7339) -- Fix/xml parser issue (by @dvynograd) + * [#7345](https://github.com/magento/magento2/pull/7345) -- Fix typo (by @mpchadwick) + * [#7406](https://github.com/magento/magento2/pull/7406) -- MAGETWO-60448 (by @vasilii-b) + * [#8000](https://github.com/magento/magento2/pull/8000) -- Set static html fragments as cacheable (by @paveq) + * [#8077](https://github.com/magento/magento2/pull/8077) -- Type cast (by @deriknel) + * [#8278](https://github.com/magento/magento2/pull/8278) -- bug #8277 fixing bug with https downloading. (by @clementbeudot) + * [#8420](https://github.com/magento/magento2/pull/8420) -- Refactor contact module (by @schmengler) + * [#8519](https://github.com/magento/magento2/pull/8519) -- Make "is_required" and "is_visible" properties of telephone, company and fax attributes of addresses configurable (by @avstudnitz) + * [#8537](https://github.com/magento/magento2/pull/8537) -- Fixed missing echo statement in checkout cart coupon template (by @FrankRuis) + * [#8602](https://github.com/magento/magento2/pull/8602) -- Fixed crosssells count always null (by @koenner01) + * [#8593](https://github.com/magento/magento2/pull/8593) -- Fix #7371 (by @rossluk) + * [#8642](https://github.com/magento/magento2/pull/8642) -- Update Save.php (by @josefbehr) + * [#8633](https://github.com/magento/magento2/pull/8633) -- Fix #8632 (by @koenner01) + * [#8513](https://github.com/magento/magento2/pull/8513) -- Replace ext name spaces with dashes (as composer does when storing) (by @AydinHassan) + * [#8668](https://github.com/magento/magento2/pull/8668) -- Add correct return type in order service (by @cmuench) + * [#8677](https://github.com/magento/magento2/pull/8677) -- Fixed Doc Block for the dispatch method of the Rest Controller (by @vrann) + * [#3585](https://github.com/magento/magento2/pull/3585) -- Remove duplicate switchIsFilterable (by @GordonLesti) + * [#8132](https://github.com/magento/magento2/pull/8132) -- Fix incorrect schema definition for price (by @unfunco) + * [#2275](https://github.com/magento/magento2/pull/2275) -- Updated links to point to http://devdocs.magento.com/guides/v2.0 (by @wjarka) + * [#8683](https://github.com/magento/magento2/pull/8683) -- Fixed return type of OrderRepository::getList (by @clementbeudot) + * [#8682](https://github.com/magento/magento2/pull/8682) -- Remove unused argument (by @mfdj) + * [#2185](https://github.com/magento/magento2/pull/2185) -- unused variable (by @barbarich-p) + * [#7894](https://github.com/magento/magento2/pull/7894) -- Fix #7893 (by @andreaspenz) + * [#8623](https://github.com/magento/magento2/pull/8623) -- Fix check for boolean product attributes (by @TKlement) + * [#8678](https://github.com/magento/magento2/pull/8678) -- Fixed Issue #8425 (by @DavidLambauer) + * [#8711](https://github.com/magento/magento2/pull/8711) -- Remove Zend_Json from the persistent module remember me status observer (by @dmanners) + * [#8706](https://github.com/magento/magento2/pull/8706) -- Remove Zend_Json from the unit test in the CustomerImportExport module (by @dmanners) + * [#8723](https://github.com/magento/magento2/pull/8723) -- Add active class to search form wrapper for more theming flexibility (by @andrewkett) + * [#8768](https://github.com/magento/magento2/pull/8768) -- Fix issue #8709 (by @renatocason) + * [#8762](https://github.com/magento/magento2/pull/8762) -- Fix issue #2558 (by @renatocason) + * [#8759](https://github.com/magento/magento2/pull/8759) -- magento/magento2#8618: Apply coupon code button issue on Checkout (by @mcspronko) + * [#8776](https://github.com/magento/magento2/pull/8776) -- Range filter doesn't works with 0 values in admin #7103 (by @giacmir) + * [#7611](https://github.com/magento/magento2/pull/7611) -- Update catalog_rule_form.xml edit labels (by @fernandofauth) + * [#7650](https://github.com/magento/magento2/pull/7650) -- Add host header to varnish cache purge request (by @m0zziter) + * [#7914](https://github.com/magento/magento2/pull/7914) -- FPC JS - Fix for CORS issue (by @OZZlE) + * [#8013](https://github.com/magento/magento2/pull/8013) -- Update resets.html (by @ryantfowler) + * [#8041](https://github.com/magento/magento2/pull/8041) -- Fix USPS Priority Mail to Canada (by @jaywilliams) + * [#8014](https://github.com/magento/magento2/pull/8014) -- Update _resets.less (by @ryantfowler) + * [#8053](https://github.com/magento/magento2/pull/8053) -- Strict checking types during di compilation (by @michalderlatka) + * [#8048](https://github.com/magento/magento2/pull/8048) -- Consistent HTML tags and breaks (by @chickenland) + * [#8056](https://github.com/magento/magento2/pull/8056) -- update allowed container tags (by @steros) + * [#8158](https://github.com/magento/magento2/pull/8158) -- Fix OAuth request helper to support Authorization header value parsing with non-leading OAuth key (by @careys7) + * [#8589](https://github.com/magento/magento2/pull/8589) -- Set correct primary keys for temporary tables in product flat indexer (by @jarnooravainen) + * [#8736](https://github.com/magento/magento2/pull/8736) -- Update Stock.php (by @Corefix) + * [#8119](https://github.com/magento/magento2/pull/8119) -- Throw exception for invalid (missing) template in dev mode (by @convenient) + * [#8690](https://github.com/magento/magento2/pull/8690) -- Fix SALES_ORDER_TAX_ITEM_TAX_ID_ITEM_ID duplicates (by @mimarcel) + * [#8743](https://github.com/magento/magento2/pull/8743) -- Validate PHP classnames in di.xml files via schema (by @ktomk) + * [#8714](https://github.com/magento/magento2/pull/8714) -- Quote values in IN() predicate to avoid cast issues (by @xi-ao) + * [#8835](https://github.com/magento/magento2/pull/8835) -- Replace Zend_Json from the Magento Review module (by @dmanners) + * [#8832](https://github.com/magento/magento2/pull/8832) -- Replace Zend_Json from the Magento Quote module (by @dmanners) + * [#8839](https://github.com/magento/magento2/pull/8839) -- Rename to DataObjectTest (by @mfdj) + * [#2199](https://github.com/magento/magento2/pull/2199) -- Rename admin sidebar Products to Catalog #2060 (by @markoshust) + * [#5620](https://github.com/magento/magento2/pull/5620) -- Remove superfluous method call. (by @maksim-grib) + * [#6767](https://github.com/magento/magento2/pull/6767) -- Removed setting routerlist twice. (by @dverkade) + * [#6257](https://github.com/magento/magento2/pull/6257) -- Fix "none" is not meant to be translated in catalog_product_view layout file (by @azanelli) + * [#7645](https://github.com/magento/magento2/pull/7645) -- Storecode in url changed from default to all (by @bartlubbersen) + * [#7864](https://github.com/magento/magento2/pull/7864) -- Bugfix: Fix for not respected alternative headers in maintenance mode (by @cmuench) + * [#7794](https://github.com/magento/magento2/pull/7794) -- Check return value for getProduct() in getPrice(). (by @pbaylies) + * [#8052](https://github.com/magento/magento2/pull/8052) -- Update PurgeCache.php (by @bery) + * [#8130](https://github.com/magento/magento2/pull/8130) -- Update Options.php (by @redelschaap) + * [#8079](https://github.com/magento/magento2/pull/8079) -- FIX Backend mass delete Sql error (by @asubit) + * [#7234](https://github.com/magento/magento2/pull/7234) -- Lossless images optimalization (by @Igloczek) + * [#8685](https://github.com/magento/magento2/pull/8685) -- [PSR-2 Compliance] Fix #8612: Hundreds of PHPCS-based static tests violations in mainline (by @orlangur) + * [#7568](https://github.com/magento/magento2/pull/7568) -- Minor Update Mysql.php (by @WJdeBaas) + * [#7598](https://github.com/magento/magento2/pull/7598) -- Bugfix for _getProductCollection on a product page (by @evgk) + * [#8886](https://github.com/magento/magento2/pull/8886) -- Fix typo in app/code/Magento/Email/Test/Unit/Model/TemplateTest.php (by @orlangur) + * [#5029](https://github.com/magento/magento2/pull/5029) -- Add default swatch_image placeholder (by @Bartlomiejsz) + * [#6838](https://github.com/magento/magento2/pull/6838) -- Removed preference from di.xml (by @dverkade) + * [#7578](https://github.com/magento/magento2/pull/7578) -- Don't skip attribute options with a value of 0 from the layered navigation (by @dcabrejas) + * [#7615](https://github.com/magento/magento2/pull/7615) -- Fixes duplicate messages shown when adding items to cart (by @comdiler) + * [#7590](https://github.com/magento/magento2/pull/7590) -- Reset skippedRows array in clear method (by @ccasciotti) + * [#7701](https://github.com/magento/magento2/pull/7701) -- Allows you to have 0 as a option (by @Corefix) + * [#7748](https://github.com/magento/magento2/pull/7748) -- Remove _required class from ZIP field (by @dmitryshkolnikov) + * [#7743](https://github.com/magento/magento2/pull/7743) -- MAGETWO-61828: Text swatch "zero" not shown (by @oroskodias) + * [#8883](https://github.com/magento/magento2/pull/8883) -- Fix a typo (by @evgk) + * [#7541](https://github.com/magento/magento2/pull/7541) -- Added "Add / update" comment. Update was missing. (by @gastondisacco) + * [#8808](https://github.com/magento/magento2/pull/8808) -- Change link text from "Report a Bug" to "Report an Issue" (by @Zifius) + * [#8907](https://github.com/magento/magento2/pull/8907) -- Removed unused dependencys (by @ikrs) + * [#8910](https://github.com/magento/magento2/pull/8910) -- Prevent overwriting grunt config (by @Igloczek) + * [#7562](https://github.com/magento/magento2/pull/7562) -- Update AbstractCart.php (by @Corefix) + * [#8766](https://github.com/magento/magento2/pull/8766) -- fix $childrenWrapClass never used (by @slackerzz) + * [#8822](https://github.com/magento/magento2/pull/8822) -- Upgrade PHP CS Fixer to v2 (by @keradus) + * [#8901](https://github.com/magento/magento2/pull/8901) -- Update design_config_form.xml (by @WaPoNe) + * [#8896](https://github.com/magento/magento2/pull/8896) -- Fix all words without " (by @rafaelstz) + * [#8912](https://github.com/magento/magento2/pull/8912) -- magento/magento2#8590: M2.1.4 : ArrayBackend cannot save and Added country regions for Croatia (by @nkajic) + * [#8909](https://github.com/magento/magento2/pull/8909) -- magento/magento2#8863: Malta zipcode validation incomplete (by @mmacinko) + * [#2829](https://github.com/magento/magento2/pull/2829) -- Update final_price.phtml (by @liam-wiltshire) + * [#3869](https://github.com/magento/magento2/pull/3869) -- Optional PHP7.0 Socket Path (by @digimix) + * [#4854](https://github.com/magento/magento2/pull/4854) -- Fix admin menu bug (by @NikolasSumrak) + * [#6400](https://github.com/magento/magento2/pull/6400) -- Fix for Product Attribute's Conditions (by @NikolasSumrak) + * [#6677](https://github.com/magento/magento2/pull/6677) -- Update addCategoriesFilter to return $this (by @maciekpaprocki) + * [#6894](https://github.com/magento/magento2/pull/6894) -- Fixed phpseclib\Net\SFTP constants used in write() method (by @federivo) + * [#7117](https://github.com/magento/magento2/pull/7117) -- Add de_LU and fr_LU languages for Luxembourg (by @ajpevers) + * [#8915](https://github.com/magento/magento2/pull/8915) -- magento/magetno2#8676: I can not translate title attribute in xml fil… (by @DanijelPotocki) + * [#5446](https://github.com/magento/magento2/pull/5446) -- Fix Rest Api - GET /V1/configurable-products/{sku}/children not giving ID in response (by @k-andrew) + * [#6321](https://github.com/magento/magento2/pull/6321) -- Add missing return in resolveShippingRates (by @GordonLesti) + * [#6707](https://github.com/magento/magento2/pull/6707) -- Issue/6706 (by @PascalBrouwers) + * [#6794](https://github.com/magento/magento2/pull/6794) -- Move cache to instance of price box widget (by @JamesonNetworks) + * [#6856](https://github.com/magento/magento2/pull/6856) -- Issue/6855 (by @PascalBrouwers) + * [#6837](https://github.com/magento/magento2/pull/6837) -- Removed argument from di.xml (by @dverkade) + * [#6878](https://github.com/magento/magento2/pull/6878) -- Media attribute folder to be ignored (by @rafaelstz) + * [#6914](https://github.com/magento/magento2/pull/6914) -- Put the contants in the same docblock together (by @dverkade) + * [#6913](https://github.com/magento/magento2/pull/6913) -- Removed commented out line for ignoring coding standards (by @dverkade) + * [#7142](https://github.com/magento/magento2/pull/7142) -- [Framework][Translate] Changed translation order to allow language (by @JSchlarb) + * [#7352](https://github.com/magento/magento2/pull/7352) -- Product export duplicate rows for product with html special chars in data. Bugfix for #7350 (by @comdiler) + * [#8445](https://github.com/magento/magento2/pull/8445) -- Changed name of dispatched object in delete event (by @clementbeudot) + * [#8959](https://github.com/magento/magento2/pull/8959) -- Fixes #2461 (by @ajpevers) + * [#8950](https://github.com/magento/magento2/pull/8950) -- Remove deadcode (by @jipjop) + * [#3469](https://github.com/magento/magento2/pull/3469) -- respect depends declaration in system.xml for form element (by @phoenix-bjoern) + * [#5362](https://github.com/magento/magento2/pull/5362) -- Make CMS directive filtering error be more generic (by @erikhansen) + * [#6354](https://github.com/magento/magento2/pull/6354) -- Newsletter Email fix (by @inettman) + * [#6744](https://github.com/magento/magento2/pull/6744) -- add-product-image-label-bug (by @markpol) + * [#6773](https://github.com/magento/magento2/pull/6773) -- Allow to insert Persian characters for attributes! (by @sIiiS) + * [#6779](https://github.com/magento/magento2/pull/6779) -- Changed documentation of the cache variable (by @dverkade) + * [#6775](https://github.com/magento/magento2/pull/6775) -- Changed constructor to use interface instead of direct classname (by @dverkade) + * [#6971](https://github.com/magento/magento2/pull/6971) -- fix #6961 (by @razbakov) + * [#7097](https://github.com/magento/magento2/pull/7097) -- You -> Your (by @avitex) + * [#7414](https://github.com/magento/magento2/pull/7414) -- Fix typo (by @convenient) + * [#8005](https://github.com/magento/magento2/pull/8005) -- Prevent cross origin iframe content reading (by @Igloczek) + * [#8753](https://github.com/magento/magento2/pull/8753) -- Added Translation for required Data-Attribute (by @DavidLambauer) + * [#8778](https://github.com/magento/magento2/pull/8778) -- magento/magento2: #8765 (by @cavalier79) + * [#8914](https://github.com/magento/magento2/pull/8914) -- magento/magetno2#8529:Typo in error message "Table is not exists" (by @bvrbanec) + * [#2448](https://github.com/magento/magento2/pull/2448) -- Fix Inconsistency (by @srenon) + * [#2093](https://github.com/magento/magento2/pull/2093) -- Remove call to load() in getChildrenCategories method (by @davidalger) + * [#4179](https://github.com/magento/magento2/pull/4179) -- fix typo in Magento_Catalog toolbar less source (by @gil--) + * [#5078](https://github.com/magento/magento2/pull/5078) -- Rename $websiteId to $scopeId (by @flancer64) + * [#5207](https://github.com/magento/magento2/pull/5207) -- Table name fix - rule_customer to salesrule_customer (by @Bartlomiejsz) + * [#5858](https://github.com/magento/magento2/pull/5858) -- Save shipping discount in $total (by @flancer64) + * [#6811](https://github.com/magento/magento2/pull/6811) -- Unable to save subscription checkbox on Admin customer save (by @rich1990) + * [#6839](https://github.com/magento/magento2/pull/6839) -- Changed constructor to use an interface (by @dverkade) + * [#6912](https://github.com/magento/magento2/pull/6912) -- Changed module readme text (by @dverkade) + * [#7262](https://github.com/magento/magento2/pull/7262) -- Replace boolean cast to be able to disable frame, aspect ratio, trans… (by @joost-florijn-kega) + * [#7762](https://github.com/magento/magento2/pull/7762) -- change getId() to getPaymentId() (by @HirokazuNishi) + * [#8769](https://github.com/magento/magento2/pull/8769) -- magento/magento2#7860: Invalid comment for the method __order in Mage… (by @mcspronko) + * [#8917](https://github.com/magento/magento2/pull/8917) -- imagento/magento2#8515: Downloadable product is available for downloa… (by @nazarpadalka) + * [#8908](https://github.com/magento/magento2/pull/8908) -- magento/magento2#8871: Typo in Pull Request Template (by @tomislavsantek) + * [#8989](https://github.com/magento/magento2/pull/8989) -- Remove redundant check in if-condition (by @FabianLauer) + * [#8953](https://github.com/magento/magento2/pull/8953) -- Log level for caught exception (by @flancer64) + * [#8994](https://github.com/magento/magento2/pull/8994) -- Syntax fix (by @rafaelstz) + * [#1895](https://github.com/magento/magento2/pull/1895) -- Fix relative template references in individual Magento modules (by @davidalger) + * [#4224](https://github.com/magento/magento2/pull/4224) -- Update get.php (by @thaiphan) + * [#6567](https://github.com/magento/magento2/pull/6567) -- Always skip hidden files (by @quickshiftin) + * [#6989](https://github.com/magento/magento2/pull/6989) -- Allow extending config variables (by @adragus-inviqa) + * [#7218](https://github.com/magento/magento2/pull/7218) -- Set store id on block only when empty (by @dank00) + * [#7161](https://github.com/magento/magento2/pull/7161) -- Fix a bug resulting in incorrect offsets with dynamic row drag-n-drop functionality (by @navarr) + * [#7664](https://github.com/magento/magento2/pull/7664) -- Fix for "Stock Status" field not disappearing in admin when "Manage Stock" = No (by @comdiler) + * [#8812](https://github.com/magento/magento2/pull/8812) -- Fix count SQL on products sold collection (by @jameshalsall) + * [#8991](https://github.com/magento/magento2/pull/8991) -- Update AbstractModel.php (by @redelschaap) + * [#9001](https://github.com/magento/magento2/pull/9001) -- Fix #3791 (by @quienti) + * [#8998](https://github.com/magento/magento2/pull/8998) -- Fixed empty submenu group in backend menu (by @vovayatsyuk) + * [#8928](https://github.com/magento/magento2/pull/8928) -- Stop $this->validColumnNames array from growing and growing (by @jalogut) + * [#4149](https://github.com/magento/magento2/pull/4149) -- Fix wording of downloadable Products (by @bh-ref) + * [#4674](https://github.com/magento/magento2/pull/4674) -- Refactor repeating logic (by @nevvermind) + * [#4501](https://github.com/magento/magento2/pull/4501) -- Add Crowdin badge - official translations (by @piotrekkaminski) + * [#6243](https://github.com/magento/magento2/pull/6243) -- Set getConnection() as public method (by @flancer64) + * [#6250](https://github.com/magento/magento2/pull/6250) -- Return the same data on exit (by @flancer64) + * [#4844](https://github.com/magento/magento2/pull/4844) -- Fix typo (by @orlangur) + * [#4874](https://github.com/magento/magento2/pull/4874) -- Make NL zipcode pattern less strict (by @tdgroot) + * [#5400](https://github.com/magento/magento2/pull/5400) -- Privacy Policy translation (fixes Issue #2951) (by @MindConflicts) + * [#5671](https://github.com/magento/magento2/pull/5671) -- Fix small typo (by @adragus-inviqa) + * [#6132](https://github.com/magento/magento2/pull/6132) -- Remove an extra space while clearing indexed stock items. (by @nntoan) + * [#6840](https://github.com/magento/magento2/pull/6840) -- Removed unused variable $routerId (by @dverkade) + * [#6834](https://github.com/magento/magento2/pull/6834) -- Removed default values for title, meta description, better labels. (by @paales) + * [#7124](https://github.com/magento/magento2/pull/7124) -- Code documentation corrections (by @evktalo) + * [#7294](https://github.com/magento/magento2/pull/7294) -- Let less continue compilation if file is empty (by @timo-schmid) + * [#8648](https://github.com/magento/magento2/pull/8648) -- Remove the copyright year from file headers (by @jameshalsall) + * [#4897](https://github.com/magento/magento2/pull/4897) -- Schedule generation was broken (by @ajpevers) + * [#5503](https://github.com/magento/magento2/pull/5503) -- ACL titles are swapped (by @yireo) + * [#7344](https://github.com/magento/magento2/pull/7344) -- Fix checking active carrier against store (by @torreytsui) + * [#7221](https://github.com/magento/magento2/pull/7221) -- Typo fix (by @gastondisacco) + * [#8982](https://github.com/magento/magento2/pull/8982) -- Move blank theme dependencies out of Magento_Theme requirejs-config (by @mikeoloughlin) + * [#8930](https://github.com/magento/magento2/pull/8930) -- Improved check when CategoryProcessor attempts to create a new category (by @ccasciotti) + * [#8923](https://github.com/magento/magento2/pull/8923) -- Check of null result value in swatch-renderer.js (by @aholovan) + * [#9013](https://github.com/magento/magento2/pull/9013) -- Added JS Jasmine tests to Travis CI (by @Igloczek) + * [#9039](https://github.com/magento/magento2/pull/9039) -- Translation in adminhtml Import form (by @Nolwennig) + * [#9034](https://github.com/magento/magento2/pull/9034) -- Invalidate and refresh customer data sections on HTTP DELETE requests (by @Vinai) + * [#6322](https://github.com/magento/magento2/pull/6322) -- Admin product edit block getHeader is not used (by @kassner) + * [#7045](https://github.com/magento/magento2/pull/7045) -- In case something wrong with underlying products (by @Will-I4M) + * [#8568](https://github.com/magento/magento2/pull/8568) -- Fix quote's outdated shipping address overwriting PayPal Express shipping address (by @torreytsui) + * [#9057](https://github.com/magento/magento2/pull/9057) -- remove duplicate method call (#9017) (by @will-b) + * [#9080](https://github.com/magento/magento2/pull/9080) -- Fix grammar mistakes with subscriptions - fixes #7498 (by @sambolek) + * [#9076](https://github.com/magento/magento2/pull/9076) -- Fix typo (by @PieterCappelle) + * [#9061](https://github.com/magento/magento2/pull/9061) -- Empty resolvedScopeCodes when config cache is cleaned (by @andreas-wickberg-vaimo) + * [#9044](https://github.com/magento/magento2/pull/9044) -- Remove superfluous character in class (by @tkn98) + * [#9095](https://github.com/magento/magento2/pull/9095) -- Added translation to label argument xml. (by @mrkhoa99) + * [#9108](https://github.com/magento/magento2/pull/9108) -- Redundant expression */1 in crontab.xml (by @giacmir) + * [#9170](https://github.com/magento/magento2/pull/9170) -- Corrected class name in documentation. (by @dfelton) + * [#6778](https://github.com/magento/magento2/pull/6778) -- Changed locator class name for ObjectManager (by @dverkade) + * [#7556](https://github.com/magento/magento2/pull/7556) -- Fix merging nested in view.xml (by @torreytsui) + * [#8903](https://github.com/magento/magento2/pull/8903) -- Include Reply-To name in contact form email header (by @josephmcdermott) + * [#9140](https://github.com/magento/magento2/pull/9140) -- remove duplicate calls to initObjectManager in bootstrap class (by @sivajik34) + * [#9133](https://github.com/magento/magento2/pull/9133) -- Favicon folder added on gitignore (by @rafaelstz) + * [#9204](https://github.com/magento/magento2/pull/9204) -- FPT label not translatable in the totals on the cart page. (by @okorshenko) + * [#5043](https://github.com/magento/magento2/pull/5043) -- Change 'select' to 'query' in props (by @flancer64) + * [#5367](https://github.com/magento/magento2/pull/5367) -- Change pub/.htaccess MAGE_MODE comment (by @erikhansen) + * [#5742](https://github.com/magento/magento2/pull/5742) -- Collection walk method bug fix when specific callback function (by @jalogut) + * [#6385](https://github.com/magento/magento2/pull/6385) -- Replace EE License Placeholder text with filename (by @navarr) + * [#6443](https://github.com/magento/magento2/pull/6443) -- Refactor Option ResourceModel to allow price supporting types to be intercepted (by @navarr) + * [#6772](https://github.com/magento/magento2/pull/6772) -- Changed constructor to use an interface (by @dverkade) + * [#6910](https://github.com/magento/magento2/pull/6910) -- Good practice, license in readme file (by @rafaelstz) + * [#7506](https://github.com/magento/magento2/pull/7506) -- Add configurations for change email templates (by @kassner) + * [#7464](https://github.com/magento/magento2/pull/7464) -- Is Allowed Guest Checkout (by @hungvt) + * [#7900](https://github.com/magento/magento2/pull/7900) -- Setting proper resource name (by @ddattee) + * [#8462](https://github.com/magento/magento2/pull/8462) -- Fix product option files not copying to order dir. (by @evktalo) + * [#8824](https://github.com/magento/magento2/pull/8824) -- Popup-Modal not closing on Safari/Windows (by @Hansschouten) + * [#9062](https://github.com/magento/magento2/pull/9062) -- Upgrade JS dependencies (by @Igloczek) + * [#9084](https://github.com/magento/magento2/pull/9084) -- Fix Google Analytics typo in printing Account Number, fixes #7549 (by @sambolek) + * [#9112](https://github.com/magento/magento2/pull/9112) -- Fix attribute label on product page at different store views (by @tufahu) + * [#9103](https://github.com/magento/magento2/pull/9103) -- Cli info di (by @springerin) + * [#9165](https://github.com/magento/magento2/pull/9165) -- Improved text of exception message in case of error in module's composer.json (by @vovayatsyuk) + * [#9131](https://github.com/magento/magento2/pull/9131) -- Fix to allow Zend_Db_Expr as column default (by @scottsb) + * [#9221](https://github.com/magento/magento2/pull/9221) -- Avoid: Undefined index: value in app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php on line 157 in Ajax return (by @mhauri) + * [#9215](https://github.com/magento/magento2/pull/9215) -- Remove unused and invalid method (by @adragus-inviqa) + * [#9210](https://github.com/magento/magento2/pull/9210) -- Do not di:compile tests/ folder (by @kassner) + * [#5325](https://github.com/magento/magento2/pull/5325) -- update url guide to v2.0 (by @sIiiS) + * [#6452](https://github.com/magento/magento2/pull/6452) -- Fix Login Popup broken on iPad portrait (by @ihor-sviziev) + * [#9234](https://github.com/magento/magento2/pull/9234) -- Fix indentation in pub/.htaccess file (by @erikhansen) + * [#6266](https://github.com/magento/magento2/pull/6266) -- Change commit to rollBack on fail (by @flancer64) + * [#6792](https://github.com/magento/magento2/pull/6792) -- Make a hardcoded value in Customizable Options interceptable (by @navarr) + * [#9094](https://github.com/magento/magento2/pull/9094) -- Issue #2802, #1146: Fixing sitemap generation folder (by @JosephMaxwell) + * [#9124](https://github.com/magento/magento2/pull/9124) -- Solve issues with API (by @paales) + * [#9247](https://github.com/magento/magento2/pull/9247) -- Fixed layout handle for cms page (by @simpleadm) + * [#9257](https://github.com/magento/magento2/pull/9257) -- Fixed coding standard violations in the Framework\Message namespace (by @dverkade) + * [#9254](https://github.com/magento/magento2/pull/9254) -- Fixed coding standard violations in the Framework\Encryption namespace (by @dverkade) + * [#9253](https://github.com/magento/magento2/pull/9253) -- Fixed coding standard violations in the Framework\Event namespace (by @dverkade) + * [#9250](https://github.com/magento/magento2/pull/9250) -- Fixed coding standard violations in the Framework\Archive namespace (by @dverkade) + * [#9264](https://github.com/magento/magento2/pull/9264) -- Enable/Disable DB query logging commands (by @federivo) + * [#9260](https://github.com/magento/magento2/pull/9260) -- Fixed coding standard violations in Framework\HTTP namespace: (by @dverkade) + * [#9258](https://github.com/magento/magento2/pull/9258) -- Fixed coding standard violations in the Framework\Filesystem namespace (by @dverkade) + * [#9286](https://github.com/magento/magento2/pull/9286) -- [WIP] Varnish Vcl generator command (by @piotrkwiecinski) + * [#9282](https://github.com/magento/magento2/pull/9282) -- Fixed coding standard violations in the Framework\Filter namespace (by @dverkade) + * [#9281](https://github.com/magento/magento2/pull/9281) -- Fixed coding standard violations in Framework\Image namespace (by @dverkade) + * [#9298](https://github.com/magento/magento2/pull/9298) -- Remove php-5.6 environment from travis.yml (by @4quaternion) + * [#4816](https://github.com/magento/magento2/pull/4816) -- Fixed issue with grouped product name column renderer. It (by @wbyrnetx) + * [#5147](https://github.com/magento/magento2/pull/5147) -- Change value-assignment to a setValue call (by @wexo-team) + * [#5411](https://github.com/magento/magento2/pull/5411) -- #5236 fixes "The configuration parameter "componentType" is a required for "advanced_pricing_button" component" (by @Protazy21) + * [#7148](https://github.com/magento/magento2/pull/7148) -- Fix issue 7075 (by @rmsundar1) + * [#9027](https://github.com/magento/magento2/pull/9027) -- Make CSS minifying compatible with calc() CSS function (by @sambolek) + * [#9262](https://github.com/magento/magento2/pull/9262) -- Remove zend json from theme (by @dmanners) + * [#9261](https://github.com/magento/magento2/pull/9261) -- Remove zend json from weee (by @dmanners) + * [#9302](https://github.com/magento/magento2/pull/9302) -- Fixed coding standard violations in the Framework\Module namespace (by @dverkade) + * [#9299](https://github.com/magento/magento2/pull/9299) -- Improved check for attribute codes in "additional_attributes" field (by @ccasciotti) + * [#9293](https://github.com/magento/magento2/pull/9293) -- Deprecate unused navigation-menu.js file in blank theme (by @mikeoloughlin) + * [#9308](https://github.com/magento/magento2/pull/9308) -- Remove unnecessary FQCN in ObserverInterface (by @jameshalsall) + * [#9304](https://github.com/magento/magento2/pull/9304) -- Fixed coding standard violations in all Factory classes located in app/code (by @dverkade) + * [#9303](https://github.com/magento/magento2/pull/9303) -- Fixed coding standard violations in the Framework namespace (by @dverkade) + * [#9318](https://github.com/magento/magento2/pull/9318) -- Fixed coding standard violations in the Framework\Backup namespace (by @dverkade) + * [#9321](https://github.com/magento/magento2/pull/9321) -- Fixed coding standard violations in the Framework\Autoload, Framework\Session & Framework\Webapi namespaces (by @dverkade) + * [#9320](https://github.com/magento/magento2/pull/9320) -- Fixed coding standard violations in the Framework\Cache namespace (by @dverkade) + * [#9319](https://github.com/magento/magento2/pull/9319) -- Fixed coding standard violations in the Framework\Api namespace (by @dverkade) + * [#9334](https://github.com/magento/magento2/pull/9334) -- Fixed coding standard violations in the Framework\Controller, Framework\CSS, Framework\Phrase and Framework\Pricing namespace (by @dverkade) + * [#9330](https://github.com/magento/magento2/pull/9330) -- Fixed coding standard violations in the Framework\Data namespace (by @dverkade) + * [#9329](https://github.com/magento/magento2/pull/9329) -- Fixed coding standard violations in the Framework\Stdlib namespace (by @dverkade) + * [#9328](https://github.com/magento/magento2/pull/9328) -- Fixed coding standard violations in the Framework\Config namespace (by @dverkade) + * [#5372](https://github.com/magento/magento2/pull/5372) -- Fix filesystem permission issues (by @BlackIkeEagle) + * [#9129](https://github.com/magento/magento2/pull/9129) -- Product Wizard: Use result type Layout instead of page layout (by @klein0r) + * [#9352](https://github.com/magento/magento2/pull/9352) -- Fixed coding standard violations in the Framework\File namespace (by @dverkade) + * [#9351](https://github.com/magento/magento2/pull/9351) -- Fixed coding standard violations in the Framework\Locale namespace (by @dverkade) + * [#9350](https://github.com/magento/magento2/pull/9350) -- Fixed coding standard violations in the Framework\App namespace (by @dverkade) + * [#9355](https://github.com/magento/magento2/pull/9355) -- Fixed coding standard violations in the Framework\Test namespace (by @dverkade) + * [#9354](https://github.com/magento/magento2/pull/9354) -- Fixed coding standard violations in the Framework\Translate namespace (by @dverkade) + * [#9353](https://github.com/magento/magento2/pull/9353) -- Fixed coding standard violations in the Framework\DB namespace (by @dverkade) + * [#8955](https://github.com/magento/magento2/pull/8955) -- Remove context aggregation validation (see Issue #6114) (by @Vinai) + * [#9343](https://github.com/magento/magento2/pull/9343) -- Add logging to contact us form (by @JamesonNetworks) + * [#9414](https://github.com/magento/magento2/pull/9414) -- Use loadPlayer requirejs mapping (by @ntoombs19) + * [#9400](https://github.com/magento/magento2/pull/9400) -- Fix addIdFilter method (by @adrian-martinez-interactiv4) + * [#9363](https://github.com/magento/magento2/pull/9363) -- Add ability to inject exception code in LocalizedException (by @adragus-inviqa) + * [#9446](https://github.com/magento/magento2/pull/9446) -- Fix data deletion using the multiple delete command (by @Kenboy) + * [#9539](https://github.com/magento/magento2/pull/9539) -- fix for "Class Magento\Framework\Console\CLI not found" in case sensitive scenarios (by @EObukhovsky) + * [#9514](https://github.com/magento/magento2/pull/9514) -- Fix breadcrumbs extra space (by @VincentMarmiesse) + * [#8409](https://github.com/magento/magento2/pull/8409) -- Allow X-Forwarded-For to have multiple values (by @kassner) + * [#9093](https://github.com/magento/magento2/pull/9093) -- JS Static tests added to CI (ESLint + JSCS) (by @Igloczek) + * [#9091](https://github.com/magento/magento2/pull/9091) -- ESLint errors fix (by @Igloczek) + * [#9285](https://github.com/magento/magento2/pull/9285) -- Replace Zend_Log with Psr\Log\LoggerInterface (by @tdgroot) + * [#9380](https://github.com/magento/magento2/pull/9380) -- Removed unnecessary code and namespaces from import validators (by @ccasciotti) + * [#9540](https://github.com/magento/magento2/pull/9540) -- Removed workaround for old Webkit bug in the TinyMCE editor for selec… (by @hostep) + * [#9549](https://github.com/magento/magento2/pull/9549) -- Selects correct stores value option (by @Corefix) + * [#9574](https://github.com/magento/magento2/pull/9574) -- no need to create customer once u got the quote object (by @sivajik34) + * [#9618](https://github.com/magento/magento2/pull/9618) -- Flip the property assignments for _logger and _fetchStrategy in __wakeup (by @cykirsch) + * [#9617](https://github.com/magento/magento2/pull/9617) -- Exclude unnecessarily duplicated Travis CI build jobs (by @Igloczek) + * [#9622](https://github.com/magento/magento2/pull/9622) -- Zend_Wildfire deprecated, Firephp outdated, magento/magento2#9239 and magento/magento2#9241 (by @SolsWebdesign) + * [#9625](https://github.com/magento/magento2/pull/9625) -- Remove unused plugin (by @elzekool) + * [#9637](https://github.com/magento/magento2/pull/9637) -- Change "wan't" to "want" (by @Leland) + * [#7020](https://github.com/magento/magento2/pull/7020) -- Fixes #7006, sales_order_status_label does not support version control (by @ajpevers) + * [#7456](https://github.com/magento/magento2/pull/7456) -- Remove unused entity_id foreign key (by @mattjbarlow) + * [#7755](https://github.com/magento/magento2/pull/7755) -- Remove redundant check and return early (by @AydinHassan) + * [#9657](https://github.com/magento/magento2/pull/9657) -- Fixes Typo (by @riconeitzel) + * [#4903](https://github.com/magento/magento2/pull/4903) -- Fix undefined offset notice when no order states are set (by @adragus-inviqa) + * [#6344](https://github.com/magento/magento2/pull/6344) -- Zend instead of regex in getGetterReturnType (by @flancer64) + * [#9686](https://github.com/magento/magento2/pull/9686) -- Update scripts.js (by @redelschaap) + * [#9701](https://github.com/magento/magento2/pull/9701) -- Add missing payment info template for PDF generation (by @cmuench) + * [#9697](https://github.com/magento/magento2/pull/9697) -- Configure Travis CI to run functional tests (by @okolesnyk) + * [#9711](https://github.com/magento/magento2/pull/9711) -- Cookie Restriction Mode Overlay should not be cached by Varnish #6455 (by @bka) + * [#9713](https://github.com/magento/magento2/pull/9713) -- stringify cookie value to fix Google Analyitcs Tracking and Cookie Overlay #5596 (by @bka) + * [#6503](https://github.com/magento/magento2/pull/6503) -- Remove breadcrumbs for multistore homepage (by @PingusPepan) + * [#7330](https://github.com/magento/magento2/pull/7330) -- Fix Framework\Data\Collection::each() method (by @Vinai) + * [#8484](https://github.com/magento/magento2/pull/8484) -- Fix swatch-renderer.js product id and isProductViewExist (by @mimarcel) + * [#9348](https://github.com/magento/magento2/pull/9348) -- Replace framework's Zend_Session interface usage with SessionHandlerInterface (by @tdgroot) + * [#9654](https://github.com/magento/magento2/pull/9654) -- magento/magento2#7279 bill-to name and ship-to name truncated to 20 chars (by @SolsWebdesign) + * [#9627](https://github.com/magento/magento2/pull/9627) -- Fix coding standard in Magento AdminNotification module (by @dverkade) + * [#9714](https://github.com/magento/magento2/pull/9714) -- Can't delete last item in cart if Minimum Order is Enable #6151 (by @storbahn) + * [#9717](https://github.com/magento/magento2/pull/9717) -- use payment method name to make checkbox of agreements more unique #6207 (by @bka) + * [#9715](https://github.com/magento/magento2/pull/9715) -- #4272: v2.0.4 Credit memos with adjustment fees cannot be fully refunded with a second credit memo (by @mcspronko) + * [#9344](https://github.com/magento/magento2/pull/9344) -- Explace the direct usage of Zend_Json with a call to the Json Help class (by @dmanners) + * [#9475](https://github.com/magento/magento2/pull/9475) -- Update select.js (by @redelschaap) + * [#9600](https://github.com/magento/magento2/pull/9600) -- Do not hardcode product link types (by @kassner) + * [#9712](https://github.com/magento/magento2/pull/9712) -- Customer with unique attribute can't be saved #7844 (by @storbahn) + * [#9723](https://github.com/magento/magento2/pull/9723) -- Patch to allow multiple filter_url_params to function (by @southerncomputer) + * [#9721](https://github.com/magento/magento2/pull/9721) -- [BUGFIX][6244] Fix Issue with code label display in cart checkout. (by @diglin) + * [#9753](https://github.com/magento/magento2/pull/9753) -- Replace Zend_Json in the configurable product block test (by @dmanners) + * [#9777](https://github.com/magento/magento2/pull/9777) -- Fix for #5897: getIdentities relies on uninitialized collection (by @kassner) + * [#9772](https://github.com/magento/magento2/pull/9772) -- Allow for referenceBlock to include template argument (by @jissereitsma) + * [#9797](https://github.com/magento/magento2/pull/9797) -- Adding logo in media folder (by @rafaelstz) + * [#9409](https://github.com/magento/magento2/pull/9409) -- Add a name to the Composite\Fieldset\Options block directive (by @navarr) + * [#9665](https://github.com/magento/magento2/pull/9665) -- Fix for javascript "mixins" when 'urlArgs' is set in requirejs - issue 8221 (by @thelettuce) + * [#9835](https://github.com/magento/magento2/pull/9835) -- Fixes Mage.Cookies poor performance (by @wujashek) + * [#9430](https://github.com/magento/magento2/pull/9430) -- Fix wrong store id filter (by @mimarcel) + * [#9670](https://github.com/magento/magento2/pull/9670) -- Allow injection of Magento\Catalog\Model\View\Asset\ImageFactory (by @rolftimmermans) + * [#9778](https://github.com/magento/magento2/pull/9778) -- new CLI command: Enable Template Hints (by @miguelbalparda) + * [#9820](https://github.com/magento/magento2/pull/9820) -- [oauth] Fixes #9819 (by @EliasKotlyar) + * [#9859](https://github.com/magento/magento2/pull/9859) -- Removed unused $_customerSession property (by @edenreich) + * [#4450](https://github.com/magento/magento2/pull/4450) -- Add ability to use tree-massactions ("sub-menus") on Sales > Orders grid (by @ikk0) + * [#9368](https://github.com/magento/magento2/pull/9368) -- Redis sess: fix path for persistent_identifier & compression_threshold (by @LukeHandle) + * [#9690](https://github.com/magento/magento2/pull/9690) -- Add froogaloop library as a dependency to load-player module (by @ntoombs19) + * [#9813](https://github.com/magento/magento2/pull/9813) -- Use static:: to support late static bindings in Invoice and Creditmemo (by @jokeputs) + * [#9780](https://github.com/magento/magento2/pull/9780) -- Coupon codes not showing in invoice print out #9216 (by @naouibelgacem) + * [#9872](https://github.com/magento/magento2/pull/9872) -- Fixed issue causing static test failure to report success on Travis (by @davidalger) + * [#9890](https://github.com/magento/magento2/pull/9890) -- Improved error logging when trying to save a product (by @woutersamaey) + * [#9892](https://github.com/magento/magento2/pull/9892) -- Added .DS_Store to .gitignore for Mac users (by @woutersamaey) + * [#9873](https://github.com/magento/magento2/pull/9873) -- Fixes layered navigation options being cached using the wrong store id. (by @hostep) + * [#7405](https://github.com/magento/magento2/pull/7405) -- Update Curl.php (by @redelschaap) + * [#7780](https://github.com/magento/magento2/pull/7780) -- setup:di:compile returns exit code 0 if errors are found (by @pivulic) + * [#9157](https://github.com/magento/magento2/pull/9157) -- Return array of blocks as items instead of array of arrays (by @tkotosz) + * [#9810](https://github.com/magento/magento2/pull/9810) -- Fix bug linked product position not updated if product link already exists (by @jalogut) + * [#9824](https://github.com/magento/magento2/pull/9824) -- Email to a Friend feature (by @WaPoNe) + * [#9823](https://github.com/magento/magento2/pull/9823) -- Return array of pages as items instead of array of arrays (by @tkotosz) + * [#9922](https://github.com/magento/magento2/pull/9922) -- Fixes small backwards incompatibility issue created in MAGETWO-69728 (by @hostep) + * [#4891](https://github.com/magento/magento2/pull/4891) -- Remove faulty index subscription (by @ajpevers) + * [#7758](https://github.com/magento/magento2/pull/7758) -- Throw exception when attribute doesn't exitst (by @AydinHassan) + * [#8879](https://github.com/magento/magento2/pull/8879) -- add middle name to checkout address html templates #8878 (by @ajpevers) + * [#9251](https://github.com/magento/magento2/pull/9251) -- Fixed coding standard violations in the Framework\Validator namespace (by @dverkade) + * [#9525](https://github.com/magento/magento2/pull/9525) -- Fixed the Inconsistent Gift Options checkbox labels #9421 (by @vpiyappan) + * [#9905](https://github.com/magento/magento2/pull/9905) -- Fix composer validation (by @barbazul) + * [#9932](https://github.com/magento/magento2/pull/9932) -- Fix typo in comment (by @avoelkl) + * [#9306](https://github.com/magento/magento2/pull/9306) -- Fix PaymentTokenFactory interface to have the "Interface" at the end of the name. (by @dverkade) + * [#9391](https://github.com/magento/magento2/pull/9391) -- Fix depends per group in system.xml (by @osrecio) + * [#9902](https://github.com/magento/magento2/pull/9902) -- Fix static integrity classes tests in Windows (by @barbazul) + * [#9915](https://github.com/magento/magento2/pull/9915) -- suggestion from #9338: add some command/option to the deploy command to refresh the version (by @ajpevers) + * [#9925](https://github.com/magento/magento2/pull/9925) -- Fix #9924, prefill prefix and suffix in checkout shipping address (by @ajpevers) + * [#9941](https://github.com/magento/magento2/pull/9941) -- By default, show times in admin grids in the store timezone. (by @ajpevers) + * [#9943](https://github.com/magento/magento2/pull/9943) -- Cron uses the wrong timestamp method (by @ajpevers) + * [#9964](https://github.com/magento/magento2/pull/9964) -- Add target attribute to Magento_Ui grid (by @thelettuce) + * [#9973](https://github.com/magento/magento2/pull/9973) -- Fixed coding standard violations in the Magento\Wishlist namespace (by @dverkade) + * [#9974](https://github.com/magento/magento2/pull/9974) -- Fixed coding standard violations in the Magento\Backend namespace (by @dverkade) + * [#9975](https://github.com/magento/magento2/pull/9975) -- Fixed coding standard violations in the Magento\Cms namespace (by @dverkade) + * [#9978](https://github.com/magento/magento2/pull/9978) -- Fixed coding standard violations in the Magento\Authorization Magento\Backup Magento\Captcha Magento\CurrencySymbol and Magento\Dhl namespace (by @dverkade) + * [#8965](https://github.com/magento/magento2/pull/8965) -- Reduce calls to SplFileInfo::realpath() in the Magento\Setup\Module\Di\Code\Reader\ClassesScanner class (by @kschroeder) + * [#9996](https://github.com/magento/magento2/pull/9996) -- Ubuntu Trusty 14.04 images update (by @miguelbalparda) + * [#8784](https://github.com/magento/magento2/pull/8784) -- magento/magento2: #8616 (by @cavalier79) + * [#9939](https://github.com/magento/magento2/pull/9939) -- Retrieve taxes from the correct object (by @fooman) + * [#9957](https://github.com/magento/magento2/pull/9957) -- Instantly apply configuration changes in the cron schedule (by @ajpevers) + * [#9994](https://github.com/magento/magento2/pull/9994) -- Fix mini-cart not emptied for logged out users checking out with PayPal Express (by @driskell) + * [#9082](https://github.com/magento/magento2/pull/9082) -- Get sitemap product images from image cache, if available (by @sambolek) + * [#9786](https://github.com/magento/magento2/pull/9786) -- [#7291] Change the default contact form email template to HTML (by @VincentMarmiesse) + * [#9361](https://github.com/magento/magento2/pull/9361) -- Fixed coding standard violations in the Framework\Model namespace (by @dverkade) + * [#9359](https://github.com/magento/magento2/pull/9359) -- Fixed coding standard violations in the Framework\Interception namespace (by @dverkade) + * [#9358](https://github.com/magento/magento2/pull/9358) -- Fixed coding standard violations in the Framework\Code namespace (by @dverkade) + * [#9429](https://github.com/magento/magento2/pull/9429) -- Fix not detecting current store using store code in url using $storeResolver->getCurrentStoreId() (by @mimarcel) + * [#9362](https://github.com/magento/magento2/pull/9362) -- Fixed coding standard violations in the Framework\ObjectManager namespace (by @dverkade) + * [#9970](https://github.com/magento/magento2/pull/9970) -- Added public methods to make Sitemap model plugin friendly (by @7ochem) + * [#7729](https://github.com/magento/magento2/pull/7729) -- Allow USPS Shipping Methods Without ExtraServices (by @jaywilliams) + * [#9314](https://github.com/magento/magento2/pull/9314) -- Support null value for custom attributes. (by @meng-tian) + * [#10033](https://github.com/magento/magento2/pull/10033) -- Fix for file category image uploader (by @Bartlomiejsz) + * [#10047](https://github.com/magento/magento2/pull/10047) -- Include attribute code in error message (by @lazyguru) + * [#10056](https://github.com/magento/magento2/pull/10056) -- Translate password field placeholder in Checkout (by @mimarcel) + * [#7139](https://github.com/magento/magento2/pull/7139) -- Stickyjs improvements (by @vovayatsyuk) + * [#9681](https://github.com/magento/magento2/pull/9681) -- Issue 9680: Use parent name for variations (by @PascalBrouwers) + * [#10031](https://github.com/magento/magento2/pull/10031) -- Allow option disabling for optgroup binding (by @Bart-art) + * [#10060](https://github.com/magento/magento2/pull/10060) -- Adding escapeHtml to Newsletter phtml (by @rafaelstz) + * [#10062](https://github.com/magento/magento2/pull/10062) -- Fix formatting for USPS Carrier (by @ihor-sviziev) + * [#9672](https://github.com/magento/magento2/pull/9672) -- Revert minimum stability to stable, tasks #4359 (by @ktomk) + * [#9986](https://github.com/magento/magento2/pull/9986) -- Improved type hints and declarations for \Magento\Quote\Model\Quote\Address\Total (by @schmengler) + * [#10082](https://github.com/magento/magento2/pull/10082) -- M2 2266 (by @tzyganu) + * [#10086](https://github.com/magento/magento2/pull/10086) -- Fix condition for autoloader function definitions (by @miromichalicka) + * [#9611](https://github.com/magento/magento2/pull/9611) -- Admin Grid Mass action Select / Unselect All issue #9610 (by @minesh0111) + * [#9726](https://github.com/magento/magento2/pull/9726) -- Remove wrong '_setup' replace when getting DB connection (2) (by @jalogut) + * [#9754](https://github.com/magento/magento2/pull/9754) -- Remove zend json from form elements (by @dmanners) + * [#9992](https://github.com/magento/magento2/pull/9992) -- Make page title in layout files translatable (by @ajpevers) + * [#10052](https://github.com/magento/magento2/pull/10052) -- M2 5381 (by @tzyganu) + * [#1563](https://github.com/magento/magento2/pull/1563) -- Convert long form tags with echo to use short-echo tags (by @davidalger) + * [#4147](https://github.com/magento/magento2/pull/4147) -- Add filename paramenter log (by @fcapua-summa) + * [#10043](https://github.com/magento/magento2/pull/10043) -- Fix trailing slash used in url rewrites (by @ihor-sviziev) + * [#10106](https://github.com/magento/magento2/pull/10106) -- Return URL in getThumbnailUrl instead of nothing (by @samgranger) + * [#3889](https://github.com/magento/magento2/pull/3889) -- Add missing dependencies of magento/framework (by @GordonLesti) + * [#10114](https://github.com/magento/magento2/pull/10114) -- Add missing dependencies of magento/framework (by @okorshenko) + * [#7174](https://github.com/magento/magento2/pull/7174) -- Type hint for \DateTimeInterface instead of \DateTime (by @jameshalsall) + * [#9189](https://github.com/magento/magento2/pull/9189) -- Avoid duplicate ltrim function on not complied mode. (by @sivajik34) + * [#10094](https://github.com/magento/magento2/pull/10094) -- Fix for isoneof condition in catalogrule (by @duckchip) + * [#10105](https://github.com/magento/magento2/pull/10105) -- Add referrerPolicy to Vimeo Video iframe to allow domain-restricted videos (by @davefarthing) + * [#10126](https://github.com/magento/magento2/pull/10126) -- Fix width & height mapping during image upload (by @ihor-sviziev) + * [#10140](https://github.com/magento/magento2/pull/10140) -- Update attribute vat_id frontend_label to make it translatable (by @JeroenVanLeusden) + * [#10149](https://github.com/magento/magento2/pull/10149) -- Fix wrong ACL for Developer Section (by @PascalBrouwers) + * [#10151](https://github.com/magento/magento2/pull/10151) -- Fix Widget saving non-XML entities to layout_update (by @tdgroot) + * [#9588](https://github.com/magento/magento2/pull/9588) -- Support controller src_type for head links (by @kassner) + * [#9904](https://github.com/magento/magento2/pull/9904) -- Fixed pointless exception in logs every time a category with image is saved (by @woutersamaey) + * [#10059](https://github.com/magento/magento2/pull/10059) -- Fix fetching quote item by id (by @mladenilic) + 2.1.0 ============= To get detailed information about changes in Magento 2.1.0, please visit [Magento Community Edition (CE) Release Notes](http://devdocs.magento.com/guides/v2.1/release-notes/ReleaseNotes2.1.0CE.html "Magento Community Edition (CE) Release Notes") From a858d7cece779e42513a95b884735e5e59325083 Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Fri, 27 Oct 2017 19:01:36 +0300 Subject: [PATCH 114/653] MAGETWO-70726: [GITHUB] [2.1] Store View Language switch leads to 404 on some cases #5416 --- .../CatalogUrlRewrite/Model/Storage/DbStorage.php | 9 +++------ .../Test/Unit/Model/Storage/DbStorageTest.php | 3 +-- app/code/Magento/UrlRewrite/Controller/Router.php | 9 +++------ 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php index 787b349a18b18..9e9007e7f667c 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php @@ -17,12 +17,9 @@ class DbStorage extends BaseDbStorage */ protected function prepareSelect(array $data) { - if ( - !array_key_exists(UrlRewrite::ENTITY_ID, $data) - || - !array_key_exists(UrlRewrite::ENTITY_TYPE, $data) - || - !array_key_exists(UrlRewrite::STORE_ID, $data) + if (!array_key_exists(UrlRewrite::ENTITY_ID, $data) + || !array_key_exists(UrlRewrite::ENTITY_TYPE, $data) + || !array_key_exists(UrlRewrite::STORE_ID, $data) ) { throw new \InvalidArgumentException( UrlRewrite::ENTITY_ID . ', ' . UrlRewrite::ENTITY_TYPE diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php index 3e8d7158c0ce3..89e9616f107e0 100644 --- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php @@ -57,7 +57,6 @@ protected function setUp() { parent::setUp(); - $this->urlRewriteFactory = $this ->getMockBuilder(UrlRewriteFactory::class) ->setMethods(['create']) @@ -152,4 +151,4 @@ public function testPrepareSelect() UrlRewrite::METADATA => ['category_id' => $categoryId] ]); } -} \ No newline at end of file +} diff --git a/app/code/Magento/UrlRewrite/Controller/Router.php b/app/code/Magento/UrlRewrite/Controller/Router.php index 47718e1e060c9..d1a2cea977df6 100644 --- a/app/code/Magento/UrlRewrite/Controller/Router.php +++ b/app/code/Magento/UrlRewrite/Controller/Router.php @@ -95,12 +95,9 @@ public function match(\Magento\Framework\App\RequestInterface $request) UrlRewrite::REDIRECT_TYPE => 0, ] ); - if ( - $currentRewrite - && - $currentRewrite->getRequestPath() - !== - $oldRewrite->getRequestPath() + if ($currentRewrite + && $currentRewrite->getRequestPath() + !== $oldRewrite->getRequestPath() ) { return $this->redirect( $request, From 0f948ac1403ecbdacae6c58cfdd5b045698c1ea8 Mon Sep 17 00:00:00 2001 From: Harald Deiser <h.deiser@techdivision.com> Date: Sun, 29 Oct 2017 16:02:43 +0100 Subject: [PATCH 115/653] Fixed a js bug where ui_component labels have the wrong sort order. --- .../base/web/js/dynamic-rows/dynamic-rows.js | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js b/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js index d4eea859b4d35..bcd15880a81d3 100644 --- a/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js +++ b/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js @@ -548,6 +548,13 @@ define([ }); this.labels.push(data); + + /** + * Sort the array after an element was added to fix an bug where + * additional added field labels in ui_components haven't the right + * sort order. + */ + this.labels.sort(this._compare); }, this); } }, @@ -914,6 +921,24 @@ define([ })); }, + /** + * Compare two objects by the sortOrder property. + * + * @param {Object} $object1 + * @param {Object} $object2 + * @returns {Number} + * @private + */ + _compare: function ($object1, $object2) { + if ($object1.sortOrder > $object2.sortOrder) { + return 1; + } else if ($object1.sortOrder < $object2.sortOrder) { + return -1; + } + + return 0; + }, + /** * Set new data to dataSource, * delete element From 3b766d7aea2bdfa8f8b2e745b55769cd8b50965a Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Mon, 30 Oct 2017 11:27:25 +0200 Subject: [PATCH 116/653] MAGETWO-70726: [GITHUB] [2.1] Store View Language switch leads to 404 on some cases #5416 --- .../Magento/UrlRewrite/Controller/Router.php | 20 ++- .../Test/Unit/Controller/RouterTest.php | 137 +++++++++++++----- 2 files changed, 112 insertions(+), 45 deletions(-) diff --git a/app/code/Magento/UrlRewrite/Controller/Router.php b/app/code/Magento/UrlRewrite/Controller/Router.php index d1a2cea977df6..863d998776ef1 100644 --- a/app/code/Magento/UrlRewrite/Controller/Router.php +++ b/app/code/Magento/UrlRewrite/Controller/Router.php @@ -5,12 +5,15 @@ */ namespace Magento\UrlRewrite\Controller; -use Magento\Framework\App\Request\Http; +use Magento\Framework\App\Request\Http as HttpRequest; +use Magento\Framework\App\Response\Http as HttpResponse; use Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrite; use Magento\UrlRewrite\Model\OptionProvider; use Magento\UrlRewrite\Model\UrlFinderInterface; use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; use Magento\Framework\UrlInterface; +use Magento\Framework\App\Action\Redirect; +use Magento\Framework\App\ActionInterface; /** * UrlRewrite Controller Router @@ -35,7 +38,7 @@ class Router implements \Magento\Framework\App\RouterInterface protected $storeManager; /** - * @var \Magento\Framework\App\ResponseInterface + * @var \Magento\Framework\App\ResponseInterface|HttpResponse */ protected $response; @@ -68,8 +71,8 @@ public function __construct( /** * Match corresponding URL Rewrite and modify request * - * @param \Magento\Framework\App\RequestInterface|Http $request - * @return \Magento\Framework\App\ActionInterface|null + * @param \Magento\Framework\App\RequestInterface|HttpRequest $request + * @return ActionInterface|null */ public function match(\Magento\Framework\App\RequestInterface $request) { @@ -139,7 +142,7 @@ public function match(\Magento\Framework\App\RequestInterface $request) /** * @param \Magento\Framework\App\RequestInterface $request * @param UrlRewrite $rewrite - * @return \Magento\Framework\App\ActionInterface|null + * @return ActionInterface|null */ protected function processRedirect($request, $rewrite) { @@ -153,16 +156,17 @@ protected function processRedirect($request, $rewrite) } /** - * @param \Magento\Framework\App\RequestInterface $request + * @param \Magento\Framework\App\RequestInterface|HttpRequest $request * @param string $url * @param int $code - * @return \Magento\Framework\App\ActionInterface + * @return ActionInterface */ protected function redirect($request, $url, $code) { $this->response->setRedirect($url, $code); $request->setDispatched(true); - return $this->actionFactory->create(\Magento\Framework\App\Action\Redirect::class); + + return $this->actionFactory->create(Redirect::class); } /** diff --git a/app/code/Magento/UrlRewrite/Test/Unit/Controller/RouterTest.php b/app/code/Magento/UrlRewrite/Test/Unit/Controller/RouterTest.php index acf05242d6aa2..f0e688ff109af 100644 --- a/app/code/Magento/UrlRewrite/Test/Unit/Controller/RouterTest.php +++ b/app/code/Magento/UrlRewrite/Test/Unit/Controller/RouterTest.php @@ -6,9 +6,11 @@ namespace Magento\UrlRewrite\Test\Unit\Controller; +use Magento\Framework\App\Action\Redirect; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\UrlRewrite\Model\OptionProvider; use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; +use Magento\Store\Model\Store; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) @@ -27,7 +29,7 @@ class RouterTest extends \PHPUnit\Framework\TestCase /** @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $storeManager; - /** @var \Magento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject */ + /** @var Store|\PHPUnit_Framework_MockObject_MockObject */ protected $store; /** @var \Magento\Framework\App\ResponseInterface|\PHPUnit_Framework_MockObject_MockObject */ @@ -78,45 +80,106 @@ public function testNoRewriteExist() public function testRewriteAfterStoreSwitcher() { - $this->request->expects($this->any())->method('getPathInfo')->will($this->returnValue('request-path')); - $this->request->expects($this->any())->method('getParam')->with('___from_store') - ->will($this->returnValue('old-store')); - $oldStore = $this->getMockBuilder(\Magento\Store\Model\Store::class)->disableOriginalConstructor()->getMock(); - $this->storeManager->expects($this->any())->method('getStore') - ->will($this->returnValueMap([['old-store', $oldStore], [null, $this->store]])); - $oldStore->expects($this->any())->method('getId')->will($this->returnValue('old-store-id')); - $this->store->expects($this->any())->method('getId')->will($this->returnValue('current-store-id')); - $oldUrlRewrite = $this->getMockBuilder(\Magento\UrlRewrite\Service\V1\Data\UrlRewrite::class) - ->disableOriginalConstructor()->getMock(); - $oldUrlRewrite->expects($this->any())->method('getEntityType')->will($this->returnValue('entity-type')); - $oldUrlRewrite->expects($this->any())->method('getEntityId')->will($this->returnValue('entity-id')); - $oldUrlRewrite->expects($this->any())->method('getRequestPath')->will($this->returnValue('old-request-path')); - $urlRewrite = $this->getMockBuilder(\Magento\UrlRewrite\Service\V1\Data\UrlRewrite::class) - ->disableOriginalConstructor()->getMock(); - $urlRewrite->expects($this->any())->method('getRequestPath')->will($this->returnValue('new-request-path')); + $initialRequestPath = 'request-path'; + $newRequestPath = 'new-request-path'; + $oldStoreAlias = 'old-store'; + $oldStoreId = 'old-store-id'; + $currentStoreId = 'current-store-id'; + $rewriteEntityType = 'entity-type'; + $rewriteEntityId = 42; + $redirectUrl = '/' . $newRequestPath; - $this->urlFinder->expects($this->any())->method('findOneByData')->will( - $this->returnValueMap([ - [ - [UrlRewrite::REQUEST_PATH => 'request-path', UrlRewrite::STORE_ID => 'old-store-id'], - $oldUrlRewrite, - ], - [ + $this->request + ->expects($this->any()) + ->method('getParam') + ->with('___from_store') + ->willReturn($oldStoreAlias); + $this->request + ->expects($this->any()) + ->method('getPathInfo') + ->willReturn($initialRequestPath); + + $oldStore = $this->getMockBuilder(Store::class) + ->disableOriginalConstructor() + ->getMock(); + $oldStore->expects($this->any()) + ->method('getId') + ->willReturn($oldStoreId); + $this->store + ->expects($this->any()) + ->method('getId') + ->willReturn($currentStoreId); + + $this->storeManager + ->expects($this->any()) + ->method('getStore') + ->willReturnMap([[$oldStoreAlias, $oldStore], [null, $this->store]]); + + $oldUrlRewrite = $this->getMockBuilder(UrlRewrite::class) + ->disableOriginalConstructor() + ->getMock(); + $oldUrlRewrite->expects($this->any()) + ->method('getEntityType') + ->willReturn($rewriteEntityType); + $oldUrlRewrite->expects($this->any()) + ->method('getEntityId') + ->willReturn($rewriteEntityId); + $oldUrlRewrite->expects($this->any()) + ->method('getRedirectType') + ->willReturn(0); + $urlRewrite = $this->getMockBuilder(UrlRewrite::class) + ->disableOriginalConstructor() + ->getMock(); + $urlRewrite->expects($this->any()) + ->method('getRequestPath') + ->willReturn($newRequestPath); + + $this->urlFinder + ->expects($this->any()) + ->method('findOneByData') + ->will( + $this->returnValueMap([ [ - UrlRewrite::ENTITY_TYPE => 'entity-type', - UrlRewrite::ENTITY_ID => 'entity-id', - UrlRewrite::STORE_ID => 'current-store-id', - UrlRewrite::IS_AUTOGENERATED => 1, + [ + UrlRewrite::REQUEST_PATH => $initialRequestPath, + UrlRewrite::STORE_ID => $oldStoreId, + ], + $oldUrlRewrite, ], - $urlRewrite - ], - ]) - ); - $this->response->expects($this->once())->method('setRedirect') - ->with('new-request-path', OptionProvider::TEMPORARY); - $this->request->expects($this->once())->method('setDispatched')->with(true); - $this->actionFactory->expects($this->once())->method('create') - ->with(\Magento\Framework\App\Action\Redirect::class); + [ + [ + UrlRewrite::ENTITY_TYPE => $rewriteEntityType, + UrlRewrite::ENTITY_ID => $rewriteEntityId, + UrlRewrite::STORE_ID => $currentStoreId, + UrlRewrite::REDIRECT_TYPE => 0, + ], + $urlRewrite, + ], + ]) + ); + + $this->url + ->expects($this->once()) + ->method('getUrl') + ->with('', ['_direct' => $newRequestPath]) + ->willReturn($redirectUrl); + $this->response + ->expects($this->once()) + ->method('setRedirect') + ->with($redirectUrl, OptionProvider::TEMPORARY); + $this->request + ->expects($this->once()) + ->method('setDispatched') + ->with(true); + $this->actionFactory + ->expects($this->once()) + ->method('create') + ->with(Redirect::class) + ->willReturn( + $this->getMockBuilder(Redirect::class) + ->disableOriginalConstructor() + ->getMock() + ); $this->router->match($this->request); } From 0ffda09754815edaf017afa71a7c9a307c135f8f Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Mon, 30 Oct 2017 11:41:30 +0200 Subject: [PATCH 117/653] MAGETWO-70726: [GITHUB] [2.1] Store View Language switch leads to 404 on some cases #5416 --- .../Test/Unit/Controller/RouterTest.php | 37 ++++++++----------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/app/code/Magento/UrlRewrite/Test/Unit/Controller/RouterTest.php b/app/code/Magento/UrlRewrite/Test/Unit/Controller/RouterTest.php index f0e688ff109af..3f5b5f34c462e 100644 --- a/app/code/Magento/UrlRewrite/Test/Unit/Controller/RouterTest.php +++ b/app/code/Magento/UrlRewrite/Test/Unit/Controller/RouterTest.php @@ -137,26 +137,24 @@ public function testRewriteAfterStoreSwitcher() $this->urlFinder ->expects($this->any()) ->method('findOneByData') - ->will( - $this->returnValueMap([ + ->willReturnMap([ + [ [ - [ - UrlRewrite::REQUEST_PATH => $initialRequestPath, - UrlRewrite::STORE_ID => $oldStoreId, - ], - $oldUrlRewrite, + UrlRewrite::REQUEST_PATH => $initialRequestPath, + UrlRewrite::STORE_ID => $oldStoreId, ], + $oldUrlRewrite, + ], + [ [ - [ - UrlRewrite::ENTITY_TYPE => $rewriteEntityType, - UrlRewrite::ENTITY_ID => $rewriteEntityId, - UrlRewrite::STORE_ID => $currentStoreId, - UrlRewrite::REDIRECT_TYPE => 0, - ], - $urlRewrite, + UrlRewrite::ENTITY_TYPE => $rewriteEntityType, + UrlRewrite::ENTITY_ID => $rewriteEntityId, + UrlRewrite::STORE_ID => $currentStoreId, + UrlRewrite::REDIRECT_TYPE => 0, ], - ]) - ); + $urlRewrite, + ], + ]); $this->url ->expects($this->once()) @@ -174,12 +172,7 @@ public function testRewriteAfterStoreSwitcher() $this->actionFactory ->expects($this->once()) ->method('create') - ->with(Redirect::class) - ->willReturn( - $this->getMockBuilder(Redirect::class) - ->disableOriginalConstructor() - ->getMock() - ); + ->with(Redirect::class); $this->router->match($this->request); } From fe1b4b19192ae64e7c83939e8f9fe89fbba593ea Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Mon, 30 Oct 2017 16:20:44 +0200 Subject: [PATCH 118/653] magento/magento2#10834: Signing in after selecting checkout button, will not end up to checkout page --- app/code/Magento/Customer/etc/config.xml | 2 +- .../Customer/Controller/AccountTest.php | 100 ++++++++++++++++-- 2 files changed, 95 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Customer/etc/config.xml b/app/code/Magento/Customer/etc/config.xml index c35e9fa4b4c8a..da4b80536e631 100644 --- a/app/code/Magento/Customer/etc/config.xml +++ b/app/code/Magento/Customer/etc/config.xml @@ -56,7 +56,7 @@ <fax_show/> </address> <startup> - <redirect_dashboard>1</redirect_dashboard> + <redirect_dashboard>0</redirect_dashboard> </startup> <address_templates> <text>{{depend prefix}}{{var prefix}} {{/depend}}{{var firstname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var lastname}}{{depend suffix}} {{var suffix}}{{/depend}} diff --git a/dev/tests/integration/testsuite/Magento/Customer/Controller/AccountTest.php b/dev/tests/integration/testsuite/Magento/Customer/Controller/AccountTest.php index fd3755fa6ea5c..8cb1d896372a4 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/Controller/AccountTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Controller/AccountTest.php @@ -10,12 +10,20 @@ use Magento\Customer\Api\CustomerRepositoryInterface; use Magento\Customer\Api\Data\CustomerInterface; +use Magento\Customer\Model\Account\Redirect; +use Magento\Customer\Model\Session; use Magento\Framework\Api\FilterBuilder; use Magento\Framework\Api\SearchCriteriaBuilder; +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\App\Config\Value; +use Magento\Framework\App\Http; use Magento\Framework\Data\Form\FormKey; use Magento\Framework\Message\MessageInterface; use Magento\Store\Model\ScopeInterface; use Magento\TestFramework\Helper\Bootstrap; +use Magento\TestFramework\Request; +use Magento\TestFramework\Response; +use Zend\Stdlib\Parameters; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) @@ -30,9 +38,9 @@ class AccountTest extends \Magento\TestFramework\TestCase\AbstractController */ protected function login($customerId) { - /** @var \Magento\Customer\Model\Session $session */ + /** @var Session $session */ $session = Bootstrap::getObjectManager() - ->get(\Magento\Customer\Model\Session::class); + ->get(Session::class); $session->loginById($customerId); } @@ -130,8 +138,8 @@ public function testCreatepasswordActionWithDirectLink() $this->assertFalse((bool)preg_match('/' . $token . '/m', $text)); $this->assertRedirect($this->stringContains('customer/account/createpassword')); - /** @var \Magento\Customer\Model\Session $customer */ - $session = Bootstrap::getObjectManager()->get(\Magento\Customer\Model\Session::class); + /** @var Session $customer */ + $session = Bootstrap::getObjectManager()->get(Session::class); $this->assertEquals($token, $session->getRpToken()); $this->assertEquals($customer->getId(), $session->getRpCustomerId()); $this->assertNotContains($token, $response->getHeader('Location')->getFieldValue()); @@ -151,8 +159,8 @@ public function testCreatepasswordActionWithSession() $customer->changeResetPasswordLinkToken($token); $customer->save(); - /** @var \Magento\Customer\Model\Session $customer */ - $session = Bootstrap::getObjectManager()->get(\Magento\Customer\Model\Session::class); + /** @var Session $customer */ + $session = Bootstrap::getObjectManager()->get(Session::class); $session->setRpToken($token); $session->setRpCustomerId($customer->getId()); @@ -652,6 +660,50 @@ public function testWrongConfirmationEditPostAction() ); } + /** + * Test redirect customer to account dashboard after logging in. + * + * @param bool|null $redirectDashboardValue + * @param string $redirectUrl + * @magentoDbIsolation enabled + * @magentoAppIsolation enabled + * @magentoDataFixture Magento/Customer/_files/customer.php + * @dataProvider loginPostRedirectDataProvider + */ + public function testLoginPostRedirect($redirectDashboardValue, string $redirectUrl) + { + if (isset($redirectDashboardValue)) { + $this->_objectManager->get(ScopeConfigInterface::class)->setValue('customer/startup/redirect_dashboard', $redirectDashboardValue); + } + + $this->_objectManager->get(Redirect::class)->setRedirectCookie('test'); + + $configValue = $this->_objectManager->create(Value::class); + $configValue->load('web/unsecure/base_url', 'path'); + $baseUrl = $configValue->getValue() ?: 'http://localhost/'; + + $request = $this->prepareRequest(); + $app = $this->_objectManager->create(Http::class, ['_request' => $request]); + $response = $app->launch(); + + $this->assertResponseRedirect($response, $baseUrl . $redirectUrl); + $this->assertTrue($this->_objectManager->get(Session::class)->isLoggedIn()); + } + + /** + * Data provider for testLoginPostRedirect. + * + * @return array + */ + public function loginPostRedirectDataProvider() + { + return [ + [null, 'index.php/'], + [0, 'index.php/'], + [1, 'index.php/customer/account/'], + ]; + } + /** * @return void */ @@ -717,4 +769,40 @@ private function getCustomerByEmail($email) return $customer; } + + /** + * Prepare request for customer login. + * + * @return Request + */ + private function prepareRequest() + { + $post = new Parameters([ + 'form_key' => $this->_objectManager->get(FormKey::class)->getFormKey(), + 'login' => [ + 'username' => 'customer@example.com', + 'password' => 'password' + ] + ]); + $request = $this->getRequest(); + $formKey = $this->_objectManager->get(FormKey::class); + $request->setParam('form_key', $formKey->getFormKey()); + $request->setMethod(Request::METHOD_POST); + $request->setRequestUri('customer/account/loginPost/'); + $request->setPost($post); + return $request; + } + + /** + * Assert response is redirect. + * + * @param Response $response + * @param string $redirectUrl + * @return void + */ + private function assertResponseRedirect(Response $response, string $redirectUrl) + { + $this->assertTrue($response->isRedirect()); + $this->assertSame($redirectUrl, $response->getHeader('Location')->getUri()); + } } From 8573467f9f40c76d362b5992e70de9f7cd8782ed Mon Sep 17 00:00:00 2001 From: Derrick Heesbeen <derrick@experius.nl> Date: Mon, 30 Oct 2017 15:29:05 +0000 Subject: [PATCH 119/653] [BUGFIX] Made method public so a plugin is possible. --- app/code/Magento/Customer/Model/AccountManagement.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Customer/Model/AccountManagement.php b/app/code/Magento/Customer/Model/AccountManagement.php index b7b099ec45232..f6c8366ae1a73 100644 --- a/app/code/Magento/Customer/Model/AccountManagement.php +++ b/app/code/Magento/Customer/Model/AccountManagement.php @@ -1127,7 +1127,7 @@ protected function sendEmailTemplate( * @param CustomerInterface $customer * @return bool */ - protected function isConfirmationRequired($customer) + public function isConfirmationRequired($customer) { if ($this->canSkipConfirmation($customer)) { return false; From b66b35c34c31caacb1fbd51579f0ecfb96b07e4b Mon Sep 17 00:00:00 2001 From: Volodymyr Zaets <vzaets@magento.com> Date: Tue, 31 Oct 2017 15:41:08 +0200 Subject: [PATCH 120/653] MAGETWO-70323: [GITHUB] Can't add to cart Bundle product with simple product option price as "zero" #8969 --- app/code/Magento/SalesRule/Model/Quote/Discount.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/SalesRule/Model/Quote/Discount.php b/app/code/Magento/SalesRule/Model/Quote/Discount.php index bee007b41181f..693a61b272f66 100644 --- a/app/code/Magento/SalesRule/Model/Quote/Discount.php +++ b/app/code/Magento/SalesRule/Model/Quote/Discount.php @@ -179,7 +179,7 @@ protected function distributeDiscount(\Magento\Quote\Model\Quote\Item\AbstractIt $roundingDelta[$key] = 0.0000001; } foreach ($item->getChildren() as $child) { - $ratio = $child->getBaseRowTotal() / $parentBaseRowTotal; + $ratio = $parentBaseRowTotal != 0 ? $child->getBaseRowTotal() / $parentBaseRowTotal : 0; foreach ($keys as $key) { if (!$item->hasData($key)) { continue; From 72babf2a17926d2daca12184b63a7e7b7f2cdf72 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Wed, 1 Nov 2017 09:58:59 +0200 Subject: [PATCH 121/653] magento/magento2#10834: Signing in after selecting checkout button, will not end up to checkout page --- .../testsuite/Magento/Customer/Controller/AccountTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Customer/Controller/AccountTest.php b/dev/tests/integration/testsuite/Magento/Customer/Controller/AccountTest.php index 8cb1d896372a4..a01006a06a2e3 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/Controller/AccountTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Controller/AccountTest.php @@ -663,17 +663,17 @@ public function testWrongConfirmationEditPostAction() /** * Test redirect customer to account dashboard after logging in. * - * @param bool|null $redirectDashboardValue + * @param bool|null $redirectDashboard * @param string $redirectUrl * @magentoDbIsolation enabled * @magentoAppIsolation enabled * @magentoDataFixture Magento/Customer/_files/customer.php * @dataProvider loginPostRedirectDataProvider */ - public function testLoginPostRedirect($redirectDashboardValue, string $redirectUrl) + public function testLoginPostRedirect($redirectDashboard, string $redirectUrl) { - if (isset($redirectDashboardValue)) { - $this->_objectManager->get(ScopeConfigInterface::class)->setValue('customer/startup/redirect_dashboard', $redirectDashboardValue); + if (isset($redirectDashboard)) { + $this->_objectManager->get(ScopeConfigInterface::class)->setValue('customer/startup/redirect_dashboard', $redirectDashboard); } $this->_objectManager->get(Redirect::class)->setRedirectCookie('test'); From 7dd8acdc1229d1cc941a75fa7ed8410bc6017c28 Mon Sep 17 00:00:00 2001 From: Ievgen Sentiabov <isentiabov@magento.com> Date: Tue, 31 Oct 2017 17:23:42 +0200 Subject: [PATCH 122/653] MAGETWO-82883: Order status doesn't change in order grid - Added an additional provider to fetch not synced order entities --- .../Provider/UpdatedAtListProvider.php | 60 ++++++++ .../Provider/UpdatedIdListProvider.php | 6 +- .../Provider/NotSyncedDataProviderTest.php | 67 +++------ app/code/Magento/Sales/etc/di.xml | 10 ++ .../Sales/Model/GridAsyncInsertTest.php | 134 ++++++++++++++++++ 5 files changed, 224 insertions(+), 53 deletions(-) create mode 100644 app/code/Magento/Sales/Model/ResourceModel/Provider/UpdatedAtListProvider.php create mode 100644 dev/tests/integration/testsuite/Magento/Sales/Model/GridAsyncInsertTest.php diff --git a/app/code/Magento/Sales/Model/ResourceModel/Provider/UpdatedAtListProvider.php b/app/code/Magento/Sales/Model/ResourceModel/Provider/UpdatedAtListProvider.php new file mode 100644 index 0000000000000..846fa46572fde --- /dev/null +++ b/app/code/Magento/Sales/Model/ResourceModel/Provider/UpdatedAtListProvider.php @@ -0,0 +1,60 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Sales\Model\ResourceModel\Provider; + +use Magento\Framework\App\ResourceConnection; +use Magento\Framework\DB\Adapter\AdapterInterface; + +/** + * Retrieves ID's of not synced by `updated_at` column entities. + * The result should contain list of entities ID's from the main table which have `updated_at` column greater + * than in the grid table. + */ +class UpdatedAtListProvider implements NotSyncedDataProviderInterface +{ + /** + * @var ResourceConnection + */ + private $resourceConnection; + + /** + * @var AdapterInterface + */ + private $connection; + + /** + * @param ResourceConnection $resourceConnection + */ + public function __construct(ResourceConnection $resourceConnection) + { + $this->connection = $resourceConnection->getConnection('sales'); + $this->resourceConnection = $resourceConnection; + } + + /** + * @inheritdoc + */ + public function getIds($mainTableName, $gridTableName) + { + $mainTableName = $this->resourceConnection->getTableName($mainTableName); + $gridTableName = $this->resourceConnection->getTableName($gridTableName); + $select = $this->connection->select() + ->from($mainTableName, [$mainTableName . '.entity_id']) + ->joinInner( + [$gridTableName => $gridTableName], + sprintf( + '%s.entity_id = %s.entity_id AND %s.updated_at > %s.updated_at', + $mainTableName, + $gridTableName, + $mainTableName, + $gridTableName + ), + [] + ); + + return $this->connection->fetchAll($select, [], \Zend_Db::FETCH_COLUMN); + } +} diff --git a/app/code/Magento/Sales/Model/ResourceModel/Provider/UpdatedIdListProvider.php b/app/code/Magento/Sales/Model/ResourceModel/Provider/UpdatedIdListProvider.php index 59906c79215fa..42c6e9d650315 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Provider/UpdatedIdListProvider.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Provider/UpdatedIdListProvider.php @@ -38,10 +38,12 @@ public function __construct( */ public function getIds($mainTableName, $gridTableName) { + $mainTableName = $this->resourceConnection->getTableName($mainTableName); + $gridTableName = $this->resourceConnection->getTableName($gridTableName); $select = $this->getConnection()->select() - ->from($this->getConnection()->getTableName($mainTableName), [$mainTableName . '.entity_id']) + ->from($mainTableName, [$mainTableName . '.entity_id']) ->joinLeft( - [$gridTableName => $this->getConnection()->getTableName($gridTableName)], + [$gridTableName => $gridTableName], sprintf( '%s.%s = %s.%s', $mainTableName, diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Provider/NotSyncedDataProviderTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Provider/NotSyncedDataProviderTest.php index 8e248d239a501..5ed60f8de306f 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Provider/NotSyncedDataProviderTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Provider/NotSyncedDataProviderTest.php @@ -5,15 +5,11 @@ */ namespace Magento\Sales\Test\Unit\Model\ResourceModel\Provider; -use Magento\Framework\ObjectManager\TMap; use Magento\Framework\ObjectManager\TMapFactory; use Magento\Sales\Model\ResourceModel\Provider\NotSyncedDataProvider; use Magento\Sales\Model\ResourceModel\Provider\NotSyncedDataProviderInterface; use PHPUnit_Framework_MockObject_MockObject as MockObject; -/** - * Class NotSyncedDataProviderTest - */ class NotSyncedDataProviderTest extends \PHPUnit\Framework\TestCase { public function testGetIdsEmpty() @@ -23,30 +19,14 @@ public function testGetIdsEmpty() ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); - $tMap = $this->getMockBuilder(TMap::class) - ->disableOriginalConstructor() - ->getMock(); - $tMapFactory->expects(static::once()) - ->method('create') - ->with( - [ - 'array' => [], - 'type' => NotSyncedDataProviderInterface::class - ] - ) - ->willReturn($tMap); - $tMap->expects(static::once()) - ->method('getIterator') - ->willReturn(new \ArrayIterator([])); + $tMapFactory->method('create') + ->willReturn([]); - $provider = new NotSyncedDataProvider($tMapFactory, []); - static::assertEquals([], $provider->getIds('main_table', 'grid_table')); + $provider = new NotSyncedDataProvider($tMapFactory); + self::assertEquals([], $provider->getIds('main_table', 'grid_table')); } - /** - * @covers \Magento\Sales\Model\ResourceModel\Provider\NotSyncedDataProvider::getIds - */ public function testGetIds() { /** @var TMapFactory|MockObject $tMapFactory */ @@ -54,46 +34,31 @@ public function testGetIds() ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); - $tMap = $this->getMockBuilder(TMap::class) - ->disableOriginalConstructor() - ->getMock(); $provider1 = $this->getMockBuilder(NotSyncedDataProviderInterface::class) ->getMockForAbstractClass(); - $provider1->expects(static::once()) - ->method('getIds') + $provider1->method('getIds') ->willReturn([1, 2]); $provider2 = $this->getMockBuilder(NotSyncedDataProviderInterface::class) ->getMockForAbstractClass(); - $provider2->expects(static::once()) - ->method('getIds') + $provider2->method('getIds') ->willReturn([2, 3, 4]); - $tMapFactory->expects(static::once()) - ->method('create') - ->with( + $tMapFactory->method('create') + ->with(self::equalTo( [ - 'array' => [ - 'provider1' => NotSyncedDataProviderInterface::class, - 'provider2' => NotSyncedDataProviderInterface::class - ], + 'array' => [$provider1, $provider2], 'type' => NotSyncedDataProviderInterface::class ] - ) - ->willReturn($tMap); - $tMap->expects(static::once()) - ->method('getIterator') - ->willReturn(new \ArrayIterator([$provider1, $provider2])); + )) + ->willReturn([$provider1, $provider2]); - $provider = new NotSyncedDataProvider( - $tMapFactory, - [ - 'provider1' => NotSyncedDataProviderInterface::class, - 'provider2' => NotSyncedDataProviderInterface::class, - ] - ); + $provider = new NotSyncedDataProvider($tMapFactory, [$provider1, $provider2]); - static::assertEquals([1, 2, 3, 4], array_values($provider->getIds('main_table', 'grid_table'))); + self::assertEquals( + [1, 2, 3, 4], + array_values($provider->getIds('main_table', 'grid_table')) + ); } } diff --git a/app/code/Magento/Sales/etc/di.xml b/app/code/Magento/Sales/etc/di.xml index 9de3f238d6a39..22ddc7b333574 100644 --- a/app/code/Magento/Sales/etc/di.xml +++ b/app/code/Magento/Sales/etc/di.xml @@ -470,6 +470,15 @@ <argument name="entityRelationComposite" xsi:type="object">CreditmemoRelationsComposite</argument> </arguments> </type> + + <virtualType name="Magento\Sales\Model\ResourceModel\Provider\NotSyncedOrderDataProvider" type="Magento\Sales\Model\ResourceModel\Provider\NotSyncedDataProvider"> + <arguments> + <argument name="providers" xsi:type="array"> + <item name="default" xsi:type="string">Magento\Sales\Model\ResourceModel\Provider\UpdatedIdListProvider</item> + <item name="updated_at" xsi:type="string">Magento\Sales\Model\ResourceModel\Provider\UpdatedAtListProvider</item> + </argument> + </arguments> + </virtualType> <virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid" type="Magento\Sales\Model\ResourceModel\Grid"> <arguments> <argument name="mainTableName" xsi:type="string">sales_order</argument> @@ -520,6 +529,7 @@ <item name="payment_method" xsi:type="string">sales_order_payment.method</item> <item name="total_refunded" xsi:type="string">sales_order.total_refunded</item> </argument> + <argument name="notSyncedDataProvider" xsi:type="object">Magento\Sales\Model\ResourceModel\Provider\NotSyncedOrderDataProvider</argument> </arguments> </virtualType> <virtualType name="ShipmentGridAggregator" type="Magento\Sales\Model\ResourceModel\Grid"> diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/GridAsyncInsertTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/GridAsyncInsertTest.php new file mode 100644 index 0000000000000..726057cb86bb7 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Sales/Model/GridAsyncInsertTest.php @@ -0,0 +1,134 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Sales\Model; + +use Magento\Framework\Api\SearchCriteria; +use Magento\Framework\Api\SearchCriteriaBuilder; +use Magento\Framework\App\ResourceConnection; +use Magento\Framework\DB\Adapter\AdapterInterface; +use Magento\Sales\Api\Data\OrderInterface; +use Magento\Sales\Api\OrderRepositoryInterface; +use Magento\Sales\Model\ResourceModel\Grid as AbstractGrid; +use Magento\Sales\Model\ResourceModel\Order\Grid; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\TestFramework\ObjectManager; + +class GridAsyncInsertTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var ObjectManager + */ + private $objectManager; + + /** + * @var GridAsyncInsert + */ + private $gridAsyncInsert; + + /** + * @var AdapterInterface + */ + private $connection; + + /** + * @var OrderRepositoryInterface + */ + private $orderRepository; + + /** + * @var AbstractGrid + */ + private $grid; + + protected function setUp() + { + $this->objectManager = Bootstrap::getObjectManager(); + + /** @var ResourceConnection $resourceConnection */ + $resourceConnection = $this->objectManager->get(ResourceConnection::class); + $this->connection = $resourceConnection->getConnection('sales'); + $this->orderRepository = $this->objectManager->get(OrderRepositoryInterface::class); + $this->grid = $this->objectManager->get(Grid::class); + + $this->gridAsyncInsert = $this->objectManager->create( + GridAsyncInsert::class, + [ + 'entityGrid' => $this->grid + ] + ); + } + + /** + * Checks a case when order's grid should be updated asynchronously. + * + * @magentoConfigFixture default/dev/grid/async_indexing 1 + * @magentoDataFixture Magento/Sales/_files/order.php + */ + public function testExecuteAsyncUpdateOrderGrid() + { + $order = $this->getOrder('100000001'); + $this->performUpdateAssertions($order); + + // to un-sync main table and grid table need to wait at least one second + sleep(1); + $order->setStatus('complete'); + $this->orderRepository->save($order); + + $gridRow = $this->getGridRow($order->getEntityId()); + self::assertNotEquals($order->getStatus(), $gridRow['status']); + + $this->gridAsyncInsert->asyncInsert(); + $this->performUpdateAssertions($order); + } + + /** + * Loads order entity by provided order increment ID. + * + * @param string $incrementId + * @return OrderInterface + */ + private function getOrder(string $incrementId) : OrderInterface + { + /** @var SearchCriteria $searchCriteria */ + $searchCriteria = $this->objectManager->get(SearchCriteriaBuilder::class) + ->addFilter('increment_id', $incrementId) + ->create(); + + $items = $this->orderRepository->getList($searchCriteria) + ->getItems(); + + return array_pop($items); + } + + /** + * Gets row from `sales_order_grid` table by order's ID. + * + * @param int $entityId + * @return array + */ + private function getGridRow(int $entityId) : array + { + $tableName = $this->grid->getGridTable(); + $select = $this->connection->select() + ->from($tableName) + ->where($tableName . '.entity_id = ?', $entityId); + + return $this->connection->fetchRow($select); + } + + /** + * Perform assertions for updating grid test. + * + * @param OrderInterface $order + */ + private function performUpdateAssertions(OrderInterface $order) + { + $gridRow = $this->getGridRow($order->getEntityId()); + + self::assertEquals($order->getStatus(), $gridRow['status']); + self::assertEquals($order->getUpdatedAt(), $gridRow['updated_at']); + } +} From 12cb7fc32036641eba87e74479c41709879649e2 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Wed, 1 Nov 2017 11:48:03 +0200 Subject: [PATCH 123/653] 8255: Export Products action doesn't consider hide_for_product_page value. --- .../Model/Export/Product.php | 68 +++++-- .../Model/Import/Product.php | 181 +++++++++++++----- .../Model/Export/ProductTest.php | 35 ++++ .../Model/Import/ProductTest.php | 22 ++- .../Import/_files/import_media_two_stores.csv | 3 + .../_files/product_export_with_images.php | 47 +++++ 6 files changed, 287 insertions(+), 69 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/import_media_two_stores.csv create mode 100644 dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_images.php diff --git a/app/code/Magento/CatalogImportExport/Model/Export/Product.php b/app/code/Magento/CatalogImportExport/Model/Export/Product.php index 8ff71faaacd98..c5618ef482ef7 100644 --- a/app/code/Magento/CatalogImportExport/Model/Export/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Export/Product.php @@ -532,11 +532,12 @@ protected function getMediaGallery(array $productIds) ] )->joinLeft( ['mgv' => $this->_resourceModel->getTableName('catalog_product_entity_media_gallery_value')], - '(mg.value_id = mgv.value_id AND mgv.store_id = 0)', + '(mg.value_id = mgv.value_id)', [ 'mgv.label', 'mgv.position', - 'mgv.disabled' + 'mgv.disabled', + 'mgv.store_id' ] )->where( "mgvte.{$this->getProductEntityLinkField()} IN (?)", @@ -552,6 +553,7 @@ protected function getMediaGallery(array $productIds) '_media_label' => $mediaRow['label'], '_media_position' => $mediaRow['position'], '_media_is_disabled' => $mediaRow['disabled'], + '_media_store_id' => $mediaRow['store_id'], ]; } @@ -903,7 +905,7 @@ protected function getExportData() $dataRow = array_merge($dataRow, $stockItemRows[$productId]); } $this->appendMultirowData($dataRow, $multirawData); - if ($dataRow) { + if ($dataRow && !$this->skipRow($dataRow)) { $exportData[] = $dataRow; } } @@ -931,8 +933,8 @@ protected function loadCollection(): array foreach ($collection as $itemId => $item) { $data[$itemId][$storeId] = $item; } + $collection->clear(); } - $collection->clear(); return $data; } @@ -1024,12 +1026,10 @@ protected function collectRawData() unset($data[$itemId][$storeId][self::COL_ADDITIONAL_ATTRIBUTES]); } - if (!empty($data[$itemId][$storeId]) || $this->hasMultiselectData($item, $storeId)) { - $attrSetId = $item->getAttributeSetId(); - $data[$itemId][$storeId][self::COL_STORE] = $storeCode; - $data[$itemId][$storeId][self::COL_ATTR_SET] = $this->_attrSetIdToName[$attrSetId]; - $data[$itemId][$storeId][self::COL_TYPE] = $item->getTypeId(); - } + $attrSetId = $item->getAttributeSetId(); + $data[$itemId][$storeId][self::COL_STORE] = $storeCode; + $data[$itemId][$storeId][self::COL_ATTR_SET] = $this->_attrSetIdToName[$attrSetId]; + $data[$itemId][$storeId][self::COL_TYPE] = $item->getTypeId(); $data[$itemId][$storeId][self::COL_SKU] = htmlspecialchars_decode($item->getSku()); $data[$itemId][$storeId]['store_id'] = $storeId; $data[$itemId][$storeId]['product_id'] = $itemId; @@ -1162,7 +1162,7 @@ protected function isValidAttributeValue($code, $value) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ - private function appendMultirowData(&$dataRow, &$multiRawData) + private function appendMultirowData(&$dataRow, $multiRawData) { $productId = $dataRow['product_id']; $productLinkId = $dataRow['product_link_id']; @@ -1191,11 +1191,13 @@ private function appendMultirowData(&$dataRow, &$multiRawData) $additionalImageLabels = []; $additionalImageIsDisabled = []; foreach ($multiRawData['mediaGalery'][$productLinkId] as $mediaItem) { - $additionalImages[] = $mediaItem['_media_image']; - $additionalImageLabels[] = $mediaItem['_media_label']; + if ((int)$mediaItem['_media_store_id'] === Store::DEFAULT_STORE_ID) { + $additionalImages[] = $mediaItem['_media_image']; + $additionalImageLabels[] = $mediaItem['_media_label']; - if ($mediaItem['_media_is_disabled'] == true) { - $additionalImageIsDisabled[] = $mediaItem['_media_image']; + if ($mediaItem['_media_is_disabled'] == true) { + $additionalImageIsDisabled[] = $mediaItem['_media_image']; + } } } $dataRow['additional_images'] = @@ -1229,6 +1231,21 @@ private function appendMultirowData(&$dataRow, &$multiRawData) } } $dataRow = $this->rowCustomizer->addData($dataRow, $productId); + } else { + $additionalImageIsDisabled = []; + if (!empty($multiRawData['mediaGalery'][$productLinkId])) { + foreach ($multiRawData['mediaGalery'][$productLinkId] as $mediaItem) { + if ((int)$mediaItem['_media_store_id'] === $storeId) { + if ($mediaItem['_media_is_disabled'] == true) { + $additionalImageIsDisabled[] = $mediaItem['_media_image']; + } + } + } + } + if ($additionalImageIsDisabled) { + $dataRow['hide_from_product_page'] = + implode(Import::DEFAULT_GLOBAL_MULTI_VALUE_SEPARATOR, $additionalImageIsDisabled); + } } if (!empty($this->collectedMultiselectsData[$storeId][$productId])) { @@ -1494,4 +1511,25 @@ protected function getProductEntityLinkField() } return $this->productEntityLinkField; } + + /** + * Check if row has valuable information to export. + * + * @param array $dataRow + * @return bool + */ + private function skipRow(array $dataRow) + { + $baseInfo = [ + self::COL_STORE, + self::COL_ATTR_SET, + self::COL_TYPE, + self::COL_SKU, + 'store_id', + 'product_id', + 'product_link_id', + ]; + + return empty(array_diff(array_keys($dataRow), $baseInfo)); + } } diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index a0f1e25cf6512..36c0524bfae08 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -8,7 +8,6 @@ use Magento\Catalog\Model\Product\Visibility; use Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface as ValidatorInterface; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\App\ObjectManager; use Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor; use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface; use Magento\Framework\Stdlib\DateTime; @@ -1694,10 +1693,25 @@ protected function _saveProducts() // 5. Media gallery phase $disabledImages = []; list($rowImages, $rowLabels) = $this->getImagesFromRow($rowData); + $storeId = !empty($rowData[self::COL_STORE]) + ? $this->getStoreIdByCode($rowData[self::COL_STORE]) + : Store::DEFAULT_STORE_ID; if (isset($rowData['_media_is_disabled'])) { $disabledImages = array_flip( explode($this->getMultipleValueSeparator(), $rowData['_media_is_disabled']) ); + foreach ($disabledImages as $disabledImage => $position) { + $uploadedFile = $this->uploadMediaFiles($disabledImage, true); + $uploadedFile = $uploadedFile ?: $this->getSystemFile($disabledImage); + $mediaGallery[$storeId][$rowSku][$uploadedFile] = [ + 'attribute_id' => $this->getMediaGalleryAttributeId(), + 'label' => $rowLabels[self::COL_MEDIA_IMAGE][$position] ?? '', + 'position' => $position, + 'disabled' => 1, + 'value' => $disabledImage, + 'store_id' => $storeId, + ]; + } } $rowData[self::COL_MEDIA_IMAGE] = []; @@ -1730,7 +1744,7 @@ protected function _saveProducts() $rowData[$column] = $uploadedFile; } - if ($uploadedFile && !isset($mediaGallery[$rowSku][$uploadedFile])) { + if ($uploadedFile && !isset($mediaGallery[$storeId][$rowSku][$uploadedFile])) { if (isset($existingImages[$rowSku][$uploadedFile])) { if (isset($rowLabels[$column][$columnImageKey]) && $rowLabels[$column][$columnImageKey] != $existingImages[$rowSku][$uploadedFile]['label'] @@ -1744,7 +1758,7 @@ protected function _saveProducts() if ($column == self::COL_MEDIA_IMAGE) { $rowData[$column][] = $uploadedFile; } - $mediaGallery[$rowSku][$uploadedFile] = [ + $mediaGallery[$storeId][$rowSku][$uploadedFile] = [ 'attribute_id' => $this->getMediaGalleryAttributeId(), 'label' => isset($rowLabels[$column][$columnImageKey]) ? $rowLabels[$column][$columnImageKey] : '', 'position' => ++$position, @@ -1756,6 +1770,10 @@ protected function _saveProducts() } } + //Add images to restore "hide from product page" value for specified store and product. + if (empty($mediaGallery[$storeId][$rowSku])) { + $mediaGallery[$storeId][$rowSku]['all'] = ['restore' => true]; + } // 6. Attributes phase $rowStore = (self::SCOPE_STORE == $rowScope) ? $this->storeResolver->getStoreCodeToId($rowData[self::COL_STORE]) @@ -2075,66 +2093,64 @@ protected function _saveMediaGallery(array $mediaGalleryData) return $this; } $this->initMediaGalleryResources(); - $productIds = []; $imageNames = []; $multiInsertData = []; $valueToProductId = []; - foreach ($mediaGalleryData as $productSku => $mediaGalleryRows) { - $productId = $this->skuProcessor->getNewSku($productSku)[$this->getProductEntityLinkField()]; - $productIds[] = $productId; - $insertedGalleryImgs = []; - foreach ($mediaGalleryRows as $insertValue) { - if (!in_array($insertValue['value'], $insertedGalleryImgs)) { - $valueArr = [ - 'attribute_id' => $insertValue['attribute_id'], - 'value' => $insertValue['value'], - ]; - $valueToProductId[$insertValue['value']][] = $productId; - $imageNames[] = $insertValue['value']; - $multiInsertData[] = $valueArr; - $insertedGalleryImgs[] = $insertValue['value']; + $mediaGalleryData = $this->restoreDisableImage($mediaGalleryData); + foreach (array_keys($mediaGalleryData) as $storeId) { + foreach ($mediaGalleryData[$storeId] as $productSku => $mediaGalleryRows) { + $productId = $this->skuProcessor->getNewSku($productSku)[$this->getProductEntityLinkField()]; + + $insertedGalleryImgs = []; + foreach ($mediaGalleryRows as $insertValue) { + if (!in_array($insertValue['value'], $insertedGalleryImgs)) { + $valueArr = [ + 'attribute_id' => $insertValue['attribute_id'], + 'value' => $insertValue['value'], + ]; + $valueToProductId[$insertValue['value']][] = $productId; + $imageNames[] = $insertValue['value']; + $multiInsertData[] = $valueArr; + $insertedGalleryImgs[] = $insertValue['value']; + } } } } - $oldMediaValues = $this->_connection->fetchAssoc( - $this->_connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value']) - ->where('value IN (?)', $imageNames) - ); - $this->_connection->insertOnDuplicate($this->mediaGalleryTableName, $multiInsertData, []); - $multiInsertData = []; + $multiInsertData = $this->filterImageInsertData($multiInsertData, $imageNames); + if ($multiInsertData) { + $this->_connection->insertOnDuplicate($this->mediaGalleryTableName, $multiInsertData); + } $newMediaSelect = $this->_connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value']) ->where('value IN (?)', $imageNames); - if (array_keys($oldMediaValues)) { - $newMediaSelect->where('value_id NOT IN (?)', array_keys($oldMediaValues)); - } - $dataForSkinnyTable = []; + $multiInsertData = []; $newMediaValues = $this->_connection->fetchAssoc($newMediaSelect); - foreach ($mediaGalleryData as $productSku => $mediaGalleryRows) { - foreach ($mediaGalleryRows as $insertValue) { - foreach ($newMediaValues as $value_id => $values) { - if ($values['value'] == $insertValue['value']) { - $insertValue['value_id'] = $value_id; - $insertValue[$this->getProductEntityLinkField()] - = array_shift($valueToProductId[$values['value']]); - unset($newMediaValues[$value_id]); - break; + foreach (array_keys($mediaGalleryData) as $storeId) { + foreach ($mediaGalleryData[$storeId] as $productSku => $mediaGalleryRows) { + foreach ($mediaGalleryRows as $insertValue) { + foreach ($newMediaValues as $value_id => $values) { + if ($values['value'] == $insertValue['value']) { + $insertValue['value_id'] = $value_id; + $insertValue[$this->getProductEntityLinkField()] + = array_shift($valueToProductId[$values['value']]); + break; + } + } + if (isset($insertValue['value_id'])) { + $valueArr = [ + 'value_id' => $insertValue['value_id'], + 'store_id' => $storeId, + $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], + 'label' => $insertValue['label'], + 'position' => $insertValue['position'], + 'disabled' => $insertValue['disabled'], + ]; + $multiInsertData[] = $valueArr; + $dataForSkinnyTable[] = [ + 'value_id' => $insertValue['value_id'], + $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], + ]; } - } - if (isset($insertValue['value_id'])) { - $valueArr = [ - 'value_id' => $insertValue['value_id'], - 'store_id' => \Magento\Store\Model\Store::DEFAULT_STORE_ID, - $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], - 'label' => $insertValue['label'], - 'position' => $insertValue['position'], - 'disabled' => $insertValue['disabled'], - ]; - $multiInsertData[] = $valueArr; - $dataForSkinnyTable[] = [ - 'value_id' => $insertValue['value_id'], - $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], - ]; } } } @@ -2155,6 +2171,7 @@ protected function _saveMediaGallery(array $mediaGalleryData) $this->_connection->quoteInto('value_id IN (?)', $newMediaValues) ); } + return $this; } @@ -2976,4 +2993,64 @@ private function getExistingSku($sku) { return $this->_oldSku[strtolower($sku)]; } + + /** + * Set product images 'disable' = 0 for specified store. + * + * @param array $mediaGalleryData + * @return array + */ + private function restoreDisableImage(array $mediaGalleryData) + { + $restoreData = []; + foreach (array_keys($mediaGalleryData) as $storeId) { + foreach ($mediaGalleryData[$storeId] as $productSku => $mediaGalleryRows) { + $productId = $this->skuProcessor->getNewSku($productSku)[$this->getProductEntityLinkField()]; + $restoreData[] = sprintf( + 'store_id = %s and %s = %s', + $storeId, + $this->getProductEntityLinkField(), + $productId + ); + if (isset($mediaGalleryRows['all']['restore'])) { + unset($mediaGalleryData[$storeId][$productSku]); + } + } + } + + $this->_connection->update( + $this->mediaGalleryValueTableName, + ['disabled' => 0], + new \Zend_Db_Expr(implode(' or ', $restoreData)) + ); + + return $mediaGalleryData; + } + + /** + * Remove existed images from insert data. + * + * @param array $multiInsertData + * @param array $imageNames + * @return array + */ + private function filterImageInsertData(array $multiInsertData, array $imageNames) + { + //Remove image duplicates for stores. + $multiInsertData = array_map("unserialize", array_unique(array_map("serialize", $multiInsertData))); + $oldMediaValues = $this->_connection->fetchAssoc( + $this->_connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value', 'attribute_id']) + ->where('value IN (?)', $imageNames) + ); + foreach ($multiInsertData as $key => $data) { + foreach ($oldMediaValues as $mediaValue) { + if ($data['value'] == $mediaValue['value'] && $data['attribute_id'] == $mediaValue['attribute_id']) { + unset($multiInsertData[$key]); + break; + } + } + } + + return $multiInsertData; + } } diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Export/ProductTest.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Export/ProductTest.php index 085d6fac0e00b..269572ebcc27c 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Export/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Export/ProductTest.php @@ -9,6 +9,8 @@ * @magentoDataFixtureBeforeTransaction Magento/Catalog/_files/enable_reindex_schedule.php * @magentoAppIsolation enabled * @magentoDbIsolation enabled + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ProductTest extends \PHPUnit\Framework\TestCase { @@ -288,4 +290,37 @@ public function testCategoryIdsFilter() $this->assertNotContains('Simple Product Two', $exportData); $this->assertNotContains('Simple Product Not Visible On Storefront', $exportData); } + + /** + * Test 'hide from product page' export for non-default store. + * + * @magentoDataFixture Magento/CatalogImportExport/_files/product_export_with_images.php + */ + public function testExportWithMedia() + { + /** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ + $productRepository = $this->objectManager->get(\Magento\Catalog\Api\ProductRepositoryInterface::class); + $product = $productRepository->get('simple', 1); + $mediaGallery = $product->getData('media_gallery'); + $image = array_shift($mediaGallery['images']); + $expected = [ + 'hide_from_product_page' => 'hide_from_product_page', + '' => '', + $image['file'] => $image['file'], + ]; + $this->model->setWriter( + $this->objectManager->create( + \Magento\ImportExport\Model\Export\Adapter\Csv::class + ) + ); + $exportData = $this->model->export(); + /** @var $varDirectory \Magento\Framework\Filesystem\Directory\WriteInterface */ + $varDirectory = $this->objectManager->get(\Magento\Framework\Filesystem::class) + ->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR); + $varDirectory->writeFile('test_product_with_image.csv', $exportData); + /** @var \Magento\Framework\File\Csv $csv */ + $csv = $this->objectManager->get(\Magento\Framework\File\Csv::class); + $data = $csv->getDataPairs($varDirectory->getAbsolutePath('test_product_with_image.csv'), 76, 76); + self::assertSame($expected, $data); + } } diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php index 0f9cb373e59ed..fc2a2de24f4ac 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php @@ -22,11 +22,10 @@ use Magento\Framework\App\Bootstrap; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\ObjectManager; -use Magento\Framework\Registry; use Magento\Framework\Filesystem; +use Magento\Framework\Registry; use Magento\ImportExport\Model\Import; use Magento\Store\Model\Store; -use Magento\UrlRewrite\Model\UrlRewrite; /** * Class ProductTest @@ -1919,4 +1918,23 @@ public function testImportWithDifferentSkuCase() ); } } + + /** + * Test that product import with images for non-default store works properly. + * + * @magentoDataIsolation enabled + * @magentoDataFixture mediaImportImageFixture + * @magentoAppIsolation enabled + */ + public function testImportImageForNonDefaultStore() + { + $this->importDataForMediaTest('import_media_two_stores.csv'); + $product = $this->getProductBySku('simple_with_images'); + $mediaGallery = $product->getData('media_gallery'); + foreach ($mediaGallery['images'] as $image) { + $image['file'] === 'magento_image.jpg' + ? self::assertSame('1', $image['disabled']) + : self::assertSame('0', $image['disabled']); + } + } } diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/import_media_two_stores.csv b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/import_media_two_stores.csv new file mode 100644 index 0000000000000..59f8df69f555e --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/import_media_two_stores.csv @@ -0,0 +1,3 @@ +sku,store_view_code,attribute_set_code,product_type,categories,product_websites,name,description,short_description,weight,product_online,tax_class_name,visibility,price,special_price,special_price_from_date,special_price_to_date,url_key,meta_title,meta_keywords,meta_description,base_image,base_image_label,small_image,small_image_label,thumbnail_image,thumbnail_image_label,swatch_image,swatch_image_label,created_at,updated_at,new_from_date,new_to_date,display_product_options_in,map_price,msrp_price,map_enabled,gift_message_available,custom_design,custom_design_from,custom_design_to,custom_layout_update,page_layout,product_options_container,msrp_display_actual_price_type,country_of_manufacture,additional_attributes,qty,out_of_stock_qty,use_config_min_qty,is_qty_decimal,allow_backorders,use_config_backorders,min_cart_qty,use_config_min_sale_qty,max_cart_qty,use_config_max_sale_qty,is_in_stock,notify_on_stock_below,use_config_notify_stock_qty,manage_stock,use_config_manage_stock,use_config_qty_increments,qty_increments,use_config_enable_qty_inc,enable_qty_increments,is_decimal_divided,website_id,related_skus,related_position,crosssell_skus,crosssell_position,upsell_skus,upsell_position,additional_images,additional_image_labels,hide_from_product_page,custom_options,bundle_price_type,bundle_sku_type,bundle_price_view,bundle_weight_type,bundle_values,bundle_shipment_type,configurable_variations,configurable_variation_labels,associated_skus +simple_with_images,,Default,simple,Default Category,base,Simple Product,Description with <b>html tag</b>,Short description,1,1,0,"Catalog, Search",10,,,,simple-product,meta title,meta keyword,meta description,magento_image.jpg,,magento_image.jpg,,magento_image.jpg,,,,"11/1/17, 1:41 AM","11/1/17, 1:41 AM",,,Block after Info Column,,,,,,,,,,,,,,100,0,1,0,0,1,1,1,0,1,1,,1,0,1,1,0,1,0,0,0,,,,,,,magento_image.jpg,Image Alt Text,,"name=Test Select,type=drop_down,required=1,price=3.0000,price_type=fixed,sku=3-1-select,file_extension=,image_size_x=,image_size_y=,option_title=Option 1|name=Test Select,type=drop_down,required=1,price=3.0000,price_type=fixed,sku=3-2-select,file_extension=,image_size_x=,image_size_y=,option_title=Option 2|name=Test Field,type=field,required=1,price=1.0000,price_type=fixed,sku=1-text,max_characters=100,file_extension=,image_size_x=,image_size_y=|name=Test Radio,type=radio,required=1,price=3.0000,price_type=fixed,sku=4-1-radio,file_extension=,image_size_x=,image_size_y=,option_title=Option 1|name=Test Radio,type=radio,required=1,price=3.0000,price_type=fixed,sku=4-2-radio,file_extension=,image_size_x=,image_size_y=,option_title=Option 2|name=Test Date and Time,type=date_time,required=1,price=2.0000,price_type=fixed,sku=2-date,file_extension=,image_size_x=,image_size_y=",,,,,,,,, +simple_with_images,default,Default,simple,,,,,,,,,,,,,,,,,,,Image Alt Text,,Image Alt Text,,Image Alt Text,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,magento_image.jpg,,,,,,,,,, diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_images.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_images.php new file mode 100644 index 0000000000000..1c9dbbb5553f8 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_images.php @@ -0,0 +1,47 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +require dirname(__DIR__, 2) . '/Catalog/_files/product_image.php'; +require dirname(__DIR__, 2) . '/Catalog/_files/product_simple.php'; + +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); +/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ +$productRepository = $objectManager->create(\Magento\Catalog\Api\ProductRepositoryInterface::class); +$product = $productRepository->get('simple'); +$product->setStoreId(0) + ->setImage('/m/a/magento_image.jpg') + ->setSmallImage('/m/a/magento_image.jpg') + ->setThumbnail('/m/a/magento_image.jpg') + ->setData( + 'media_gallery', + [ + 'images' => [ + [ + 'file' => '/m/a/magento_image.jpg', + 'position' => 1, + 'label' => 'Image Alt Text', + 'disabled' => 0, + 'media_type' => 'image', + ], + ], + ] + )->save(); +$image = array_shift($product->getData('media_gallery')['images']); +$product->setStoreId(1)->setData( + 'media_gallery', + [ + 'images' => [ + [ + 'file' => $image['file'], + 'value_id' => $image['value_id'], + 'position' => 1, + 'label' => 'Image Alt Text', + 'disabled' => 1, + 'media_type' => 'image', + ], + ], + ] +)->save(); From 10e739aa387d91caa1214b397a360900b09202d2 Mon Sep 17 00:00:00 2001 From: Volodymyr Zaets <vzaets@magento.com> Date: Wed, 1 Nov 2017 16:22:16 +0200 Subject: [PATCH 124/653] MAGETWO-70323: [GITHUB] Can't add to cart Bundle product with simple product option price as "zero" #8969 --- .../Test/Unit/Model/Quote/DiscountTest.php | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Quote/DiscountTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Quote/DiscountTest.php index a1c325f39a947..671f20a27a460 100644 --- a/app/code/Magento/SalesRule/Test/Unit/Model/Quote/DiscountTest.php +++ b/app/code/Magento/SalesRule/Test/Unit/Model/Quote/DiscountTest.php @@ -229,7 +229,30 @@ public function collectItemHasChildrenDataProvider() { $data = [ // 3 items, each $100, testing that discount are distributed to item correctly - 'three_items' => [ + [ + 'child_item_data' => [ + 'item1' => [ + 'base_row_total' => 0, + ] + ], + 'parent_item_data' => [ + 'discount_amount' => 20, + 'base_discount_amount' => 10, + 'original_discount_amount' => 40, + 'base_original_discount_amount' => 20, + 'base_row_total' => 0, + ], + 'expected_child_item_data' => [ + 'item1' => [ + 'discount_amount' => 0, + 'base_discount_amount' => 0, + 'original_discount_amount' => 0, + 'base_original_discount_amount' => 0, + ] + ], + ], + [ + // 3 items, each $100, testing that discount are distributed to item correctly 'child_item_data' => [ 'item1' => [ 'base_row_total' => 100, From b7703ac414d52093790eb1df1012f7b9492ad56f Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Wed, 1 Nov 2017 16:28:23 +0200 Subject: [PATCH 125/653] 8255: Export Products action doesn't consider hide_for_product_page value. --- .../Magento/CatalogImportExport/Model/Import/Product.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 14fd7f58b7c65..bdf7062e2467d 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -5,18 +5,19 @@ */ namespace Magento\CatalogImportExport\Model\Import; +use Magento\Catalog\Model\Config as CatalogConfig; use Magento\Catalog\Model\Product\Visibility; use Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface as ValidatorInterface; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Filesystem; use Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor; use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface; use Magento\Framework\Stdlib\DateTime; -use Magento\Framework\Filesystem; use Magento\ImportExport\Model\Import; use Magento\ImportExport\Model\Import\Entity\AbstractEntity; use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingError; use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface; -use Magento\Catalog\Model\Config as CatalogConfig; +use Magento\Store\Model\Store; /** * Import entity product model From d4549092fb8230b6fb9950921fea79068c2c1252 Mon Sep 17 00:00:00 2001 From: mage2-team <mage2-team@magento.com> Date: Wed, 1 Nov 2017 09:51:19 -0700 Subject: [PATCH 126/653] MAGETWO-80558: Magento 2.2.1 Publication (build 2.2.1.041) --- .../AdvancedPricingImportExport/composer.json | 2 +- app/code/Magento/Backend/composer.json | 2 +- app/code/Magento/Braintree/composer.json | 2 +- app/code/Magento/Bundle/composer.json | 2 +- app/code/Magento/Catalog/composer.json | 2 +- .../Magento/CatalogImportExport/composer.json | 2 +- .../Magento/CatalogInventory/composer.json | 2 +- app/code/Magento/CatalogRule/composer.json | 2 +- app/code/Magento/CatalogSearch/composer.json | 2 +- .../Magento/CatalogUrlRewrite/composer.json | 2 +- app/code/Magento/Checkout/composer.json | 2 +- app/code/Magento/Cms/composer.json | 2 +- app/code/Magento/Config/composer.json | 2 +- .../Magento/ConfigurableProduct/composer.json | 2 +- app/code/Magento/Customer/composer.json | 2 +- app/code/Magento/Deploy/composer.json | 2 +- app/code/Magento/Developer/composer.json | 2 +- .../Magento/GoogleAnalytics/composer.json | 2 +- app/code/Magento/ImportExport/composer.json | 2 +- app/code/Magento/Quote/composer.json | 2 +- app/code/Magento/Reports/composer.json | 2 +- app/code/Magento/Review/composer.json | 2 +- app/code/Magento/Sales/composer.json | 2 +- app/code/Magento/Search/composer.json | 2 +- app/code/Magento/Shipping/composer.json | 2 +- app/code/Magento/Signifyd/composer.json | 12 +- app/code/Magento/Sitemap/composer.json | 2 +- app/code/Magento/Store/composer.json | 2 +- app/code/Magento/Swagger/composer.json | 2 +- app/code/Magento/Tax/composer.json | 2 +- app/code/Magento/Theme/composer.json | 2 +- app/code/Magento/Translation/composer.json | 2 +- app/code/Magento/Ui/composer.json | 2 +- app/code/Magento/UrlRewrite/composer.json | 2 +- .../frontend/Magento/luma/composer.json | 2 +- composer.json | 74 +++--- composer.lock | 241 +++++++++--------- lib/internal/Magento/Framework/composer.json | 2 +- 38 files changed, 201 insertions(+), 196 deletions(-) diff --git a/app/code/Magento/AdvancedPricingImportExport/composer.json b/app/code/Magento/AdvancedPricingImportExport/composer.json index ec54cfd1e5e62..79e6e2d368736 100644 --- a/app/code/Magento/AdvancedPricingImportExport/composer.json +++ b/app/code/Magento/AdvancedPricingImportExport/composer.json @@ -13,7 +13,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Backend/composer.json b/app/code/Magento/Backend/composer.json index 036f0b4d54a46..3d8cfa49cd1fa 100644 --- a/app/code/Magento/Backend/composer.json +++ b/app/code/Magento/Backend/composer.json @@ -24,7 +24,7 @@ "magento/module-theme": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Braintree/composer.json b/app/code/Magento/Braintree/composer.json index 5a9112a19375f..f30337336105e 100644 --- a/app/code/Magento/Braintree/composer.json +++ b/app/code/Magento/Braintree/composer.json @@ -24,7 +24,7 @@ "magento/module-theme": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "proprietary" ], diff --git a/app/code/Magento/Bundle/composer.json b/app/code/Magento/Bundle/composer.json index 39b5fe1b1a6d5..0983d4c6b5946 100644 --- a/app/code/Magento/Bundle/composer.json +++ b/app/code/Magento/Bundle/composer.json @@ -25,7 +25,7 @@ "magento/module-bundle-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Catalog/composer.json b/app/code/Magento/Catalog/composer.json index 5cdf62cdb3405..10b408c545878 100644 --- a/app/code/Magento/Catalog/composer.json +++ b/app/code/Magento/Catalog/composer.json @@ -34,7 +34,7 @@ "magento/module-catalog-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "102.0.0", + "version": "102.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogImportExport/composer.json b/app/code/Magento/CatalogImportExport/composer.json index 5ef316b2c065c..2b70f65d1f830 100644 --- a/app/code/Magento/CatalogImportExport/composer.json +++ b/app/code/Magento/CatalogImportExport/composer.json @@ -16,7 +16,7 @@ "ext-ctype": "*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogInventory/composer.json b/app/code/Magento/CatalogInventory/composer.json index 142ae98422e87..79f86612d41bd 100644 --- a/app/code/Magento/CatalogInventory/composer.json +++ b/app/code/Magento/CatalogInventory/composer.json @@ -13,7 +13,7 @@ "magento/module-ui": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogRule/composer.json b/app/code/Magento/CatalogRule/composer.json index 8bee82f6fe34b..845bdeff31f42 100644 --- a/app/code/Magento/CatalogRule/composer.json +++ b/app/code/Magento/CatalogRule/composer.json @@ -17,7 +17,7 @@ "magento/module-catalog-rule-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogSearch/composer.json b/app/code/Magento/CatalogSearch/composer.json index 8cdf797e1ca4c..13be21e3248f2 100644 --- a/app/code/Magento/CatalogSearch/composer.json +++ b/app/code/Magento/CatalogSearch/composer.json @@ -15,7 +15,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogUrlRewrite/composer.json b/app/code/Magento/CatalogUrlRewrite/composer.json index f11467e9f8d1f..344562864384f 100644 --- a/app/code/Magento/CatalogUrlRewrite/composer.json +++ b/app/code/Magento/CatalogUrlRewrite/composer.json @@ -14,7 +14,7 @@ "magento/module-ui": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Checkout/composer.json b/app/code/Magento/Checkout/composer.json index fa4b5071d4dd6..48d6562c5c77e 100644 --- a/app/code/Magento/Checkout/composer.json +++ b/app/code/Magento/Checkout/composer.json @@ -27,7 +27,7 @@ "magento/module-cookie": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Cms/composer.json b/app/code/Magento/Cms/composer.json index c4f690db9cd1f..3094908e69ca0 100644 --- a/app/code/Magento/Cms/composer.json +++ b/app/code/Magento/Cms/composer.json @@ -18,7 +18,7 @@ "magento/module-cms-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "102.0.0", + "version": "102.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Config/composer.json b/app/code/Magento/Config/composer.json index fb4c80115334d..a29f65473ab01 100644 --- a/app/code/Magento/Config/composer.json +++ b/app/code/Magento/Config/composer.json @@ -13,7 +13,7 @@ "magento/module-deploy": "100.2.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ConfigurableProduct/composer.json b/app/code/Magento/ConfigurableProduct/composer.json index a62ce29813ce3..3b60f57c2f923 100644 --- a/app/code/Magento/ConfigurableProduct/composer.json +++ b/app/code/Magento/ConfigurableProduct/composer.json @@ -24,7 +24,7 @@ "magento/module-product-links-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Customer/composer.json b/app/code/Magento/Customer/composer.json index 0e8ebf957edf5..61fcb62932992 100644 --- a/app/code/Magento/Customer/composer.json +++ b/app/code/Magento/Customer/composer.json @@ -29,7 +29,7 @@ "magento/module-customer-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Deploy/composer.json b/app/code/Magento/Deploy/composer.json index 8092f80be0e1a..e33d2e72f64a4 100644 --- a/app/code/Magento/Deploy/composer.json +++ b/app/code/Magento/Deploy/composer.json @@ -10,7 +10,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Developer/composer.json b/app/code/Magento/Developer/composer.json index a0782be817c0a..518f2cc77c07e 100644 --- a/app/code/Magento/Developer/composer.json +++ b/app/code/Magento/Developer/composer.json @@ -8,7 +8,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GoogleAnalytics/composer.json b/app/code/Magento/GoogleAnalytics/composer.json index bf7eadd9f708f..b74763a22ec14 100644 --- a/app/code/Magento/GoogleAnalytics/composer.json +++ b/app/code/Magento/GoogleAnalytics/composer.json @@ -12,7 +12,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ImportExport/composer.json b/app/code/Magento/ImportExport/composer.json index 623346e0a7782..23ed2f6346ef7 100644 --- a/app/code/Magento/ImportExport/composer.json +++ b/app/code/Magento/ImportExport/composer.json @@ -12,7 +12,7 @@ "ext-ctype": "*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Quote/composer.json b/app/code/Magento/Quote/composer.json index 5d4c5f35a3a24..a892697802e63 100644 --- a/app/code/Magento/Quote/composer.json +++ b/app/code/Magento/Quote/composer.json @@ -23,7 +23,7 @@ "magento/module-webapi": "100.2.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Reports/composer.json b/app/code/Magento/Reports/composer.json index 74ed132bc65d2..1058052dd1122 100644 --- a/app/code/Magento/Reports/composer.json +++ b/app/code/Magento/Reports/composer.json @@ -22,7 +22,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Review/composer.json b/app/code/Magento/Review/composer.json index f3b36e8b3f3fa..47680b454c29f 100644 --- a/app/code/Magento/Review/composer.json +++ b/app/code/Magento/Review/composer.json @@ -18,7 +18,7 @@ "magento/module-review-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Sales/composer.json b/app/code/Magento/Sales/composer.json index c4a99e5b45076..9761f82d1894a 100644 --- a/app/code/Magento/Sales/composer.json +++ b/app/code/Magento/Sales/composer.json @@ -32,7 +32,7 @@ "magento/module-sales-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Search/composer.json b/app/code/Magento/Search/composer.json index 60ba6550cddf4..c6aecd101fc6f 100644 --- a/app/code/Magento/Search/composer.json +++ b/app/code/Magento/Search/composer.json @@ -11,7 +11,7 @@ "magento/module-ui": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Shipping/composer.json b/app/code/Magento/Shipping/composer.json index 06fa1e5295c60..a7a2a3d48b06e 100644 --- a/app/code/Magento/Shipping/composer.json +++ b/app/code/Magento/Shipping/composer.json @@ -25,7 +25,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Signifyd/composer.json b/app/code/Magento/Signifyd/composer.json index f11b23cc3b6c4..a162cef1614ca 100644 --- a/app/code/Magento/Signifyd/composer.json +++ b/app/code/Magento/Signifyd/composer.json @@ -3,21 +3,21 @@ "description": "Submitting Case Entry to Signifyd on Order Creation", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-config": "100.2.*", - "magento/framework": "100.2.*", - "magento/module-sales": "100.2.*", + "magento/module-config": "101.0.*", + "magento/framework": "101.0.*", + "magento/module-sales": "101.0.*", "magento/module-store": "100.2.*", - "magento/module-customer": "100.2.*", + "magento/module-customer": "101.0.*", "magento/module-directory": "100.2.*", "magento/module-checkout": "100.2.*", "magento/module-backend": "100.2.*", "magento/module-payment": "100.2.*" }, "suggest": { - "magento/module-config": "100.2.*" + "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.2.1", "license": [ "proprietary" ], diff --git a/app/code/Magento/Sitemap/composer.json b/app/code/Magento/Sitemap/composer.json index 71d9198a332a7..88be3616eebd0 100644 --- a/app/code/Magento/Sitemap/composer.json +++ b/app/code/Magento/Sitemap/composer.json @@ -18,7 +18,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Store/composer.json b/app/code/Magento/Store/composer.json index 662414049c955..f9eb84e2f9fa1 100644 --- a/app/code/Magento/Store/composer.json +++ b/app/code/Magento/Store/composer.json @@ -14,7 +14,7 @@ "magento/module-deploy": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Swagger/composer.json b/app/code/Magento/Swagger/composer.json index 2429607dc8716..787d58891c9e0 100644 --- a/app/code/Magento/Swagger/composer.json +++ b/app/code/Magento/Swagger/composer.json @@ -6,7 +6,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Tax/composer.json b/app/code/Magento/Tax/composer.json index 140b0ee8450cd..1d09fb64eed89 100644 --- a/app/code/Magento/Tax/composer.json +++ b/app/code/Magento/Tax/composer.json @@ -22,7 +22,7 @@ "magento/module-tax-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Theme/composer.json b/app/code/Magento/Theme/composer.json index 3d3161c476ef1..4593eccd23dea 100644 --- a/app/code/Magento/Theme/composer.json +++ b/app/code/Magento/Theme/composer.json @@ -22,7 +22,7 @@ "magento/module-directory": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Translation/composer.json b/app/code/Magento/Translation/composer.json index f7c581340eb2e..a2504cdfbb9cd 100644 --- a/app/code/Magento/Translation/composer.json +++ b/app/code/Magento/Translation/composer.json @@ -12,7 +12,7 @@ "magento/module-deploy": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Ui/composer.json b/app/code/Magento/Ui/composer.json index f93b97b1b30fe..1f58c55ce61b6 100644 --- a/app/code/Magento/Ui/composer.json +++ b/app/code/Magento/Ui/composer.json @@ -13,7 +13,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/UrlRewrite/composer.json b/app/code/Magento/UrlRewrite/composer.json index db825c41f392b..32086222e43f1 100644 --- a/app/code/Magento/UrlRewrite/composer.json +++ b/app/code/Magento/UrlRewrite/composer.json @@ -12,7 +12,7 @@ "magento/module-cms-url-rewrite": "100.2.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/design/frontend/Magento/luma/composer.json b/app/design/frontend/Magento/luma/composer.json index 7251ba69b0f3c..b5db1aa32b4a1 100644 --- a/app/design/frontend/Magento/luma/composer.json +++ b/app/design/frontend/Magento/luma/composer.json @@ -7,7 +7,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-theme", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/composer.json b/composer.json index 9d0edf0e54dcb..01d6ff8e51e43 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "magento/magento2ce", "description": "Magento 2 (Community Edition)", "type": "project", - "version": "2.2.1-dev", + "version": "2.2.1", "license": [ "OSL-3.0", "AFL-3.0" @@ -84,40 +84,40 @@ "replace": { "magento/module-marketplace": "100.2.0", "magento/module-admin-notification": "100.2.0", - "magento/module-advanced-pricing-import-export": "100.2.0", + "magento/module-advanced-pricing-import-export": "100.2.1", "magento/module-authorization": "100.2.0", "magento/module-authorizenet": "100.2.0", - "magento/module-backend": "100.2.0", + "magento/module-backend": "100.2.1", "magento/module-backup": "100.2.0", - "magento/module-braintree": "100.2.0", - "magento/module-bundle": "100.2.0", + "magento/module-braintree": "100.2.1", + "magento/module-bundle": "100.2.1", "magento/module-bundle-import-export": "100.2.0", "magento/module-cache-invalidate": "100.2.0", "magento/module-captcha": "100.2.0", - "magento/module-catalog": "102.0.0", - "magento/module-catalog-import-export": "100.2.0", - "magento/module-catalog-inventory": "100.2.0", - "magento/module-catalog-rule": "101.0.0", + "magento/module-catalog": "102.0.1", + "magento/module-catalog-import-export": "100.2.1", + "magento/module-catalog-inventory": "100.2.1", + "magento/module-catalog-rule": "101.0.1", "magento/module-catalog-rule-configurable": "100.2.0", - "magento/module-catalog-search": "100.2.0", - "magento/module-catalog-url-rewrite": "100.2.0", + "magento/module-catalog-search": "100.2.1", + "magento/module-catalog-url-rewrite": "100.2.1", "magento/module-catalog-widget": "100.2.0", - "magento/module-checkout": "100.2.0", + "magento/module-checkout": "100.2.1", "magento/module-checkout-agreements": "100.2.0", - "magento/module-cms": "102.0.0", + "magento/module-cms": "102.0.1", "magento/module-cms-url-rewrite": "100.2.0", - "magento/module-config": "101.0.0", + "magento/module-config": "101.0.1", "magento/module-configurable-import-export": "100.2.0", - "magento/module-configurable-product": "100.2.0", + "magento/module-configurable-product": "100.2.1", "magento/module-configurable-product-sales": "100.2.0", "magento/module-contact": "100.2.0", "magento/module-cookie": "100.2.0", "magento/module-cron": "100.2.0", "magento/module-currency-symbol": "100.2.0", - "magento/module-customer": "101.0.0", + "magento/module-customer": "101.0.1", "magento/module-customer-import-export": "100.2.0", - "magento/module-deploy": "100.2.0", - "magento/module-developer": "100.2.0", + "magento/module-deploy": "100.2.1", + "magento/module-developer": "100.2.1", "magento/module-dhl": "100.2.0", "magento/module-directory": "100.2.0", "magento/module-downloadable": "100.2.0", @@ -128,11 +128,11 @@ "magento/module-fedex": "100.2.0", "magento/module-gift-message": "100.2.0", "magento/module-google-adwords": "100.2.0", - "magento/module-google-analytics": "100.2.0", + "magento/module-google-analytics": "100.2.1", "magento/module-google-optimizer": "100.2.0", "magento/module-grouped-import-export": "100.2.0", "magento/module-grouped-product": "100.2.0", - "magento/module-import-export": "100.2.0", + "magento/module-import-export": "100.2.1", "magento/module-indexer": "100.2.0", "magento/module-integration": "100.2.0", "magento/module-layered-navigation": "100.2.0", @@ -149,35 +149,35 @@ "magento/module-persistent": "100.2.0", "magento/module-product-alert": "100.2.0", "magento/module-product-video": "100.2.0", - "magento/module-quote": "101.0.0", - "magento/module-reports": "100.2.0", + "magento/module-quote": "101.0.1", + "magento/module-reports": "100.2.1", "magento/module-require-js": "100.2.0", - "magento/module-review": "100.2.0", + "magento/module-review": "100.2.1", "magento/module-robots": "100.2.0", "magento/module-rss": "100.2.0", "magento/module-rule": "100.2.0", - "magento/module-sales": "101.0.0", + "magento/module-sales": "101.0.1", "magento/module-sales-inventory": "100.2.0", "magento/module-sales-rule": "101.0.0", "magento/module-sales-sequence": "100.2.0", "magento/module-sample-data": "100.2.0", - "magento/module-search": "100.2.0", + "magento/module-search": "100.2.1", "magento/module-security": "100.2.0", "magento/module-send-friend": "100.2.0", - "magento/module-shipping": "100.2.0", - "magento/module-signifyd": "100.2.0", - "magento/module-sitemap": "100.2.0", - "magento/module-store": "100.2.0", - "magento/module-swagger": "100.2.0", + "magento/module-shipping": "100.2.1", + "magento/module-signifyd": "100.2.1", + "magento/module-sitemap": "100.2.1", + "magento/module-store": "100.2.1", + "magento/module-swagger": "100.2.1", "magento/module-swatches": "100.2.0", "magento/module-swatches-layered-navigation": "100.2.0", - "magento/module-tax": "100.2.0", + "magento/module-tax": "100.2.1", "magento/module-tax-import-export": "100.2.0", - "magento/module-theme": "100.2.0", - "magento/module-translation": "100.2.0", - "magento/module-ui": "101.0.0", + "magento/module-theme": "100.2.1", + "magento/module-translation": "100.2.1", + "magento/module-ui": "101.0.1", "magento/module-ups": "100.2.0", - "magento/module-url-rewrite": "101.0.0", + "magento/module-url-rewrite": "101.0.1", "magento/module-user": "101.0.0", "magento/module-usps": "100.2.0", "magento/module-variable": "100.2.0", @@ -190,7 +190,7 @@ "magento/module-wishlist": "101.0.0", "magento/theme-adminhtml-backend": "100.2.0", "magento/theme-frontend-blank": "100.2.0", - "magento/theme-frontend-luma": "100.2.0", + "magento/theme-frontend-luma": "100.2.1", "magento/language-de_de": "100.2.0", "magento/language-en_us": "100.2.0", "magento/language-es_es": "100.2.0", @@ -198,7 +198,7 @@ "magento/language-nl_nl": "100.2.0", "magento/language-pt_br": "100.2.0", "magento/language-zh_hans_cn": "100.2.0", - "magento/framework": "101.0.0", + "magento/framework": "101.0.1", "trentrichardson/jquery-timepicker-addon": "1.4.3", "components/jquery": "1.11.0", "blueimp/jquery-file-upload": "5.6.14", diff --git a/composer.lock b/composer.lock index aba327fee6810..cb4011c852f27 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "5fd4506bfe38cce56d27c039e8f7bfb2", + "content-hash": "5b9fe4326527e7bb24d0e6c6320607d8", "packages": [ { "name": "braintree/braintree_php", @@ -494,16 +494,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "5.2.1", + "version": "5.2.6", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "429be236f296ca249d61c65649cdf2652f4a5e80" + "reference": "d283e11b6e14c6f4664cf080415c4341293e5bbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/429be236f296ca249d61c65649cdf2652f4a5e80", - "reference": "429be236f296ca249d61c65649cdf2652f4a5e80", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/d283e11b6e14c6f4664cf080415c4341293e5bbd", + "reference": "d283e11b6e14c6f4664cf080415c4341293e5bbd", "shasum": "" }, "require": { @@ -512,7 +512,6 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^2.1", "json-schema/json-schema-test-suite": "1.2.0", - "phpdocumentor/phpdocumentor": "^2.7", "phpunit/phpunit": "^4.8.22" }, "bin": [ @@ -557,7 +556,7 @@ "json", "schema" ], - "time": "2017-05-16T21:06:09+00:00" + "time": "2017-10-21T13:15:38+00:00" }, { "name": "league/climate", @@ -912,16 +911,16 @@ }, { "name": "paragonie/random_compat", - "version": "v2.0.10", + "version": "v2.0.11", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d" + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/634bae8e911eefa89c1abfbf1b66da679ac8f54d", - "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8", + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8", "shasum": "" }, "require": { @@ -956,7 +955,7 @@ "pseudorandom", "random" ], - "time": "2017-03-13T16:27:32+00:00" + "time": "2017-09-27T21:40:39+00:00" }, { "name": "pelago/emogrifier", @@ -1016,16 +1015,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "2.0.6", + "version": "2.0.7", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "34a7699e6f31b1ef4035ee36444407cecf9f56aa" + "reference": "f4b6a522dfa1fd1e477c9cfe5909d5b31f098c0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/34a7699e6f31b1ef4035ee36444407cecf9f56aa", - "reference": "34a7699e6f31b1ef4035ee36444407cecf9f56aa", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/f4b6a522dfa1fd1e477c9cfe5909d5b31f098c0b", + "reference": "f4b6a522dfa1fd1e477c9cfe5909d5b31f098c0b", "shasum": "" }, "require": { @@ -1104,7 +1103,7 @@ "x.509", "x509" ], - "time": "2017-06-05T06:31:10+00:00" + "time": "2017-10-23T05:04:54+00:00" }, { "name": "psr/container", @@ -1480,16 +1479,16 @@ }, { "name": "symfony/console", - "version": "v2.8.27", + "version": "v2.8.28", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c0807a2ca978e64d8945d373a9221a5c35d1a253" + "reference": "f81549d2c5fdee8d711c9ab3c7e7362353ea5853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c0807a2ca978e64d8945d373a9221a5c35d1a253", - "reference": "c0807a2ca978e64d8945d373a9221a5c35d1a253", + "url": "https://api.github.com/repos/symfony/console/zipball/f81549d2c5fdee8d711c9ab3c7e7362353ea5853", + "reference": "f81549d2c5fdee8d711c9ab3c7e7362353ea5853", "shasum": "" }, "require": { @@ -1537,7 +1536,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-08-27T14:29:03+00:00" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "symfony/debug", @@ -1598,16 +1597,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v2.8.27", + "version": "v2.8.28", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "1377400fd641d7d1935981546aaef780ecd5bf6d" + "reference": "7fe089232554357efb8d4af65ce209fc6e5a2186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1377400fd641d7d1935981546aaef780ecd5bf6d", - "reference": "1377400fd641d7d1935981546aaef780ecd5bf6d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7fe089232554357efb8d4af65ce209fc6e5a2186", + "reference": "7fe089232554357efb8d4af65ce209fc6e5a2186", "shasum": "" }, "require": { @@ -1654,20 +1653,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-06-02T07:47:27+00:00" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "symfony/filesystem", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b32a0e5f928d0fa3d1dd03c78d020777e50c10cb" + "reference": "90bc45abf02ae6b7deb43895c1052cb0038506f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b32a0e5f928d0fa3d1dd03c78d020777e50c10cb", - "reference": "b32a0e5f928d0fa3d1dd03c78d020777e50c10cb", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/90bc45abf02ae6b7deb43895c1052cb0038506f1", + "reference": "90bc45abf02ae6b7deb43895c1052cb0038506f1", "shasum": "" }, "require": { @@ -1703,20 +1702,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2017-10-03T13:33:10+00:00" }, { "name": "symfony/finder", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b2260dbc80f3c4198f903215f91a1ac7fe9fe09e" + "reference": "773e19a491d97926f236942484cb541560ce862d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b2260dbc80f3c4198f903215f91a1ac7fe9fe09e", - "reference": "b2260dbc80f3c4198f903215f91a1ac7fe9fe09e", + "url": "https://api.github.com/repos/symfony/finder/zipball/773e19a491d97926f236942484cb541560ce862d", + "reference": "773e19a491d97926f236942484cb541560ce862d", "shasum": "" }, "require": { @@ -1752,20 +1751,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2017-10-02T06:42:24+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803" + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7c8fae0ac1d216eb54349e6a8baa57d515fe8803", - "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { @@ -1777,7 +1776,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -1811,20 +1810,20 @@ "portable", "shim" ], - "time": "2017-06-14T15:44:48+00:00" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/process", - "version": "v2.8.27", + "version": "v2.8.28", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "57e52a0a6a80ea0aec4fc1b785a7920a95cb88a8" + "reference": "26c9fb02bf06bd6b90f661a5bd17e510810d0176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/57e52a0a6a80ea0aec4fc1b785a7920a95cb88a8", - "reference": "57e52a0a6a80ea0aec4fc1b785a7920a95cb88a8", + "url": "https://api.github.com/repos/symfony/process/zipball/26c9fb02bf06bd6b90f661a5bd17e510810d0176", + "reference": "26c9fb02bf06bd6b90f661a5bd17e510810d0176", "shasum": "" }, "require": { @@ -1860,7 +1859,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-07-03T08:04:30+00:00" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "tedivm/jshrink", @@ -2563,35 +2562,35 @@ }, { "name": "zendframework/zend-http", - "version": "2.6.0", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-http.git", - "reference": "09f4d279f46d86be63171ff62ee0f79eca878678" + "reference": "78aa510c0ea64bfb2aa234f50c4f232c9531acfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-http/zipball/09f4d279f46d86be63171ff62ee0f79eca878678", - "reference": "09f4d279f46d86be63171ff62ee0f79eca878678", + "url": "https://api.github.com/repos/zendframework/zend-http/zipball/78aa510c0ea64bfb2aa234f50c4f232c9531acfa", + "reference": "78aa510c0ea64bfb2aa234f50c4f232c9531acfa", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "zendframework/zend-loader": "^2.5", - "zendframework/zend-stdlib": "^2.5 || ^3.0", - "zendframework/zend-uri": "^2.5", - "zendframework/zend-validator": "^2.5" + "php": "^5.6 || ^7.0", + "zendframework/zend-loader": "^2.5.1", + "zendframework/zend-stdlib": "^3.1 || ^2.7.7", + "zendframework/zend-uri": "^2.5.2", + "zendframework/zend-validator": "^2.10.1" }, "require-dev": { - "phpunit/phpunit": "^4.0", + "phpunit/phpunit": "^6.4.1 || ^5.7.15", "zendframework/zend-coding-standard": "~1.0.0", - "zendframework/zend-config": "^2.5" + "zendframework/zend-config": "^3.1 || ^2.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev", - "dev-develop": "2.7-dev" + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" } }, "autoload": { @@ -2606,10 +2605,13 @@ "description": "provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", "homepage": "https://github.com/zendframework/zend-http", "keywords": [ + "ZendFramework", "http", - "zf2" + "http client", + "zend", + "zf" ], - "time": "2017-01-31T14:41:02+00:00" + "time": "2017-10-13T12:06:24+00:00" }, { "name": "zendframework/zend-hydrator", @@ -3977,37 +3979,40 @@ }, { "name": "myclabs/deep-copy", - "version": "1.6.1", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102" + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8e6e04167378abf1ddb4d3522d8755c5fd90d102", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" }, "type": "library", "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" - } + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", "keywords": [ "clone", "copy", @@ -4015,7 +4020,7 @@ "object", "object graph" ], - "time": "2017-04-12T18:52:22+00:00" + "time": "2017-10-19T19:58:43+00:00" }, { "name": "pdepend/pdepend", @@ -5529,16 +5534,16 @@ }, { "name": "symfony/config", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "f9f19a39ee178f61bb2190f51ff7c517c2159315" + "reference": "4ab62407bff9cd97c410a7feaef04c375aaa5cfd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/f9f19a39ee178f61bb2190f51ff7c517c2159315", - "reference": "f9f19a39ee178f61bb2190f51ff7c517c2159315", + "url": "https://api.github.com/repos/symfony/config/zipball/4ab62407bff9cd97c410a7feaef04c375aaa5cfd", + "reference": "4ab62407bff9cd97c410a7feaef04c375aaa5cfd", "shasum": "" }, "require": { @@ -5587,20 +5592,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2017-09-04T16:28:07+00:00" + "time": "2017-10-04T18:56:58+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "e593f06dd90a81c7b70ac1c49862a061b0ec06d2" + "reference": "8ebad929aee3ca185b05f55d9cc5521670821ad1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e593f06dd90a81c7b70ac1c49862a061b0ec06d2", - "reference": "e593f06dd90a81c7b70ac1c49862a061b0ec06d2", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8ebad929aee3ca185b05f55d9cc5521670821ad1", + "reference": "8ebad929aee3ca185b05f55d9cc5521670821ad1", "shasum": "" }, "require": { @@ -5657,20 +5662,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-09-05T20:39:38+00:00" + "time": "2017-10-04T17:15:30+00:00" }, { "name": "symfony/polyfill-php54", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php54.git", - "reference": "b7763422a5334c914ef0298ed21b253d25913a6e" + "reference": "d7810a14b2c6c1aff415e1bb755f611b3d5327bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/b7763422a5334c914ef0298ed21b253d25913a6e", - "reference": "b7763422a5334c914ef0298ed21b253d25913a6e", + "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/d7810a14b2c6c1aff415e1bb755f611b3d5327bc", + "reference": "d7810a14b2c6c1aff415e1bb755f611b3d5327bc", "shasum": "" }, "require": { @@ -5679,7 +5684,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -5715,20 +5720,20 @@ "portable", "shim" ], - "time": "2017-06-14T15:44:48+00:00" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-php55", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php55.git", - "reference": "29b1381d66f16e0581aab0b9f678ccf073288f68" + "reference": "b64e7f0c37ecf144ecc16668936eef94e628fbfd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/29b1381d66f16e0581aab0b9f678ccf073288f68", - "reference": "29b1381d66f16e0581aab0b9f678ccf073288f68", + "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/b64e7f0c37ecf144ecc16668936eef94e628fbfd", + "reference": "b64e7f0c37ecf144ecc16668936eef94e628fbfd", "shasum": "" }, "require": { @@ -5738,7 +5743,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -5771,20 +5776,20 @@ "portable", "shim" ], - "time": "2017-06-14T15:44:48+00:00" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "b6482e68974486984f59449ecea1fbbb22ff840f" + "reference": "0442b9c0596610bd24ae7b5f0a6cdbbc16d9fcff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/b6482e68974486984f59449ecea1fbbb22ff840f", - "reference": "b6482e68974486984f59449ecea1fbbb22ff840f", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0442b9c0596610bd24ae7b5f0a6cdbbc16d9fcff", + "reference": "0442b9c0596610bd24ae7b5f0a6cdbbc16d9fcff", "shasum": "" }, "require": { @@ -5794,7 +5799,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -5830,20 +5835,20 @@ "portable", "shim" ], - "time": "2017-06-14T15:44:48+00:00" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "8abc9097f5001d310f0edba727469c988acc6ea7" + "reference": "6de4f4884b97abbbed9f0a84a95ff2ff77254254" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/8abc9097f5001d310f0edba727469c988acc6ea7", - "reference": "8abc9097f5001d310f0edba727469c988acc6ea7", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/6de4f4884b97abbbed9f0a84a95ff2ff77254254", + "reference": "6de4f4884b97abbbed9f0a84a95ff2ff77254254", "shasum": "" }, "require": { @@ -5852,7 +5857,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -5885,20 +5890,20 @@ "portable", "shim" ], - "time": "2017-07-11T13:25:55+00:00" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-xml", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-xml.git", - "reference": "7d536462e554da7b05600a926303bf9b99153275" + "reference": "d7bcb5c3bb1832c532379df50825c08f43a64134" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-xml/zipball/7d536462e554da7b05600a926303bf9b99153275", - "reference": "7d536462e554da7b05600a926303bf9b99153275", + "url": "https://api.github.com/repos/symfony/polyfill-xml/zipball/d7bcb5c3bb1832c532379df50825c08f43a64134", + "reference": "d7bcb5c3bb1832c532379df50825c08f43a64134", "shasum": "" }, "require": { @@ -5908,7 +5913,7 @@ "type": "metapackage", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "notification-url": "https://packagist.org/downloads/", @@ -5933,20 +5938,20 @@ "portable", "shim" ], - "time": "2017-06-14T15:44:48+00:00" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "9a5610a8d6a50985a7be485c0ba745c22607beeb" + "reference": "170edf8b3247d7b6779eb6fa7428f342702ca184" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/9a5610a8d6a50985a7be485c0ba745c22607beeb", - "reference": "9a5610a8d6a50985a7be485c0ba745c22607beeb", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/170edf8b3247d7b6779eb6fa7428f342702ca184", + "reference": "170edf8b3247d7b6779eb6fa7428f342702ca184", "shasum": "" }, "require": { @@ -5982,7 +5987,7 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2017-10-02T06:42:24+00:00" }, { "name": "theseer/fdomdocument", diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json index 7046122ec9f89..aee3e0442c259 100644 --- a/lib/internal/Magento/Framework/composer.json +++ b/lib/internal/Magento/Framework/composer.json @@ -2,7 +2,7 @@ "name": "magento/framework", "description": "N/A", "type": "magento2-library", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" From 426183c1c771c4897f2fa16b4d9c083090e0ccd3 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Thu, 2 Nov 2017 10:53:33 +0200 Subject: [PATCH 127/653] 8255: Export Products action doesn't consider hide_for_product_page value. --- .../Magento/CatalogImportExport/Model/Import/ProductTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php index fd9f24f980cdc..3d4dd7c9cf8b9 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php @@ -34,6 +34,7 @@ * @magentoDbIsolation enabled * @magentoDataFixtureBeforeTransaction Magento/Catalog/_files/enable_reindex_schedule.php * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) */ class ProductTest extends \Magento\TestFramework\Indexer\TestCase { From 7621060f9c750de44f2229fcad837f57d62d780a Mon Sep 17 00:00:00 2001 From: Andrii Dimov <adimov@magento.com> Date: Thu, 2 Nov 2017 11:21:42 +0200 Subject: [PATCH 128/653] MAGETWO-80566: Update doc block information in php classes with @deprecated and @since tags --- .../Catalog/Model/Indexer/Category/Product/Action/Full.php | 4 ++-- lib/internal/Magento/Framework/CurrencyInterface.php | 4 ++-- lib/internal/Magento/Framework/Module/Setup/Migration.php | 2 +- lib/internal/Magento/Framework/Stdlib/DateTime.php | 4 ++-- .../Framework/Webapi/Rest/Request/Deserializer/Json.php | 2 +- setup/src/Magento/Setup/Model/ConfigGenerator.php | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Action/Full.php b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Action/Full.php index f5e1596f23ce7..e61acc2aa09e5 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Action/Full.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Action/Full.php @@ -117,7 +117,7 @@ public function execute() * Return select for remove unnecessary data * * @return \Magento\Framework\DB\Select - * @deprecated Not needed anymore. + * @deprecated 102.0.1 Not needed anymore. */ protected function getSelectUnnecessaryData() { @@ -143,7 +143,7 @@ protected function getSelectUnnecessaryData() * * @return void * - * @deprecated Not needed anymore. + * @deprecated 102.0.1 Not needed anymore. */ protected function removeUnnecessaryData() { diff --git a/lib/internal/Magento/Framework/CurrencyInterface.php b/lib/internal/Magento/Framework/CurrencyInterface.php index 4dbde431041fc..44a7d3b90081e 100644 --- a/lib/internal/Magento/Framework/CurrencyInterface.php +++ b/lib/internal/Magento/Framework/CurrencyInterface.php @@ -240,7 +240,7 @@ public function isLess($value, $currency = null); * Returns the set service class * * @return \Zend_Currency_CurrencyInterface - * @deprecated + * @deprecated 101.0.1 * @see \Magento\Directory\Model\Currency\Import\ImportInterface */ public function getService(); @@ -250,7 +250,7 @@ public function getService(); * * @param string|\Zend_Currency_CurrencyInterface $service Service class * @return \Zend_Currency_CurrencyInterface - * @deprecated + * @deprecated 101.0.1 * @see \Magento\Directory\Model\Currency\Import\ImportInterface */ public function setService($service); diff --git a/lib/internal/Magento/Framework/Module/Setup/Migration.php b/lib/internal/Magento/Framework/Module/Setup/Migration.php index 467ee6146ade7..604a98f1c0dd3 100644 --- a/lib/internal/Magento/Framework/Module/Setup/Migration.php +++ b/lib/internal/Magento/Framework/Module/Setup/Migration.php @@ -703,7 +703,7 @@ public function getCompositeModules() * @return string|int|float|bool|array|null * @throws \InvalidArgumentException * @SuppressWarnings(PHPMD.UnusedFormalParameter) - * @deprecated + * @deprecated 101.0.1 * @see \Magento\Framework\Module\Setup\Migration::jsonDecode */ protected function _jsonDecode($encodedValue, $objectDecodeType = 1) diff --git a/lib/internal/Magento/Framework/Stdlib/DateTime.php b/lib/internal/Magento/Framework/Stdlib/DateTime.php index 36db84860b373..5a1902426e7ae 100644 --- a/lib/internal/Magento/Framework/Stdlib/DateTime.php +++ b/lib/internal/Magento/Framework/Stdlib/DateTime.php @@ -79,7 +79,7 @@ public function isEmptyDate($date) * @param int $time * @return string The given time in given format * - * @deprecated + * @deprecated 101.0.1 * @see Use Intl library for datetime handling: http://php.net/manual/en/book.intl.php * * @codeCoverageIgnore @@ -95,7 +95,7 @@ public function gmDate($format, $time) * @param string $timeStr * @return int * - * @deprecated + * @deprecated 101.0.1 * @see Use Intl library for datetime handling: http://php.net/manual/en/book.intl.php * * @codeCoverageIgnore diff --git a/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php b/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php index c2e7c324d1282..7cd9a167809a2 100644 --- a/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php +++ b/lib/internal/Magento/Framework/Webapi/Rest/Request/Deserializer/Json.php @@ -14,7 +14,7 @@ class Json implements \Magento\Framework\Webapi\Rest\Request\DeserializerInterfa { /** * @var \Magento\Framework\Json\Decoder - * @deprecated + * @deprecated 101.0.1 */ protected $decoder; diff --git a/setup/src/Magento/Setup/Model/ConfigGenerator.php b/setup/src/Magento/Setup/Model/ConfigGenerator.php index e3ab070bd8fba..7e5b0c162a393 100644 --- a/setup/src/Magento/Setup/Model/ConfigGenerator.php +++ b/setup/src/Magento/Setup/Model/ConfigGenerator.php @@ -47,7 +47,7 @@ class ConfigGenerator /** * @var Random - * @deprecated since 100.2.0 + * @deprecated 100.2.0 */ protected $random; From 0238a2faa095aa4ae89f636af869a9c69e0ede5a Mon Sep 17 00:00:00 2001 From: Viktor Tymchynskyi <vtymchynskyi@magento.com> Date: Thu, 2 Nov 2017 12:36:51 +0200 Subject: [PATCH 129/653] MAGETWO-82732: [Partner] Add Indian Rupee (INR) support to PayPal Express Checkout --- app/code/Magento/Paypal/Model/Config.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Paypal/Model/Config.php b/app/code/Magento/Paypal/Model/Config.php index acb0444d50803..08b646a661898 100644 --- a/app/code/Magento/Paypal/Model/Config.php +++ b/app/code/Magento/Paypal/Model/Config.php @@ -226,6 +226,7 @@ class Config extends AbstractConfig 'TWD', 'THB', 'USD', + 'INR', ]; /** From eeb7dffa25bca4100753820b31ab4b544bfdb615 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Thu, 2 Nov 2017 12:49:47 +0200 Subject: [PATCH 130/653] 11832: Create order (on Customer edit page) - not working from admin environment --- .../Adminhtml/Order/Create/AbstractCreate.php | 18 +++++++++++ .../Order/Create/AbstractCreateTest.php | 32 +++++++++++++++++++ .../order/create/sidebar/items.phtml | 6 +--- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/AbstractCreate.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/AbstractCreate.php index 323c2df975a8a..b684fe8c62df2 100644 --- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/AbstractCreate.php +++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/AbstractCreate.php @@ -160,4 +160,22 @@ public function convertPrice($value, $format = true) ) : $this->priceCurrency->convert($value, $this->getStore()); } + + /** + * If item is quote or wishlist we need to get product from it. + * + * @param $item + * + * @return Product + */ + public function getProduct($item) + { + if ($item instanceof Product) { + $product = $item; + } else { + $product = $item->getProduct(); + } + + return $product; + } } diff --git a/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Create/AbstractCreateTest.php b/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Create/AbstractCreateTest.php index 447fd7791ecbd..e010674ca354e 100644 --- a/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Create/AbstractCreateTest.php +++ b/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Create/AbstractCreateTest.php @@ -3,8 +3,10 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Sales\Test\Unit\Block\Adminhtml\Order\Create; +use Magento\Catalog\Model\Product; use Magento\Catalog\Pricing\Price\FinalPrice; class AbstractCreateTest extends \PHPUnit\Framework\TestCase @@ -67,4 +69,34 @@ public function testGetItemPrice() ->willReturn($resultPrice); $this->assertEquals($resultPrice, $this->model->getItemPrice($this->productMock)); } + + /** + * @param $item + * + * @dataProvider getProductDataProvider + */ + public function testGetProduct($item) + { + $product = $this->model->getProduct($item); + + self::assertInstanceOf(Product::class, $product); + } + + /** + * DataProvider for testGetProduct. + * + * @return array + */ + public function getProductDataProvider() + { + $productMock = $this->createMock(Product::class); + + $itemMock = $this->createMock(\Magento\Wishlist\Model\Item::class); + $itemMock->expects($this->once())->method('getProduct')->willReturn($productMock); + + return [ + [$productMock], + [$itemMock], + ]; + } } diff --git a/app/code/Magento/Sales/view/adminhtml/templates/order/create/sidebar/items.phtml b/app/code/Magento/Sales/view/adminhtml/templates/order/create/sidebar/items.phtml index 2ca2420934519..2dbf717f73439 100644 --- a/app/code/Magento/Sales/view/adminhtml/templates/order/create/sidebar/items.phtml +++ b/app/code/Magento/Sales/view/adminhtml/templates/order/create/sidebar/items.phtml @@ -67,11 +67,7 @@ <?php if ($block->canDisplayPrice()): ?> <td class="col-price"> - <?php if ($block->getDataId() == 'cart'): ?> - <?= /* @noEscape */ $block->getItemPrice($_item->getProduct()) ?> - <?php else: ?> - <?= /* @noEscape */ $block->getItemPrice($_item) ?> - <?php endif; ?> + <?= /* @noEscape */ $block->getItemPrice($block->getProduct($_item)) ?> </td> <?php endif; ?> From 081a3b793be0b76eb0e8058d2e54efe17ddd5fb8 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Thu, 2 Nov 2017 17:11:08 +0200 Subject: [PATCH 131/653] 11792: Can't add customizable options to product --- .../Product/Form/Modifier/CustomOptionsTest.php | 12 +++++++++++- .../Product/Form/Modifier/CustomOptions.php | 3 ++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CustomOptionsTest.php b/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CustomOptionsTest.php index 921a8dcdfe6b8..1b81845234b85 100644 --- a/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CustomOptionsTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CustomOptionsTest.php @@ -154,7 +154,17 @@ public function testModifyMeta() ->method('getAll') ->willReturn([]); - $this->assertArrayHasKey(CustomOptions::GROUP_CUSTOM_OPTIONS_NAME, $this->getModel()->modifyMeta([])); + $meta = $this->getModel()->modifyMeta([]); + + $this->assertArrayHasKey(CustomOptions::GROUP_CUSTOM_OPTIONS_NAME, $meta); + + $buttonAdd = $meta['custom_options']['children']['container_header']['children']['button_add']; + $buttonAddTargetName = $buttonAdd['arguments']['data']['config']['actions'][0]['targetName']; + $expectedTargetName = '${ $.ns }.${ $.ns }.' . CustomOptions::GROUP_CUSTOM_OPTIONS_NAME + . '.' . CustomOptions::GRID_OPTIONS_NAME; + + $this->assertEquals($expectedTargetName, $buttonAddTargetName); + } /** diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/CustomOptions.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/CustomOptions.php index 73fecd17c69ce..7995926d27de5 100755 --- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/CustomOptions.php +++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/CustomOptions.php @@ -348,7 +348,8 @@ protected function getHeaderContainerConfig($sortOrder) 'sortOrder' => 20, 'actions' => [ [ - 'targetName' => 'ns = ${ $.ns }, index = ' . static::GRID_OPTIONS_NAME, + 'targetName' => '${ $.ns }.${ $.ns }.' . static::GROUP_CUSTOM_OPTIONS_NAME + . '.' . static::GRID_OPTIONS_NAME, 'actionName' => 'processingAddChild', ] ] From 559020c9c45b272f83a27180aa70ccb248ad19a7 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Fri, 3 Nov 2017 10:48:18 +0200 Subject: [PATCH 132/653] 11792: Can't add customizable options to product --- .../Ui/DataProvider/Product/Form/Modifier/CustomOptionsTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CustomOptionsTest.php b/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CustomOptionsTest.php index 1b81845234b85..dd9819cdbc5ab 100644 --- a/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CustomOptionsTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CustomOptionsTest.php @@ -164,7 +164,6 @@ public function testModifyMeta() . '.' . CustomOptions::GRID_OPTIONS_NAME; $this->assertEquals($expectedTargetName, $buttonAddTargetName); - } /** From 9193745655b641d142d487c5e88f1a839cff821e Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Fri, 3 Nov 2017 12:50:34 +0200 Subject: [PATCH 133/653] 11740: Sending emails from Admin in Multi-Store Environment defaults to Primary Store --- .../Sales/Model/Order/Email/SenderBuilder.php | 5 ++- .../Model/Order/Email/SenderBuilderTest.php | 43 +++++++++++++++---- .../Mail/Template/TransportBuilder.php | 14 ++++++ .../Unit/Template/TransportBuilderTest.php | 20 +++++++++ 4 files changed, 73 insertions(+), 9 deletions(-) diff --git a/app/code/Magento/Sales/Model/Order/Email/SenderBuilder.php b/app/code/Magento/Sales/Model/Order/Email/SenderBuilder.php index 93c6f19b08690..af3ace9090834 100644 --- a/app/code/Magento/Sales/Model/Order/Email/SenderBuilder.php +++ b/app/code/Magento/Sales/Model/Order/Email/SenderBuilder.php @@ -98,6 +98,9 @@ protected function configureEmailTemplate() $this->transportBuilder->setTemplateIdentifier($this->templateContainer->getTemplateId()); $this->transportBuilder->setTemplateOptions($this->templateContainer->getTemplateOptions()); $this->transportBuilder->setTemplateVars($this->templateContainer->getTemplateVars()); - $this->transportBuilder->setFrom($this->identityContainer->getEmailIdentity()); + $this->transportBuilder->setFromByStore( + $this->identityContainer->getEmailIdentity(), + $this->identityContainer->getStore()->getId() + ); } } diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php index 5319aa510bedf..d537cab8ff552 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Sales\Test\Unit\Model\Order\Email; use Magento\Sales\Model\Order\Email\SenderBuilder; @@ -29,6 +30,11 @@ class SenderBuilderTest extends \PHPUnit\Framework\TestCase */ protected $transportBuilder; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $storeMock; + protected function setUp() { $templateId = 'test_template_id'; @@ -42,7 +48,11 @@ protected function setUp() ['getTemplateVars', 'getTemplateOptions', 'getTemplateId'] ); - $this->storeMock = $this->createPartialMock(\Magento\Store\Model\Store::class, ['getStoreId', '__wakeup']); + $this->storeMock = $this->createPartialMock(\Magento\Store\Model\Store::class, [ + 'getStoreId', + '__wakeup', + 'getId', + ]); $this->identityContainerMock = $this->createPartialMock( \Magento\Sales\Model\Order\Email\Container\ShipmentIdentity::class, @@ -52,14 +62,20 @@ protected function setUp() 'getCustomerName', 'getTemplateOptions', 'getEmailCopyTo', - 'getCopyMethod' + 'getCopyMethod', + 'getStore', ] ); - $this->transportBuilder = $this->createPartialMock(\Magento\Framework\Mail\Template\TransportBuilder::class, [ - 'addTo', 'addBcc', 'getTransport', - 'setTemplateIdentifier', 'setTemplateOptions', 'setTemplateVars', - 'setFrom', + $this->transportBuilder = $this->createPartialMock(\Magento\Framework\Mail\Template\TransportBuilder::class, + [ + 'addTo', + 'addBcc', + 'getTransport', + 'setTemplateIdentifier', + 'setTemplateOptions', + 'setTemplateVars', + 'setFromByStore', ]); $this->templateContainerMock->expects($this->once()) @@ -85,7 +101,7 @@ protected function setUp() ->method('getEmailIdentity') ->will($this->returnValue($emailIdentity)); $this->transportBuilder->expects($this->once()) - ->method('setFrom') + ->method('setFromByStore') ->with($this->equalTo($emailIdentity)); $this->identityContainerMock->expects($this->once()) @@ -119,6 +135,12 @@ public function testSend() $this->identityContainerMock->expects($this->once()) ->method('getCustomerName') ->will($this->returnValue($customerName)); + $this->identityContainerMock->expects($this->once()) + ->method('getStore') + ->willReturn($this->storeMock); + $this->storeMock->expects($this->once()) + ->method('getId') + ->willReturn(1); $this->transportBuilder->expects($this->once()) ->method('addTo') ->with($this->equalTo($customerEmail), $this->equalTo($customerName)); @@ -145,7 +167,12 @@ public function testSendCopyTo() $this->transportBuilder->expects($this->once()) ->method('addTo') ->with($this->equalTo('example@mail.com')); - + $this->identityContainerMock->expects($this->once()) + ->method('getStore') + ->willReturn($this->storeMock); + $this->storeMock->expects($this->once()) + ->method('getId') + ->willReturn(1); $this->transportBuilder->expects($this->once()) ->method('getTransport') ->will($this->returnValue($transportMock)); diff --git a/lib/internal/Magento/Framework/Mail/Template/TransportBuilder.php b/lib/internal/Magento/Framework/Mail/Template/TransportBuilder.php index 18b241d77a426..8e474a58cdac8 100644 --- a/lib/internal/Magento/Framework/Mail/Template/TransportBuilder.php +++ b/lib/internal/Magento/Framework/Mail/Template/TransportBuilder.php @@ -171,6 +171,20 @@ public function setFrom($from) return $this; } + /** + * Set mail from address by store. + * + * @param string|array $from + * @param string|int $store + * @return $this + */ + public function setFromByStore($from, $store) + { + $result = $this->_senderResolver->resolve($from, $store); + $this->message->setFrom($result['email'], $result['name']); + return $this; + } + /** * Set template identifier * diff --git a/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php b/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php index 696e0a9f310d8..ab03be5ee844b 100644 --- a/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php +++ b/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Framework\Mail\Test\Unit\Template; use Magento\Framework\App\TemplateTypesInterface; @@ -167,6 +168,25 @@ public function testSetFrom() $this->builder->setFrom($sender); } + /** + * @return void + */ + public function setFromByStore() + { + $sender = ['email' => 'from@example.com', 'name' => 'name']; + $store = 1; + $this->senderResolverMock->expects($this->once()) + ->method('resolve') + ->with($sender, $store) + ->willReturn($sender); + $this->messageMock->expects($this->once()) + ->method('setFrom') + ->with('from@example.com', 'name') + ->willReturnSelf(); + + $this->builder->setFromByStore($sender); + } + /** * @return void */ From 0db2b08cb125046077b0abf1039718a3f6805cf9 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Fri, 3 Nov 2017 15:52:19 +0200 Subject: [PATCH 134/653] 11941: Invoice for products that use qty decimal rounds down to whole number. --- .../Observer/AddStockItemsObserver.php | 77 +++++++ .../Observer/AddStockItemsObserverTest.php | 165 +++++++++++++++ .../Magento/CatalogInventory/etc/events.xml | 3 + .../product_simple_with_decimal_qty.php | 192 ++++++++++++++++++ ...oduct_simple_with_decimal_qty_rollback.php | 26 +++ .../Observer/AddStockItemsObserverTest.php | 41 ++++ .../Sales/Model/AdminOrder/CreateTest.php | 6 +- 7 files changed, 509 insertions(+), 1 deletion(-) create mode 100644 app/code/Magento/CatalogInventory/Observer/AddStockItemsObserver.php create mode 100644 app/code/Magento/CatalogInventory/Test/Unit/Observer/AddStockItemsObserverTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_with_decimal_qty.php create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_with_decimal_qty_rollback.php create mode 100644 dev/tests/integration/testsuite/Magento/CatalogInventory/Observer/AddStockItemsObserverTest.php diff --git a/app/code/Magento/CatalogInventory/Observer/AddStockItemsObserver.php b/app/code/Magento/CatalogInventory/Observer/AddStockItemsObserver.php new file mode 100644 index 0000000000000..8fa90cf6531c4 --- /dev/null +++ b/app/code/Magento/CatalogInventory/Observer/AddStockItemsObserver.php @@ -0,0 +1,77 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogInventory\Observer; + +use Magento\Catalog\Model\Product; +use Magento\Catalog\Model\ResourceModel\Product\Collection; +use Magento\CatalogInventory\Api\StockConfigurationInterface; +use Magento\CatalogInventory\Api\StockItemCriteriaInterfaceFactory; +use Magento\CatalogInventory\Api\StockItemRepositoryInterface; +use Magento\Framework\Event\Observer; +use Magento\Framework\Event\ObserverInterface; + +/** + * Add Stock items to product collection. + */ +class AddStockItemsObserver implements ObserverInterface +{ + /** + * @var StockItemCriteriaInterfaceFactory + */ + private $criteriaInterfaceFactory; + + /** + * @var StockItemRepositoryInterface + */ + private $stockItemRepository; + + /** + * @var StockConfigurationInterface + */ + private $stockConfiguration; + + /** + * AddStockItemsObserver constructor. + * + * @param StockItemCriteriaInterfaceFactory $criteriaInterfaceFactory + * @param StockItemRepositoryInterface $stockItemRepository + * @param StockConfigurationInterface $stockConfiguration + */ + public function __construct( + StockItemCriteriaInterfaceFactory $criteriaInterfaceFactory, + StockItemRepositoryInterface $stockItemRepository, + StockConfigurationInterface $stockConfiguration + ) { + $this->criteriaInterfaceFactory = $criteriaInterfaceFactory; + $this->stockItemRepository = $stockItemRepository; + $this->stockConfiguration = $stockConfiguration; + } + + /** + * Add stock items to products in collection. + * + * @param Observer $observer + * @return void + */ + public function execute(Observer $observer) + { + /** @var Collection $productCollection */ + $productCollection = $observer->getData('collection'); + $productIds = array_keys($productCollection->getItems()); + $criteria = $this->criteriaInterfaceFactory->create(); + $criteria->setProductsFilter($productIds); + $criteria->setScopeFilter($this->stockConfiguration->getDefaultScopeId()); + $stockItemCollection = $this->stockItemRepository->getList($criteria); + foreach ($stockItemCollection->getItems() as $item) { + /** @var Product $product */ + $product = $productCollection->getItemById($item->getProductId()); + $productExtension = $product->getExtensionAttributes(); + $productExtension->setStockItem($item); + $product->setExtensionAttributes($productExtension); + } + } +} diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Observer/AddStockItemsObserverTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Observer/AddStockItemsObserverTest.php new file mode 100644 index 0000000000000..8de05bd014039 --- /dev/null +++ b/app/code/Magento/CatalogInventory/Test/Unit/Observer/AddStockItemsObserverTest.php @@ -0,0 +1,165 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogInventory\Test\Unit\Observer; + +use Magento\Catalog\Api\Data\ProductExtensionInterface; +use Magento\Catalog\Model\Product; +use Magento\Catalog\Model\ResourceModel\Product\Collection as ProductCollection; +use Magento\CatalogInventory\Api\Data\StockItemCollectionInterface; +use Magento\CatalogInventory\Api\Data\StockItemInterface; +use Magento\CatalogInventory\Api\StockConfigurationInterface; +use Magento\CatalogInventory\Api\StockItemCriteriaInterface; +use Magento\CatalogInventory\Api\StockItemCriteriaInterfaceFactory; +use Magento\CatalogInventory\Api\StockItemRepositoryInterface; +use Magento\CatalogInventory\Observer\AddStockItemsObserver; +use Magento\Framework\Event\Observer; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use PHPUnit\Framework\TestCase; + +class AddStockItemsObserverTest extends TestCase +{ + /** + * Test subject. + * + * @var AddStockItemsObserver + */ + private $subject; + /** + * @var StockItemCriteriaInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject + */ + private $criteriaInterfaceFactoryMock; + + /** + * @var StockItemRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $stockItemRepositoryMock; + + /** + * @var StockConfigurationInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $stockConfigurationMock; + + /** + * @inheritdoc + */ + protected function setUp() + { + $objectManager = new ObjectManager($this); + $this->criteriaInterfaceFactoryMock = $this->getMockBuilder(StockItemCriteriaInterfaceFactory::class) + ->setMethods(['create']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $this->stockItemRepositoryMock = $this->getMockBuilder(StockItemRepositoryInterface::class) + ->setMethods(['getList']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $this->stockConfigurationMock = $this->getMockBuilder(StockConfigurationInterface::class) + ->setMethods(['getDefaultScopeId']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $this->subject = $objectManager->getObject( + AddStockItemsObserver::class, + [ + 'criteriaInterfaceFactory' => $this->criteriaInterfaceFactoryMock, + 'stockItemRepository' => $this->stockItemRepositoryMock, + 'stockConfiguration' => $this->stockConfigurationMock + ] + ); + } + + /** + * Test AddStockItemsObserver::execute() add stock item to product as extension attribute. + */ + public function testExecute() + { + $productId = 1; + $defaultScopeId = 0; + + $criteria = $this->getMockBuilder(StockItemCriteriaInterface::class) + ->setMethods(['setProductsFilter', 'setScopeFilter']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $criteria->expects(self::once()) + ->method('setProductsFilter') + ->with(self::identicalTo([$productId])) + ->willReturn(true); + $criteria->expects(self::once()) + ->method('setScopeFilter') + ->with(self::identicalTo($defaultScopeId)) + ->willReturn(true); + + $this->criteriaInterfaceFactoryMock->expects(self::once()) + ->method('create') + ->willReturn($criteria); + $stockItemCollection = $this->getMockBuilder(StockItemCollectionInterface::class) + ->setMethods(['getItems']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $stockItem = $this->getMockBuilder(StockItemInterface::class) + ->setMethods(['getProductId']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $stockItem->expects(self::once()) + ->method('getProductId') + ->willReturn($productId); + + $stockItemCollection->expects(self::once()) + ->method('getItems') + ->willReturn([$stockItem]); + + $this->stockItemRepositoryMock->expects(self::once()) + ->method('getList') + ->with(self::identicalTo($criteria)) + ->willReturn($stockItemCollection); + + $this->stockConfigurationMock->expects(self::once()) + ->method('getDefaultScopeId') + ->willReturn($defaultScopeId); + + $productExtension = $this->getMockBuilder(ProductExtensionInterface::class) + ->setMethods(['setStockItem']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $productExtension->expects(self::once()) + ->method('setStockItem') + ->with(self::identicalTo($stockItem)); + + $product = $this->getMockBuilder(Product::class) + ->disableOriginalConstructor() + ->getMock(); + $product->expects(self::once()) + ->method('getExtensionAttributes') + ->willReturn($productExtension); + $product->expects(self::once()) + ->method('setExtensionAttributes') + ->with(self::identicalTo($productExtension)) + ->willReturnSelf(); + + /** @var ProductCollection|\PHPUnit_Framework_MockObject_MockObject $productCollection */ + $productCollection = $this->getMockBuilder(ProductCollection::class) + ->disableOriginalConstructor() + ->getMock(); + $productCollection->expects(self::once()) + ->method('getItems') + ->willReturn([$productId => $product]); + $productCollection->expects(self::once()) + ->method('getItemById') + ->with(self::identicalTo($productId)) + ->willReturn($product); + + /** @var Observer|\PHPUnit_Framework_MockObject_MockObject $observer */ + $observer = $this->getMockBuilder(Observer::class) + ->disableOriginalConstructor() + ->getMock(); + $observer->expects(self::once()) + ->method('getData') + ->with('collection') + ->willReturn($productCollection); + + $this->subject->execute($observer); + } +} diff --git a/app/code/Magento/CatalogInventory/etc/events.xml b/app/code/Magento/CatalogInventory/etc/events.xml index 3b5f2483ec57e..0a9f3c2d40dca 100644 --- a/app/code/Magento/CatalogInventory/etc/events.xml +++ b/app/code/Magento/CatalogInventory/etc/events.xml @@ -42,4 +42,7 @@ <event name="admin_system_config_changed_section_cataloginventory"> <observer name="inventory" instance="Magento\CatalogInventory\Observer\UpdateItemsStockUponConfigChangeObserver"/> </event> + <event name="sales_quote_item_collection_products_after_load"> + <observer name="add_stock_items" instance="Magento\CatalogInventory\Observer\AddStockItemsObserver"/> + </event> </config> diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_with_decimal_qty.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_with_decimal_qty.php new file mode 100644 index 0000000000000..37ce93cc9c420 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_with_decimal_qty.php @@ -0,0 +1,192 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +use Magento\Catalog\Api\Data\ProductTierPriceExtensionFactory; + +\Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize(); + +/** @var \Magento\TestFramework\ObjectManager $objectManager */ +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +/** @var \Magento\Catalog\Api\CategoryLinkManagementInterface $categoryLinkManagement */ +$categoryLinkManagement = $objectManager->get(\Magento\Catalog\Api\CategoryLinkManagementInterface::class); + +$tierPrices = []; +/** @var \Magento\Catalog\Api\Data\ProductTierPriceInterfaceFactory $tierPriceFactory */ +$tierPriceFactory = $objectManager->get(\Magento\Catalog\Api\Data\ProductTierPriceInterfaceFactory::class); +/** @var $tpExtensionAttributes */ +$tpExtensionAttributesFactory = $objectManager->get(ProductTierPriceExtensionFactory::class); + +$adminWebsite = $objectManager->get(\Magento\Store\Api\WebsiteRepositoryInterface::class)->get('admin'); +$tierPriceExtensionAttributes1 = $tpExtensionAttributesFactory->create() + ->setWebsiteId($adminWebsite->getId()); + +$tierPrices[] = $tierPriceFactory->create( + [ + 'data' => [ + 'customer_group_id' => \Magento\Customer\Model\Group::CUST_GROUP_ALL, + 'qty' => 2, + 'value' => 8, + ], + ] +)->setExtensionAttributes($tierPriceExtensionAttributes1); + +$tierPrices[] = $tierPriceFactory->create( + [ + 'data' => [ + 'customer_group_id' => \Magento\Customer\Model\Group::CUST_GROUP_ALL, + 'qty' => 5, + 'value' => 5, + ], + ] +)->setExtensionAttributes($tierPriceExtensionAttributes1); + +$tierPrices[] = $tierPriceFactory->create( + [ + 'data' => [ + 'customer_group_id' => \Magento\Customer\Model\Group::NOT_LOGGED_IN_ID, + 'qty' => 3, + 'value' => 5, + ], + ] +)->setExtensionAttributes($tierPriceExtensionAttributes1); + +$tierPriceExtensionAttributes2 = $tpExtensionAttributesFactory->create() + ->setWebsiteId($adminWebsite->getId()) + ->setPercentageValue(50); + +$tierPrices[] = $tierPriceFactory->create( + [ + 'data' => [ + 'customer_group_id' => \Magento\Customer\Model\Group::NOT_LOGGED_IN_ID, + 'qty' => 10, + ], + ] +)->setExtensionAttributes($tierPriceExtensionAttributes2); + +/** @var $product \Magento\Catalog\Model\Product */ +$product = $objectManager->create(\Magento\Catalog\Model\Product::class); +$product->isObjectNew(true); +$product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE) + ->setId(1) + ->setAttributeSetId(4) + ->setWebsiteIds([1]) + ->setName('Simple Product') + ->setSku('simple_with_decimal_qty') + ->setPrice(10) + ->setWeight(1) + ->setShortDescription("Short description") + ->setTaxClassId(0) + ->setTierPrices($tierPrices) + ->setDescription('Description with <b>html tag</b>') + ->setMetaTitle('meta title') + ->setMetaKeyword('meta keyword') + ->setMetaDescription('meta description') + ->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH) + ->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED) + ->setStockData( + [ + 'use_config_manage_stock' => 1, + 'qty' => 100, + 'is_qty_decimal' => 1, + 'is_in_stock' => 1, + ] + )->setCanSaveCustomOptions(true) + ->setHasOptions(true); + +$oldOptions = [ + [ + 'previous_group' => 'text', + 'title' => 'Test Field', + 'type' => 'field', + 'is_require' => 1, + 'sort_order' => 0, + 'price' => 1, + 'price_type' => 'fixed', + 'sku' => '1-text', + 'max_characters' => 100, + ], + [ + 'previous_group' => 'date', + 'title' => 'Test Date and Time', + 'type' => 'date_time', + 'is_require' => 1, + 'sort_order' => 0, + 'price' => 2, + 'price_type' => 'fixed', + 'sku' => '2-date', + ], + [ + 'previous_group' => 'select', + 'title' => 'Test Select', + 'type' => 'drop_down', + 'is_require' => 1, + 'sort_order' => 0, + 'values' => [ + [ + 'option_type_id' => null, + 'title' => 'Option 1', + 'price' => 3, + 'price_type' => 'fixed', + 'sku' => '3-1-select', + ], + [ + 'option_type_id' => null, + 'title' => 'Option 2', + 'price' => 3, + 'price_type' => 'fixed', + 'sku' => '3-2-select', + ], + ], + ], + [ + 'previous_group' => 'select', + 'title' => 'Test Radio', + 'type' => 'radio', + 'is_require' => 1, + 'sort_order' => 0, + 'values' => [ + [ + 'option_type_id' => null, + 'title' => 'Option 1', + 'price' => 3, + 'price_type' => 'fixed', + 'sku' => '4-1-radio', + ], + [ + 'option_type_id' => null, + 'title' => 'Option 2', + 'price' => 3, + 'price_type' => 'fixed', + 'sku' => '4-2-radio', + ], + ], + ], +]; + +$options = []; + +/** @var \Magento\Catalog\Api\Data\ProductCustomOptionInterfaceFactory $customOptionFactory */ +$customOptionFactory = $objectManager->create(\Magento\Catalog\Api\Data\ProductCustomOptionInterfaceFactory::class); + +foreach ($oldOptions as $option) { + /** @var \Magento\Catalog\Api\Data\ProductCustomOptionInterface $option */ + $option = $customOptionFactory->create(['data' => $option]); + $option->setProductSku($product->getSku()); + + $options[] = $option; +} + +$product->setOptions($options); + +/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepositoryFactory */ +$productRepository = $objectManager->create(\Magento\Catalog\Api\ProductRepositoryInterface::class); +$productRepository->save($product); + +$categoryLinkManagement->assignProductToCategories( + $product->getSku(), + [2] +); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_with_decimal_qty_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_with_decimal_qty_rollback.php new file mode 100644 index 0000000000000..55bd53a2d5794 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_with_decimal_qty_rollback.php @@ -0,0 +1,26 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +use Magento\Framework\Exception\NoSuchEntityException; + +\Magento\TestFramework\Helper\Bootstrap::getInstance()->getInstance()->reinitialize(); + +/** @var \Magento\Framework\Registry $registry */ +$registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Framework\Registry::class); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', true); + +/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ +$productRepository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get(\Magento\Catalog\Api\ProductRepositoryInterface::class); +try { + $product = $productRepository->get('simple_with_decimal_qty', false, null, true); + $productRepository->delete($product); +} catch (NoSuchEntityException $e) { +} +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', false); diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Observer/AddStockItemsObserverTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Observer/AddStockItemsObserverTest.php new file mode 100644 index 0000000000000..71af5d102a8d7 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Observer/AddStockItemsObserverTest.php @@ -0,0 +1,41 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogInventory\Observer; + +use Magento\CatalogInventory\Api\Data\StockItemInterface; +use Magento\Quote\Model\Quote; +use Magento\Quote\Model\ResourceModel\Quote\Item\Collection; +use Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory; +use Magento\TestFramework\Helper\Bootstrap; +use PHPUnit\Framework\TestCase; + +class AddStockItemsObserverTest extends TestCase +{ + /** + * Test addStockItemsObserver add stock items to products as extension attributes in quote item collection. + * + * @magentoDataFixture Magento/Sales/_files/quote.php + */ + public function testAddStockItemsToProductCollection() + { + $quote = Bootstrap::getObjectManager()->create(Quote::class); + $quote->load('test01', 'reserved_order_id'); + /** @var CollectionFactory $collectionFactory */ + $collectionFactory = Bootstrap::getObjectManager()->create(CollectionFactory::class); + /** @var Collection $collection */ + $collection = $collectionFactory->create(); + $collection->setQuote($quote); + /** @var Quote\Item $quoteItem */ + foreach ($collection->getItems() as $quoteItem) { + self::assertNotEmpty($quoteItem->getProduct()->getExtensionAttributes()->getStockItem()); + self::assertInstanceOf( + StockItemInterface::class, + $quoteItem->getProduct()->getExtensionAttributes()->getStockItem() + ); + } + } +} diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php index a4dac0f285f58..28b2575643b05 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php @@ -390,7 +390,7 @@ public function testCreateOrderNewCustomerDifferentAddresses() } /** - * @magentoDataFixture Magento/Catalog/_files/product_simple.php + * @magentoDataFixture Magento/Catalog/_files/product_simple_with_decimal_qty.php * @magentoDbIsolation enabled * @magentoAppIsolation enabled */ @@ -421,6 +421,10 @@ public function testCreateOrderNewCustomer() $paymentMethod ); $order = $this->_model->createOrder(); + //Check, order considering decimal qty in product. + foreach ($order->getItems() as $orderItem) { + self::assertTrue($orderItem->getIsQtyDecimal()); + } $this->_verifyCreatedOrder($order, $shippingMethod); } From ef03b523315c07c7cd26a5292885cf668a0b6e3d Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Fri, 3 Nov 2017 16:07:23 +0200 Subject: [PATCH 135/653] 11740: Sending emails from Admin in Multi-Store Environment defaults to Primary Store --- .../Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php index d537cab8ff552..00be3c10d6498 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php @@ -67,7 +67,8 @@ protected function setUp() ] ); - $this->transportBuilder = $this->createPartialMock(\Magento\Framework\Mail\Template\TransportBuilder::class, + $this->transportBuilder = $this->createPartialMock( + \Magento\Framework\Mail\Template\TransportBuilder::class, [ 'addTo', 'addBcc', @@ -76,7 +77,8 @@ protected function setUp() 'setTemplateOptions', 'setTemplateVars', 'setFromByStore', - ]); + ] + ); $this->templateContainerMock->expects($this->once()) ->method('getTemplateId') From d6c6e66da1d1c42f23a8eec44e71526826b9d46e Mon Sep 17 00:00:00 2001 From: alojua <juan.alonso@staempfli.com> Date: Thu, 2 Nov 2017 18:23:17 +0100 Subject: [PATCH 136/653] Fix bug that deletes exiting customer entity Fields, if the columns are not present on Import file --- .../CustomerImportExport/Model/Import/Customer.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php index bee4479526037..1122ac8f17826 100644 --- a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php +++ b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php @@ -270,13 +270,23 @@ protected function _saveCustomerEntities(array $entitiesToCreate, array $entitie $this->_connection->insertOnDuplicate( $this->_entityTable, $entitiesToUpdate, - $this->customerFields + $this->getCustomerEntityFieldsToUpdate($entitiesToUpdate) ); } return $this; } + private function getCustomerEntityFieldsToUpdate(array $entitiesToUpdate): array + { + $firstCustomer = reset($entitiesToUpdate); + $columnsToUpdate = array_keys($firstCustomer); + $customerFieldsToUpdate = array_filter($this->customerFields, function ($field) use ($columnsToUpdate) { + return in_array($field, $columnsToUpdate); + }); + return $customerFieldsToUpdate; + } + /** * Save customer attributes. * From 65000d81b388a7218ae9c9ec5c12bcb00d932c3c Mon Sep 17 00:00:00 2001 From: Sergio Baixauli <sbaixauli@onestic.com> Date: Sun, 5 Nov 2017 12:13:25 +0100 Subject: [PATCH 137/653] Fix newsletter subscriptions between stores MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Include store_id in query result in order to ensure that the action (subscribe/unsubscribe) it’s done in the correct store. --- .../Model/ResourceModel/Subscriber.php | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php index c72ae42031001..c7ce4b2f2f11b 100644 --- a/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php +++ b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php @@ -118,17 +118,37 @@ public function loadByEmail($subscriberEmail) */ public function loadByCustomerData(\Magento\Customer\Api\Data\CustomerInterface $customer) { - $select = $this->connection->select()->from($this->getMainTable())->where('customer_id=:customer_id'); - - $result = $this->connection->fetchRow($select, ['customer_id' => $customer->getId()]); + $select = $this->connection + ->select() + ->from($this->getMainTable()) + ->where('customer_id=:customer_id and store_id=:store_id'); + + $result = $this->connection + ->fetchRow( + $select, + [ + 'customer_id' => $customer->getId(), + 'store_id' => $customer->getStoreId() + ] + ); if ($result) { return $result; } - $select = $this->connection->select()->from($this->getMainTable())->where('subscriber_email=:subscriber_email'); - - $result = $this->connection->fetchRow($select, ['subscriber_email' => $customer->getEmail()]); + $select = $this->connection + ->select() + ->from($this->getMainTable()) + ->where('subscriber_email=:subscriber_email and store_id=:store_id'); + + $result = $this->connection + ->fetchRow( + $select, + [ + 'subscriber_email' => $customer->getEmail(), + 'store_id' => $customer->getStoreId() + ] + ); if ($result) { return $result; From 6d5c1f5414af9fc44868913ae484596c2fc04bc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20M=C3=A9ndez=20Calzada?= <gonzalo.mendez@interactiv4.com> Date: Sun, 5 Nov 2017 12:32:57 +0100 Subject: [PATCH 138/653] add swatch option: prevent loosing data and default value if data is not populated via adminhtml --- .../Magento/Swatches/Model/Plugin/EavAttribute.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Swatches/Model/Plugin/EavAttribute.php b/app/code/Magento/Swatches/Model/Plugin/EavAttribute.php index f363ffe70e80e..599406f455281 100644 --- a/app/code/Magento/Swatches/Model/Plugin/EavAttribute.php +++ b/app/code/Magento/Swatches/Model/Plugin/EavAttribute.php @@ -130,9 +130,17 @@ protected function setProperOptionsArray(Attribute $attribute) $swatchesArray = $attribute->getData('swatchtext'); } if ($canReplace == true) { - $attribute->setData('option', $optionsArray); - $attribute->setData('default', $defaultValue); - $attribute->setData('swatch', $swatchesArray); + if (!empty($optionsArray)) { + $attribute->setData('option', $optionsArray); + } + if (!empty($defaultValue)) { + $attribute->setData('default', $defaultValue); + } else { + $attribute->setData('default', [0 => $attribute->getDefaultValue()]); + } + if (!empty($swatchesArray)) { + $attribute->setData('swatch', $swatchesArray); + } } } From ed5d2f524410f34e632a9cec3ccc8348eb395420 Mon Sep 17 00:00:00 2001 From: luismi <luismiguelyange@interactiv4.com> Date: Sun, 5 Nov 2017 13:53:09 +0100 Subject: [PATCH 139/653] change remove validation to modal close --- .../Product/Form/Modifier/AdvancedPricing.php | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/AdvancedPricing.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/AdvancedPricing.php index a8378c364a63e..d66c8db01b4f2 100644 --- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/AdvancedPricing.php +++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/AdvancedPricing.php @@ -7,14 +7,15 @@ use Magento\Catalog\Api\Data\ProductAttributeInterface; use Magento\Catalog\Model\Locator\LocatorInterface; -use Magento\Customer\Model\Customer\Source\GroupSourceInterface; -use Magento\Directory\Helper\Data; -use Magento\Framework\App\ObjectManager; -use Magento\Store\Model\StoreManagerInterface; use Magento\Customer\Api\GroupManagementInterface; use Magento\Customer\Api\GroupRepositoryInterface; +use Magento\Customer\Model\Customer\Source\GroupSourceInterface; +use Magento\Directory\Helper\Data; use Magento\Framework\Api\SearchCriteriaBuilder; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Module\Manager as ModuleManager; +use Magento\Framework\Stdlib\ArrayManager; +use Magento\Store\Model\StoreManagerInterface; use Magento\Ui\Component\Container; use Magento\Ui\Component\Form\Element\DataType\Number; use Magento\Ui\Component\Form\Element\DataType\Price; @@ -23,7 +24,6 @@ use Magento\Ui\Component\Form\Element\Select; use Magento\Ui\Component\Form\Field; use Magento\Ui\Component\Modal; -use Magento\Framework\Stdlib\ArrayManager; /** * Class AdvancedPricing @@ -396,8 +396,7 @@ private function addAdvancedPriceLink() 'additionalForGroup' => true, 'provider' => false, 'source' => 'product_details', - 'sortOrder' => - $this->arrayManager->get($pricePath . '/arguments/data/config/sortOrder', $this->meta) + 1, + 'sortOrder' => $this->arrayManager->get($pricePath . '/arguments/data/config/sortOrder', $this->meta) + 1, ]; $this->meta = $this->arrayManager->set( @@ -434,8 +433,7 @@ private function getTierPriceStructure($tierPricePath) ], 'disabled' => false, 'required' => false, - 'sortOrder' => - $this->arrayManager->get($tierPricePath . '/arguments/data/config/sortOrder', $this->meta), + 'sortOrder' => $this->arrayManager->get($tierPricePath . '/arguments/data/config/sortOrder', $this->meta), ], ], ], @@ -569,8 +567,7 @@ private function specialPriceDataToInline() 'additionalClasses' => 'admin__control-grouped-date', 'breakLine' => false, 'component' => 'Magento_Ui/js/form/components/group', - 'scopeLabel' => - $this->arrayManager->get($pathFrom . '/arguments/data/config/scopeLabel', $this->meta), + 'scopeLabel' => $this->arrayManager->get($pathFrom . '/arguments/data/config/scopeLabel', $this->meta), ] ); $this->meta = $this->arrayManager->merge( @@ -622,7 +619,7 @@ private function customizeAdvancedPricing() 'componentType' => Modal::NAME, 'dataScope' => '', 'provider' => 'product_form.product_form_data_source', - 'onCancel' => 'actionDone', + 'onCancel' => 'closeModal', 'options' => [ 'title' => __('Advanced Pricing'), 'buttons' => [ From 81725aa3bc34d1f60dacfdf13d04975c51c751e8 Mon Sep 17 00:00:00 2001 From: Sergio Baixauli <sbaixauli@onestic.com> Date: Sun, 5 Nov 2017 14:08:53 +0100 Subject: [PATCH 140/653] Fix customer store_id mapping --- app/code/Magento/Newsletter/Model/Subscriber.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Newsletter/Model/Subscriber.php b/app/code/Magento/Newsletter/Model/Subscriber.php index 9e021a21d23b3..d6d109de76b2a 100644 --- a/app/code/Magento/Newsletter/Model/Subscriber.php +++ b/app/code/Magento/Newsletter/Model/Subscriber.php @@ -349,6 +349,7 @@ public function loadByCustomerId($customerId) { try { $customerData = $this->customerRepository->getById($customerId); + $customerData->setStoreId($this->_storeManager->getStore()->getId()); $data = $this->getResource()->loadByCustomerData($customerData); $this->addData($data); if (!empty($data) && $customerData->getId() && !$this->getCustomerId()) { From 1caffdc0ef7e9b006444afab8f0060fe8684e29b Mon Sep 17 00:00:00 2001 From: luismi <luismiguelyange@interactiv4.com> Date: Sun, 5 Nov 2017 22:49:53 +0100 Subject: [PATCH 141/653] Line exceeds maximum limit of 120 characters(travis), solved in this commit From c2a245037a3085c09d2e645b701affeca3b11ceb Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Mon, 6 Nov 2017 14:17:45 +0200 Subject: [PATCH 142/653] magento/magento2#9961: Unused product attributes display with value N/A or NO on storefront. --- .../Catalog/Block/Product/View/Attributes.php | 4 +- .../Unit/Block/Product/View/AttributeTest.php | 157 ++++++++++++++++++ 2 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributeTest.php diff --git a/app/code/Magento/Catalog/Block/Product/View/Attributes.php b/app/code/Magento/Catalog/Block/Product/View/Attributes.php index fbdda684343b5..a5caf5b79a214 100644 --- a/app/code/Magento/Catalog/Block/Product/View/Attributes.php +++ b/app/code/Magento/Catalog/Block/Product/View/Attributes.php @@ -85,13 +85,15 @@ public function getAdditionalData(array $excludeAttr = []) if (!$product->hasData($attribute->getAttributeCode())) { $value = __('N/A'); + } elseif ($value instanceof Phrase) { + $value = (string)$value; } elseif ((string)$value == '') { $value = __('No'); } elseif ($attribute->getFrontendInput() == 'price' && is_string($value)) { $value = $this->priceCurrency->convertAndFormat($value); } - if ($value instanceof Phrase || (is_string($value) && strlen($value))) { + if (is_string($value) && strlen($value)) { $data[$attribute->getAttributeCode()] = [ 'label' => __($attribute->getStoreLabel()), 'value' => $value, diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributeTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributeTest.php new file mode 100644 index 0000000000000..2311af6ed8c8f --- /dev/null +++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributeTest.php @@ -0,0 +1,157 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Catalog\Test\Unit\Block\Product\View; + +use \PHPUnit\Framework\TestCase; +use \Magento\Framework\Phrase; +use \Magento\Eav\Model\Entity\Attribute\AbstractAttribute; +use \Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend; +use \Magento\Catalog\Model\Product; +use \Magento\Framework\View\Element\Template\Context; +use \Magento\Framework\Registry; +use \Magento\Framework\Pricing\PriceCurrencyInterface; +use \Magento\Catalog\Block\Product\View\Attributes as AttributesBlock; + +/** + * Test class for \Magento\Catalog\Block\Product\View\Attributes + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class AttributesTest extends TestCase +{ + /** + * @var \Magento\Framework\Phrase + */ + private $phrase; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Eav\Model\Entity\Attribute\AbstractAttribute + */ + private $attribute; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend + */ + private $frontendAttribute; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Product + */ + private $product; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\View\Element\Template\Context + */ + private $context; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Registry + */ + private $registry; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Pricing\PriceCurrencyInterface + */ + private $priceCurrencyInterface; + + /** + * @var \Magento\Catalog\Block\Product\View\Attributes + */ + private $attributesBlock; + + protected function setUp() + { + $this->phrase = new Phrase(__('')); + $this->attribute = $this + ->getMockBuilder(AbstractAttribute::class) + ->disableOriginalConstructor() + ->getMock(); + $this->attribute + ->expects($this->any()) + ->method('getIsVisibleOnFront') + ->willReturn(true); + $this->attribute + ->expects($this->any()) + ->method('getAttributeCode') + ->willReturn('phrase'); + $this->frontendAttribute = $this + ->getMockBuilder(AbstractFrontend::class) + ->disableOriginalConstructor() + ->getMock(); + $this->attribute + ->expects($this->any()) + ->method('getFrontendInput') + ->willReturn('phrase'); + $this->attribute + ->expects($this->any()) + ->method('getFrontend') + ->willReturn($this->frontendAttribute); + $this->product = $this + ->getMockBuilder(Product::class) + ->disableOriginalConstructor() + ->getMock(); + $this->product + ->expects($this->any()) + ->method('getAttributes') + ->willReturn([$this->attribute]); + $this->product + ->expects($this->any()) + ->method('hasData') + ->willReturn(true); + $this->context = $this + ->getMockBuilder(Context::class) + ->disableOriginalConstructor() + ->getMock(); + $this->registry = $this + ->getMockBuilder(Registry::class) + ->disableOriginalConstructor() + ->getMock(); + $this->registry + ->expects($this->any()) + ->method('registry') + ->willReturn($this->product); + $this->priceCurrencyInterface = $this + ->getMockBuilder(PriceCurrencyInterface::class) + ->disableOriginalConstructor() + ->getMock(); + $this->attributesBlock = new AttributesBlock( + $this->context, + $this->registry, + $this->priceCurrencyInterface + ); + } + + /** + * @return void + */ + public function testGetAttributeNoValue() + { + $this->phrase = new Phrase(__('')); + $this->frontendAttribute + ->expects($this->any()) + ->method('getValue') + ->willReturn($this->phrase); + $attributes = $this->attributesBlock->getAdditionalData(); + $this->assertTrue(empty($attributes['phrase'])); + } + + /** + * @return void + */ + public function testGetAttributeHasValue() + { + $this->phrase = new Phrase(__('Yes')); + $this->frontendAttribute + ->expects($this->any()) + ->method('getValue') + ->willReturn($this->phrase); + $attributes = $this->attributesBlock->getAdditionalData(); + $this->assertNotTrue(empty($attributes['phrase'])); + $this->assertNotTrue(empty($attributes['phrase']['value'])); + $this->assertEquals('Yes', $attributes['phrase']['value']); + } +} From a5c064a315dee782d961777a813a141d3712a017 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Mon, 6 Nov 2017 15:52:17 +0200 Subject: [PATCH 143/653] magento/magento2#9961: Unused product attributes display with value N/A or NO on storefront. --- .../Product/View/{AttributeTest.php => AttributesTest.php} | 4 ++++ 1 file changed, 4 insertions(+) rename app/code/Magento/Catalog/Test/Unit/Block/Product/View/{AttributeTest.php => AttributesTest.php} (96%) diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributeTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributesTest.php similarity index 96% rename from app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributeTest.php rename to app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributesTest.php index 2311af6ed8c8f..f3e3a5d579a7e 100644 --- a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributeTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributesTest.php @@ -65,7 +65,9 @@ class AttributesTest extends TestCase protected function setUp() { + // @codingStandardsIgnoreStart $this->phrase = new Phrase(__('')); + // @codingStandardsIgnoreEnd $this->attribute = $this ->getMockBuilder(AbstractAttribute::class) ->disableOriginalConstructor() @@ -130,7 +132,9 @@ protected function setUp() */ public function testGetAttributeNoValue() { + // @codingStandardsIgnoreStart $this->phrase = new Phrase(__('')); + // @codingStandardsIgnoreEnd $this->frontendAttribute ->expects($this->any()) ->method('getValue') From b30eda5e23739acac2f1a67aec718847b6743f19 Mon Sep 17 00:00:00 2001 From: Atish Goswami <atishgoswami@gmail.com> Date: Mon, 6 Nov 2017 19:45:52 +0530 Subject: [PATCH 144/653] Cleanup for object manager references and depricated method --- .../Magento/Contact/Controller/Index/Post.php | 36 +++++++------------ app/code/Magento/Contact/Model/Mail.php | 15 ++++---- 2 files changed, 19 insertions(+), 32 deletions(-) diff --git a/app/code/Magento/Contact/Controller/Index/Post.php b/app/code/Magento/Contact/Controller/Index/Post.php index 3374ff1fa5cf4..3d26555a3157f 100644 --- a/app/code/Magento/Contact/Controller/Index/Post.php +++ b/app/code/Magento/Contact/Controller/Index/Post.php @@ -9,12 +9,12 @@ use Magento\Contact\Model\ConfigInterface; use Magento\Contact\Model\MailInterface; use Magento\Framework\App\Action\Context; -use Magento\Framework\App\ObjectManager; use Magento\Framework\App\Request\DataPersistorInterface; use Magento\Framework\Controller\Result\Redirect; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\HTTP\PhpEnvironment\Request; use Psr\Log\LoggerInterface; +use Magento\Framework\DataObject; class Post extends \Magento\Contact\Controller\Index { @@ -53,10 +53,10 @@ public function __construct( LoggerInterface $logger = null ) { parent::__construct($context, $contactsConfig); - $this->context = $context; - $this->mail = $mail; + $this->context = $context; + $this->mail = $mail; $this->dataPersistor = $dataPersistor; - $this->logger = $logger ?: \Magento\Framework\App\ObjectManager::getInstance()->get(LoggerInterface::class); + $this->logger = $logger; } /** @@ -71,45 +71,33 @@ public function execute() } try { $this->sendEmail($this->validatedParams()); - $this->messageManager->addSuccess( + $this->messageManager->addSuccessMessage( __('Thanks for contacting us with your comments and questions. We\'ll respond to you very soon.') ); - $this->getDataPersistor()->clear('contact_us'); + $this->dataPersistor->clear('contact_us'); } catch (LocalizedException $e) { $this->messageManager->addErrorMessage($e->getMessage()); - $this->getDataPersistor()->set('contact_us', $this->getRequest()->getParams()); + $this->dataPersistor->set('contact_us', $this->getRequest()->getParams()); } catch (\Exception $e) { $this->logger->critical($e); $this->messageManager->addErrorMessage( __('An error occurred while processing your form. Please try again later.') ); - $this->getDataPersistor()->set('contact_us', $this->getRequest()->getParams()); + $this->dataPersistor->set('contact_us', $this->getRequest()->getParams()); } return $this->resultRedirectFactory->create()->setPath('contact/index'); } - /** - * Get Data Persistor - * - * @return DataPersistorInterface - */ - private function getDataPersistor() - { - if ($this->dataPersistor === null) { - $this->dataPersistor = ObjectManager::getInstance() - ->get(DataPersistorInterface::class); - } - - return $this->dataPersistor; - } - /** * @param array $post Post data from contact form * @return void */ private function sendEmail($post) { - $this->mail->send($post['email'], ['data' => new \Magento\Framework\DataObject($post)]); + $this->mail->send( + $post['email'], + ['data' => new DataObject($post)] + ); } /** diff --git a/app/code/Magento/Contact/Model/Mail.php b/app/code/Magento/Contact/Model/Mail.php index d63efbbca573b..6592969093ccd 100644 --- a/app/code/Magento/Contact/Model/Mail.php +++ b/app/code/Magento/Contact/Model/Mail.php @@ -6,9 +6,9 @@ namespace Magento\Contact\Model; use Magento\Framework\Mail\Template\TransportBuilder; -use Magento\Framework\App\ObjectManager; use Magento\Framework\Translate\Inline\StateInterface; use Magento\Store\Model\StoreManagerInterface; +use Magento\Framework\App\Area; class Mail implements MailInterface { @@ -44,20 +44,19 @@ public function __construct( ConfigInterface $contactsConfig, TransportBuilder $transportBuilder, StateInterface $inlineTranslation, - StoreManagerInterface $storeManager = null + StoreManagerInterface $storeManager ) { - $this->contactsConfig = $contactsConfig; - $this->transportBuilder = $transportBuilder; + $this->contactsConfig = $contactsConfig; + $this->transportBuilder = $transportBuilder; $this->inlineTranslation = $inlineTranslation; - $this->storeManager = $storeManager ?: - ObjectManager::getInstance()->get(StoreManagerInterface::class); + $this->storeManager = $storeManager; } /** * Send email from contact form * * @param string $replyTo - * @param array $variables + * @param array $variables * @return void */ public function send($replyTo, array $variables) @@ -71,7 +70,7 @@ public function send($replyTo, array $variables) ->setTemplateIdentifier($this->contactsConfig->emailTemplate()) ->setTemplateOptions( [ - 'area' => 'frontend', + 'area' => Area::AREA_FRONTEND, 'store' => $this->storeManager->getStore()->getId() ] ) From 9e63c27f8e211754be0d75f4e303029c9fc9d259 Mon Sep 17 00:00:00 2001 From: Atish Goswami <atishgoswami@gmail.com> Date: Mon, 6 Nov 2017 20:37:02 +0530 Subject: [PATCH 145/653] Reverted backward incompatible changes --- app/code/Magento/Contact/Controller/Index/Post.php | 4 +++- app/code/Magento/Contact/Model/Mail.php | 8 +++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Contact/Controller/Index/Post.php b/app/code/Magento/Contact/Controller/Index/Post.php index 3d26555a3157f..7b8d1d48eaecd 100644 --- a/app/code/Magento/Contact/Controller/Index/Post.php +++ b/app/code/Magento/Contact/Controller/Index/Post.php @@ -14,6 +14,7 @@ use Magento\Framework\Exception\LocalizedException; use Magento\Framework\HTTP\PhpEnvironment\Request; use Psr\Log\LoggerInterface; +use Magento\Framework\App\ObjectManager; use Magento\Framework\DataObject; class Post extends \Magento\Contact\Controller\Index @@ -56,7 +57,8 @@ public function __construct( $this->context = $context; $this->mail = $mail; $this->dataPersistor = $dataPersistor; - $this->logger = $logger; + $this->logger = $logger ?: + ObjectManager::getInstance()->get(LoggerInterface::class); } /** diff --git a/app/code/Magento/Contact/Model/Mail.php b/app/code/Magento/Contact/Model/Mail.php index 6592969093ccd..f648c426d9a4e 100644 --- a/app/code/Magento/Contact/Model/Mail.php +++ b/app/code/Magento/Contact/Model/Mail.php @@ -8,6 +8,7 @@ use Magento\Framework\Mail\Template\TransportBuilder; use Magento\Framework\Translate\Inline\StateInterface; use Magento\Store\Model\StoreManagerInterface; +use Magento\Framework\App\ObjectManager; use Magento\Framework\App\Area; class Mail implements MailInterface @@ -44,12 +45,13 @@ public function __construct( ConfigInterface $contactsConfig, TransportBuilder $transportBuilder, StateInterface $inlineTranslation, - StoreManagerInterface $storeManager + StoreManagerInterface $storeManager = null ) { $this->contactsConfig = $contactsConfig; $this->transportBuilder = $transportBuilder; $this->inlineTranslation = $inlineTranslation; - $this->storeManager = $storeManager; + $this->storeManager = $storeManager ?: + ObjectManager::getInstance()->get(StoreManagerInterface::class); } /** @@ -70,7 +72,7 @@ public function send($replyTo, array $variables) ->setTemplateIdentifier($this->contactsConfig->emailTemplate()) ->setTemplateOptions( [ - 'area' => Area::AREA_FRONTEND, + 'area' => Area::AREA_FRONTEND, 'store' => $this->storeManager->getStore()->getId() ] ) From 3473c1c578f4c2c01ef410e303bca15e20789e37 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Mon, 6 Nov 2017 18:15:39 +0200 Subject: [PATCH 146/653] magento/magento2#9961: Unused product attributes display with value N/A or NO on storefront. --- .../Test/Unit/Block/Product/View/AttributesTest.php | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributesTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributesTest.php index f3e3a5d579a7e..4602a0d99f6f1 100644 --- a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributesTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/AttributesTest.php @@ -65,9 +65,6 @@ class AttributesTest extends TestCase protected function setUp() { - // @codingStandardsIgnoreStart - $this->phrase = new Phrase(__('')); - // @codingStandardsIgnoreEnd $this->attribute = $this ->getMockBuilder(AbstractAttribute::class) ->disableOriginalConstructor() @@ -132,9 +129,7 @@ protected function setUp() */ public function testGetAttributeNoValue() { - // @codingStandardsIgnoreStart - $this->phrase = new Phrase(__('')); - // @codingStandardsIgnoreEnd + $this->phrase = ''; $this->frontendAttribute ->expects($this->any()) ->method('getValue') @@ -148,7 +143,7 @@ public function testGetAttributeNoValue() */ public function testGetAttributeHasValue() { - $this->phrase = new Phrase(__('Yes')); + $this->phrase = __('Yes'); $this->frontendAttribute ->expects($this->any()) ->method('getValue') From 9937dc654a82df1d5c11b2255a35de97310dd217 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@magento.com> Date: Tue, 7 Nov 2017 12:03:35 +0200 Subject: [PATCH 147/653] MAGETWO-80736: [2.2.x] - PHP 7.1 compatibility: Jenkins Failures related to PHP 7.1 upgrade --- .../Variable/Test/TestCase/UpdateCustomVariableEntityTest.php | 3 +++ .../Variable/Test/TestCase/UpdateCustomVariableEntityTest.xml | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/UpdateCustomVariableEntityTest.php b/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/UpdateCustomVariableEntityTest.php index 29ef2ad7e246e..859e19247fef7 100644 --- a/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/UpdateCustomVariableEntityTest.php +++ b/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/UpdateCustomVariableEntityTest.php @@ -119,9 +119,12 @@ public function tearDown() $storeIndex->getStoreGrid()->searchAndOpen(['store_title' => $this->store->getName()]); $storeNew = $this->objectManager->create(\Magento\Backend\Test\Page\Adminhtml\StoreNew::class); $storeNew->getFormPageActions()->delete(); + + /** @var \Magento\Backend\Test\Page\Adminhtml\StoreDelete $storeDelete */ $storeDelete = $this->objectManager->create(\Magento\Backend\Test\Page\Adminhtml\StoreDelete::class); $storeDelete->getStoreForm()->fillForm(['create_backup' => 'No']); $storeDelete->getFormPageActions()->delete(); + $storeDelete->getModalBlock()->acceptAlert(); } $this->store = null; } diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/UpdateCustomVariableEntityTest.xml b/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/UpdateCustomVariableEntityTest.xml index e0d7a1d68c422..75894e96aadf5 100644 --- a/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/UpdateCustomVariableEntityTest.xml +++ b/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/UpdateCustomVariableEntityTest.xml @@ -19,7 +19,6 @@ <constraint name="Magento\Variable\Test\Constraint\AssertCustomVariableInPage" /> </variation> <variation name="UpdateCustomVariableEntityTestVariation2"> - <data name="tag" xsi:type="string">stable:no</data> <data name="customVariable/data/code" xsi:type="string">variableCode%isolation%</data> <data name="customVariable/data/name" xsi:type="string">variableName%isolation%</data> <data name="customVariable/data/use_default_value" xsi:type="string">No</data> @@ -31,7 +30,6 @@ <constraint name="Magento\Variable\Test\Constraint\AssertCustomVariableInPage" /> </variation> <variation name="UpdateCustomVariableEntityTestVariation3"> - <data name="tag" xsi:type="string">stable:no</data> <data name="customVariable/data/code" xsi:type="string">variableCode%isolation%</data> <data name="customVariable/data/name" xsi:type="string">variableName%isolation%</data> <data name="customVariable/data/use_default_value" xsi:type="string">No</data> @@ -44,7 +42,6 @@ <constraint name="Magento\Variable\Test\Constraint\AssertCustomVariableInPage" /> </variation> <variation name="UpdateCustomVariableEntityTestVariation4"> - <data name="tag" xsi:type="string">stable:no</data> <data name="customVariable/data/code" xsi:type="string">variableCode%isolation%</data> <data name="customVariable/data/name" xsi:type="string">variableName%isolation%</data> <data name="customVariable/data/use_default_value" xsi:type="string">No</data> From 3305e3e553f8dfd0c739152039fe1cde3b92cb9c Mon Sep 17 00:00:00 2001 From: Ievgen Sentiabov <isentiabov@magento.com> Date: Tue, 7 Nov 2017 13:49:01 +0200 Subject: [PATCH 148/653] MAGETWO-71966: [2.2.x] Braintree online refund not working for two websites using individual Braintree accounts - Moved SubjectReader from Helper namespace --- .../Gateway/Command/CaptureStrategyCommand.php | 2 +- .../Gateway/Command/GetPaymentNonceCommand.php | 2 +- .../Braintree/Gateway/Config/CanVoidHandler.php | 2 +- .../Gateway/Request/AddressDataBuilder.php | 2 +- .../Gateway/Request/CaptureDataBuilder.php | 2 +- .../Gateway/Request/CustomerDataBuilder.php | 2 +- .../Gateway/Request/DescriptorDataBuilder.php | 2 +- .../Gateway/Request/KountPaymentDataBuilder.php | 2 +- .../Gateway/Request/PayPal/DeviceDataBuilder.php | 2 +- .../Gateway/Request/PayPal/VaultDataBuilder.php | 2 +- .../Gateway/Request/PaymentDataBuilder.php | 2 +- .../Gateway/Request/RefundDataBuilder.php | 2 +- .../Gateway/Request/StoreConfigBuilder.php | 2 +- .../Gateway/Request/ThreeDSecureDataBuilder.php | 2 +- .../Gateway/Request/VaultCaptureDataBuilder.php | 2 +- .../Braintree/Gateway/Request/VoidDataBuilder.php | 2 +- .../Gateway/Response/CardDetailsHandler.php | 2 +- .../Response/PayPal/VaultDetailsHandler.php | 2 +- .../Gateway/Response/PayPalDetailsHandler.php | 2 +- .../Gateway/Response/PaymentDetailsHandler.php | 2 +- .../Braintree/Gateway/Response/RiskDataHandler.php | 2 +- .../Response/ThreeDSecureDetailsHandler.php | 2 +- .../Gateway/Response/TransactionIdHandler.php | 2 +- .../Gateway/Response/VaultDetailsHandler.php | 2 +- .../Gateway/{Helper => }/SubjectReader.php | 2 +- .../Gateway/Validator/GeneralResponseValidator.php | 2 +- .../Gateway/Command/CaptureStrategyCommandTest.php | 2 +- .../Gateway/Command/GetPaymentNonceCommandTest.php | 2 +- .../Unit/Gateway/Config/CanVoidHandlerTest.php | 2 +- .../Test/Unit/Gateway/Helper/SubjectReaderTest.php | 14 +++++++------- .../Gateway/Request/AddressDataBuilderTest.php | 2 +- .../Gateway/Request/CaptureDataBuilderTest.php | 2 +- .../Gateway/Request/CustomerDataBuilderTest.php | 2 +- .../Gateway/Request/DescriptorDataBuilderTest.php | 2 +- .../Request/KountPaymentDataBuilderTest.php | 2 +- .../Request/PayPal/DeviceDataBuilderTest.php | 2 +- .../Request/PayPal/VaultDataBuilderTest.php | 2 +- .../Gateway/Request/PaymentDataBuilderTest.php | 2 +- .../Unit/Gateway/Request/RefundDataBuilderTest.php | 2 +- .../Request/ThreeDSecureDataBuilderTest.php | 2 +- .../Request/VaultCaptureDataBuilderTest.php | 2 +- .../Gateway/Response/CardDetailsHandlerTest.php | 2 +- .../Response/PayPal/VaultDetailsHandlerTest.php | 2 +- .../Gateway/Response/PayPalDetailsHandlerTest.php | 2 +- .../Gateway/Response/PaymentDetailsHandlerTest.php | 2 +- .../Unit/Gateway/Response/RiskDataHandlerTest.php | 2 +- .../Response/ThreeDSecureDetailsHandlerTest.php | 2 +- .../Gateway/Response/TransactionIdHandlerTest.php | 2 +- .../Gateway/Response/VaultDetailsHandlerTest.php | 2 +- .../Test/Unit/Gateway/Response/VoidHandlerTest.php | 2 +- .../Validator/GeneralResponseValidatorTest.php | 2 +- .../PaymentNonceResponseValidatorTest.php | 2 +- .../Gateway/Validator/ResponseValidatorTest.php | 2 +- 53 files changed, 59 insertions(+), 59 deletions(-) rename app/code/Magento/Braintree/Gateway/{Helper => }/SubjectReader.php (98%) diff --git a/app/code/Magento/Braintree/Gateway/Command/CaptureStrategyCommand.php b/app/code/Magento/Braintree/Gateway/Command/CaptureStrategyCommand.php index 53d113ff28dc6..c8359f69bc47d 100644 --- a/app/code/Magento/Braintree/Gateway/Command/CaptureStrategyCommand.php +++ b/app/code/Magento/Braintree/Gateway/Command/CaptureStrategyCommand.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Gateway\Command; use Braintree\Transaction; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; use Magento\Braintree\Model\Adapter\BraintreeSearchAdapter; use Magento\Framework\Api\FilterBuilder; diff --git a/app/code/Magento/Braintree/Gateway/Command/GetPaymentNonceCommand.php b/app/code/Magento/Braintree/Gateway/Command/GetPaymentNonceCommand.php index a40c4a1296a75..64e38d2999676 100644 --- a/app/code/Magento/Braintree/Gateway/Command/GetPaymentNonceCommand.php +++ b/app/code/Magento/Braintree/Gateway/Command/GetPaymentNonceCommand.php @@ -7,7 +7,7 @@ namespace Magento\Braintree\Gateway\Command; use Exception; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Validator\PaymentNonceResponseValidator; use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; use Magento\Payment\Gateway\Command\Result\ArrayResultFactory; diff --git a/app/code/Magento/Braintree/Gateway/Config/CanVoidHandler.php b/app/code/Magento/Braintree/Gateway/Config/CanVoidHandler.php index 9dd52dc91afb9..0466216bdb7d2 100644 --- a/app/code/Magento/Braintree/Gateway/Config/CanVoidHandler.php +++ b/app/code/Magento/Braintree/Gateway/Config/CanVoidHandler.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Gateway\Config; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Config\ValueHandlerInterface; use Magento\Sales\Model\Order\Payment; diff --git a/app/code/Magento/Braintree/Gateway/Request/AddressDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/AddressDataBuilder.php index 9ff65149894f8..f7d3aae823e56 100644 --- a/app/code/Magento/Braintree/Gateway/Request/AddressDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/AddressDataBuilder.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Gateway\Request; use Magento\Payment\Gateway\Request\BuilderInterface; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; /** * Class AddressDataBuilder diff --git a/app/code/Magento/Braintree/Gateway/Request/CaptureDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/CaptureDataBuilder.php index c6588cfaca05f..6f3a262d7efb4 100644 --- a/app/code/Magento/Braintree/Gateway/Request/CaptureDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/CaptureDataBuilder.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Gateway\Request; use Magento\Framework\Exception\LocalizedException; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Request\BuilderInterface; use Magento\Payment\Helper\Formatter; diff --git a/app/code/Magento/Braintree/Gateway/Request/CustomerDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/CustomerDataBuilder.php index 6b03f418c2545..6b3403bcd15c1 100644 --- a/app/code/Magento/Braintree/Gateway/Request/CustomerDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/CustomerDataBuilder.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Gateway\Request; use Magento\Payment\Gateway\Request\BuilderInterface; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; /** * Class CustomerDataBuilder diff --git a/app/code/Magento/Braintree/Gateway/Request/DescriptorDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/DescriptorDataBuilder.php index f70ff20206163..aac603bfb621a 100644 --- a/app/code/Magento/Braintree/Gateway/Request/DescriptorDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/DescriptorDataBuilder.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Gateway\Request; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Request\BuilderInterface; use Magento\Braintree\Gateway\Config\Config; diff --git a/app/code/Magento/Braintree/Gateway/Request/KountPaymentDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/KountPaymentDataBuilder.php index 29d6e5c958307..8538667778504 100644 --- a/app/code/Magento/Braintree/Gateway/Request/KountPaymentDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/KountPaymentDataBuilder.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Gateway\Request; use Magento\Braintree\Gateway\Config\Config; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Observer\DataAssignObserver; use Magento\Payment\Gateway\Request\BuilderInterface; diff --git a/app/code/Magento/Braintree/Gateway/Request/PayPal/DeviceDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/PayPal/DeviceDataBuilder.php index cea0f8f1291bb..7d0d9dad0db06 100644 --- a/app/code/Magento/Braintree/Gateway/Request/PayPal/DeviceDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/PayPal/DeviceDataBuilder.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Gateway\Request\PayPal; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Observer\DataAssignObserver; use Magento\Payment\Gateway\Request\BuilderInterface; diff --git a/app/code/Magento/Braintree/Gateway/Request/PayPal/VaultDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/PayPal/VaultDataBuilder.php index 6f76c3415c31a..a035c84b4cafd 100644 --- a/app/code/Magento/Braintree/Gateway/Request/PayPal/VaultDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/PayPal/VaultDataBuilder.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Gateway\Request\PayPal; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Request\BuilderInterface; use Magento\Vault\Model\Ui\VaultConfigProvider; diff --git a/app/code/Magento/Braintree/Gateway/Request/PaymentDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/PaymentDataBuilder.php index 51efea6e6ed29..85a0c64451398 100644 --- a/app/code/Magento/Braintree/Gateway/Request/PaymentDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/PaymentDataBuilder.php @@ -7,7 +7,7 @@ use Magento\Braintree\Gateway\Config\Config; use Magento\Braintree\Observer\DataAssignObserver; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Request\BuilderInterface; use Magento\Payment\Helper\Formatter; diff --git a/app/code/Magento/Braintree/Gateway/Request/RefundDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/RefundDataBuilder.php index 82de8e84cbfea..1c25646311160 100644 --- a/app/code/Magento/Braintree/Gateway/Request/RefundDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/RefundDataBuilder.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Gateway\Request; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Request\BuilderInterface; use Magento\Payment\Helper\Formatter; use Magento\Sales\Api\Data\TransactionInterface; diff --git a/app/code/Magento/Braintree/Gateway/Request/StoreConfigBuilder.php b/app/code/Magento/Braintree/Gateway/Request/StoreConfigBuilder.php index 2f9243529bd15..014df33690fa0 100644 --- a/app/code/Magento/Braintree/Gateway/Request/StoreConfigBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/StoreConfigBuilder.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Gateway\Request; use Magento\Payment\Gateway\Request\BuilderInterface; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; /** * This builder is used for correct store resolving and used only to retrieve correct store ID. diff --git a/app/code/Magento/Braintree/Gateway/Request/ThreeDSecureDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/ThreeDSecureDataBuilder.php index b28002a23486b..520aa58457753 100644 --- a/app/code/Magento/Braintree/Gateway/Request/ThreeDSecureDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/ThreeDSecureDataBuilder.php @@ -7,7 +7,7 @@ use Magento\Braintree\Gateway\Config\Config; use Magento\Payment\Gateway\Data\OrderAdapterInterface; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Request\BuilderInterface; use Magento\Payment\Helper\Formatter; diff --git a/app/code/Magento/Braintree/Gateway/Request/VaultCaptureDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/VaultCaptureDataBuilder.php index 7182f87e082d1..4280663178efb 100644 --- a/app/code/Magento/Braintree/Gateway/Request/VaultCaptureDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/VaultCaptureDataBuilder.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Gateway\Request; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Request\BuilderInterface; use Magento\Payment\Helper\Formatter; diff --git a/app/code/Magento/Braintree/Gateway/Request/VoidDataBuilder.php b/app/code/Magento/Braintree/Gateway/Request/VoidDataBuilder.php index 2328ea10f78c7..0bbda28cd344b 100644 --- a/app/code/Magento/Braintree/Gateway/Request/VoidDataBuilder.php +++ b/app/code/Magento/Braintree/Gateway/Request/VoidDataBuilder.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Gateway\Request; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Request\BuilderInterface; use Magento\Sales\Model\Order\Payment; diff --git a/app/code/Magento/Braintree/Gateway/Response/CardDetailsHandler.php b/app/code/Magento/Braintree/Gateway/Response/CardDetailsHandler.php index 2715da5d3c419..e89e604867baa 100644 --- a/app/code/Magento/Braintree/Gateway/Response/CardDetailsHandler.php +++ b/app/code/Magento/Braintree/Gateway/Response/CardDetailsHandler.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Gateway\Response; use Magento\Braintree\Gateway\Config\Config; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Helper\ContextHelper; use Magento\Payment\Gateway\Response\HandlerInterface; use Magento\Sales\Api\Data\OrderPaymentInterface; diff --git a/app/code/Magento/Braintree/Gateway/Response/PayPal/VaultDetailsHandler.php b/app/code/Magento/Braintree/Gateway/Response/PayPal/VaultDetailsHandler.php index 766b385851ab8..f527e9051935b 100644 --- a/app/code/Magento/Braintree/Gateway/Response/PayPal/VaultDetailsHandler.php +++ b/app/code/Magento/Braintree/Gateway/Response/PayPal/VaultDetailsHandler.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Gateway\Response\PayPal; use Braintree\Transaction; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Framework\Intl\DateTimeFactory; use Magento\Payment\Gateway\Response\HandlerInterface; use Magento\Payment\Model\InfoInterface; diff --git a/app/code/Magento/Braintree/Gateway/Response/PayPalDetailsHandler.php b/app/code/Magento/Braintree/Gateway/Response/PayPalDetailsHandler.php index 83d7e44a6b612..97bb312af4bd4 100644 --- a/app/code/Magento/Braintree/Gateway/Response/PayPalDetailsHandler.php +++ b/app/code/Magento/Braintree/Gateway/Response/PayPalDetailsHandler.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Gateway\Response; use Magento\Payment\Gateway\Response\HandlerInterface; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Sales\Api\Data\OrderPaymentInterface; /** diff --git a/app/code/Magento/Braintree/Gateway/Response/PaymentDetailsHandler.php b/app/code/Magento/Braintree/Gateway/Response/PaymentDetailsHandler.php index 3941640aaeeb1..6e509fae35fec 100644 --- a/app/code/Magento/Braintree/Gateway/Response/PaymentDetailsHandler.php +++ b/app/code/Magento/Braintree/Gateway/Response/PaymentDetailsHandler.php @@ -8,7 +8,7 @@ use Braintree\Transaction; use Magento\Braintree\Observer\DataAssignObserver; use Magento\Payment\Gateway\Helper\ContextHelper; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Response\HandlerInterface; use Magento\Sales\Api\Data\OrderPaymentInterface; diff --git a/app/code/Magento/Braintree/Gateway/Response/RiskDataHandler.php b/app/code/Magento/Braintree/Gateway/Response/RiskDataHandler.php index 95660e10b394c..d4976ff18e0ee 100644 --- a/app/code/Magento/Braintree/Gateway/Response/RiskDataHandler.php +++ b/app/code/Magento/Braintree/Gateway/Response/RiskDataHandler.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Gateway\Response; use Magento\Payment\Gateway\Helper\ContextHelper; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Response\HandlerInterface; /** diff --git a/app/code/Magento/Braintree/Gateway/Response/ThreeDSecureDetailsHandler.php b/app/code/Magento/Braintree/Gateway/Response/ThreeDSecureDetailsHandler.php index 93f37cb561feb..8d61660f03ce5 100644 --- a/app/code/Magento/Braintree/Gateway/Response/ThreeDSecureDetailsHandler.php +++ b/app/code/Magento/Braintree/Gateway/Response/ThreeDSecureDetailsHandler.php @@ -7,7 +7,7 @@ use Braintree\Transaction; use Magento\Payment\Gateway\Helper\ContextHelper; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Response\HandlerInterface; use Magento\Sales\Api\Data\OrderPaymentInterface; diff --git a/app/code/Magento/Braintree/Gateway/Response/TransactionIdHandler.php b/app/code/Magento/Braintree/Gateway/Response/TransactionIdHandler.php index 7dd79143736e5..18888bdcf3d4a 100644 --- a/app/code/Magento/Braintree/Gateway/Response/TransactionIdHandler.php +++ b/app/code/Magento/Braintree/Gateway/Response/TransactionIdHandler.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Gateway\Response; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Response\HandlerInterface; use Magento\Sales\Model\Order\Payment; diff --git a/app/code/Magento/Braintree/Gateway/Response/VaultDetailsHandler.php b/app/code/Magento/Braintree/Gateway/Response/VaultDetailsHandler.php index a8332b9409f78..89bf7f14692b0 100644 --- a/app/code/Magento/Braintree/Gateway/Response/VaultDetailsHandler.php +++ b/app/code/Magento/Braintree/Gateway/Response/VaultDetailsHandler.php @@ -7,7 +7,7 @@ use Braintree\Transaction; use Magento\Braintree\Gateway\Config\Config; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Response\HandlerInterface; use Magento\Payment\Model\InfoInterface; use Magento\Sales\Api\Data\OrderPaymentExtensionInterface; diff --git a/app/code/Magento/Braintree/Gateway/Helper/SubjectReader.php b/app/code/Magento/Braintree/Gateway/SubjectReader.php similarity index 98% rename from app/code/Magento/Braintree/Gateway/Helper/SubjectReader.php rename to app/code/Magento/Braintree/Gateway/SubjectReader.php index 6c3231978a54a..d5dc43a4c5e34 100644 --- a/app/code/Magento/Braintree/Gateway/Helper/SubjectReader.php +++ b/app/code/Magento/Braintree/Gateway/SubjectReader.php @@ -3,7 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\Braintree\Gateway\Helper; +namespace Magento\Braintree\Gateway; use Braintree\Transaction; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; diff --git a/app/code/Magento/Braintree/Gateway/Validator/GeneralResponseValidator.php b/app/code/Magento/Braintree/Gateway/Validator/GeneralResponseValidator.php index a70bc2d02e0e5..8028bace0cf24 100644 --- a/app/code/Magento/Braintree/Gateway/Validator/GeneralResponseValidator.php +++ b/app/code/Magento/Braintree/Gateway/Validator/GeneralResponseValidator.php @@ -8,7 +8,7 @@ use Braintree\Result\Error; use Braintree\Result\Successful; use Magento\Payment\Gateway\Validator\AbstractValidator; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Validator\ResultInterfaceFactory; class GeneralResponseValidator extends AbstractValidator diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Command/CaptureStrategyCommandTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Command/CaptureStrategyCommandTest.php index ede4bab8dfc56..52e17c4ff5d55 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Command/CaptureStrategyCommandTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Command/CaptureStrategyCommandTest.php @@ -7,7 +7,7 @@ use Braintree\IsNode; use Magento\Braintree\Gateway\Command\CaptureStrategyCommand; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Model\Adapter\BraintreeAdapter; use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; use Magento\Braintree\Model\Adapter\BraintreeSearchAdapter; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Command/GetPaymentNonceCommandTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Command/GetPaymentNonceCommandTest.php index 1eeb785c13aa7..1b06fc0d21a27 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Command/GetPaymentNonceCommandTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Command/GetPaymentNonceCommandTest.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Test\Unit\Gateway\Command; use Magento\Braintree\Gateway\Command\GetPaymentNonceCommand; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Validator\PaymentNonceResponseValidator; use Magento\Braintree\Model\Adapter\BraintreeAdapter; use Magento\Braintree\Model\Adapter\BraintreeAdapterFactory; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Config/CanVoidHandlerTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Config/CanVoidHandlerTest.php index 793700ab1971f..bb258f27455a4 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Config/CanVoidHandlerTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Config/CanVoidHandlerTest.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Test\Unit\Gateway\Config; use Magento\Braintree\Gateway\Config\CanVoidHandler; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Payment\Model\InfoInterface; use Magento\Sales\Model\Order\Payment; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Helper/SubjectReaderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Helper/SubjectReaderTest.php index b2207563b8b0f..21b8a13be6bed 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Helper/SubjectReaderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Helper/SubjectReaderTest.php @@ -7,7 +7,7 @@ use Braintree\Transaction; use InvalidArgumentException; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; /** * Class SubjectReaderTest @@ -25,7 +25,7 @@ protected function setUp() } /** - * @covers \Magento\Braintree\Gateway\Helper\SubjectReader::readCustomerId + * @covers \Magento\Braintree\Gateway\SubjectReader::readCustomerId * @expectedException InvalidArgumentException * @expectedExceptionMessage The "customerId" field does not exists */ @@ -35,7 +35,7 @@ public function testReadCustomerIdWithException() } /** - * @covers \Magento\Braintree\Gateway\Helper\SubjectReader::readCustomerId + * @covers \Magento\Braintree\Gateway\SubjectReader::readCustomerId */ public function testReadCustomerId() { @@ -44,7 +44,7 @@ public function testReadCustomerId() } /** - * @covers \Magento\Braintree\Gateway\Helper\SubjectReader::readPublicHash + * @covers \Magento\Braintree\Gateway\SubjectReader::readPublicHash * @expectedException InvalidArgumentException * @expectedExceptionMessage The "public_hash" field does not exists */ @@ -54,7 +54,7 @@ public function testReadPublicHashWithException() } /** - * @covers \Magento\Braintree\Gateway\Helper\SubjectReader::readPublicHash + * @covers \Magento\Braintree\Gateway\SubjectReader::readPublicHash */ public function testReadPublicHash() { @@ -63,7 +63,7 @@ public function testReadPublicHash() } /** - * @covers \Magento\Braintree\Gateway\Helper\SubjectReader::readPayPal + * @covers \Magento\Braintree\Gateway\SubjectReader::readPayPal * @expectedException \InvalidArgumentException * @expectedExceptionMessage Transaction has't paypal attribute */ @@ -76,7 +76,7 @@ public function testReadPayPalWithException() } /** - * @covers \Magento\Braintree\Gateway\Helper\SubjectReader::readPayPal + * @covers \Magento\Braintree\Gateway\SubjectReader::readPayPal */ public function testReadPayPal() { diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/AddressDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/AddressDataBuilderTest.php index 95bb73d27f23f..702b3254e3085 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/AddressDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/AddressDataBuilderTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Request; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Request\AddressDataBuilder; use Magento\Payment\Gateway\Data\AddressAdapterInterface; use Magento\Payment\Gateway\Data\OrderAdapterInterface; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CaptureDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CaptureDataBuilderTest.php index afe6588f01944..b42b1162b3d70 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CaptureDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CaptureDataBuilderTest.php @@ -8,7 +8,7 @@ use Magento\Braintree\Gateway\Request\CaptureDataBuilder; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Sales\Model\Order\Payment; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use PHPUnit_Framework_MockObject_MockObject as MockObject; /** diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CustomerDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CustomerDataBuilderTest.php index cac12f83051c1..9b5cee30940df 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CustomerDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/CustomerDataBuilderTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Request; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Request\CustomerDataBuilder; use Magento\Payment\Gateway\Data\AddressAdapterInterface; use Magento\Payment\Gateway\Data\OrderAdapterInterface; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/DescriptorDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/DescriptorDataBuilderTest.php index 6b3b89832b250..eda9121236045 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/DescriptorDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/DescriptorDataBuilderTest.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Test\Unit\Gateway\Request; use Magento\Braintree\Gateway\Config\Config; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Request\DescriptorDataBuilder; use Magento\Payment\Gateway\Data\OrderAdapterInterface; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/KountPaymentDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/KountPaymentDataBuilderTest.php index a8db7f466131f..3737089ed175e 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/KountPaymentDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/KountPaymentDataBuilderTest.php @@ -11,7 +11,7 @@ use Magento\Braintree\Observer\DataAssignObserver; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Braintree\Gateway\Request\KountPaymentDataBuilder; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use PHPUnit_Framework_MockObject_MockObject as MockObject; /** diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/DeviceDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/DeviceDataBuilderTest.php index c2e8d0f9335ce..b363f2bcac673 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/DeviceDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/DeviceDataBuilderTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Request\PayPal; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Request\PayPal\DeviceDataBuilder; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Payment\Model\InfoInterface; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/VaultDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/VaultDataBuilderTest.php index f7a2b721df165..10a96734b849a 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/VaultDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PayPal/VaultDataBuilderTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Request\PayPal; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Request\PayPal\VaultDataBuilder; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Payment\Model\InfoInterface; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PaymentDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PaymentDataBuilderTest.php index 665232592889c..16f11559f73cc 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PaymentDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/PaymentDataBuilderTest.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Test\Unit\Gateway\Request; use Magento\Braintree\Gateway\Config\Config; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Request\PaymentDataBuilder; use Magento\Braintree\Observer\DataAssignObserver; use Magento\Payment\Gateway\Data\OrderAdapterInterface; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/RefundDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/RefundDataBuilderTest.php index ada4c881b3e74..ff4b2f4545fa6 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/RefundDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/RefundDataBuilderTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Request; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Request\PaymentDataBuilder; use Magento\Braintree\Gateway\Request\RefundDataBuilder; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/ThreeDSecureDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/ThreeDSecureDataBuilderTest.php index 0a2617f95eb66..e2bcc2c3b3967 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/ThreeDSecureDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/ThreeDSecureDataBuilderTest.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Test\Unit\Gateway\Request; use Magento\Braintree\Gateway\Config\Config; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Request\ThreeDSecureDataBuilder; use Magento\Payment\Gateway\Data\Order\AddressAdapter; use Magento\Payment\Gateway\Data\Order\OrderAdapter; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/VaultCaptureDataBuilderTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/VaultCaptureDataBuilderTest.php index 94c889159b516..5af050002eb2d 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Request/VaultCaptureDataBuilderTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Request/VaultCaptureDataBuilderTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Request; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Request\VaultCaptureDataBuilder; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Sales\Api\Data\OrderPaymentExtension; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/CardDetailsHandlerTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/CardDetailsHandlerTest.php index 87e8e4e413c1b..525b474040ea4 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/CardDetailsHandlerTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/CardDetailsHandlerTest.php @@ -11,7 +11,7 @@ use Magento\Payment\Gateway\Data\PaymentDataObject; use Magento\Sales\Model\Order\Payment; use Magento\Braintree\Gateway\Config\Config; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; /** * Class CardDetailsHandlerTest diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/PayPal/VaultDetailsHandlerTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/PayPal/VaultDetailsHandlerTest.php index fdf3dc941bd77..0a3a9f2918a21 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/PayPal/VaultDetailsHandlerTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/PayPal/VaultDetailsHandlerTest.php @@ -7,7 +7,7 @@ use Braintree\Transaction; use Braintree\Transaction\PayPalDetails; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Response\PayPal\VaultDetailsHandler; use Magento\Framework\Intl\DateTimeFactory; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/PayPalDetailsHandlerTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/PayPalDetailsHandlerTest.php index f1420ee895e5b..341135b6c03d0 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/PayPalDetailsHandlerTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/PayPalDetailsHandlerTest.php @@ -10,7 +10,7 @@ use Magento\Payment\Gateway\Data\PaymentDataObject; use Magento\Sales\Model\Order; use Magento\Sales\Model\Order\Payment; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use PHPUnit_Framework_MockObject_MockObject as MockObject; /** diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/PaymentDetailsHandlerTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/PaymentDetailsHandlerTest.php index d90caa84b447b..f941b8d7245d1 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/PaymentDetailsHandlerTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/PaymentDetailsHandlerTest.php @@ -10,7 +10,7 @@ use Magento\Payment\Gateway\Data\PaymentDataObject; use Magento\Sales\Model\Order; use Magento\Sales\Model\Order\Payment; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use PHPUnit_Framework_MockObject_MockObject as MockObject; /** diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/RiskDataHandlerTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/RiskDataHandlerTest.php index 2365c396c2f4a..374925b7339c0 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/RiskDataHandlerTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/RiskDataHandlerTest.php @@ -6,7 +6,7 @@ namespace Magento\Braintree\Test\Unit\Gateway\Response; use Braintree\Transaction; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Response\RiskDataHandler; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Sales\Model\Order\Payment; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/ThreeDSecureDetailsHandlerTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/ThreeDSecureDetailsHandlerTest.php index 9ca9ca6aa07ae..6cffc00a89c41 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/ThreeDSecureDetailsHandlerTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/ThreeDSecureDetailsHandlerTest.php @@ -10,7 +10,7 @@ use Magento\Payment\Gateway\Data\PaymentDataObject; use Magento\Sales\Model\Order; use Magento\Sales\Model\Order\Payment; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use PHPUnit_Framework_MockObject_MockObject as MockObject; /** diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/TransactionIdHandlerTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/TransactionIdHandlerTest.php index 3a2d2f7073573..6cbca707242f1 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/TransactionIdHandlerTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/TransactionIdHandlerTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Response; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Response\TransactionIdHandler; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Sales\Model\Order\Payment; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/VaultDetailsHandlerTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/VaultDetailsHandlerTest.php index fb8f507bf1214..568593273c58c 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/VaultDetailsHandlerTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/VaultDetailsHandlerTest.php @@ -8,7 +8,7 @@ use Braintree\Transaction; use Braintree\Transaction\CreditCardDetails; use Magento\Braintree\Gateway\Config\Config; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Response\VaultDetailsHandler; use Magento\Framework\DataObject; use Magento\Payment\Gateway\Data\PaymentDataObject; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/VoidHandlerTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/VoidHandlerTest.php index 398349a9692b7..a541b0115fe63 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Response/VoidHandlerTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Response/VoidHandlerTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Response; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use Magento\Braintree\Gateway\Response\VoidHandler; use Magento\Payment\Gateway\Data\PaymentDataObjectInterface; use Magento\Sales\Model\Order\Payment; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php index 1a9e547e90636..c8a46da504fef 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php @@ -10,7 +10,7 @@ use Magento\Payment\Gateway\Validator\ResultInterface; use Magento\Payment\Gateway\Validator\ResultInterfaceFactory; use Magento\Braintree\Gateway\Validator\GeneralResponseValidator; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; class GeneralResponseValidatorTest extends \PHPUnit\Framework\TestCase { diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/PaymentNonceResponseValidatorTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/PaymentNonceResponseValidatorTest.php index 294226b1656ec..03363b5463d78 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/PaymentNonceResponseValidatorTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/PaymentNonceResponseValidatorTest.php @@ -9,7 +9,7 @@ use Magento\Braintree\Gateway\Validator\PaymentNonceResponseValidator; use Magento\Payment\Gateway\Validator\ResultInterface; use Magento\Payment\Gateway\Validator\ResultInterfaceFactory; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; /** * Class PaymentNonceResponseValidatorTest diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ResponseValidatorTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ResponseValidatorTest.php index aeb9b4a83077c..4bd446079f9a7 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ResponseValidatorTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ResponseValidatorTest.php @@ -10,7 +10,7 @@ use Magento\Payment\Gateway\Validator\ResultInterface; use Magento\Payment\Gateway\Validator\ResultInterfaceFactory; use Magento\Braintree\Gateway\Validator\ResponseValidator; -use Magento\Braintree\Gateway\Helper\SubjectReader; +use Magento\Braintree\Gateway\SubjectReader; use PHPUnit_Framework_MockObject_MockObject as MockObject; use Braintree\Result\Error; use Braintree\Result\Successful; From 42b10d539ca3137563f796eaa30adba6ff8a8fd0 Mon Sep 17 00:00:00 2001 From: aakimov <aakimov@magento.com> Date: Fri, 3 Nov 2017 10:48:35 +0200 Subject: [PATCH 149/653] MAGETWO-72138: Upgrade Outdated Composer Libraries (minor versions only) --- composer.json | 18 +- composer.lock | 878 ++++++++++++------ .../Magento/Test/Integrity/ComposerTest.php | 8 +- .../Test/Integrity/Layout/BlockNamesTest.php | 10 +- .../Test/Integrity/Layout/HandlesTest.php | 10 +- .../Api/ExtensibleInterfacesTest.php | 12 +- .../Test/Integrity/Readme/ReadmeTest.php | 6 +- .../Magento/Test/Integrity/Xml/SchemaTest.php | 6 +- .../Magento/Test/Legacy/PhtmlTemplateTest.php | 22 +- setup/src/Magento/Setup/Module.php | 7 + 10 files changed, 666 insertions(+), 311 deletions(-) diff --git a/composer.json b/composer.json index d67cce6c8b3f2..3507f665e166e 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", "zendframework/zend-stdlib": "^2.7.7", - "zendframework/zend-code": "^3.1.0", + "zendframework/zend-code": "~3.1.0", "zendframework/zend-server": "^2.6.1", "zendframework/zend-soap": "^2.6.0", "zendframework/zend-uri": "^2.5.1", @@ -18,7 +18,7 @@ "zendframework/zend-crypt": "^2.6.0", "zendframework/zend-console": "^2.6.0", "zendframework/zend-modulemanager": "^2.7", - "zendframework/zend-mvc": "~2.6.3", + "zendframework/zend-mvc": "~2.7.12", "zendframework/zend-text": "^2.6.0", "zendframework/zend-i18n": "^2.7.3", "zendframework/zend-eventmanager": "^2.6.3", @@ -35,9 +35,9 @@ "zendframework/zend-captcha": "^2.7.1", "zendframework/zend-session": "^2.7.3", "magento/zendframework1": "~1.13.0", - "colinmollenhour/credis": "1.8.2", + "colinmollenhour/credis": "1.9.1", "colinmollenhour/php-redis-session-abstract": "1.3.4", - "colinmollenhour/cache-backend-redis": "1.10.2", + "colinmollenhour/cache-backend-redis": "1.10.4", "colinmollenhour/cache-backend-file": "1.4", "composer/composer": "1.4.1", "monolog/monolog": "^1.17", @@ -45,12 +45,12 @@ "pelago/emogrifier": "0.1.1", "tubalmartin/cssmin": "4.1.0", "magento/magento-composer-installer": ">=0.1.11", - "braintree/braintree_php": "3.22.0", + "braintree/braintree_php": "3.25.0", "symfony/console": "~2.3, !=2.7.0", "symfony/event-dispatcher": "~2.1", "symfony/process": "~2.1", "phpseclib/phpseclib": "2.0.*", - "tedivm/jshrink": "~1.1.0", + "tedivm/jshrink": "~1.2.0", "magento/composer": "~1.2.0", "lib-libxml": "*", "ext-ctype": "*", @@ -70,14 +70,14 @@ "ext-pdo_mysql": "*", "ext-soap": "*", "sjparkinson/static-review": "~4.1", - "ramsey/uuid": "3.6.1" + "ramsey/uuid": "3.7.1" }, "require-dev": { "phpunit/phpunit": "~6.2.0", - "squizlabs/php_codesniffer": "3.0.1", + "squizlabs/php_codesniffer": "3.1.1", "phpmd/phpmd": "@stable", "pdepend/pdepend": "2.5.0", - "friendsofphp/php-cs-fixer": "~2.1.1", + "friendsofphp/php-cs-fixer": "~2.2.0", "lusitanian/oauth": "~0.8.10", "sebastian/phpcpd": "2.0.4" }, diff --git a/composer.lock b/composer.lock index aba327fee6810..c131cdceab4ba 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "5fd4506bfe38cce56d27c039e8f7bfb2", + "content-hash": "c7cc4b68b01ba7f11d7288670ff1038d", "packages": [ { "name": "braintree/braintree_php", - "version": "3.22.0", + "version": "3.25.0", "source": { "type": "git", "url": "https://github.com/braintree/braintree_php.git", - "reference": "402617b803779bed5ae899209afa75ef9950becc" + "reference": "8c8785b8876d5b2f4b4f78c5768ad245a7c43feb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/braintree/braintree_php/zipball/402617b803779bed5ae899209afa75ef9950becc", - "reference": "402617b803779bed5ae899209afa75ef9950becc", + "url": "https://api.github.com/repos/braintree/braintree_php/zipball/8c8785b8876d5b2f4b4f78c5768ad245a7c43feb", + "reference": "8c8785b8876d5b2f4b4f78c5768ad245a7c43feb", "shasum": "" }, "require": { @@ -51,7 +51,7 @@ } ], "description": "Braintree PHP Client Library", - "time": "2017-02-16T19:59:04+00:00" + "time": "2017-08-25T19:38:09+00:00" }, { "name": "colinmollenhour/cache-backend-file", @@ -91,16 +91,16 @@ }, { "name": "colinmollenhour/cache-backend-redis", - "version": "1.10.2", + "version": "1.10.4", "source": { "type": "git", "url": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis.git", - "reference": "18b33e4b69cf15747ab98b4f2c98ab445da05abd" + "reference": "6bf0a4b7a3f8dc4a6255fad5b6e42213253d9972" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_Redis/zipball/18b33e4b69cf15747ab98b4f2c98ab445da05abd", - "reference": "18b33e4b69cf15747ab98b4f2c98ab445da05abd", + "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_Redis/zipball/6bf0a4b7a3f8dc4a6255fad5b6e42213253d9972", + "reference": "6bf0a4b7a3f8dc4a6255fad5b6e42213253d9972", "shasum": "" }, "require": { @@ -123,20 +123,20 @@ ], "description": "Zend_Cache backend using Redis with full support for tags.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis", - "time": "2017-03-25T04:54:24+00:00" + "time": "2017-10-05T20:50:44+00:00" }, { "name": "colinmollenhour/credis", - "version": "1.8.2", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/colinmollenhour/credis.git", - "reference": "9c14b4bb0779127638a17dd8aab8f05f28c6df43" + "reference": "049ccfb2c680e4dfa6adcfa97f2f29d086919abd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/9c14b4bb0779127638a17dd8aab8f05f28c6df43", - "reference": "9c14b4bb0779127638a17dd8aab8f05f28c6df43", + "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/049ccfb2c680e4dfa6adcfa97f2f29d086919abd", + "reference": "049ccfb2c680e4dfa6adcfa97f2f29d086919abd", "shasum": "" }, "require": { @@ -163,7 +163,7 @@ ], "description": "Credis is a lightweight interface to the Redis key-value store which wraps the phpredis library when available for better performance.", "homepage": "https://github.com/colinmollenhour/credis", - "time": "2017-07-05T15:32:38+00:00" + "time": "2017-10-05T20:28:58+00:00" }, { "name": "colinmollenhour/php-redis-session-abstract", @@ -494,16 +494,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "5.2.1", + "version": "5.2.6", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "429be236f296ca249d61c65649cdf2652f4a5e80" + "reference": "d283e11b6e14c6f4664cf080415c4341293e5bbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/429be236f296ca249d61c65649cdf2652f4a5e80", - "reference": "429be236f296ca249d61c65649cdf2652f4a5e80", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/d283e11b6e14c6f4664cf080415c4341293e5bbd", + "reference": "d283e11b6e14c6f4664cf080415c4341293e5bbd", "shasum": "" }, "require": { @@ -512,7 +512,6 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^2.1", "json-schema/json-schema-test-suite": "1.2.0", - "phpdocumentor/phpdocumentor": "^2.7", "phpunit/phpunit": "^4.8.22" }, "bin": [ @@ -557,7 +556,7 @@ "json", "schema" ], - "time": "2017-05-16T21:06:09+00:00" + "time": "2017-10-21T13:15:38+00:00" }, { "name": "league/climate", @@ -912,16 +911,16 @@ }, { "name": "paragonie/random_compat", - "version": "v2.0.10", + "version": "v2.0.11", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d" + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/634bae8e911eefa89c1abfbf1b66da679ac8f54d", - "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8", + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8", "shasum": "" }, "require": { @@ -956,7 +955,7 @@ "pseudorandom", "random" ], - "time": "2017-03-13T16:27:32+00:00" + "time": "2017-09-27T21:40:39+00:00" }, { "name": "pelago/emogrifier", @@ -1016,16 +1015,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "2.0.6", + "version": "2.0.7", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "34a7699e6f31b1ef4035ee36444407cecf9f56aa" + "reference": "f4b6a522dfa1fd1e477c9cfe5909d5b31f098c0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/34a7699e6f31b1ef4035ee36444407cecf9f56aa", - "reference": "34a7699e6f31b1ef4035ee36444407cecf9f56aa", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/f4b6a522dfa1fd1e477c9cfe5909d5b31f098c0b", + "reference": "f4b6a522dfa1fd1e477c9cfe5909d5b31f098c0b", "shasum": "" }, "require": { @@ -1104,7 +1103,7 @@ "x.509", "x509" ], - "time": "2017-06-05T06:31:10+00:00" + "time": "2017-10-23T05:04:54+00:00" }, { "name": "psr/container", @@ -1155,6 +1154,56 @@ ], "time": "2017-02-14T16:28:37+00:00" }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psr/log", "version": "1.0.2", @@ -1204,16 +1253,16 @@ }, { "name": "ramsey/uuid", - "version": "3.6.1", + "version": "3.7.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "4ae32dd9ab8860a4bbd750ad269cba7f06f7934e" + "reference": "45cffe822057a09e05f7bd09ec5fb88eeecd2334" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/4ae32dd9ab8860a4bbd750ad269cba7f06f7934e", - "reference": "4ae32dd9ab8860a4bbd750ad269cba7f06f7934e", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/45cffe822057a09e05f7bd09ec5fb88eeecd2334", + "reference": "45cffe822057a09e05f7bd09ec5fb88eeecd2334", "shasum": "" }, "require": { @@ -1282,7 +1331,7 @@ "identifier", "uuid" ], - "time": "2017-03-26T20:37:53+00:00" + "time": "2017-09-22T20:46:04+00:00" }, { "name": "seld/cli-prompt", @@ -1480,16 +1529,16 @@ }, { "name": "symfony/console", - "version": "v2.8.27", + "version": "v2.8.28", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c0807a2ca978e64d8945d373a9221a5c35d1a253" + "reference": "f81549d2c5fdee8d711c9ab3c7e7362353ea5853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c0807a2ca978e64d8945d373a9221a5c35d1a253", - "reference": "c0807a2ca978e64d8945d373a9221a5c35d1a253", + "url": "https://api.github.com/repos/symfony/console/zipball/f81549d2c5fdee8d711c9ab3c7e7362353ea5853", + "reference": "f81549d2c5fdee8d711c9ab3c7e7362353ea5853", "shasum": "" }, "require": { @@ -1537,7 +1586,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-08-27T14:29:03+00:00" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "symfony/debug", @@ -1598,16 +1647,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v2.8.27", + "version": "v2.8.28", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "1377400fd641d7d1935981546aaef780ecd5bf6d" + "reference": "7fe089232554357efb8d4af65ce209fc6e5a2186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1377400fd641d7d1935981546aaef780ecd5bf6d", - "reference": "1377400fd641d7d1935981546aaef780ecd5bf6d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7fe089232554357efb8d4af65ce209fc6e5a2186", + "reference": "7fe089232554357efb8d4af65ce209fc6e5a2186", "shasum": "" }, "require": { @@ -1654,20 +1703,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-06-02T07:47:27+00:00" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "symfony/filesystem", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b32a0e5f928d0fa3d1dd03c78d020777e50c10cb" + "reference": "90bc45abf02ae6b7deb43895c1052cb0038506f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b32a0e5f928d0fa3d1dd03c78d020777e50c10cb", - "reference": "b32a0e5f928d0fa3d1dd03c78d020777e50c10cb", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/90bc45abf02ae6b7deb43895c1052cb0038506f1", + "reference": "90bc45abf02ae6b7deb43895c1052cb0038506f1", "shasum": "" }, "require": { @@ -1703,20 +1752,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2017-10-03T13:33:10+00:00" }, { "name": "symfony/finder", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b2260dbc80f3c4198f903215f91a1ac7fe9fe09e" + "reference": "773e19a491d97926f236942484cb541560ce862d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b2260dbc80f3c4198f903215f91a1ac7fe9fe09e", - "reference": "b2260dbc80f3c4198f903215f91a1ac7fe9fe09e", + "url": "https://api.github.com/repos/symfony/finder/zipball/773e19a491d97926f236942484cb541560ce862d", + "reference": "773e19a491d97926f236942484cb541560ce862d", "shasum": "" }, "require": { @@ -1752,20 +1801,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2017-10-02T06:42:24+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803" + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7c8fae0ac1d216eb54349e6a8baa57d515fe8803", - "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { @@ -1777,7 +1826,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -1811,20 +1860,20 @@ "portable", "shim" ], - "time": "2017-06-14T15:44:48+00:00" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/process", - "version": "v2.8.27", + "version": "v2.8.28", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "57e52a0a6a80ea0aec4fc1b785a7920a95cb88a8" + "reference": "26c9fb02bf06bd6b90f661a5bd17e510810d0176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/57e52a0a6a80ea0aec4fc1b785a7920a95cb88a8", - "reference": "57e52a0a6a80ea0aec4fc1b785a7920a95cb88a8", + "url": "https://api.github.com/repos/symfony/process/zipball/26c9fb02bf06bd6b90f661a5bd17e510810d0176", + "reference": "26c9fb02bf06bd6b90f661a5bd17e510810d0176", "shasum": "" }, "require": { @@ -1860,29 +1909,29 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-07-03T08:04:30+00:00" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "tedivm/jshrink", - "version": "v1.1.0", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/tedious/JShrink.git", - "reference": "688527a2e854d7935f24f24c7d5eb1b604742bf9" + "reference": "667e99774d230525d4d3dc2a50da7ba6b1d56bad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tedious/JShrink/zipball/688527a2e854d7935f24f24c7d5eb1b604742bf9", - "reference": "688527a2e854d7935f24f24c7d5eb1b604742bf9", + "url": "https://api.github.com/repos/tedious/JShrink/zipball/667e99774d230525d4d3dc2a50da7ba6b1d56bad", + "reference": "667e99774d230525d4d3dc2a50da7ba6b1d56bad", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^5.6|^7.0" }, "require-dev": { "fabpot/php-cs-fixer": "0.4.0", "phpunit/phpunit": "4.0.*", - "satooshi/php-coveralls": "dev-master" + "satooshi/php-coveralls": "^0.7.0" }, "type": "library", "autoload": { @@ -1906,7 +1955,7 @@ "javascript", "minifier" ], - "time": "2015-07-04T07:35:09+00:00" + "time": "2017-05-30T02:59:46+00:00" }, { "name": "tubalmartin/cssmin", @@ -2333,6 +2382,58 @@ ], "time": "2016-04-25T20:58:11+00:00" }, + { + "name": "zendframework/zend-diactoros", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "c8664b92a6d5bc229e48b0923486c097e45a7877" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/c8664b92a6d5bc229e48b0923486c097e45a7877", + "reference": "c8664b92a6d5bc229e48b0923486c097e45a7877", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "phpunit/phpunit": "^5.7.16 || ^6.0.8", + "zendframework/zend-coding-standard": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev", + "dev-develop": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "PSR HTTP Message implementations", + "homepage": "https://github.com/zendframework/zend-diactoros", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2017-10-12T15:24:51+00:00" + }, { "name": "zendframework/zend-escaper", "version": "2.5.2", @@ -2563,35 +2664,35 @@ }, { "name": "zendframework/zend-http", - "version": "2.6.0", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-http.git", - "reference": "09f4d279f46d86be63171ff62ee0f79eca878678" + "reference": "78aa510c0ea64bfb2aa234f50c4f232c9531acfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-http/zipball/09f4d279f46d86be63171ff62ee0f79eca878678", - "reference": "09f4d279f46d86be63171ff62ee0f79eca878678", + "url": "https://api.github.com/repos/zendframework/zend-http/zipball/78aa510c0ea64bfb2aa234f50c4f232c9531acfa", + "reference": "78aa510c0ea64bfb2aa234f50c4f232c9531acfa", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "zendframework/zend-loader": "^2.5", - "zendframework/zend-stdlib": "^2.5 || ^3.0", - "zendframework/zend-uri": "^2.5", - "zendframework/zend-validator": "^2.5" + "php": "^5.6 || ^7.0", + "zendframework/zend-loader": "^2.5.1", + "zendframework/zend-stdlib": "^3.1 || ^2.7.7", + "zendframework/zend-uri": "^2.5.2", + "zendframework/zend-validator": "^2.10.1" }, "require-dev": { - "phpunit/phpunit": "^4.0", + "phpunit/phpunit": "^6.4.1 || ^5.7.15", "zendframework/zend-coding-standard": "~1.0.0", - "zendframework/zend-config": "^2.5" + "zendframework/zend-config": "^3.1 || ^2.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev", - "dev-develop": "2.7-dev" + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" } }, "autoload": { @@ -2606,10 +2707,13 @@ "description": "provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", "homepage": "https://github.com/zendframework/zend-http", "keywords": [ + "ZendFramework", "http", - "zf2" + "http client", + "zend", + "zf" ], - "time": "2017-01-31T14:41:02+00:00" + "time": "2017-10-13T12:06:24+00:00" }, { "name": "zendframework/zend-hydrator", @@ -3013,16 +3117,16 @@ }, { "name": "zendframework/zend-modulemanager", - "version": "2.8.0", + "version": "2.8.1", "source": { "type": "git", "url": "https://github.com/zendframework/zend-modulemanager.git", - "reference": "c2c5b52ad9741e0b9a9c01a0ee72ab63e5b494b9" + "reference": "710c13353b1ff0975777dbeb39bbf1c85e3353a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/c2c5b52ad9741e0b9a9c01a0ee72ab63e5b494b9", - "reference": "c2c5b52ad9741e0b9a9c01a0ee72ab63e5b494b9", + "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/710c13353b1ff0975777dbeb39bbf1c85e3353a3", + "reference": "710c13353b1ff0975777dbeb39bbf1c85e3353a3", "shasum": "" }, "require": { @@ -3067,51 +3171,56 @@ "modulemanager", "zf2" ], - "time": "2017-07-11T19:39:57+00:00" + "time": "2017-11-01T18:30:41+00:00" }, { "name": "zendframework/zend-mvc", - "version": "2.6.3", + "version": "2.7.12", "source": { "type": "git", "url": "https://github.com/zendframework/zend-mvc.git", - "reference": "a0f21c0261adab4a27bd10964995625b7d4c7f64" + "reference": "badb5bdbdae0706d1ef8928cbc1088cca0e6a3cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/a0f21c0261adab4a27bd10964995625b7d4c7f64", - "reference": "a0f21c0261adab4a27bd10964995625b7d4c7f64", + "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/badb5bdbdae0706d1ef8928cbc1088cca0e6a3cb", + "reference": "badb5bdbdae0706d1ef8928cbc1088cca0e6a3cb", "shasum": "" }, "require": { + "container-interop/container-interop": "^1.1", "php": "^5.5 || ^7.0", - "zendframework/zend-eventmanager": "~2.5", - "zendframework/zend-form": "~2.6", - "zendframework/zend-hydrator": "~1.0", - "zendframework/zend-servicemanager": "~2.5", - "zendframework/zend-stdlib": "^2.7.5" + "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", + "zendframework/zend-form": "^2.8.2", + "zendframework/zend-hydrator": "^1.1 || ^2.1", + "zendframework/zend-psr7bridge": "^0.2", + "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", + "zendframework/zend-stdlib": "^2.7.5 || ^3.0" + }, + "replace": { + "zendframework/zend-router": "^2.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "zendframework/zend-authentication": "~2.5", - "zendframework/zend-cache": "~2.5", - "zendframework/zend-console": "~2.5", - "zendframework/zend-di": "~2.5", - "zendframework/zend-filter": "~2.5", - "zendframework/zend-http": "~2.5", - "zendframework/zend-i18n": "~2.5", - "zendframework/zend-inputfilter": "~2.5", - "zendframework/zend-json": "~2.5", - "zendframework/zend-log": "~2.5", - "zendframework/zend-modulemanager": "~2.6", - "zendframework/zend-serializer": "~2.5", - "zendframework/zend-session": "~2.5", - "zendframework/zend-text": "~2.5", - "zendframework/zend-uri": "~2.5", - "zendframework/zend-validator": "~2.5", - "zendframework/zend-version": "~2.5", - "zendframework/zend-view": "~2.5" + "friendsofphp/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "^4.5", + "sebastian/version": "^1.0.4", + "zendframework/zend-authentication": "^2.5.3", + "zendframework/zend-cache": "^2.6.1", + "zendframework/zend-console": "^2.6", + "zendframework/zend-di": "^2.6", + "zendframework/zend-filter": "^2.6.1", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-i18n": "^2.6", + "zendframework/zend-inputfilter": "^2.6", + "zendframework/zend-json": "^2.6.1", + "zendframework/zend-log": "^2.7.1", + "zendframework/zend-modulemanager": "^2.7.1", + "zendframework/zend-serializer": "^2.6.1", + "zendframework/zend-session": "^2.6.2", + "zendframework/zend-text": "^2.6", + "zendframework/zend-uri": "^2.5", + "zendframework/zend-validator": "^2.6", + "zendframework/zend-view": "^2.6.3" }, "suggest": { "zendframework/zend-authentication": "Zend\\Authentication component for Identity plugin", @@ -3126,18 +3235,18 @@ "zendframework/zend-log": "Zend\\Log component", "zendframework/zend-modulemanager": "Zend\\ModuleManager component", "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-servicemanager-di": "^1.0.1, if using zend-servicemanager v3 and requiring the zend-di integration", "zendframework/zend-session": "Zend\\Session component for FlashMessenger, PRG, and FPRG plugins", "zendframework/zend-text": "Zend\\Text component", "zendframework/zend-uri": "Zend\\Uri component", "zendframework/zend-validator": "Zend\\Validator component", - "zendframework/zend-version": "Zend\\Version component", "zendframework/zend-view": "Zend\\View component" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev", - "dev-develop": "2.7-dev" + "dev-master": "2.7-dev", + "dev-develop": "3.0-dev" } }, "autoload": { @@ -3154,7 +3263,56 @@ "mvc", "zf2" ], - "time": "2016-02-23T15:24:59+00:00" + "time": "2017-04-27T15:44:01+00:00" + }, + { + "name": "zendframework/zend-psr7bridge", + "version": "0.2.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-psr7bridge.git", + "reference": "86c0b53b0c6381391c4add4a93a56e51d5c74605" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-psr7bridge/zipball/86c0b53b0c6381391c4add4a93a56e51d5c74605", + "reference": "86c0b53b0c6381391c4add4a93a56e51d5c74605", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "psr/http-message": "^1.0", + "zendframework/zend-diactoros": "^1.1", + "zendframework/zend-http": "^2.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.7", + "squizlabs/php_codesniffer": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev", + "dev-develop": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Psr7Bridge\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR-7 <-> Zend\\Http bridge", + "homepage": "https://github.com/zendframework/zend-psr7bridge", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2016-05-10T21:44:39+00:00" }, { "name": "zendframework/zend-serializer", @@ -3742,34 +3900,102 @@ } ], "packages-dev": [ + { + "name": "doctrine/annotations", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "5beebb01b025c94e93686b7a0ed3edae81fe3e7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5beebb01b025c94e93686b7a0ed3edae81fe3e7f", + "reference": "5beebb01b025c94e93686b7a0ed3edae81fe3e7f", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^7.1" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2017-07-22T10:58:02+00:00" + }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1" }, "require-dev": { "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -3794,60 +4020,129 @@ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2017-07-22T11:58:36+00:00" + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.1.3", + "version": "v2.2.9", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "d30ca69f8bed931b5c630407f0a98306e33c2c39" + "reference": "eace538b022a2b7db59ef7b5460cb8c66cb20b50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/d30ca69f8bed931b5c630407f0a98306e33c2c39", - "reference": "d30ca69f8bed931b5c630407f0a98306e33c2c39", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/eace538b022a2b7db59ef7b5460cb8c66cb20b50", + "reference": "eace538b022a2b7db59ef7b5460cb8c66cb20b50", "shasum": "" }, "require": { + "composer/semver": "^1.4", + "doctrine/annotations": "^1.2", + "ext-json": "*", "ext-tokenizer": "*", - "php": "^5.3.6 || >=7.0 <7.2", - "sebastian/diff": "^1.1", - "symfony/console": "^2.3 || ^3.0", - "symfony/event-dispatcher": "^2.1 || ^3.0", - "symfony/filesystem": "^2.4 || ^3.0", - "symfony/finder": "^2.2 || ^3.0", + "gecko-packages/gecko-php-unit": "^2.0", + "php": "^5.3.6 || >=7.0 <7.3", + "sebastian/diff": "^1.4", + "symfony/console": "^2.4 || ^3.0 || ^4.0", + "symfony/event-dispatcher": "^2.1 || ^3.0 || ^4.0", + "symfony/filesystem": "^2.4 || ^3.0 || ^4.0", + "symfony/finder": "^2.2 || ^3.0 || ^4.0", + "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0", "symfony/polyfill-php54": "^1.0", "symfony/polyfill-php55": "^1.3", "symfony/polyfill-php70": "^1.0", - "symfony/polyfill-xml": "^1.3", - "symfony/process": "^2.3 || ^3.0", - "symfony/stopwatch": "^2.5 || ^3.0" + "symfony/polyfill-php72": "^1.4", + "symfony/process": "^2.3 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.5 || ^3.0 || ^4.0" }, "conflict": { - "hhvm": "<3.9" + "hhvm": "<3.18" }, "require-dev": { - "gecko-packages/gecko-php-unit": "^2.0", + "johnkary/phpunit-speedtrap": "^1.0.1", "justinrainbow/json-schema": "^5.0", - "phpunit/phpunit": "^4.5 || ^5.0", - "satooshi/php-coveralls": "^1.0", - "symfony/phpunit-bridge": "^3.2" + "php-coveralls/php-coveralls": "^1.0.2", + "phpunit/phpunit": "^4.8.35 || ^5.4.3", + "symfony/phpunit-bridge": "^3.2.2 || ^4.0" }, "suggest": { - "ext-mbstring": "For handling non-UTF8 characters in cache singature.", - "ext-xml": "For better performance.", + "ext-mbstring": "For handling non-UTF8 characters in cache signature.", "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." }, "bin": [ "php-cs-fixer" ], "type": "application", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, "autoload": { "psr-4": { "PhpCsFixer\\": "src/" - } + }, + "classmap": [ + "tests/Test/AbstractFixerTestCase.php", + "tests/Test/AbstractIntegrationTestCase.php", + "tests/Test/IntegrationCase.php", + "tests/Test/IntegrationCaseFactory.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3864,7 +4159,51 @@ } ], "description": "A tool to automatically fix PHP code style", - "time": "2017-03-31T12:59:38+00:00" + "time": "2017-11-02T12:46:49+00:00" + }, + { + "name": "gecko-packages/gecko-php-unit", + "version": "v2.2", + "source": { + "type": "git", + "url": "https://github.com/GeckoPackages/GeckoPHPUnit.git", + "reference": "ab525fac9a9ffea219687f261b02008b18ebf2d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GeckoPackages/GeckoPHPUnit/zipball/ab525fac9a9ffea219687f261b02008b18ebf2d1", + "reference": "ab525fac9a9ffea219687f261b02008b18ebf2d1", + "shasum": "" + }, + "require": { + "php": "^5.3.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3" + }, + "suggest": { + "ext-dom": "When testing with xml.", + "ext-libxml": "When testing with xml.", + "phpunit/phpunit": "This is an extension for it so make sure you have it some way." + }, + "type": "library", + "autoload": { + "psr-4": { + "GeckoPackages\\PHPUnit\\": "src/PHPUnit" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Additional PHPUnit asserts and constraints.", + "homepage": "https://github.com/GeckoPackages", + "keywords": [ + "extension", + "filesystem", + "phpunit" + ], + "time": "2017-08-23T07:39:54+00:00" }, { "name": "ircmaxell/password-compat", @@ -3977,37 +4316,40 @@ }, { "name": "myclabs/deep-copy", - "version": "1.6.1", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102" + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8e6e04167378abf1ddb4d3522d8755c5fd90d102", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" }, "type": "library", "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" - } + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", "keywords": [ "clone", "copy", @@ -4015,7 +4357,7 @@ "object", "object graph" ], - "time": "2017-04-12T18:52:22+00:00" + "time": "2017-10-19T19:58:43+00:00" }, { "name": "pdepend/pdepend", @@ -4436,16 +4778,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "5.2.2", + "version": "5.2.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "8ed1902a57849e117b5651fc1a5c48110946c06b" + "reference": "8e1d2397d8adf59a3f12b2878a3aaa66d1ab189d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/8ed1902a57849e117b5651fc1a5c48110946c06b", - "reference": "8ed1902a57849e117b5651fc1a5c48110946c06b", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/8e1d2397d8adf59a3f12b2878a3aaa66d1ab189d", + "reference": "8e1d2397d8adf59a3f12b2878a3aaa66d1ab189d", "shasum": "" }, "require": { @@ -4454,7 +4796,7 @@ "php": "^7.0", "phpunit/php-file-iterator": "^1.4.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^1.4.11 || ^2.0", + "phpunit/php-token-stream": "^2.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", "sebastian/environment": "^3.0", "sebastian/version": "^2.0.1", @@ -4496,7 +4838,7 @@ "testing", "xunit" ], - "time": "2017-08-03T12:40:43+00:00" + "time": "2017-11-03T13:47:33+00:00" }, { "name": "phpunit/php-file-iterator", @@ -5478,16 +5820,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.0.1", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "f9eaf037edf22fdfccf04cb0ab57ebcb1e166219" + "reference": "d667e245d5dcd4d7bf80f26f2c947d476b66213e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/f9eaf037edf22fdfccf04cb0ab57ebcb1e166219", - "reference": "f9eaf037edf22fdfccf04cb0ab57ebcb1e166219", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/d667e245d5dcd4d7bf80f26f2c947d476b66213e", + "reference": "d667e245d5dcd4d7bf80f26f2c947d476b66213e", "shasum": "" }, "require": { @@ -5497,7 +5839,7 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0" }, "bin": [ "bin/phpcs", @@ -5525,20 +5867,20 @@ "phpcs", "standards" ], - "time": "2017-06-14T01:23:49+00:00" + "time": "2017-10-16T22:40:25+00:00" }, { "name": "symfony/config", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "f9f19a39ee178f61bb2190f51ff7c517c2159315" + "reference": "4ab62407bff9cd97c410a7feaef04c375aaa5cfd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/f9f19a39ee178f61bb2190f51ff7c517c2159315", - "reference": "f9f19a39ee178f61bb2190f51ff7c517c2159315", + "url": "https://api.github.com/repos/symfony/config/zipball/4ab62407bff9cd97c410a7feaef04c375aaa5cfd", + "reference": "4ab62407bff9cd97c410a7feaef04c375aaa5cfd", "shasum": "" }, "require": { @@ -5587,20 +5929,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2017-09-04T16:28:07+00:00" + "time": "2017-10-04T18:56:58+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "e593f06dd90a81c7b70ac1c49862a061b0ec06d2" + "reference": "8ebad929aee3ca185b05f55d9cc5521670821ad1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e593f06dd90a81c7b70ac1c49862a061b0ec06d2", - "reference": "e593f06dd90a81c7b70ac1c49862a061b0ec06d2", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8ebad929aee3ca185b05f55d9cc5521670821ad1", + "reference": "8ebad929aee3ca185b05f55d9cc5521670821ad1", "shasum": "" }, "require": { @@ -5657,40 +5999,37 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-09-05T20:39:38+00:00" + "time": "2017-10-04T17:15:30+00:00" }, { - "name": "symfony/polyfill-php54", - "version": "v1.5.0", + "name": "symfony/options-resolver", + "version": "v3.3.10", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php54.git", - "reference": "b7763422a5334c914ef0298ed21b253d25913a6e" + "url": "https://github.com/symfony/options-resolver.git", + "reference": "ee4e22978fe885b54ee5da8c7964f0a5301abfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/b7763422a5334c914ef0298ed21b253d25913a6e", - "reference": "b7763422a5334c914ef0298ed21b253d25913a6e", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ee4e22978fe885b54ee5da8c7964f0a5301abfb6", + "reference": "ee4e22978fe885b54ee5da8c7964f0a5301abfb6", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "3.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php54\\": "" + "Symfony\\Component\\OptionsResolver\\": "" }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -5699,54 +6038,55 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 5.4+ features to lower PHP versions", + "description": "Symfony OptionsResolver Component", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "config", + "configuration", + "options" ], - "time": "2017-06-14T15:44:48+00:00" + "time": "2017-07-29T21:54:42+00:00" }, { - "name": "symfony/polyfill-php55", - "version": "v1.5.0", + "name": "symfony/polyfill-php54", + "version": "v1.6.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php55.git", - "reference": "29b1381d66f16e0581aab0b9f678ccf073288f68" + "url": "https://github.com/symfony/polyfill-php54.git", + "reference": "d7810a14b2c6c1aff415e1bb755f611b3d5327bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/29b1381d66f16e0581aab0b9f678ccf073288f68", - "reference": "29b1381d66f16e0581aab0b9f678ccf073288f68", + "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/d7810a14b2c6c1aff415e1bb755f611b3d5327bc", + "reference": "d7810a14b2c6c1aff415e1bb755f611b3d5327bc", "shasum": "" }, "require": { - "ircmaxell/password-compat": "~1.0", "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php55\\": "" + "Symfony\\Polyfill\\Php54\\": "" }, "files": [ "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -5763,7 +6103,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 5.5+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 5.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -5771,41 +6111,38 @@ "portable", "shim" ], - "time": "2017-06-14T15:44:48+00:00" + "time": "2017-10-11T12:05:26+00:00" }, { - "name": "symfony/polyfill-php70", - "version": "v1.5.0", + "name": "symfony/polyfill-php55", + "version": "v1.6.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "b6482e68974486984f59449ecea1fbbb22ff840f" + "url": "https://github.com/symfony/polyfill-php55.git", + "reference": "b64e7f0c37ecf144ecc16668936eef94e628fbfd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/b6482e68974486984f59449ecea1fbbb22ff840f", - "reference": "b6482e68974486984f59449ecea1fbbb22ff840f", + "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/b64e7f0c37ecf144ecc16668936eef94e628fbfd", + "reference": "b64e7f0c37ecf144ecc16668936eef94e628fbfd", "shasum": "" }, "require": { - "paragonie/random_compat": "~1.0|~2.0", + "ircmaxell/password-compat": "~1.0", "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" + "Symfony\\Polyfill\\Php55\\": "" }, "files": [ "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -5822,7 +6159,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 5.5+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -5830,37 +6167,41 @@ "portable", "shim" ], - "time": "2017-06-14T15:44:48+00:00" + "time": "2017-10-11T12:05:26+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.5.0", + "name": "symfony/polyfill-php70", + "version": "v1.6.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "8abc9097f5001d310f0edba727469c988acc6ea7" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "0442b9c0596610bd24ae7b5f0a6cdbbc16d9fcff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/8abc9097f5001d310f0edba727469c988acc6ea7", - "reference": "8abc9097f5001d310f0edba727469c988acc6ea7", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0442b9c0596610bd24ae7b5f0a6cdbbc16d9fcff", + "reference": "0442b9c0596610bd24ae7b5f0a6cdbbc16d9fcff", "shasum": "" }, "require": { + "paragonie/random_compat": "~1.0|~2.0", "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" + "Symfony\\Polyfill\\Php70\\": "" }, "files": [ "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -5877,7 +6218,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -5885,32 +6226,39 @@ "portable", "shim" ], - "time": "2017-07-11T13:25:55+00:00" + "time": "2017-10-11T12:05:26+00:00" }, { - "name": "symfony/polyfill-xml", - "version": "v1.5.0", + "name": "symfony/polyfill-php72", + "version": "v1.6.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-xml.git", - "reference": "7d536462e554da7b05600a926303bf9b99153275" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "6de4f4884b97abbbed9f0a84a95ff2ff77254254" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-xml/zipball/7d536462e554da7b05600a926303bf9b99153275", - "reference": "7d536462e554da7b05600a926303bf9b99153275", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/6de4f4884b97abbbed9f0a84a95ff2ff77254254", + "reference": "6de4f4884b97abbbed9f0a84a95ff2ff77254254", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-php72": "~1.4" + "php": ">=5.3.3" }, - "type": "metapackage", + "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -5925,7 +6273,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for xml's utf8_encode and utf8_decode functions", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -5933,20 +6281,20 @@ "portable", "shim" ], - "time": "2017-06-14T15:44:48+00:00" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.3.9", + "version": "v3.3.10", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "9a5610a8d6a50985a7be485c0ba745c22607beeb" + "reference": "170edf8b3247d7b6779eb6fa7428f342702ca184" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/9a5610a8d6a50985a7be485c0ba745c22607beeb", - "reference": "9a5610a8d6a50985a7be485c0ba745c22607beeb", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/170edf8b3247d7b6779eb6fa7428f342702ca184", + "reference": "170edf8b3247d7b6779eb6fa7428f342702ca184", "shasum": "" }, "require": { @@ -5982,7 +6330,7 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2017-10-02T06:42:24+00:00" }, { "name": "theseer/fdomdocument", diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php index de2168a88d43f..1bb42aa564911 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php @@ -47,10 +47,10 @@ public function testValidComposerJson() { $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this); $invoker( - /** - * @param string $dir - * @param string $packageType - */ + /** + * @param string $dir + * @param string $packageType + */ function ($dir, $packageType) { $file = $dir . '/composer.json'; $this->assertFileExists($file); diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Layout/BlockNamesTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Layout/BlockNamesTest.php index ec1d719df2e5e..3bbada60fc4b9 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/Layout/BlockNamesTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Layout/BlockNamesTest.php @@ -14,11 +14,11 @@ public function testBlocksHasName() { $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this); $invoker( - /** - * Test validate that blocks without name doesn't exist in layout file - * - * @param string $layoutFile - */ + /** + * Test validate that blocks without name doesn't exist in layout file + * + * @param string $layoutFile + */ function ($layoutFile) { $dom = new \DOMDocument(); $dom->load($layoutFile); diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Layout/HandlesTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Layout/HandlesTest.php index f2370005afba2..3de3d85a222e3 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/Layout/HandlesTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Layout/HandlesTest.php @@ -78,11 +78,11 @@ public function testHeadBlockUsage() { $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this); $invoker( - /** - * Test validate that head block doesn't exist in layout - * - * @param string $layoutFile - */ + /** + * Test validate that head block doesn't exist in layout + * + * @param string $layoutFile + */ function ($layoutFile) { $dom = new \DOMDocument(); $dom->load($layoutFile); diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Magento/Framework/Api/ExtensibleInterfacesTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Magento/Framework/Api/ExtensibleInterfacesTest.php index a0c1f53cd169e..a07a0dfdb5579 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/Magento/Framework/Api/ExtensibleInterfacesTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Magento/Framework/Api/ExtensibleInterfacesTest.php @@ -24,9 +24,9 @@ public function testGetSetExtensionAttributes() { $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this); $invoker( - /** - * @param string $filename - */ + /** + * @param string $filename + */ function ($filename) { $errors = []; $fileContent = file_get_contents($filename); @@ -158,9 +158,9 @@ public function testExtensibleClassesWithMissingInterface() { $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this); $invoker( - /** - * @param string $filename - */ + /** + * @param string $filename + */ function ($filename) { $errors = []; $fileContent = file_get_contents($filename); diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Readme/ReadmeTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Readme/ReadmeTest.php index 3ba5b26615af6..8e33698ec15d7 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/Readme/ReadmeTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Readme/ReadmeTest.php @@ -35,9 +35,9 @@ public function testReadmeFiles() { $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this); $invoker( - /** - * @param string $dir - */ + /** + * @param string $dir + */ function ($dir) { $file = $dir . DIRECTORY_SEPARATOR . self::README_FILENAME; $this->assertFileExists( diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Xml/SchemaTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Xml/SchemaTest.php index 6a2a63f65d986..11ed4cf7f3725 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/Xml/SchemaTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Xml/SchemaTest.php @@ -14,9 +14,9 @@ public function testXmlFiles() { $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this); $invoker( - /** - * @param string $filename - */ + /** + * @param string $filename + */ function ($filename) { $dom = new \DOMDocument(); $xmlFile = file_get_contents($filename); diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/PhtmlTemplateTest.php b/dev/tests/static/testsuite/Magento/Test/Legacy/PhtmlTemplateTest.php index 34d3e7b77d291..7cb65c27d7fe6 100644 --- a/dev/tests/static/testsuite/Magento/Test/Legacy/PhtmlTemplateTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Legacy/PhtmlTemplateTest.php @@ -13,11 +13,11 @@ public function testBlockVariableInsteadOfThis() { $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this); $invoker( - /** - * Test usage of methods and variables in template through $this - * - * @param string $file - */ + /** + * Test usage of methods and variables in template through $this + * + * @param string $file + */ function ($file) { $this->assertNotRegExp( '/this->(?!helper)\S*/iS', @@ -61,12 +61,12 @@ public function testObsoleteJavascriptAttributeType() { $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this); $invoker( - /** - * "text/javascript" type attribute in not obligatory to use in templates due to HTML5 standards. - * For more details please go to "http://www.w3.org/TR/html5/scripting-1.html". - * - * @param string $file - */ + /** + * "text/javascript" type attribute in not obligatory to use in templates due to HTML5 standards. + * For more details please go to "http://www.w3.org/TR/html5/scripting-1.html". + * + * @param string $file + */ function ($file) { $this->assertNotRegexp( '/type="text\/javascript"/', diff --git a/setup/src/Magento/Setup/Module.php b/setup/src/Magento/Setup/Module.php index 6bccf8b3622b2..226205efd57ca 100644 --- a/setup/src/Magento/Setup/Module.php +++ b/setup/src/Magento/Setup/Module.php @@ -31,6 +31,13 @@ public function onBootstrap(EventInterface $e) /** @var \Zend\EventManager\SharedEventManager $sharedEvents */ $sharedEvents = $events->getSharedManager(); + // register DiStrictAbstractServiceFactory explicitly + $serviceManager = $application->getServiceManager(); + + $strictAbstractFactory = $serviceManager->get('DiStrictAbstractServiceFactory'); + $serviceManager->addAbstractFactory($strictAbstractFactory); + $serviceManager->get('controllermanager')->addAbstractFactory($strictAbstractFactory); + $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($events); From 774799a545500aa2867b53a34028c747050ca1e2 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Tue, 7 Nov 2017 16:05:33 +0200 Subject: [PATCH 150/653] 10628: Color attribute swatches are not visible if sorting is enabled --- .../Catalog/Model/ResourceModel/Config.php | 3 +- .../Unit/Model/ResourceModel/ConfigTest.php | 107 ++++++++++++++++++ 2 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/ConfigTest.php diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Config.php b/app/code/Magento/Catalog/Model/ResourceModel/Config.php index 7fb13265cd130..7b5d4e09a3599 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Config.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Config.php @@ -149,8 +149,7 @@ public function getAttributesUsedForSortBy() ['main_table' => $this->getTable('eav_attribute')] )->join( ['additional_table' => $this->getTable('catalog_eav_attribute')], - 'main_table.attribute_id = additional_table.attribute_id', - [] + 'main_table.attribute_id = additional_table.attribute_id' )->joinLeft( ['al' => $this->getTable('eav_attribute_label')], 'al.attribute_id = main_table.attribute_id AND al.store_id = ' . $this->getStoreId(), diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/ConfigTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/ConfigTest.php new file mode 100644 index 0000000000000..abbcef942373e --- /dev/null +++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/ConfigTest.php @@ -0,0 +1,107 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Catalog\Test\Unit\Model\ResourceModel; + +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; + +/** + * Test for Magento\Catalog\Model\ResourceModel\Config + */ +class ConfigTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var \Magento\Catalog\Model\ResourceModel\Config + */ + private $model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $resource; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $storeManager; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $eavConfig; + + protected function setUp() + { + $objectManager = new ObjectManager($this); + + $this->resource = $this->createMock(\Magento\Framework\App\ResourceConnection::class); + $this->storeManager = $this->createMock(\Magento\Store\Model\StoreManagerInterface::class); + $this->eavConfig = $this->createMock(\Magento\Eav\Model\Config::class); + + $this->model = $objectManager->getObject( + \Magento\Catalog\Model\ResourceModel\Config::class, + [ + 'resource' => $this->resource, + 'storeManager' => $this->storeManager, + 'eavConfig' => $this->eavConfig, + ] + ); + + parent::setUp(); + } + + public function testGetAttributesUsedForSortBy() + { + $expression = 'someExpression'; + $storeId = 1; + $entityTypeId = 4; + + $connectionMock = $this->createMock(\Magento\Framework\DB\Adapter\AdapterInterface::class); + $selectMock = $this->createMock(\Magento\Framework\DB\Select::class); + $storeMock = $this->createMock(\Magento\Store\Api\Data\StoreInterface::class); + $entityTypeMock = $this->createMock(\Magento\Eav\Model\Entity\Type::class); + + $this->resource->expects($this->atLeastOnce())->method('getConnection')->willReturn($connectionMock); + + $connectionMock->expects($this->once())->method('getCheckSql') + ->with('al.value IS NULL', 'main_table.frontend_label', 'al.value') + ->willReturn($expression); + $connectionMock->expects($this->atLeastOnce())->method('select')->willReturn($selectMock); + + $this->resource->expects($this->exactly(3))->method('getTableName')->withConsecutive( + ['eav_attribute'], + ['catalog_eav_attribute'], + ['eav_attribute_label'] + )->willReturnOnConsecutiveCalls('eav_attribute', 'catalog_eav_attribute', 'eav_attribute_label'); + + $this->storeManager->expects($this->once())->method('getStore')->willReturn($storeMock); + $storeMock->expects($this->once())->method('getId')->willReturn($storeId); + + $this->eavConfig->expects($this->once())->method('getEntityType')->willReturn($entityTypeMock); + $entityTypeMock->expects($this->once())->method('getId')->willReturn($entityTypeId); + + $selectMock->expects($this->once())->method('from') + ->with(['main_table' => 'eav_attribute'])->willReturn($selectMock); + $selectMock->expects($this->once())->method('join')->with( + ['additional_table' => 'catalog_eav_attribute'], + 'main_table.attribute_id = additional_table.attribute_id' + )->willReturn($selectMock); + $selectMock->expects($this->once())->method('joinLeft') + ->with( + ['al' => 'eav_attribute_label'], + 'al.attribute_id = main_table.attribute_id AND al.store_id = ' . $storeId, + ['store_label' => $expression] + )->willReturn($selectMock); + $selectMock->expects($this->exactly(2))->method('where')->withConsecutive( + ['main_table.entity_type_id = ?', $entityTypeId], + ['additional_table.used_for_sort_by = ?', 1] + )->willReturn($selectMock); + + $connectionMock->expects($this->once())->method('fetchAll')->with($selectMock); + + $this->model->getAttributesUsedForSortBy(); + } +} From 0c82649c1f6e9151a5503782bdf874e3d4606fa8 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Mon, 6 Nov 2017 17:23:32 +0200 Subject: [PATCH 151/653] 11946: Layer navigation showing wrong product count --- .../Mysql/Aggregation/DataProvider.php | 67 ++----- .../Aggregation/DataProvider/QueryBuilder.php | 183 ++++++++++++++++++ .../DataProvider/QueryBuilderTest.php | 152 +++++++++++++++ .../Mysql/Aggregation/DataProviderTest.php | 67 +++---- 4 files changed, 380 insertions(+), 89 deletions(-) create mode 100644 app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilder.php create mode 100644 app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilderTest.php diff --git a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider.php b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider.php index a2242ff0f355b..5887c76e8ddc2 100644 --- a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider.php +++ b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider.php @@ -3,10 +3,11 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation; use Magento\Catalog\Model\Product; -use Magento\CatalogInventory\Model\Stock; +use Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider\QueryBuilder; use Magento\Customer\Model\Session; use Magento\Eav\Model\Config; use Magento\Framework\App\ResourceConnection; @@ -19,7 +20,7 @@ use Magento\Framework\App\ObjectManager; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * DataProvider for Catalog search Mysql. */ class DataProvider implements DataProviderInterface { @@ -48,23 +49,31 @@ class DataProvider implements DataProviderInterface */ private $connection; + /** + * @var QueryBuilder; + */ + private $queryBuilder; + /** * @param Config $eavConfig * @param ResourceConnection $resource * @param ScopeResolverInterface $scopeResolver * @param Session $customerSession + * @param QueryBuilder|null $queryBuilder */ public function __construct( Config $eavConfig, ResourceConnection $resource, ScopeResolverInterface $scopeResolver, - Session $customerSession + Session $customerSession, + QueryBuilder $queryBuilder = null ) { $this->eavConfig = $eavConfig; $this->resource = $resource; $this->connection = $resource->getConnection(); $this->scopeResolver = $scopeResolver; $this->customerSession = $customerSession; + $this->queryBuilder = $queryBuilder ?: ObjectManager::getInstance()->get(QueryBuilder::class); } /** @@ -79,47 +88,13 @@ public function getDataSet( $attribute = $this->eavConfig->getAttribute(Product::ENTITY, $bucket->getField()); - $select = $this->getSelect(); - - $select->joinInner( - ['entities' => $entityIdsTable->getName()], - 'main_table.entity_id = entities.entity_id', - [] + $select = $this->queryBuilder->build( + $attribute, + $entityIdsTable->getName(), + $currentScope, + $this->customerSession->getCustomerGroupId() ); - if ($attribute->getAttributeCode() === 'price') { - /** @var \Magento\Store\Model\Store $store */ - $store = $this->scopeResolver->getScope($currentScope); - if (!$store instanceof \Magento\Store\Model\Store) { - throw new \RuntimeException('Illegal scope resolved'); - } - $table = $this->resource->getTableName('catalog_product_index_price'); - $select->from(['main_table' => $table], null) - ->columns([BucketInterface::FIELD_VALUE => 'main_table.min_price']) - ->where('main_table.customer_group_id = ?', $this->customerSession->getCustomerGroupId()) - ->where('main_table.website_id = ?', $store->getWebsiteId()); - } else { - $currentScopeId = $this->scopeResolver->getScope($currentScope) - ->getId(); - $table = $this->resource->getTableName( - 'catalog_product_index_eav' . ($attribute->getBackendType() === 'decimal' ? '_decimal' : '') - ); - $subSelect = $select; - $subSelect->from(['main_table' => $table], ['main_table.entity_id', 'main_table.value']) - ->distinct() - ->joinLeft( - ['stock_index' => $this->resource->getTableName('cataloginventory_stock_status')], - 'main_table.source_id = stock_index.product_id', - [] - ) - ->where('main_table.attribute_id = ?', $attribute->getAttributeId()) - ->where('main_table.store_id = ? ', $currentScopeId) - ->where('stock_index.stock_status = ?', Stock::STOCK_IN_STOCK); - $parentSelect = $this->getSelect(); - $parentSelect->from(['main_table' => $subSelect], ['main_table.value']); - $select = $parentSelect; - } - return $select; } @@ -130,12 +105,4 @@ public function execute(Select $select) { return $this->connection->fetchAssoc($select); } - - /** - * @return Select - */ - private function getSelect() - { - return $this->connection->select(); - } } diff --git a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilder.php b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilder.php new file mode 100644 index 0000000000000..d27b6dd265833 --- /dev/null +++ b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilder.php @@ -0,0 +1,183 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider; + +use Magento\CatalogInventory\Model\Configuration as CatalogInventoryConfiguration; +use Magento\CatalogInventory\Model\Stock; +use Magento\Eav\Model\Entity\Attribute\AbstractAttribute; +use Magento\Framework\App\ObjectManager; +use Magento\Framework\App\ResourceConnection; +use Magento\Framework\App\ScopeResolverInterface; +use Magento\Framework\DB\Adapter\AdapterInterface; +use Magento\Framework\DB\Select; +use Magento\Framework\Search\Request\BucketInterface; + +/** + * Class for query building for Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider. + */ +class QueryBuilder +{ + /** + * @var Resource + */ + private $resource; + + /** + * @var ScopeResolverInterface + */ + private $scopeResolver; + + /** + * @var CatalogInventoryConfiguration + */ + private $inventoryConfig; + + /** + * @var AdapterInterface + */ + private $connection; + + /** + * @param ResourceConnection $resource + * @param ScopeResolverInterface $scopeResolver + * @param CatalogInventoryConfiguration|null $inventoryConfig + */ + public function __construct( + ResourceConnection $resource, + ScopeResolverInterface $scopeResolver, + CatalogInventoryConfiguration $inventoryConfig = null + ) { + $this->resource = $resource; + $this->scopeResolver = $scopeResolver; + $this->inventoryConfig = $inventoryConfig ?: ObjectManager::getInstance()->get( + CatalogInventoryConfiguration::class + ); + $this->connection = $resource->getConnection(); + } + + /** + * Build select. + * + * @param AbstractAttribute $attribute + * @param string $tableName + * @param int $currentScope + * @param int $customerGroupId + * + * @return Select + */ + public function build( + AbstractAttribute $attribute, + $tableName, + $currentScope, + $customerGroupId + ) { + $select = $this->getSelect(); + + $select->joinInner( + ['entities' => $tableName], + 'main_table.entity_id = entities.entity_id', + [] + ); + + if ($attribute->getAttributeCode() === 'price') { + /** @var \Magento\Store\Model\Store $store */ + $store = $this->scopeResolver->getScope($currentScope); + if (!$store instanceof \Magento\Store\Model\Store) { + throw new \RuntimeException('Illegal scope resolved'); + } + + $select = $this->buildIfPrice( + $store->getWebsiteId(), + $customerGroupId, + $select + ); + } else { + $currentScopeId = $this->scopeResolver->getScope($currentScope) + ->getId(); + + $select = $this->buildIfNotPrice( + $currentScopeId, + $attribute, + $select + ); + } + + return $select; + } + + /** + * Build select if it is price attribute. + * + * @param int $websiteId + * @param int $customerGroupId + * @param Select $select + * + * @return Select + */ + private function buildIfPrice( + $websiteId, + $customerGroupId, + Select $select + ) { + $table = $this->resource->getTableName('catalog_product_index_price'); + $select->from(['main_table' => $table], null) + ->columns([BucketInterface::FIELD_VALUE => 'main_table.min_price']) + ->where('main_table.customer_group_id = ?', $customerGroupId) + ->where('main_table.website_id = ?', $websiteId); + + return $select; + } + + /** + * Build select if it is not price attribute. + * + * @param int $currentScopeId + * @param AbstractAttribute $attribute + * @param Select $select + * + * @return Select + */ + private function buildIfNotPrice( + $currentScopeId, + AbstractAttribute $attribute, + Select $select + ) { + $table = $this->resource->getTableName( + 'catalog_product_index_eav' . ($attribute->getBackendType() === 'decimal' ? '_decimal' : '') + ); + $subSelect = $select; + $subSelect->from(['main_table' => $table], ['main_table.entity_id', 'main_table.value']) + ->distinct() + ->joinLeft( + ['stock_index' => $this->resource->getTableName('cataloginventory_stock_status')], + 'main_table.source_id = stock_index.product_id', + [] + ) + ->where('main_table.attribute_id = ?', $attribute->getAttributeId()) + ->where('main_table.store_id = ? ', $currentScopeId); + + if (!$this->inventoryConfig->isShowOutOfStock($currentScopeId)) { + $subSelect->where('stock_index.stock_status = ?', Stock::STOCK_IN_STOCK); + } + + $parentSelect = $this->getSelect(); + $parentSelect->from(['main_table' => $subSelect], ['main_table.value']); + $select = $parentSelect; + + return $select; + } + + /** + * Get empty select. + * + * @return Select + */ + private function getSelect() + { + return $this->connection->select(); + } +} diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilderTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilderTest.php new file mode 100644 index 0000000000000..3a5e2838ef278 --- /dev/null +++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilderTest.php @@ -0,0 +1,152 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogSearch\Test\Unit\Model\Adapter\Mysql\Aggregation\DataProvider; + +use Magento\CatalogInventory\Model\Configuration as CatalogInventoryConfiguration; +use Magento\CatalogInventory\Model\Stock; +use Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider\QueryBuilder; +use Magento\Eav\Model\Entity\Attribute\AbstractAttribute; +use Magento\Framework\App\ResourceConnection; +use Magento\Framework\App\ScopeResolverInterface; +use Magento\Framework\DB\Adapter\AdapterInterface; +use Magento\Framework\DB\Select; +use Magento\Store\Model\Store; + +/** + * Test for Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider\QueryBuilder. + */ +class QueryBuilderTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var QueryBuilder + */ + private $model; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $resourceConnectionMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $scopeResolverMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $adapterMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $inventoryConfigMock; + + protected function setUp() + { + $this->resourceConnectionMock = $this->createMock(ResourceConnection::class); + $this->scopeResolverMock = $this->createMock(ScopeResolverInterface::class); + $this->adapterMock = $this->createMock(AdapterInterface::class); + $this->inventoryConfigMock = $this->createMock(CatalogInventoryConfiguration::class); + + $this->resourceConnectionMock->expects($this->once())->method('getConnection')->willReturn($this->adapterMock); + + $this->model = new QueryBuilder( + $this->resourceConnectionMock, + $this->scopeResolverMock, + $this->inventoryConfigMock + ); + } + + public function testBuildWithPriceAttributeCode() + { + $tableName = 'test_table'; + $scope = 1; + $selectMock = $this->createMock(Select::class); + $attributeMock = $this->createMock(AbstractAttribute::class); + $storeMock = $this->createMock(Store::class); + + $this->adapterMock->expects($this->atLeastOnce())->method('select') + ->willReturn($selectMock); + $selectMock->expects($this->once())->method('joinInner') + ->with(['entities' => $tableName], 'main_table.entity_id = entities.entity_id', []); + $attributeMock->expects($this->once())->method('getAttributeCode') + ->willReturn('price'); + $this->scopeResolverMock->expects($this->once())->method('getScope') + ->with($scope)->willReturn($storeMock); + $storeMock->expects($this->once())->method('getWebsiteId')->willReturn(1); + $this->resourceConnectionMock->expects($this->once())->method('getTableName') + ->with('catalog_product_index_price')->willReturn('catalog_product_index_price'); + $selectMock->expects($this->once())->method('from') + ->with(['main_table' => 'catalog_product_index_price'], null) + ->willReturn($selectMock); + $selectMock->expects($this->once())->method('columns') + ->with(['value' => 'main_table.min_price']) + ->willReturn($selectMock); + $selectMock->expects($this->exactly(2))->method('where') + ->withConsecutive( + ['main_table.customer_group_id = ?', 1], + ['main_table.website_id = ?', 1] + )->willReturn($selectMock); + + $this->model->build($attributeMock, $tableName, $scope, 1); + } + + public function testBuildWithNotPriceAttributeCode() + { + $tableName = 'test_table'; + $scope = 1; + $selectMock = $this->createMock(Select::class); + $attributeMock = $this->createMock(AbstractAttribute::class); + $storeMock = $this->createMock(Store::class); + + $this->adapterMock->expects($this->atLeastOnce())->method('select') + ->willReturn($selectMock); + $selectMock->expects($this->once())->method('joinInner') + ->with(['entities' => $tableName], 'main_table.entity_id = entities.entity_id', []); + $attributeMock->expects($this->once())->method('getBackendType') + ->willReturn('decimal'); + $this->scopeResolverMock->expects($this->once())->method('getScope') + ->with($scope)->willReturn($storeMock); + $storeMock->expects($this->once())->method('getId')->willReturn(1); + $this->resourceConnectionMock->expects($this->exactly(2))->method('getTableName') + ->withConsecutive( + ['catalog_product_index_eav_decimal'], + ['cataloginventory_stock_status'] + )->willReturnOnConsecutiveCalls( + 'catalog_product_index_eav_decimal', + 'cataloginventory_stock_status' + ); + + $selectMock->expects($this->exactly(2))->method('from') + ->withConsecutive( + [ + ['main_table' => 'catalog_product_index_eav_decimal'], + ['main_table.entity_id', 'main_table.value'] + ], + [['main_table' => $selectMock], ['main_table.value']] + ) + ->willReturn($selectMock); + $selectMock->expects($this->once())->method('distinct')->willReturn($selectMock); + $selectMock->expects($this->once())->method('joinLeft') + ->with( + ['stock_index' => 'cataloginventory_stock_status'], + 'main_table.source_id = stock_index.product_id', + [] + )->willReturn($selectMock); + $attributeMock->expects($this->once())->method('getAttributeId')->willReturn(3); + $selectMock->expects($this->exactly(3))->method('where') + ->withConsecutive( + ['main_table.attribute_id = ?', 3], + ['main_table.store_id = ? ', 1], + ['stock_index.stock_status = ?', Stock::STOCK_IN_STOCK] + )->willReturn($selectMock); + $this->inventoryConfigMock->expects($this->once())->method('isShowOutOfStock')->with(1)->willReturn(false); + + $this->model->build($attributeMock, $tableName, $scope, 1); + } +} diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Aggregation/DataProviderTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Aggregation/DataProviderTest.php index 4305bc5cb0706..7c558f60b7433 100644 --- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Aggregation/DataProviderTest.php +++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Aggregation/DataProviderTest.php @@ -7,6 +7,7 @@ namespace Magento\CatalogSearch\Test\Unit\Model\Adapter\Mysql\Aggregation; use Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider; +use Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider\QueryBuilder; use Magento\Eav\Model\Config; use Magento\Customer\Model\Session; use Magento\Framework\App\ResourceConnection; @@ -21,6 +22,8 @@ use Magento\Framework\DB\Ddl\Table; /** + * Test for Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider. + * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class DataProviderTest extends \PHPUnit\Framework\TestCase @@ -55,6 +58,11 @@ class DataProviderTest extends \PHPUnit\Framework\TestCase */ private $adapterMock; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $queryBuilderMock; + protected function setUp() { $this->eavConfigMock = $this->createMock(Config::class); @@ -63,72 +71,53 @@ protected function setUp() $this->sessionMock = $this->createMock(Session::class); $this->adapterMock = $this->createMock(AdapterInterface::class); $this->resourceConnectionMock->expects($this->once())->method('getConnection')->willReturn($this->adapterMock); + $this->queryBuilderMock = $this->createMock(QueryBuilder::class); $this->model = new DataProvider( $this->eavConfigMock, $this->resourceConnectionMock, $this->scopeResolverMock, - $this->sessionMock + $this->sessionMock, + $this->queryBuilderMock ); } - public function testGetDataSetUsesFrontendPriceIndexerTableIfAttributeIsPrice() + public function testGetDataSet() { $storeId = 1; - $attributeCode = 'price'; + $attributeCode = 'my_decimal'; $scopeMock = $this->createMock(Store::class); $scopeMock->expects($this->any())->method('getId')->willReturn($storeId); + $dimensionMock = $this->createMock(Dimension::class); $dimensionMock->expects($this->any())->method('getValue')->willReturn($storeId); + $this->scopeResolverMock->expects($this->any())->method('getScope')->with($storeId)->willReturn($scopeMock); $bucketMock = $this->createMock(BucketInterface::class); $bucketMock->expects($this->once())->method('getField')->willReturn($attributeCode); + $attributeMock = $this->createMock(Attribute::class); - $attributeMock->expects($this->any())->method('getAttributeCode')->willReturn($attributeCode); - $this->eavConfigMock->expects($this->once()) - ->method('getAttribute')->with(Product::ENTITY, $attributeCode) - ->willReturn($attributeMock); + $this->eavConfigMock->expects($this->once())->method('getAttribute') + ->with(Product::ENTITY, $attributeCode)->willReturn($attributeMock); - $selectMock = $this->createMock(Select::class); - $selectMock->expects($this->any())->method('from')->willReturnSelf(); - $selectMock->expects($this->any())->method('where')->willReturnSelf(); - $selectMock->expects($this->any())->method('columns')->willReturnSelf(); - $this->adapterMock->expects($this->once())->method('select')->willReturn($selectMock); $tableMock = $this->createMock(Table::class); + $tableMock->expects($this->once())->method('getName')->willReturn('test'); + + $this->sessionMock->expects($this->once())->method('getCustomerGroupId')->willReturn(1); + + $this->queryBuilderMock->expects($this->once())->method('build') + ->with($attributeMock, 'test', $storeId, 1); $this->model->getDataSet($bucketMock, ['scope' => $dimensionMock], $tableMock); } - public function testGetDataSetUsesFrontendPriceIndexerTableForDecimalAttributes() + public function testExecute() { - $storeId = 1; - $attributeCode = 'my_decimal'; - - $scopeMock = $this->createMock(Store::class); - $scopeMock->expects($this->any())->method('getId')->willReturn($storeId); - $dimensionMock = $this->createMock(Dimension::class); - $dimensionMock->expects($this->any())->method('getValue')->willReturn($storeId); - $this->scopeResolverMock->expects($this->any())->method('getScope')->with($storeId)->willReturn($scopeMock); - - $bucketMock = $this->createMock(BucketInterface::class); - $bucketMock->expects($this->once())->method('getField')->willReturn($attributeCode); - $attributeMock = $this->createMock(Attribute::class); - $attributeMock->expects($this->any())->method('getAttributeCode')->willReturn($attributeCode); - $this->eavConfigMock->expects($this->once()) - ->method('getAttribute')->with(Product::ENTITY, $attributeCode) - ->willReturn($attributeMock); - $selectMock = $this->createMock(Select::class); - $selectMock->expects($this->any())->method('from')->willReturnSelf(); - $selectMock->expects($this->any())->method('distinct')->willReturnSelf(); - $selectMock->expects($this->any())->method('where')->willReturnSelf(); - $selectMock->expects($this->any())->method('columns')->willReturnSelf(); - $selectMock->expects($this->any())->method('joinLeft')->willReturnSelf(); - $selectMock->expects($this->any())->method('group')->willReturnSelf(); - $this->adapterMock->expects($this->any())->method('select')->willReturn($selectMock); - $tableMock = $this->createMock(Table::class); - $this->model->getDataSet($bucketMock, ['scope' => $dimensionMock], $tableMock); + $this->adapterMock->expects($this->once())->method('fetchAssoc')->with($selectMock); + + $this->model->execute($selectMock); } } From 433c3cd97c327b6130fa34ad2aad15659facafe3 Mon Sep 17 00:00:00 2001 From: Marius Strajeru <tzyganu@gmail.com> Date: Wed, 8 Nov 2017 13:31:46 +0200 Subject: [PATCH 152/653] #11936:required attribute set id filter on attribute group repository getList --- .../Eav/Model/Attribute/GroupRepository.php | 10 ---- .../Model/Attribute/GroupRepositoryTest.php | 58 +------------------ 2 files changed, 2 insertions(+), 66 deletions(-) diff --git a/app/code/Magento/Eav/Model/Attribute/GroupRepository.php b/app/code/Magento/Eav/Model/Attribute/GroupRepository.php index 9d0fa78668382..e0b5ac309ba7c 100644 --- a/app/code/Magento/Eav/Model/Attribute/GroupRepository.php +++ b/app/code/Magento/Eav/Model/Attribute/GroupRepository.php @@ -117,16 +117,6 @@ public function save(\Magento\Eav\Api\Data\AttributeGroupInterface $group) */ public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria) { - $attributeSetId = $this->retrieveAttributeSetIdFromSearchCriteria($searchCriteria); - if (!$attributeSetId) { - throw InputException::requiredField('attribute_set_id'); - } - try { - $this->setRepository->get($attributeSetId); - } catch (\Exception $exception) { - throw NoSuchEntityException::singleField('attributeSetId', $attributeSetId); - } - /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\Collection $collection */ $collection = $this->groupListFactory->create(); $this->joinProcessor->process($collection); diff --git a/app/code/Magento/Eav/Test/Unit/Model/Attribute/GroupRepositoryTest.php b/app/code/Magento/Eav/Test/Unit/Model/Attribute/GroupRepositoryTest.php index c07122e049a74..9b0f9704887bb 100644 --- a/app/code/Magento/Eav/Test/Unit/Model/Attribute/GroupRepositoryTest.php +++ b/app/code/Magento/Eav/Test/Unit/Model/Attribute/GroupRepositoryTest.php @@ -266,8 +266,6 @@ public function testSaveThrowExceptionIfProvidedGroupDoesNotExist() */ public function testGetList() { - $attributeSetId = 'filter'; - $filterInterfaceMock = $this->getMockBuilder(\Magento\Framework\Api\Search\FilterGroup::class) ->disableOriginalConstructor() ->setMethods([ @@ -275,24 +273,18 @@ public function testGetList() 'getValue', ]) ->getMock(); - $filterInterfaceMock->expects($this->once()) - ->method('getField') - ->willReturn('attribute_set_id'); - $filterInterfaceMock->expects($this->once()) - ->method('getValue') - ->willReturn($attributeSetId); $filterGroupMock = $this->getMockBuilder(\Magento\Framework\Api\Search\FilterGroup::class) ->disableOriginalConstructor() ->getMock(); - $filterGroupMock->expects($this->once()) + $filterGroupMock->expects($this->any()) ->method('getFilters') ->willReturn([$filterInterfaceMock]); $searchCriteriaMock = $this->getMockBuilder(\Magento\Framework\Api\SearchCriteriaInterface::class) ->disableOriginalConstructor() ->getMock(); - $searchCriteriaMock->expects($this->once()) + $searchCriteriaMock->expects($this->any()) ->method('getFilterGroups') ->willReturn([$filterGroupMock]); @@ -324,52 +316,6 @@ public function testGetList() $this->assertEquals($searchResultsMock, $this->model->getList($searchCriteriaMock)); } - /** - * Test get list with invalid input exception - * - * @expectedException \Magento\Framework\Exception\InputException - * @expectedExceptionMessage attribute_set_id is a required field. - * @throws \Magento\Framework\Exception\InputException - * @throws \Magento\Framework\Exception\NoSuchEntityException - * @return void - */ - public function testGetListWithInvalidInputException() - { - $searchCriteriaMock = $this->createMock(\Magento\Framework\Api\SearchCriteriaInterface::class); - $searchCriteriaMock->expects($this->once())->method('getFilterGroups')->willReturn([]); - $this->model->getList($searchCriteriaMock); - } - - /** - * Test get list with no such entity exception - * - * @expectedException \Magento\Framework\Exception\NoSuchEntityException - * @expectedExceptionMessage No such entity with attributeSetId = filter - * @throws \Magento\Framework\Exception\InputException - * @throws \Magento\Framework\Exception\NoSuchEntityException - * @return void - */ - public function testGetListWithNoSuchEntityException() - { - $attributeSetId = 'filter'; - $searchCriteriaMock = $this->createMock(\Magento\Framework\Api\SearchCriteriaInterface::class); - $filterGroupMock = $this->createMock(\Magento\Framework\Api\Search\FilterGroup::class); - $filterInterfaceMock = $this->createMock(\Magento\Framework\Api\Filter::class); - - $searchCriteriaMock->expects($this->once())->method('getFilterGroups')->willReturn([$filterGroupMock]); - - $filterGroupMock->expects($this->once())->method('getFilters')->willReturn([$filterInterfaceMock]); - $filterInterfaceMock->expects($this->once())->method('getField')->willReturn('attribute_set_id'); - $filterInterfaceMock->expects($this->once())->method('getValue')->willReturn($attributeSetId); - - $searchCriteriaMock->expects($this->once())->method('getFilterGroups')->willReturn([]); - $this->setRepositoryMock->expects($this->once()) - ->method('get') - ->with($attributeSetId) - ->willThrowException(new \Exception()); - $this->model->getList($searchCriteriaMock); - } - /** * Test get * From e6aea374904b2c4a4deed537beca3cf7ea3a7733 Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Wed, 8 Nov 2017 13:10:34 +0100 Subject: [PATCH 153/653] Add option "share" for shell command "config:set" This is similar to the "lock" switch which writes configuration values to app/etc/env.php. The "share" switch writes it to app/etc/config.php instead which can be shared between environments. --- .../ConfigSet/ConfigSetProcessorFactory.php | 1 + .../Command/ConfigSet/LockProcessor.php | 3 +- .../Command/ConfigSet/ProcessorFacade.php | 28 +++-- .../Command/ConfigSet/ShareProcessor.php | 109 ++++++++++++++++++ .../Console/Command/ConfigSetCommand.php | 12 +- app/code/Magento/Config/etc/di.xml | 1 + 6 files changed, 143 insertions(+), 11 deletions(-) create mode 100644 app/code/Magento/Config/Console/Command/ConfigSet/ShareProcessor.php diff --git a/app/code/Magento/Config/Console/Command/ConfigSet/ConfigSetProcessorFactory.php b/app/code/Magento/Config/Console/Command/ConfigSet/ConfigSetProcessorFactory.php index e005747ea5ed5..2fc3374859ba6 100644 --- a/app/code/Magento/Config/Console/Command/ConfigSet/ConfigSetProcessorFactory.php +++ b/app/code/Magento/Config/Console/Command/ConfigSet/ConfigSetProcessorFactory.php @@ -28,6 +28,7 @@ class ConfigSetProcessorFactory */ const TYPE_DEFAULT = 'default'; const TYPE_LOCK = 'lock'; + const TYPE_SHARE = 'share'; /**#@-*/ /**#@-*/ diff --git a/app/code/Magento/Config/Console/Command/ConfigSet/LockProcessor.php b/app/code/Magento/Config/Console/Command/ConfigSet/LockProcessor.php index 0bd28f0f78d96..9e39b7bf7bf40 100644 --- a/app/code/Magento/Config/Console/Command/ConfigSet/LockProcessor.php +++ b/app/code/Magento/Config/Console/Command/ConfigSet/LockProcessor.php @@ -16,7 +16,8 @@ /** * Processes file lock flow of config:set command. - * This processor saves the value of configuration and lock it for editing in Admin interface. + * This processor saves the value of configuration into app/etc/env.php + * and locks it for editing in Admin interface. * * {@inheritdoc} */ diff --git a/app/code/Magento/Config/Console/Command/ConfigSet/ProcessorFacade.php b/app/code/Magento/Config/Console/Command/ConfigSet/ProcessorFacade.php index 06a01c6686bfd..4b202538b3701 100644 --- a/app/code/Magento/Config/Console/Command/ConfigSet/ProcessorFacade.php +++ b/app/code/Magento/Config/Console/Command/ConfigSet/ProcessorFacade.php @@ -96,13 +96,14 @@ public function __construct( * @param string $scope The configuration scope (default, website, or store) * @param string $scopeCode The scope code * @param boolean $lock The lock flag + * @param boolean $share The share flag * @return string Processor response message * @throws ValidatorException If some validation is wrong * @throws CouldNotSaveException If cannot save config value * @throws ConfigurationMismatchException If processor can not be instantiated * @since 100.2.0 */ - public function process($path, $value, $scope, $scopeCode, $lock) + public function process($path, $value, $scope, $scopeCode, $lock, $share = false) { try { $this->scopeValidator->isValid($scope, $scopeCode); @@ -111,14 +112,25 @@ public function process($path, $value, $scope, $scopeCode, $lock) throw new ValidatorException(__($exception->getMessage()), $exception); } - $processor = $lock - ? $this->configSetProcessorFactory->create(ConfigSetProcessorFactory::TYPE_LOCK) - : $this->configSetProcessorFactory->create(ConfigSetProcessorFactory::TYPE_DEFAULT); - $message = $lock - ? 'Value was saved and locked.' - : 'Value was saved.'; + $processor = + $share + ? $this->configSetProcessorFactory->create(ConfigSetProcessorFactory::TYPE_SHARE) + : ( + $lock + ? $this->configSetProcessorFactory->create(ConfigSetProcessorFactory::TYPE_LOCK) + : $this->configSetProcessorFactory->create(ConfigSetProcessorFactory::TYPE_DEFAULT) + ); - // The processing flow depends on --lock option. + $message = + $share + ? 'Value was saved in app/etc/config.php and locked.' + : ( + $lock + ? 'Value was saved in app/etc/env.php and locked.' + : 'Value was saved.' + ); + + // The processing flow depends on --lock and --share options. $processor->process($path, $value, $scope, $scopeCode); $this->hash->regenerate(System::CONFIG_TYPE); diff --git a/app/code/Magento/Config/Console/Command/ConfigSet/ShareProcessor.php b/app/code/Magento/Config/Console/Command/ConfigSet/ShareProcessor.php new file mode 100644 index 0000000000000..c1b004a62a730 --- /dev/null +++ b/app/code/Magento/Config/Console/Command/ConfigSet/ShareProcessor.php @@ -0,0 +1,109 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Config\Console\Command\ConfigSet; + +use Magento\Config\App\Config\Type\System; +use Magento\Config\Model\PreparedValueFactory; +use Magento\Framework\App\Config\ConfigPathResolver; +use Magento\Framework\App\Config\Value; +use Magento\Framework\App\DeploymentConfig; +use Magento\Framework\Config\File\ConfigFilePool; +use Magento\Framework\Exception\CouldNotSaveException; +use Magento\Framework\Stdlib\ArrayManager; + +/** + * Processes file share flow of config:set command. + * This processor saves the value of configuration into app/etc/config.php + * and locks it for editing in Admin interface. + * + * {@inheritdoc} + */ +class ShareProcessor implements ConfigSetProcessorInterface +{ + /** + * The factory for prepared value + * + * @var PreparedValueFactory + */ + private $preparedValueFactory; + + /** + * The deployment configuration writer + * + * @var DeploymentConfig\Writer + */ + private $deploymentConfigWriter; + + /** + * An array manager for different manipulations with arrays + * + * @var ArrayManager + */ + private $arrayManager; + + /** + * The resolver for configuration paths according to source type + * + * @var ConfigPathResolver + */ + private $configPathResolver; + + /** + * @param PreparedValueFactory $preparedValueFactory The factory for prepared value + * @param DeploymentConfig\Writer $writer The deployment configuration writer + * @param ArrayManager $arrayManager An array manager for different manipulations with arrays + * @param ConfigPathResolver $configPathResolver The resolver for configuration paths according to source type + */ + public function __construct( + PreparedValueFactory $preparedValueFactory, + DeploymentConfig\Writer $writer, + ArrayManager $arrayManager, + ConfigPathResolver $configPathResolver + ) { + $this->preparedValueFactory = $preparedValueFactory; + $this->deploymentConfigWriter = $writer; + $this->arrayManager = $arrayManager; + $this->configPathResolver = $configPathResolver; + } + + /** + * Processes lock flow of config:set command. + * Requires read access to filesystem. + * + * {@inheritdoc} + */ + public function process($path, $value, $scope, $scopeCode) + { + try { + $configPath = $this->configPathResolver->resolve($path, $scope, $scopeCode, System::CONFIG_TYPE); + $backendModel = $this->preparedValueFactory->create($path, $value, $scope, $scopeCode); + + if ($backendModel instanceof Value) { + /** + * Temporary solution until Magento introduce unified interface + * for storing system configuration into database and configuration files. + */ + $backendModel->validateBeforeSave(); + $backendModel->beforeSave(); + + $value = $backendModel->getValue(); + + $backendModel->afterSave(); + + /** + * Because FS does not support transactions, + * we'll write value just after all validations are triggered. + */ + $this->deploymentConfigWriter->saveConfig( + [ConfigFilePool::APP_CONFIG => $this->arrayManager->set($configPath, [], $value)], + false + ); + } + } catch (\Exception $exception) { + throw new CouldNotSaveException(__('%1', $exception->getMessage()), $exception); + } + } +} diff --git a/app/code/Magento/Config/Console/Command/ConfigSetCommand.php b/app/code/Magento/Config/Console/Command/ConfigSetCommand.php index 1df1b3c4bed14..2b96164b1a766 100644 --- a/app/code/Magento/Config/Console/Command/ConfigSetCommand.php +++ b/app/code/Magento/Config/Console/Command/ConfigSetCommand.php @@ -34,6 +34,7 @@ class ConfigSetCommand extends Command const OPTION_SCOPE = 'scope'; const OPTION_SCOPE_CODE = 'scope-code'; const OPTION_LOCK = 'lock'; + const OPTION_SHARE = 'share'; /**#@-*/ /**#@-*/ @@ -112,7 +113,13 @@ protected function configure() static::OPTION_LOCK, 'l', InputOption::VALUE_NONE, - 'Lock value which prevents modification in the Admin' + 'Lock value which prevents modification in the Admin (will be saved in app/etc/env.php)' + ), + new InputOption( + static::OPTION_SHARE, + 's', + InputOption::VALUE_NONE, + 'Lock and share value with other installations, prevents modification in the Admin (will be saved in app/etc/config.php)' ), ]); @@ -151,7 +158,8 @@ protected function execute(InputInterface $input, OutputInterface $output) $input->getArgument(static::ARG_VALUE), $input->getOption(static::OPTION_SCOPE), $input->getOption(static::OPTION_SCOPE_CODE), - $input->getOption(static::OPTION_LOCK) + $input->getOption(static::OPTION_LOCK), + $input->getOption(static::OPTION_SHARE) ); }); diff --git a/app/code/Magento/Config/etc/di.xml b/app/code/Magento/Config/etc/di.xml index bcddd8ceaf27a..dcd2b255ba338 100644 --- a/app/code/Magento/Config/etc/di.xml +++ b/app/code/Magento/Config/etc/di.xml @@ -297,6 +297,7 @@ <argument name="processors" xsi:type="array"> <item name="default" xsi:type="string">Magento\Config\Console\Command\ConfigSet\DefaultProcessor</item> <item name="lock" xsi:type="string">Magento\Config\Console\Command\ConfigSet\LockProcessor</item> + <item name="share" xsi:type="string">Magento\Config\Console\Command\ConfigSet\ShareProcessor</item> </argument> </arguments> </type> From e60d7bc39f5dc79886ec1224342aa359840a8f79 Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Wed, 8 Nov 2017 13:20:44 +0100 Subject: [PATCH 154/653] Add unit tests for option "share" of shell command "config:set" --- .../Command/ConfigSet/ShareProcessorTest.php | 219 ++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ShareProcessorTest.php diff --git a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ShareProcessorTest.php b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ShareProcessorTest.php new file mode 100644 index 0000000000000..8a93ce5cf4940 --- /dev/null +++ b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ShareProcessorTest.php @@ -0,0 +1,219 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Config\Test\Unit\Console\Command\ConfigSet; + +use Magento\Config\Console\Command\ConfigSet\ShareProcessor; +use Magento\Config\Model\PreparedValueFactory; +use Magento\Framework\App\Config\ConfigPathResolver; +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\App\Config\Value; +use Magento\Framework\App\DeploymentConfig; +use Magento\Framework\Config\File\ConfigFilePool; +use Magento\Framework\Exception\FileSystemException; +use Magento\Framework\Stdlib\ArrayManager; +use Magento\Store\Model\ScopeInterface; +use PHPUnit_Framework_MockObject_MockObject as Mock; + +/** + * Test for ShareProcessor. + * + * @see ShareProcessor + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class ShareProcessorTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var ShareProcessor + */ + private $model; + + /** + * @var PreparedValueFactory|Mock + */ + private $preparedValueFactory; + + /** + * @var DeploymentConfig\Writer|Mock + */ + private $deploymentConfigWriterMock; + + /** + * @var ArrayManager|Mock + */ + private $arrayManagerMock; + + /** + * @var ConfigPathResolver|Mock + */ + private $configPathResolver; + + /** + * @var Value|Mock + */ + private $valueMock; + + /** + * @inheritdoc + */ + protected function setUp() + { + $this->preparedValueFactory = $this->getMockBuilder(PreparedValueFactory::class) + ->disableOriginalConstructor() + ->getMock(); + $this->deploymentConfigWriterMock = $this->getMockBuilder(DeploymentConfig\Writer::class) + ->disableOriginalConstructor() + ->getMock(); + $this->arrayManagerMock = $this->getMockBuilder(ArrayManager::class) + ->disableOriginalConstructor() + ->getMock(); + $this->configPathResolver = $this->getMockBuilder(ConfigPathResolver::class) + ->disableOriginalConstructor() + ->getMock(); + $this->valueMock = $this->getMockBuilder(Value::class) + ->setMethods(['validateBeforeSave', 'beforeSave', 'setValue', 'getValue', 'afterSave']) + ->disableOriginalConstructor() + ->getMock(); + + $this->model = new ShareProcessor( + $this->preparedValueFactory, + $this->deploymentConfigWriterMock, + $this->arrayManagerMock, + $this->configPathResolver + ); + } + + /** + * Tests process of share flow. + * + * @param string $path + * @param string $value + * @param string $scope + * @param string|null $scopeCode + * @dataProvider processDataProvider + */ + public function testProcess($path, $value, $scope, $scopeCode) + { + $this->preparedValueFactory->expects($this->once()) + ->method('create') + ->with($path, $value, $scope, $scopeCode) + ->willReturn($this->valueMock); + $this->configPathResolver->expects($this->once()) + ->method('resolve') + ->willReturn('system/default/test/test/test'); + $this->arrayManagerMock->expects($this->once()) + ->method('set') + ->with('system/default/test/test/test', [], $value) + ->willReturn([ + 'system' => [ + 'default' => [ + 'test' => [ + 'test' => [ + 'test' => $value + ] + ] + ] + ] + ]); + $this->valueMock->expects($this->once()) + ->method('getValue') + ->willReturn($value); + $this->deploymentConfigWriterMock->expects($this->once()) + ->method('saveConfig') + ->with( + [ + ConfigFilePool::APP_CONFIG => [ + 'system' => [ + 'default' => [ + 'test' => [ + 'test' => [ + 'test' => $value + ] + ] + ] + ] + ] + ], + false + ); + $this->valueMock->expects($this->once()) + ->method('validateBeforeSave'); + $this->valueMock->expects($this->once()) + ->method('beforeSave'); + $this->valueMock->expects($this->once()) + ->method('afterSave'); + + $this->model->process($path, $value, $scope, $scopeCode); + } + + /** + * @return array + */ + public function processDataProvider() + { + return [ + ['test/test/test', 'value', ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null], + ['test/test/test', 'value', ScopeInterface::SCOPE_WEBSITE, 'base'], + ['test/test/test', 'value', ScopeInterface::SCOPE_STORE, 'test'], + ]; + } + + /** + * @expectedException \Magento\Framework\Exception\LocalizedException + * @expectedExceptionMessage Filesystem is not writable. + */ + public function testProcessNotReadableFs() + { + $path = 'test/test/test'; + $value = 'value'; + + $this->preparedValueFactory->expects($this->once()) + ->method('create') + ->willReturn($this->valueMock); + $this->valueMock->expects($this->once()) + ->method('getValue') + ->willReturn($value); + $this->configPathResolver->expects($this->once()) + ->method('resolve') + ->willReturn('system/default/test/test/test'); + $this->arrayManagerMock->expects($this->once()) + ->method('set') + ->with('system/default/test/test/test', [], $value) + ->willReturn(null); + $this->deploymentConfigWriterMock->expects($this->once()) + ->method('saveConfig') + ->willThrowException(new FileSystemException(__('Filesystem is not writable.'))); + + $this->model->process($path, $value, ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null); + } + + /** + * @expectedException \Exception + * @expectedExceptionMessage Invalid values + */ + public function testCustomException() + { + $path = 'test/test/test'; + $value = 'value'; + + $this->configPathResolver->expects($this->once()) + ->method('resolve') + ->willReturn('system/default/test/test/test'); + $this->preparedValueFactory->expects($this->once()) + ->method('create') + ->willReturn($this->valueMock); + $this->arrayManagerMock->expects($this->never()) + ->method('set'); + $this->valueMock->expects($this->once()) + ->method('getValue'); + $this->valueMock->expects($this->once()) + ->method('afterSave') + ->willThrowException(new \Exception('Invalid values')); + $this->deploymentConfigWriterMock->expects($this->never()) + ->method('saveConfig'); + + $this->model->process($path, $value, ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null); + } +} From 66677ae715a7899a1c3f88ccf6e02a902757bfca Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Wed, 8 Nov 2017 14:44:34 +0200 Subject: [PATCH 155/653] 12064: Database Rollback not working with magento 2.1.9? --- .../Framework/Setup/BackupRollback.php | 25 +++++++++++++++++++ .../Setup/Test/Unit/BackupRollbackTest.php | 16 ++++++++---- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/lib/internal/Magento/Framework/Setup/BackupRollback.php b/lib/internal/Magento/Framework/Setup/BackupRollback.php index c19b78101db16..a374611271039 100644 --- a/lib/internal/Magento/Framework/Setup/BackupRollback.php +++ b/lib/internal/Magento/Framework/Setup/BackupRollback.php @@ -242,6 +242,10 @@ public function dbRollback($rollbackFile) $dbRollback->setTime($time[0]); $this->log->log('DB rollback is starting...'); $dbRollback->setResourceModel($this->objectManager->create(\Magento\Backup\Model\ResourceModel\Db::class)); + if ($dbRollback->getBackupFilename() !== $rollbackFile) { + $correctName = $this->getCorrectFileNameWithoutPrefix($dbRollback, $rollbackFile); + $dbRollback->setName($correctName); + } $dbRollback->rollback(); $this->log->log('DB rollback filename: ' . $dbRollback->getBackupFilename()); $this->log->log('DB rollback path: ' . $dbRollback->getBackupPath()); @@ -329,4 +333,25 @@ public function getDBDiskSpace() $dbBackup = $this->objectManager->create(\Magento\Framework\Backup\Db::class); return $dbBackup->getDBSize(); } + + /** + * Get correct file name without prefix. + * + * @param \Magento\Framework\Backup\Db $dbRollback + * @param string $rollbackFile + * + * @return string + */ + private function getCorrectFileNameWithoutPrefix(\Magento\Framework\Backup\Db $dbRollback, $rollbackFile) + { + $namePrefix = $dbRollback->getTime() . '_' . $dbRollback->getType(); + //delete prefix. + $fileNameWithoutPrefix = str_replace($namePrefix, '', $rollbackFile); + //change '_' to ' '. + $fileNameWithoutPrefix = str_replace('_', ' ', $fileNameWithoutPrefix); + //delete file extension. + $fileNameWithoutPrefix = pathinfo($fileNameWithoutPrefix, PATHINFO_FILENAME); + + return $fileNameWithoutPrefix; + } } diff --git a/lib/internal/Magento/Framework/Setup/Test/Unit/BackupRollbackTest.php b/lib/internal/Magento/Framework/Setup/Test/Unit/BackupRollbackTest.php index 1f9b776abab0a..5105b0dffdebf 100644 --- a/lib/internal/Magento/Framework/Setup/Test/Unit/BackupRollbackTest.php +++ b/lib/internal/Magento/Framework/Setup/Test/Unit/BackupRollbackTest.php @@ -181,6 +181,7 @@ public function testMediaRollback() public function testDbBackup() { $this->setupDbBackupRollback(); + $this->database->expects($this->once())->method('getBackupFilename')->willReturn('RollbackFile_A.gz'); $this->database->expects($this->once())->method('create'); $this->file->expects($this->once())->method('isExists')->willReturn(false); $this->file->expects($this->once())->method('createDirectory'); @@ -190,12 +191,20 @@ public function testDbBackup() public function testDbRollback() { $this->setupDbBackupRollback(); + $this->database->expects($this->once())->method('rollback'); + $this->database->expects($this->exactly(2))->method('getBackupFilename') + ->willReturnOnConsecutiveCalls('test', '1510140748_db_test_backup'); + $this->database->expects($this->once())->method('getTime')->willReturn(1510140748); + $this->database->expects($this->once())->method('getType')->willReturn('db'); + $this->database->expects($this->once())->method('setName')->with(' test backup'); + $this->file->expects($this->once()) ->method('isExists') - ->with($this->path . '/backups/12345_db.sql') + ->with($this->path . '/backups/1510140748_db_test_backup.sql') ->willReturn(true); - $this->model->dbRollback('12345_db.sql'); + + $this->model->dbRollback('1510140748_db_test_backup.sql'); } private function setupCodeBackupRollback() @@ -226,9 +235,6 @@ private function setupDbBackupRollback() ->method('setBackupExtension'); $this->database->expects($this->once()) ->method('setTime'); - $this->database->expects($this->once()) - ->method('getBackupFilename') - ->willReturn('RollbackFile_A.gz'); $this->database->expects($this->atLeastOnce()) ->method('getBackupPath') ->willReturn('pathToFile/12345_db.sql'); From 279b0c8e9f3a6ce90a71da3ce2642e122558d1aa Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Wed, 8 Nov 2017 17:55:18 +0200 Subject: [PATCH 156/653] 10210: Transport variable can not be altered in email_invoice_set_template_vars_before Event (backport MAGETWO-69482) --- .../Model/Order/Creditmemo/Sender/EmailSender.php | 11 +++++++++-- .../Order/Email/Sender/CreditmemoCommentSender.php | 9 +++++++-- .../Model/Order/Email/Sender/CreditmemoSender.php | 11 ++++++++--- .../Model/Order/Email/Sender/InvoiceCommentSender.php | 9 +++++++-- .../Sales/Model/Order/Email/Sender/InvoiceSender.php | 9 +++++++-- .../Model/Order/Email/Sender/OrderCommentSender.php | 9 +++++++-- .../Order/Email/Sender/ShipmentCommentSender.php | 9 +++++++-- .../Sales/Model/Order/Email/Sender/ShipmentSender.php | 11 ++++++++--- .../Sales/Model/Order/Invoice/Sender/EmailSender.php | 11 +++++++++-- .../Sales/Model/Order/Shipment/Sender/EmailSender.php | 11 +++++++++-- .../Model/Order/Creditmemo/Sender/EmailSenderTest.php | 6 ++++-- .../Model/Order/Invoice/Sender/EmailSenderTest.php | 6 ++++-- .../Model/Order/Shipment/Sender/EmailSenderTest.php | 6 ++++-- 13 files changed, 90 insertions(+), 28 deletions(-) diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo/Sender/EmailSender.php b/app/code/Magento/Sales/Model/Order/Creditmemo/Sender/EmailSender.php index 435b3aee4d6d7..ecd5670a319e7 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo/Sender/EmailSender.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo/Sender/EmailSender.php @@ -7,9 +7,12 @@ use Magento\Sales\Model\Order\Email\Sender; use Magento\Sales\Model\Order\Creditmemo\SenderInterface; +use Magento\Framework\DataObject; /** * Email notification sender for Creditmemo. + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class EmailSender extends Sender implements SenderInterface { @@ -106,13 +109,17 @@ public function send( 'formattedShippingAddress' => $this->getFormattedShippingAddress($order), 'formattedBillingAddress' => $this->getFormattedBillingAddress($order), ]; + $transportObject = new DataObject($transport); + /** + * Event argument `transport` is @deprecated. Use `transportObject` instead. + */ $this->eventManager->dispatch( 'email_creditmemo_set_template_vars_before', - ['sender' => $this, 'transport' => $transport] + ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject] ); - $this->templateContainer->setTemplateVars($transport); + $this->templateContainer->setTemplateVars($transportObject->getData()); if ($this->checkAndSend($order)) { $creditmemo->setEmailSent(true); diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoCommentSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoCommentSender.php index 510bc54dc05b3..ce72f0fee7786 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoCommentSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoCommentSender.php @@ -12,6 +12,7 @@ use Magento\Sales\Model\Order\Email\NotifySender; use Magento\Sales\Model\Order\Address\Renderer; use Magento\Framework\Event\ManagerInterface; +use Magento\Framework\DataObject; /** * Class CreditmemoCommentSender @@ -71,13 +72,17 @@ public function send(Creditmemo $creditmemo, $notify = true, $comment = '') 'formattedShippingAddress' => $this->getFormattedShippingAddress($order), 'formattedBillingAddress' => $this->getFormattedBillingAddress($order), ]; + $transportObject = new DataObject($transport); + /** + * Event argument `transport` is @deprecated. Use `transportObject` instead. + */ $this->eventManager->dispatch( 'email_creditmemo_comment_set_template_vars_before', - ['sender' => $this, 'transport' => $transport] + ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject] ); - $this->templateContainer->setTemplateVars($transport); + $this->templateContainer->setTemplateVars($transportObject->getData()); return $this->checkAndSend($order, $notify); } diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php index a4ecd2aa7d000..8004483583114 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php @@ -14,6 +14,7 @@ use Magento\Sales\Model\ResourceModel\Order\Creditmemo as CreditmemoResource; use Magento\Sales\Model\Order\Address\Renderer; use Magento\Framework\Event\ManagerInterface; +use Magento\Framework\DataObject; /** * Class CreditmemoSender @@ -102,7 +103,7 @@ public function send(Creditmemo $creditmemo, $forceSyncMode = false) if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) { $order = $creditmemo->getOrder(); - + $transport = [ 'order' => $order, 'creditmemo' => $creditmemo, @@ -113,13 +114,17 @@ public function send(Creditmemo $creditmemo, $forceSyncMode = false) 'formattedShippingAddress' => $this->getFormattedShippingAddress($order), 'formattedBillingAddress' => $this->getFormattedBillingAddress($order), ]; + $transportObject = new DataObject($transport); + /** + * Event argument `transport` is @deprecated. Use `transportObject` instead. + */ $this->eventManager->dispatch( 'email_creditmemo_set_template_vars_before', - ['sender' => $this, 'transport' => $transport] + ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject] ); - $this->templateContainer->setTemplateVars($transport); + $this->templateContainer->setTemplateVars($transportObject->getData()); if ($this->checkAndSend($order)) { $creditmemo->setEmailSent(true); diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceCommentSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceCommentSender.php index 8f6401ff1cb88..62d13eb8ce681 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceCommentSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceCommentSender.php @@ -12,6 +12,7 @@ use Magento\Sales\Model\Order\Invoice; use Magento\Sales\Model\Order\Address\Renderer; use Magento\Framework\Event\ManagerInterface; +use Magento\Framework\DataObject; /** * Class InvoiceCommentSender @@ -71,13 +72,17 @@ public function send(Invoice $invoice, $notify = true, $comment = '') 'formattedShippingAddress' => $this->getFormattedShippingAddress($order), 'formattedBillingAddress' => $this->getFormattedBillingAddress($order), ]; + $transportObject = new DataObject($transport); + /** + * Event argument `transport` is @deprecated. Use `transportObject` instead. + */ $this->eventManager->dispatch( 'email_invoice_comment_set_template_vars_before', - ['sender' => $this, 'transport' => $transport] + ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject] ); - $this->templateContainer->setTemplateVars($transport); + $this->templateContainer->setTemplateVars($transportObject->getData()); return $this->checkAndSend($order, $notify); } diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php index c3083ddae2dd8..994fd79945cfd 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php @@ -14,6 +14,7 @@ use Magento\Sales\Model\ResourceModel\Order\Invoice as InvoiceResource; use Magento\Sales\Model\Order\Address\Renderer; use Magento\Framework\Event\ManagerInterface; +use Magento\Framework\DataObject; /** * Class InvoiceSender @@ -113,13 +114,17 @@ public function send(Invoice $invoice, $forceSyncMode = false) 'formattedShippingAddress' => $this->getFormattedShippingAddress($order), 'formattedBillingAddress' => $this->getFormattedBillingAddress($order) ]; + $transportObject = new DataObject($transport); + /** + * Event argument `transport` is @deprecated. Use `transportObject` instead. + */ $this->eventManager->dispatch( 'email_invoice_set_template_vars_before', - ['sender' => $this, 'transport' => $transport] + ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject] ); - $this->templateContainer->setTemplateVars($transport); + $this->templateContainer->setTemplateVars($transportObject->getData()); if ($this->checkAndSend($order)) { $invoice->setEmailSent(true); diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/OrderCommentSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/OrderCommentSender.php index c8c1eb10d4864..98cb9304a494b 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/OrderCommentSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/OrderCommentSender.php @@ -11,6 +11,7 @@ use Magento\Sales\Model\Order\Email\NotifySender; use Magento\Sales\Model\Order\Address\Renderer; use Magento\Framework\Event\ManagerInterface; +use Magento\Framework\DataObject; /** * Class OrderCommentSender @@ -68,13 +69,17 @@ public function send(Order $order, $notify = true, $comment = '') 'formattedShippingAddress' => $this->getFormattedShippingAddress($order), 'formattedBillingAddress' => $this->getFormattedBillingAddress($order), ]; + $transportObject = new DataObject($transport); + /** + * Event argument `transport` is @deprecated. Use `transportObject` instead. + */ $this->eventManager->dispatch( 'email_order_comment_set_template_vars_before', - ['sender' => $this, 'transport' => $transport] + ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject] ); - $this->templateContainer->setTemplateVars($transport); + $this->templateContainer->setTemplateVars($transportObject->getData()); return $this->checkAndSend($order, $notify); } diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentCommentSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentCommentSender.php index 80c2ed356061b..664f8ec9fc7e5 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentCommentSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentCommentSender.php @@ -12,6 +12,7 @@ use Magento\Sales\Model\Order\Shipment; use Magento\Sales\Model\Order\Address\Renderer; use Magento\Framework\Event\ManagerInterface; +use Magento\Framework\DataObject; /** * Class ShipmentCommentSender @@ -71,13 +72,17 @@ public function send(Shipment $shipment, $notify = true, $comment = '') 'formattedShippingAddress' => $this->getFormattedShippingAddress($order), 'formattedBillingAddress' => $this->getFormattedBillingAddress($order), ]; + $transportObject = new DataObject($transport); + /** + * Event argument `transport` is @deprecated. Use `transportObject` instead. + */ $this->eventManager->dispatch( 'email_shipment_comment_set_template_vars_before', - ['sender' => $this, 'transport' => $transport] + ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject] ); - $this->templateContainer->setTemplateVars($transport); + $this->templateContainer->setTemplateVars($transportObject->getData()); return $this->checkAndSend($order, $notify); } diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php index ff2311067ba0a..6729c746f5565 100644 --- a/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php +++ b/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php @@ -14,6 +14,7 @@ use Magento\Sales\Model\ResourceModel\Order\Shipment as ShipmentResource; use Magento\Sales\Model\Order\Address\Renderer; use Magento\Framework\Event\ManagerInterface; +use Magento\Framework\DataObject; /** * Class ShipmentSender @@ -102,7 +103,7 @@ public function send(Shipment $shipment, $forceSyncMode = false) if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) { $order = $shipment->getOrder(); - + $transport = [ 'order' => $order, 'shipment' => $shipment, @@ -113,13 +114,17 @@ public function send(Shipment $shipment, $forceSyncMode = false) 'formattedShippingAddress' => $this->getFormattedShippingAddress($order), 'formattedBillingAddress' => $this->getFormattedBillingAddress($order) ]; + $transportObject = new DataObject($transport); + /** + * Event argument `transport` is @deprecated. Use `transportObject` instead. + */ $this->eventManager->dispatch( 'email_shipment_set_template_vars_before', - ['sender' => $this, 'transport' => $transport] + ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject] ); - $this->templateContainer->setTemplateVars($transport); + $this->templateContainer->setTemplateVars($transportObject->getData()); if ($this->checkAndSend($order)) { $shipment->setEmailSent(true); diff --git a/app/code/Magento/Sales/Model/Order/Invoice/Sender/EmailSender.php b/app/code/Magento/Sales/Model/Order/Invoice/Sender/EmailSender.php index 5daab1f4d9bd3..aa0687bee504f 100644 --- a/app/code/Magento/Sales/Model/Order/Invoice/Sender/EmailSender.php +++ b/app/code/Magento/Sales/Model/Order/Invoice/Sender/EmailSender.php @@ -7,9 +7,12 @@ use Magento\Sales\Model\Order\Email\Sender; use Magento\Sales\Model\Order\Invoice\SenderInterface; +use Magento\Framework\DataObject; /** * Email notification sender for Invoice. + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class EmailSender extends Sender implements SenderInterface { @@ -106,13 +109,17 @@ public function send( 'formattedShippingAddress' => $this->getFormattedShippingAddress($order), 'formattedBillingAddress' => $this->getFormattedBillingAddress($order), ]; + $transportObject = new DataObject($transport); + /** + * Event argument `transport` is @deprecated. Use `transportObject` instead. + */ $this->eventManager->dispatch( 'email_invoice_set_template_vars_before', - ['sender' => $this, 'transport' => $transport] + ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject] ); - $this->templateContainer->setTemplateVars($transport); + $this->templateContainer->setTemplateVars($transportObject->getData()); if ($this->checkAndSend($order)) { $invoice->setEmailSent(true); diff --git a/app/code/Magento/Sales/Model/Order/Shipment/Sender/EmailSender.php b/app/code/Magento/Sales/Model/Order/Shipment/Sender/EmailSender.php index 7c17a2d2d2f64..0a393548069f5 100644 --- a/app/code/Magento/Sales/Model/Order/Shipment/Sender/EmailSender.php +++ b/app/code/Magento/Sales/Model/Order/Shipment/Sender/EmailSender.php @@ -7,9 +7,12 @@ use Magento\Sales\Model\Order\Email\Sender; use Magento\Sales\Model\Order\Shipment\SenderInterface; +use Magento\Framework\DataObject; /** * Email notification sender for Shipment. + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class EmailSender extends Sender implements SenderInterface { @@ -106,13 +109,17 @@ public function send( 'formattedShippingAddress' => $this->getFormattedShippingAddress($order), 'formattedBillingAddress' => $this->getFormattedBillingAddress($order) ]; + $transportObject = new DataObject($transport); + /** + * Event argument `transport` is @deprecated. Use `transportObject` instead. + */ $this->eventManager->dispatch( 'email_shipment_set_template_vars_before', - ['sender' => $this, 'transport' => $transport] + ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject] ); - $this->templateContainer->setTemplateVars($transport); + $this->templateContainer->setTemplateVars($transportObject->getData()); if ($this->checkAndSend($order)) { $shipment->setEmailSent(true); diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Creditmemo/Sender/EmailSenderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Creditmemo/Sender/EmailSenderTest.php index fa155cfd1d4ed..9fd2a8b0d929f 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/Creditmemo/Sender/EmailSenderTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Creditmemo/Sender/EmailSenderTest.php @@ -262,6 +262,7 @@ public function testSend($configValue, $forceSyncMode, $isComment, $emailSending 'formattedShippingAddress' => 'Formatted address', 'formattedBillingAddress' => 'Formatted address', ]; + $transport = new \Magento\Framework\DataObject($transport); $this->eventManagerMock->expects($this->once()) ->method('dispatch') @@ -269,13 +270,14 @@ public function testSend($configValue, $forceSyncMode, $isComment, $emailSending 'email_creditmemo_set_template_vars_before', [ 'sender' => $this->subject, - 'transport' => $transport, + 'transport' => $transport->getData(), + 'transportObject' => $transport ] ); $this->templateContainerMock->expects($this->once()) ->method('setTemplateVars') - ->with($transport); + ->with($transport->getData()); $this->identityContainerMock->expects($this->once()) ->method('isEnabled') diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Invoice/Sender/EmailSenderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Invoice/Sender/EmailSenderTest.php index f470b097dd73f..8a4e2920ba207 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/Invoice/Sender/EmailSenderTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Invoice/Sender/EmailSenderTest.php @@ -260,6 +260,7 @@ public function testSend($configValue, $forceSyncMode, $isComment, $emailSending 'formattedShippingAddress' => 'Formatted address', 'formattedBillingAddress' => 'Formatted address', ]; + $transport = new \Magento\Framework\DataObject($transport); $this->eventManagerMock->expects($this->once()) ->method('dispatch') @@ -267,13 +268,14 @@ public function testSend($configValue, $forceSyncMode, $isComment, $emailSending 'email_invoice_set_template_vars_before', [ 'sender' => $this->subject, - 'transport' => $transport, + 'transport' => $transport->getData(), + 'transportObject' => $transport, ] ); $this->templateContainerMock->expects($this->once()) ->method('setTemplateVars') - ->with($transport); + ->with($transport->getData()); $this->identityContainerMock->expects($this->once()) ->method('isEnabled') diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Shipment/Sender/EmailSenderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Shipment/Sender/EmailSenderTest.php index 3d37018a61bb3..94347e8b32d54 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/Shipment/Sender/EmailSenderTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Shipment/Sender/EmailSenderTest.php @@ -262,6 +262,7 @@ public function testSend($configValue, $forceSyncMode, $isComment, $emailSending 'formattedShippingAddress' => 'Formatted address', 'formattedBillingAddress' => 'Formatted address', ]; + $transport = new \Magento\Framework\DataObject($transport); $this->eventManagerMock->expects($this->once()) ->method('dispatch') @@ -269,13 +270,14 @@ public function testSend($configValue, $forceSyncMode, $isComment, $emailSending 'email_shipment_set_template_vars_before', [ 'sender' => $this->subject, - 'transport' => $transport, + 'transport' => $transport->getData(), + 'transportObject' => $transport, ] ); $this->templateContainerMock->expects($this->once()) ->method('setTemplateVars') - ->with($transport); + ->with($transport->getData()); $this->identityContainerMock->expects($this->once()) ->method('isEnabled') From dd40f2b799381aa8475815774344eb4771920bef Mon Sep 17 00:00:00 2001 From: Hewerson Freitas <hewerson.freitas@gmail.com> Date: Wed, 8 Nov 2017 16:33:12 -0300 Subject: [PATCH 157/653] Update AbstractBackend.php Hello guys, when the validation message is returned, the attribute code is displayed. That prevents a better translation for other languages, has been adjusted to return the label instead of the attribute code. Adjustments on lines 234, 241, 254. --- .../Eav/Model/Entity/Attribute/Backend/AbstractBackend.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Backend/AbstractBackend.php b/app/code/Magento/Eav/Model/Entity/Attribute/Backend/AbstractBackend.php index fab2ed182f30e..206bff163f201 100644 --- a/app/code/Magento/Eav/Model/Entity/Attribute/Backend/AbstractBackend.php +++ b/app/code/Magento/Eav/Model/Entity/Attribute/Backend/AbstractBackend.php @@ -231,13 +231,14 @@ public function validate($object) $attribute = $this->getAttribute(); $attrCode = $attribute->getAttributeCode(); $value = $object->getData($attrCode); + $label = $attribute->getFrontend()->getLabel(); if ($attribute->getIsVisible() && $attribute->getIsRequired() && $attribute->isValueEmpty($value) && $attribute->isValueEmpty($attribute->getDefaultValue()) ) { - throw new LocalizedException(__('The value of attribute "%1" must be set', $attrCode)); + throw new LocalizedException(__('The value of attribute "%1" must be set', $label)); } if ($attribute->getIsUnique() @@ -248,8 +249,7 @@ public function validate($object) } if ($attribute->getIsUnique()) { - if (!$attribute->getEntity()->checkAttributeUniqueValue($attribute, $object)) { - $label = $attribute->getFrontend()->getLabel(); + if (!$attribute->getEntity()->checkAttributeUniqueValue($attribute, $object)) { throw new LocalizedException(__('The value of attribute "%1" must be unique', $label)); } } From 90215616b1d6c3679729dd5a92de5c245b2f15aa Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Sun, 5 Nov 2017 20:51:31 +0000 Subject: [PATCH 158/653] Add command to view mview state and queue This is similar to the magerun1 command here: https://github.com/netz98/n98-magerun/pull/891 I like the ability to view the mview queue in realtime as its being processed, it can be quite helpful when debugging indexing issues. This command will actually show how many items are in the list pending processing, as well information from the `mview_state` table. ``` php bin/magento indexer:status:mview +---------------------------+----------+--------+---------------------+------------+---------+ | ID | Mode | Status | Updated | Version ID | Backlog | +---------------------------+----------+--------+---------------------+------------+---------+ | catalog_category_product | enabled | idle | 2017-11-02 10:00:00 | 1 | 0 | | catalog_product_attribute | enabled | idle | 2017-11-02 10:00:00 | 1 | 1 | | catalog_product_category | disabled | idle | 2017-11-02 10:00:00 | 1 | 0 | | catalog_product_price | enabled | idle | 2017-11-02 10:00:00 | 1 | 0 | +---------------------------+----------+--------+---------------------+------------+---------+ ``` I'll point this PR into 2.1.x and raise a separate PR to pop it into 2.2.x. --- .../Command/IndexerStatusMviewCommand.php | 95 +++++++ .../Command/IndexerStatusMviewCommandTest.php | 233 ++++++++++++++++++ app/code/Magento/Indexer/etc/di.xml | 1 + 3 files changed, 329 insertions(+) create mode 100644 app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php create mode 100644 app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php diff --git a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php new file mode 100644 index 0000000000000..4fb0c0bcb5649 --- /dev/null +++ b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php @@ -0,0 +1,95 @@ +<?php +/** + * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Indexer\Console\Command; + +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Command\Command; +use Magento\Framework\Mview\View; + +/** + * Command for displaying status of mview indexers. + */ +class IndexerStatusMviewCommand extends Command +{ + /** @var \Magento\Framework\Mview\View\CollectionInterface $mviewIndexersCollection */ + private $mviewIndexersCollection; + + public function __construct( + \Magento\Framework\Mview\View\CollectionInterface $collection + ) { + $this->mviewIndexersCollection = $collection; + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this->setName('indexer:status:mview') + ->setDescription('Shows status of Mview Indexers and their queue status'); + + parent::configure(); + } + + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output) + { + try { + $table = $this->getHelperSet()->get('table'); + $table->setHeaders(['ID', 'Mode', 'Status', 'Updated', 'Version ID', 'Backlog']); + + $rows = []; + + /** @var \Magento\Framework\Mview\View $indexer */ + foreach ($this->mviewIndexersCollection as $indexer) { + $state = $indexer->getState(); + $changelog = $indexer->getChangelog(); + + try { + $currentVersionId = $changelog->getVersion(); + } catch (View\ChangelogTableNotExistsException $e) { + continue; + } + + $pendingCount = count($changelog->getList($state->getVersionId(), $currentVersionId)); + + $pendingString = "<error>$pendingCount</error>"; + if ($pendingCount <= 0) { + $pendingString = "<info>$pendingCount</info>"; + } + + $rows[] = [ + $indexer->getData('view_id'), + $state->getData('mode'), + $state->getData('status'), + $state->getData('updated'), + $state->getData('version_id'), + $pendingString, + ]; + } + + usort($rows, function($a, $b) { + return $a[0] <=> $b[0]; + }); + + $table->addRows($rows); + $table->render($output); + + return \Magento\Framework\Console\Cli::RETURN_SUCCESS; + } catch (\Exception $e) { + $output->writeln('<error>' . $e->getMessage() . '</error>'); + if ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) { + $output->writeln($e->getTraceAsString()); + } + + return \Magento\Framework\Console\Cli::RETURN_FAILURE; + } + } +} diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php new file mode 100644 index 0000000000000..7266d009a5ee7 --- /dev/null +++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php @@ -0,0 +1,233 @@ +<?php +/** + * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Indexer\Test\Unit\Console\Command; + +use \Magento\Framework\Mview; +use Magento\Indexer\Console\Command\IndexerStatusMviewCommand; +use Symfony\Component\Console\Tester\CommandTester; +use Symfony\Component\Console\Helper\HelperSet; +use Symfony\Component\Console\Helper\TableHelper; +use Magento\Store\Model\Website; +use Magento\Framework\Console\Cli; + +class IndexerStatusMviewCommandTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var IndexerStatusMviewCommand + */ + private $command; + + /** + * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager + */ + private $objectManager; + + /** + * @var \Magento\Framework\Mview\View\Collection + */ + private $collection; + + protected function setUp() + { + $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + + /** @var \Magento\Framework\Mview\View\Collection $collection */ + $this->collection = $this->objectManager->getObject(Mview\View\Collection::class); + + $reflectedCollection = new \ReflectionObject($this->collection); + $isLoadedProperty = $reflectedCollection->getProperty('_isCollectionLoaded'); + $isLoadedProperty->setAccessible(true); + $isLoadedProperty->setValue($this->collection, true); + + $this->command = $this->objectManager->getObject( + IndexerStatusMviewCommand::class, + ['collection' => $this->collection] + ); + + /** @var HelperSet $helperSet */ + $helperSet = $this->objectManager->getObject( + HelperSet::class, + ['helpers' => [$this->objectManager->getObject(TableHelper::class)]] + ); + + //Inject table helper for output + $this->command->setHelperSet($helperSet); + } + + public function testExecute() + { + $mviews = [ + [ + 'view' => [ + 'view_id' => 'catalog_category_product', + 'mode' => 'enabled', + 'status' => 'idle', + 'updated' => '2017-01-01 11:11:11', + 'version_id' => 100, + ], + 'changelog' => [ + 'version_id' => 110 + ], + ], + [ + 'view' => [ + 'view_id' => 'catalog_product_category', + 'mode' => 'disabled', + 'status' => 'idle', + 'updated' => '2017-01-01 11:11:11', + 'version_id' => 100, + ], + 'changelog' => [ + 'version_id' => 200 + ], + ], + [ + 'view' => [ + 'view_id' => 'catalog_product_attribute', + 'mode' => 'enabled', + 'status' => 'idle', + 'updated' => '2017-01-01 11:11:11', + 'version_id' => 100, + ], + 'changelog' => [ + 'version_id' => 100 + ], + ], + ]; + + foreach ($mviews as $data) { + $this->collection->addItem($this->generateMviewStub($data['view'], $data['changelog'])); + } + + /** @var Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject $stub */ + $changelog = $this->getMockBuilder(\Magento\Framework\Mview\View\Changelog::class) + ->disableOriginalConstructor() + ->getMock(); + + $changelog->expects($this->any()) + ->method('getVersion') + ->willThrowException( + new Mview\View\ChangelogTableNotExistsException(new \Magento\Framework\Phrase("Do not render")) + ); + + /** @var Mview\View|\PHPUnit_Framework_MockObject_MockObject $notInitiatedMview */ + $notInitiatedMview = $this->getMockBuilder(\Magento\Framework\Mview\View::class) + ->disableOriginalConstructor() + ->getMock(); + + $notInitiatedMview->expects($this->any()) + ->method('getChangelog') + ->willReturn($changelog); + + $this->collection->addItem($notInitiatedMview); + + $tester = new CommandTester($this->command); + $this->assertEquals(Cli::RETURN_SUCCESS, $tester->execute([])); + + $linesOutput = array_filter(explode(PHP_EOL, $tester->getDisplay())); + $this->assertCount(7, $linesOutput, 'There should be 7 lines output. 3 Spacers, 1 header, 3 content.'); + $this->assertEquals($linesOutput[0], $linesOutput[2], "Lines 0, 2, 7 should be spacer lines"); + $this->assertEquals($linesOutput[2], $linesOutput[6], "Lines 0, 2, 6 should be spacer lines"); + + $headerValues = array_values(array_filter(explode('|', $linesOutput[1]))); + $this->assertEquals('ID', trim($headerValues[0])); + $this->assertEquals('Mode', trim($headerValues[1])); + $this->assertEquals('Status', trim($headerValues[2])); + $this->assertEquals('Updated', trim($headerValues[3])); + $this->assertEquals('Version ID', trim($headerValues[4])); + $this->assertEquals('Backlog', trim($headerValues[5])); + + $catalogCategoryProductMviewData = array_values(array_filter(explode('|', $linesOutput[3]))); + $this->assertEquals('catalog_category_product', trim($catalogCategoryProductMviewData[0])); + $this->assertEquals('enabled', trim($catalogCategoryProductMviewData[1])); + $this->assertEquals('idle', trim($catalogCategoryProductMviewData[2])); + $this->assertEquals('2017-01-01 11:11:11', trim($catalogCategoryProductMviewData[3])); + $this->assertEquals('100', trim($catalogCategoryProductMviewData[4])); + $this->assertEquals('10', trim($catalogCategoryProductMviewData[5])); + unset($catalogCategoryProductMviewData); + + $catalogProductAttributeMviewData = array_values(array_filter(explode('|', $linesOutput[4]))); + $this->assertEquals('catalog_product_attribute', trim($catalogProductAttributeMviewData[0])); + $this->assertEquals('enabled', trim($catalogProductAttributeMviewData[1])); + $this->assertEquals('idle', trim($catalogProductAttributeMviewData[2])); + $this->assertEquals('2017-01-01 11:11:11', trim($catalogProductAttributeMviewData[3])); + $this->assertEquals('100', trim($catalogProductAttributeMviewData[4])); + $this->assertEquals('0', trim($catalogProductAttributeMviewData[5])); + unset($catalogProductAttributeMviewData); + + $catalogCategoryProductMviewData = array_values(array_filter(explode('|', $linesOutput[5]))); + $this->assertEquals('catalog_product_category', trim($catalogCategoryProductMviewData[0])); + $this->assertEquals('disabled', trim($catalogCategoryProductMviewData[1])); + $this->assertEquals('idle', trim($catalogCategoryProductMviewData[2])); + $this->assertEquals('2017-01-01 11:11:11', trim($catalogCategoryProductMviewData[3])); + $this->assertEquals('100', trim($catalogCategoryProductMviewData[4])); + $this->assertEquals('100', trim($catalogCategoryProductMviewData[5])); + unset($catalogCategoryProductMviewData); + } + + /** + * @param array $viewData + * @param array $changelogData + * @return Mview\View|Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject + */ + protected function generateMviewStub(array $viewData, array $changelogData) + { + /** @var Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject $stub */ + $changelog = $this->getMockBuilder(\Magento\Framework\Mview\View\Changelog::class) + ->disableOriginalConstructor() + ->getMock(); + + $list = []; + if ($changelogData['version_id'] !== $viewData['version_id']) { + $list = range($viewData['version_id']+1, $changelogData['version_id']); + } + + $changelog->expects($this->any()) + ->method('getList') + ->willReturn($list); + + $changelog->expects($this->any()) + ->method('getVersion') + ->willReturn($changelogData['version_id']); + + /** @var Mview\View|\PHPUnit_Framework_MockObject_MockObject $stub */ + $stub = $this->getMockBuilder(\Magento\Framework\Mview\View::class) + ->disableOriginalConstructor() + ->setMethods(['getChangelog', 'getState']) + ->getMock(); + + $stub->expects($this->any()) + ->method('getChangelog') + ->willReturn($changelog); + + $stub->expects($this->any()) + ->method('getState') + ->willReturnSelf(); + + $stub->setData($viewData); + + return $stub; + } + + public function testExecuteExceptionNoVerbosity() + { + /** @var \Magento\Framework\Mview\View|\PHPUnit_Framework_MockObject_MockObject $stub */ + $stub = $this->getMockBuilder(Mview\View::class) + ->disableOriginalConstructor() + ->getMock(); + + $stub->expects($this->any()) + ->method('getChangelog') + ->willThrowException(new \Exception("Dummy test exception")); + + $this->collection->addItem($stub); + + $tester = new CommandTester($this->command); + $this->assertEquals(Cli::RETURN_FAILURE, $tester->execute([])); + $linesOutput = array_filter(explode(PHP_EOL, $tester->getDisplay())); + $this->assertEquals('Dummy test exception', $linesOutput[0]); + } +} diff --git a/app/code/Magento/Indexer/etc/di.xml b/app/code/Magento/Indexer/etc/di.xml index 610f08fac3a05..266cf72c50dbf 100644 --- a/app/code/Magento/Indexer/etc/di.xml +++ b/app/code/Magento/Indexer/etc/di.xml @@ -51,6 +51,7 @@ <item name="set-mode" xsi:type="object">Magento\Indexer\Console\Command\IndexerSetModeCommand</item> <item name="show-mode" xsi:type="object">Magento\Indexer\Console\Command\IndexerShowModeCommand</item> <item name="status" xsi:type="object">Magento\Indexer\Console\Command\IndexerStatusCommand</item> + <item name="status-mview" xsi:type="object">Magento\Indexer\Console\Command\IndexerStatusMviewCommand</item> <item name="reset" xsi:type="object">Magento\Indexer\Console\Command\IndexerResetStateCommand</item> </argument> </arguments> From 1e34fde22bf5ceba0ddedf425de9edfb9f50b3b0 Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Sun, 5 Nov 2017 21:23:23 +0000 Subject: [PATCH 159/653] Make indexer status mview 5.5 compatible --- .../Command/IndexerStatusMviewCommand.php | 4 +- .../Command/IndexerStatusMviewCommandTest.php | 54 +++++++++++-------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php index 4fb0c0bcb5649..61461a0ba610c 100644 --- a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php +++ b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php @@ -75,8 +75,8 @@ protected function execute(InputInterface $input, OutputInterface $output) ]; } - usort($rows, function($a, $b) { - return $a[0] <=> $b[0]; + usort($rows, function ($a, $b) { + return strcmp($a[0], $b[0]); }); $table->addRows($rows); diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php index 7266d009a5ee7..e6a782cba92fd 100644 --- a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php +++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php @@ -13,6 +13,9 @@ use Magento\Store\Model\Website; use Magento\Framework\Console\Cli; +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class IndexerStatusMviewCommandTest extends \PHPUnit_Framework_TestCase { /** @@ -101,28 +104,7 @@ public function testExecute() foreach ($mviews as $data) { $this->collection->addItem($this->generateMviewStub($data['view'], $data['changelog'])); } - - /** @var Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject $stub */ - $changelog = $this->getMockBuilder(\Magento\Framework\Mview\View\Changelog::class) - ->disableOriginalConstructor() - ->getMock(); - - $changelog->expects($this->any()) - ->method('getVersion') - ->willThrowException( - new Mview\View\ChangelogTableNotExistsException(new \Magento\Framework\Phrase("Do not render")) - ); - - /** @var Mview\View|\PHPUnit_Framework_MockObject_MockObject $notInitiatedMview */ - $notInitiatedMview = $this->getMockBuilder(\Magento\Framework\Mview\View::class) - ->disableOriginalConstructor() - ->getMock(); - - $notInitiatedMview->expects($this->any()) - ->method('getChangelog') - ->willReturn($changelog); - - $this->collection->addItem($notInitiatedMview); + $this->collection->addItem($this->getNeverEnabledMviewIndexerWithNoTable()); $tester = new CommandTester($this->command); $this->assertEquals(Cli::RETURN_SUCCESS, $tester->execute([])); @@ -212,6 +194,34 @@ protected function generateMviewStub(array $viewData, array $changelogData) return $stub; } + /** + * @return Mview\View|\PHPUnit_Framework_MockObject_MockObject + */ + protected function getNeverEnabledMviewIndexerWithNoTable() + { + /** @var Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject $stub */ + $changelog = $this->getMockBuilder(\Magento\Framework\Mview\View\Changelog::class) + ->disableOriginalConstructor() + ->getMock(); + + $changelog->expects($this->any()) + ->method('getVersion') + ->willThrowException( + new Mview\View\ChangelogTableNotExistsException(new \Magento\Framework\Phrase("Do not render")) + ); + + /** @var Mview\View|\PHPUnit_Framework_MockObject_MockObject $notInitiatedMview */ + $notInitiatedMview = $this->getMockBuilder(\Magento\Framework\Mview\View::class) + ->disableOriginalConstructor() + ->getMock(); + + $notInitiatedMview->expects($this->any()) + ->method('getChangelog') + ->willReturn($changelog); + + return $notInitiatedMview; + } + public function testExecuteExceptionNoVerbosity() { /** @var \Magento\Framework\Mview\View|\PHPUnit_Framework_MockObject_MockObject $stub */ From 6d3bffa4a4487c1ffd5b0e859c61aec13e10bbd4 Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Mon, 6 Nov 2017 17:55:45 +0000 Subject: [PATCH 160/653] Use factories/interfaces correctly --- .../Command/IndexerStatusMviewCommand.php | 33 ++++++++++-------- .../Command/IndexerStatusMviewCommandTest.php | 34 +++++++++++++++---- 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php index 61461a0ba610c..cb60d4f31da7f 100644 --- a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php +++ b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php @@ -9,19 +9,22 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Command\Command; use Magento\Framework\Mview\View; +use Magento\Framework\Mview\View\CollectionFactory; +use Magento\Framework\Console\Cli; /** * Command for displaying status of mview indexers. */ class IndexerStatusMviewCommand extends Command { - /** @var \Magento\Framework\Mview\View\CollectionInterface $mviewIndexersCollection */ - private $mviewIndexersCollection; + /** @var \Magento\Framework\Mview\View\CollectionInterface $mviewCollection */ + private $mviewCollection; public function __construct( - \Magento\Framework\Mview\View\CollectionInterface $collection + CollectionFactory $collectionFactory ) { - $this->mviewIndexersCollection = $collection; + $this->mviewCollection = $collectionFactory->create(); + parent::__construct(); } @@ -47,10 +50,10 @@ protected function execute(InputInterface $input, OutputInterface $output) $rows = []; - /** @var \Magento\Framework\Mview\View $indexer */ - foreach ($this->mviewIndexersCollection as $indexer) { - $state = $indexer->getState(); - $changelog = $indexer->getChangelog(); + /** @var \Magento\Framework\Mview\View $view */ + foreach ($this->mviewCollection as $view) { + $state = $view->getState(); + $changelog = $view->getChangelog(); try { $currentVersionId = $changelog->getVersion(); @@ -66,11 +69,11 @@ protected function execute(InputInterface $input, OutputInterface $output) } $rows[] = [ - $indexer->getData('view_id'), - $state->getData('mode'), - $state->getData('status'), - $state->getData('updated'), - $state->getData('version_id'), + $view->getId(), + $state->getMode(), + $state->getStatus(), + $state->getUpdated(), + $state->getVersionId(), $pendingString, ]; } @@ -82,14 +85,14 @@ protected function execute(InputInterface $input, OutputInterface $output) $table->addRows($rows); $table->render($output); - return \Magento\Framework\Console\Cli::RETURN_SUCCESS; + return Cli::RETURN_SUCCESS; } catch (\Exception $e) { $output->writeln('<error>' . $e->getMessage() . '</error>'); if ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) { $output->writeln($e->getTraceAsString()); } - return \Magento\Framework\Console\Cli::RETURN_FAILURE; + return Cli::RETURN_FAILURE; } } } diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php index e6a782cba92fd..43ffed3fd1e93 100644 --- a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php +++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php @@ -12,6 +12,7 @@ use Symfony\Component\Console\Helper\TableHelper; use Magento\Store\Model\Website; use Magento\Framework\Console\Cli; +use Magento\Framework\Mview\View\CollectionFactory; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) @@ -45,9 +46,15 @@ protected function setUp() $isLoadedProperty->setAccessible(true); $isLoadedProperty->setValue($this->collection, true); + $collectionFactory = $this->getMockBuilder(CollectionFactory::class) + ->disableOriginalConstructor() + ->getMock(); + $collectionFactory->method('create') + ->willReturn($this->collection); + $this->command = $this->objectManager->getObject( IndexerStatusMviewCommand::class, - ['collection' => $this->collection] + ['collectionFactory' => $collectionFactory] ); /** @var HelperSet $helperSet */ @@ -66,6 +73,8 @@ public function testExecute() [ 'view' => [ 'view_id' => 'catalog_category_product', + ], + 'state' => [ 'mode' => 'enabled', 'status' => 'idle', 'updated' => '2017-01-01 11:11:11', @@ -78,6 +87,8 @@ public function testExecute() [ 'view' => [ 'view_id' => 'catalog_product_category', + ], + 'state' => [ 'mode' => 'disabled', 'status' => 'idle', 'updated' => '2017-01-01 11:11:11', @@ -90,6 +101,8 @@ public function testExecute() [ 'view' => [ 'view_id' => 'catalog_product_attribute', + ], + 'state' => [ 'mode' => 'enabled', 'status' => 'idle', 'updated' => '2017-01-01 11:11:11', @@ -102,7 +115,7 @@ public function testExecute() ]; foreach ($mviews as $data) { - $this->collection->addItem($this->generateMviewStub($data['view'], $data['changelog'])); + $this->collection->addItem($this->generateMviewStub($data['view'], $data['changelog'], $data['state'])); } $this->collection->addItem($this->getNeverEnabledMviewIndexerWithNoTable()); @@ -153,9 +166,10 @@ public function testExecute() /** * @param array $viewData * @param array $changelogData + * @param array $stateData * @return Mview\View|Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject */ - protected function generateMviewStub(array $viewData, array $changelogData) + protected function generateMviewStub(array $viewData, array $changelogData, array $stateData) { /** @var Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject $stub */ $changelog = $this->getMockBuilder(\Magento\Framework\Mview\View\Changelog::class) @@ -163,8 +177,8 @@ protected function generateMviewStub(array $viewData, array $changelogData) ->getMock(); $list = []; - if ($changelogData['version_id'] !== $viewData['version_id']) { - $list = range($viewData['version_id']+1, $changelogData['version_id']); + if ($changelogData['version_id'] !== $stateData['version_id']) { + $list = range($stateData['version_id']+1, $changelogData['version_id']); } $changelog->expects($this->any()) @@ -175,6 +189,14 @@ protected function generateMviewStub(array $viewData, array $changelogData) ->method('getVersion') ->willReturn($changelogData['version_id']); + /** @var \Magento\Indexer\Model\Mview\View\State|\PHPUnit_Framework_MockObject_MockObject $stub */ + $state = $this->getMockBuilder(\Magento\Indexer\Model\Mview\View\State::class) + ->disableOriginalConstructor() + ->setMethods(['loadByView']) + ->getMock(); + + $state->setData($stateData); + /** @var Mview\View|\PHPUnit_Framework_MockObject_MockObject $stub */ $stub = $this->getMockBuilder(\Magento\Framework\Mview\View::class) ->disableOriginalConstructor() @@ -187,7 +209,7 @@ protected function generateMviewStub(array $viewData, array $changelogData) $stub->expects($this->any()) ->method('getState') - ->willReturnSelf(); + ->willReturn($state); $stub->setData($viewData); From dede2d1f42f64875e63d5a410f0934781be9414c Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Tue, 7 Nov 2017 17:32:41 +0000 Subject: [PATCH 161/653] Update code style --- .../Command/IndexerStatusMviewCommand.php | 4 +- .../Command/IndexerStatusMviewCommandTest.php | 52 +++++++++---------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php index cb60d4f31da7f..5451df34645e9 100644 --- a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php +++ b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php @@ -78,8 +78,8 @@ protected function execute(InputInterface $input, OutputInterface $output) ]; } - usort($rows, function ($a, $b) { - return strcmp($a[0], $b[0]); + usort($rows, function ($comp1, $comp2) { + return strcmp($comp1[0], $comp2[0]); }); $table->addRows($rows); diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php index 43ffed3fd1e93..b58596be70c48 100644 --- a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php +++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php @@ -135,32 +135,32 @@ public function testExecute() $this->assertEquals('Version ID', trim($headerValues[4])); $this->assertEquals('Backlog', trim($headerValues[5])); - $catalogCategoryProductMviewData = array_values(array_filter(explode('|', $linesOutput[3]))); - $this->assertEquals('catalog_category_product', trim($catalogCategoryProductMviewData[0])); - $this->assertEquals('enabled', trim($catalogCategoryProductMviewData[1])); - $this->assertEquals('idle', trim($catalogCategoryProductMviewData[2])); - $this->assertEquals('2017-01-01 11:11:11', trim($catalogCategoryProductMviewData[3])); - $this->assertEquals('100', trim($catalogCategoryProductMviewData[4])); - $this->assertEquals('10', trim($catalogCategoryProductMviewData[5])); - unset($catalogCategoryProductMviewData); - - $catalogProductAttributeMviewData = array_values(array_filter(explode('|', $linesOutput[4]))); - $this->assertEquals('catalog_product_attribute', trim($catalogProductAttributeMviewData[0])); - $this->assertEquals('enabled', trim($catalogProductAttributeMviewData[1])); - $this->assertEquals('idle', trim($catalogProductAttributeMviewData[2])); - $this->assertEquals('2017-01-01 11:11:11', trim($catalogProductAttributeMviewData[3])); - $this->assertEquals('100', trim($catalogProductAttributeMviewData[4])); - $this->assertEquals('0', trim($catalogProductAttributeMviewData[5])); - unset($catalogProductAttributeMviewData); - - $catalogCategoryProductMviewData = array_values(array_filter(explode('|', $linesOutput[5]))); - $this->assertEquals('catalog_product_category', trim($catalogCategoryProductMviewData[0])); - $this->assertEquals('disabled', trim($catalogCategoryProductMviewData[1])); - $this->assertEquals('idle', trim($catalogCategoryProductMviewData[2])); - $this->assertEquals('2017-01-01 11:11:11', trim($catalogCategoryProductMviewData[3])); - $this->assertEquals('100', trim($catalogCategoryProductMviewData[4])); - $this->assertEquals('100', trim($catalogCategoryProductMviewData[5])); - unset($catalogCategoryProductMviewData); + $categoryProduct = array_values(array_filter(explode('|', $linesOutput[3]))); + $this->assertEquals('catalog_category_product', trim($categoryProduct[0])); + $this->assertEquals('enabled', trim($categoryProduct[1])); + $this->assertEquals('idle', trim($categoryProduct[2])); + $this->assertEquals('2017-01-01 11:11:11', trim($categoryProduct[3])); + $this->assertEquals('100', trim($categoryProduct[4])); + $this->assertEquals('10', trim($categoryProduct[5])); + unset($categoryProduct); + + $productAttribute = array_values(array_filter(explode('|', $linesOutput[4]))); + $this->assertEquals('catalog_product_attribute', trim($productAttribute[0])); + $this->assertEquals('enabled', trim($productAttribute[1])); + $this->assertEquals('idle', trim($productAttribute[2])); + $this->assertEquals('2017-01-01 11:11:11', trim($productAttribute[3])); + $this->assertEquals('100', trim($productAttribute[4])); + $this->assertEquals('0', trim($productAttribute[5])); + unset($productAttribute); + + $productCategory = array_values(array_filter(explode('|', $linesOutput[5]))); + $this->assertEquals('catalog_product_category', trim($productCategory[0])); + $this->assertEquals('disabled', trim($productCategory[1])); + $this->assertEquals('idle', trim($productCategory[2])); + $this->assertEquals('2017-01-01 11:11:11', trim($productCategory[3])); + $this->assertEquals('100', trim($productCategory[4])); + $this->assertEquals('100', trim($productCategory[5])); + unset($productCategory); } /** From fa1b31087f22f5a4f593bb3ee18a154c71fc8965 Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Wed, 8 Nov 2017 20:45:21 +0000 Subject: [PATCH 162/653] Remove the copyright year from file headers --- .../Indexer/Console/Command/IndexerStatusMviewCommand.php | 2 +- .../Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php index 5451df34645e9..0efeef4a71be5 100644 --- a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php +++ b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php @@ -1,6 +1,6 @@ <?php /** - * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Indexer\Console\Command; diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php index b58596be70c48..6a2f215144f0d 100644 --- a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php +++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php @@ -1,6 +1,6 @@ <?php /** - * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Indexer\Test\Unit\Console\Command; From db377d005777525a5616cd02e362db8791456680 Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov <ishakhsuvarov@users.noreply.github.com> Date: Thu, 31 Aug 2017 18:27:14 +0300 Subject: [PATCH 163/653] MAGETWO-71697: Fix possible bug when saving address with empty street line #10582 --- .../Magento/Customer/Model/Address/AbstractAddress.php | 8 ++++++-- .../Test/Unit/Model/Address/AbstractAddressTest.php | 9 +++++++++ .../Quote/Test/Unit/Model/Quote/AddressTest.php | 10 ++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Customer/Model/Address/AbstractAddress.php b/app/code/Magento/Customer/Model/Address/AbstractAddress.php index 3b141d4cb7f68..a6ba510932d3d 100644 --- a/app/code/Magento/Customer/Model/Address/AbstractAddress.php +++ b/app/code/Magento/Customer/Model/Address/AbstractAddress.php @@ -269,7 +269,7 @@ public function setData($key, $value = null) { if (is_array($key)) { $key = $this->_implodeArrayField($key); - } elseif (is_array($value) && !empty($value) && $this->isAddressMultilineAttribute($key)) { + } elseif (is_array($value) && $this->isAddressMultilineAttribute($key)) { $value = $this->_implodeArrayValues($value); } return parent::setData($key, $value); @@ -309,7 +309,11 @@ protected function _implodeArrayField(array $data) */ protected function _implodeArrayValues($value) { - if (is_array($value) && count($value)) { + if (is_array($value)) { + if (!count($value)) { + return ''; + } + $isScalar = false; foreach ($value as $val) { if (is_scalar($val)) { diff --git a/app/code/Magento/Customer/Test/Unit/Model/Address/AbstractAddressTest.php b/app/code/Magento/Customer/Test/Unit/Model/Address/AbstractAddressTest.php index 23b8b38c962b9..2eef9a44cab74 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/Address/AbstractAddressTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/Address/AbstractAddressTest.php @@ -366,6 +366,15 @@ public function testGetStreetFullAlwaysReturnsString($expectedResult, $street) $this->assertEquals($expectedResult, $this->model->getStreetFull()); } + /** + * @dataProvider getStreetFullDataProvider + */ + public function testSetDataStreetAlwaysConvertedToString($expectedResult, $street) + { + $this->model->setData('street', $street); + $this->assertEquals($expectedResult, $this->model->getData('street')); + } + /** * @return array */ diff --git a/app/code/Magento/Quote/Test/Unit/Model/Quote/AddressTest.php b/app/code/Magento/Quote/Test/Unit/Model/Quote/AddressTest.php index d01ae7304bdc6..e25b770b7a81e 100644 --- a/app/code/Magento/Quote/Test/Unit/Model/Quote/AddressTest.php +++ b/app/code/Magento/Quote/Test/Unit/Model/Quote/AddressTest.php @@ -34,6 +34,7 @@ * Test class for sales quote address model * * @see \Magento\Quote\Model\Quote\Address + * @SuppressWarnings(PHPMD.TooManyFields) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class AddressTest extends \PHPUnit\Framework\TestCase @@ -48,6 +49,11 @@ class AddressTest extends \PHPUnit\Framework\TestCase */ private $quote; + /** + * @var \Magento\Quote\Model\Quote\Address\CustomAttributeListInterface | \PHPUnit_Framework_MockObject_MockObject + */ + private $attributeList; + /** * @var \Magento\Framework\App\Config | \PHPUnit_Framework_MockObject_MockObject */ @@ -166,9 +172,13 @@ protected function setUp() ->disableOriginalConstructor() ->getMock(); + $this->attributeList = $this->createMock(\Magento\Quote\Model\Quote\Address\CustomAttributeListInterface::class); + $this->attributeList->method('getAttributes')->willReturn([]); + $this->address = $objectManager->getObject( \Magento\Quote\Model\Quote\Address::class, [ + 'attributeList' => $this->attributeList, 'scopeConfig' => $this->scopeConfig, 'serializer' => $this->serializer, 'storeManager' => $this->storeManager, From cfab448cc75e36a1bbfe4af5eab476b495e33ae3 Mon Sep 17 00:00:00 2001 From: Erfan <erfanimani@gmail.com> Date: Thu, 9 Nov 2017 16:22:58 +0800 Subject: [PATCH 164/653] Fix for issue 12127: Single quotation marks are now decoded properly in admin attribute option input fields. --- .../templates/catalog/product/attribute/options.phtml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/options.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/options.phtml index a0041d2e02988..6ff0e193a774f 100644 --- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/options.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/options.phtml @@ -88,7 +88,9 @@ $stores = $block->getStoresSortedBySortOrder(); $values = []; foreach($block->getOptionValues() as $value) { $value = $value->getData(); - $values[] = is_array($value) ? array_map("htmlspecialchars_decode", $value) : $value; + $values[] = is_array($value) ? array_map(function($str) { + return htmlspecialchars_decode($str, ENT_QUOTES); + }, $value) : $value; } ?> <script type="text/x-magento-init"> From 1ff3a05b68ed22c73d301213b2a9e92d42a8af33 Mon Sep 17 00:00:00 2001 From: olysenko <olysenko@magento.com> Date: Thu, 9 Nov 2017 11:25:57 +0200 Subject: [PATCH 165/653] MAGETWO-72138: Upgrade outdated libraries w/composer (minor versions) - spike --- composer.lock | 273 +++++++++++++++++++++++++------------------------- 1 file changed, 137 insertions(+), 136 deletions(-) diff --git a/composer.lock b/composer.lock index 5de7d0d07a9e7..e25b99fdc2cdc 100644 --- a/composer.lock +++ b/composer.lock @@ -4,6 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], + "hash": "ae66019c66375ae7a65908d64883479e", "content-hash": "3fd276b45b7bb017e6f5fad58ff3aba1", "packages": [ { @@ -51,7 +52,7 @@ } ], "description": "Braintree PHP Client Library", - "time": "2017-08-25T19:38:09+00:00" + "time": "2017-08-25 19:38:09" }, { "name": "colinmollenhour/cache-backend-file", @@ -87,7 +88,7 @@ ], "description": "The stock Zend_Cache_Backend_File backend has extremely poor performance for cleaning by tags making it become unusable as the number of cached items increases. This backend makes many changes resulting in a huge performance boost, especially for tag cleaning.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_File", - "time": "2016-05-02T16:24:47+00:00" + "time": "2016-05-02 16:24:47" }, { "name": "colinmollenhour/cache-backend-redis", @@ -123,7 +124,7 @@ ], "description": "Zend_Cache backend using Redis with full support for tags.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis", - "time": "2017-10-05T20:50:44+00:00" + "time": "2017-10-05 20:50:44" }, { "name": "colinmollenhour/credis", @@ -163,7 +164,7 @@ ], "description": "Credis is a lightweight interface to the Redis key-value store which wraps the phpredis library when available for better performance.", "homepage": "https://github.com/colinmollenhour/credis", - "time": "2017-10-05T20:28:58+00:00" + "time": "2017-10-05 20:28:58" }, { "name": "colinmollenhour/php-redis-session-abstract", @@ -200,7 +201,7 @@ ], "description": "A Redis-based session handler with optimistic locking", "homepage": "https://github.com/colinmollenhour/php-redis-session-abstract", - "time": "2017-03-22T16:13:03+00:00" + "time": "2017-03-22 16:13:03" }, { "name": "composer/ca-bundle", @@ -259,7 +260,7 @@ "ssl", "tls" ], - "time": "2017-09-11T07:24:36+00:00" + "time": "2017-09-11 07:24:36" }, { "name": "composer/composer", @@ -336,7 +337,7 @@ "dependency", "package" ], - "time": "2017-03-10T08:29:45+00:00" + "time": "2017-03-10 08:29:45" }, { "name": "composer/semver", @@ -398,7 +399,7 @@ "validation", "versioning" ], - "time": "2016-08-30T16:08:34+00:00" + "time": "2016-08-30 16:08:34" }, { "name": "composer/spdx-licenses", @@ -459,7 +460,7 @@ "spdx", "validator" ], - "time": "2017-04-03T19:08:52+00:00" + "time": "2017-04-03 19:08:52" }, { "name": "container-interop/container-interop", @@ -490,7 +491,7 @@ ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", "homepage": "https://github.com/container-interop/container-interop", - "time": "2017-02-14T19:40:03+00:00" + "time": "2017-02-14 19:40:03" }, { "name": "justinrainbow/json-schema", @@ -556,7 +557,7 @@ "json", "schema" ], - "time": "2017-10-21T13:15:38+00:00" + "time": "2017-10-21 13:15:38" }, { "name": "league/climate", @@ -605,7 +606,7 @@ "php", "terminal" ], - "time": "2015-01-18T14:31:58+00:00" + "time": "2015-01-18 14:31:58" }, { "name": "magento/composer", @@ -641,7 +642,7 @@ "AFL-3.0" ], "description": "Magento composer library helps to instantiate Composer application and run composer commands.", - "time": "2017-04-24T09:57:02+00:00" + "time": "2017-04-24 09:57:02" }, { "name": "magento/magento-composer-installer", @@ -720,7 +721,7 @@ "composer-installer", "magento" ], - "time": "2016-10-06T16:05:07+00:00" + "time": "2016-10-06 16:05:07" }, { "name": "magento/zendframework1", @@ -767,7 +768,7 @@ "ZF1", "framework" ], - "time": "2017-06-21T14:56:23+00:00" + "time": "2017-06-21 14:56:23" }, { "name": "monolog/monolog", @@ -845,7 +846,7 @@ "logging", "psr-3" ], - "time": "2017-06-19T01:22:40+00:00" + "time": "2017-06-19 01:22:40" }, { "name": "oyejorge/less.php", @@ -907,7 +908,7 @@ "php", "stylesheet" ], - "time": "2017-03-28T22:19:25+00:00" + "time": "2017-03-28 22:19:25" }, { "name": "paragonie/random_compat", @@ -955,7 +956,7 @@ "pseudorandom", "random" ], - "time": "2017-09-27T21:40:39+00:00" + "time": "2017-09-27 21:40:39" }, { "name": "pelago/emogrifier", @@ -1011,7 +1012,7 @@ ], "description": "Converts CSS styles into inline style attributes in your HTML code", "homepage": "http://www.pelagodesign.com/sidecar/emogrifier/", - "time": "2015-05-15T11:37:51+00:00" + "time": "2015-05-15 11:37:51" }, { "name": "phpseclib/phpseclib", @@ -1103,7 +1104,7 @@ "x.509", "x509" ], - "time": "2017-10-23T05:04:54+00:00" + "time": "2017-10-23 05:04:54" }, { "name": "psr/container", @@ -1152,7 +1153,7 @@ "container-interop", "psr" ], - "time": "2017-02-14T16:28:37+00:00" + "time": "2017-02-14 16:28:37" }, { "name": "psr/http-message", @@ -1202,7 +1203,7 @@ "request", "response" ], - "time": "2016-08-06T14:39:51+00:00" + "time": "2016-08-06 14:39:51" }, { "name": "psr/log", @@ -1249,7 +1250,7 @@ "psr", "psr-3" ], - "time": "2016-10-10T12:19:37+00:00" + "time": "2016-10-10 12:19:37" }, { "name": "ramsey/uuid", @@ -1331,7 +1332,7 @@ "identifier", "uuid" ], - "time": "2017-09-22T20:46:04+00:00" + "time": "2017-09-22 20:46:04" }, { "name": "seld/cli-prompt", @@ -1379,7 +1380,7 @@ "input", "prompt" ], - "time": "2017-03-18T11:32:45+00:00" + "time": "2017-03-18 11:32:45" }, { "name": "seld/jsonlint", @@ -1428,7 +1429,7 @@ "parser", "validator" ], - "time": "2017-06-18T15:11:04+00:00" + "time": "2017-06-18 15:11:04" }, { "name": "seld/phar-utils", @@ -1472,7 +1473,7 @@ "keywords": [ "phra" ], - "time": "2015-10-13T18:44:15+00:00" + "time": "2015-10-13 18:44:15" }, { "name": "sjparkinson/static-review", @@ -1525,7 +1526,7 @@ } ], "description": "An extendable framework for version control hooks.", - "time": "2014-09-22T08:40:36+00:00" + "time": "2014-09-22 08:40:36" }, { "name": "symfony/console", @@ -1586,7 +1587,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-10-01T21:00:16+00:00" + "time": "2017-10-01 21:00:16" }, { "name": "symfony/debug", @@ -1643,7 +1644,7 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-07-30T07:22:48+00:00" + "time": "2016-07-30 07:22:48" }, { "name": "symfony/event-dispatcher", @@ -1703,7 +1704,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-10-01T21:00:16+00:00" + "time": "2017-10-01 21:00:16" }, { "name": "symfony/filesystem", @@ -1752,7 +1753,7 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2017-10-03T13:33:10+00:00" + "time": "2017-10-03 13:33:10" }, { "name": "symfony/finder", @@ -1801,7 +1802,7 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-10-02T06:42:24+00:00" + "time": "2017-10-02 06:42:24" }, { "name": "symfony/polyfill-mbstring", @@ -1860,7 +1861,7 @@ "portable", "shim" ], - "time": "2017-10-11T12:05:26+00:00" + "time": "2017-10-11 12:05:26" }, { "name": "symfony/process", @@ -1909,7 +1910,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-10-01T21:00:16+00:00" + "time": "2017-10-01 21:00:16" }, { "name": "tedivm/jshrink", @@ -1955,7 +1956,7 @@ "javascript", "minifier" ], - "time": "2017-05-30T02:59:46+00:00" + "time": "2017-05-30 02:59:46" }, { "name": "tubalmartin/cssmin", @@ -2008,7 +2009,7 @@ "minify", "yui" ], - "time": "2017-05-16T13:45:26+00:00" + "time": "2017-05-16 13:45:26" }, { "name": "zendframework/zend-captcha", @@ -2065,7 +2066,7 @@ "captcha", "zf2" ], - "time": "2017-02-23T08:09:44+00:00" + "time": "2017-02-23 08:09:44" }, { "name": "zendframework/zend-code", @@ -2118,7 +2119,7 @@ "code", "zf2" ], - "time": "2016-10-24T13:23:32+00:00" + "time": "2016-10-24 13:23:32" }, { "name": "zendframework/zend-config", @@ -2174,7 +2175,7 @@ "config", "zf2" ], - "time": "2016-02-04T23:01:10+00:00" + "time": "2016-02-04 23:01:10" }, { "name": "zendframework/zend-console", @@ -2226,7 +2227,7 @@ "console", "zf2" ], - "time": "2016-02-09T17:15:12+00:00" + "time": "2016-02-09 17:15:12" }, { "name": "zendframework/zend-crypt", @@ -2276,7 +2277,7 @@ "crypt", "zf2" ], - "time": "2016-02-03T23:46:30+00:00" + "time": "2016-02-03 23:46:30" }, { "name": "zendframework/zend-db", @@ -2333,7 +2334,7 @@ "db", "zf2" ], - "time": "2016-08-09T19:28:55+00:00" + "time": "2016-08-09 19:28:55" }, { "name": "zendframework/zend-di", @@ -2380,7 +2381,7 @@ "di", "zf2" ], - "time": "2016-04-25T20:58:11+00:00" + "time": "2016-04-25 20:58:11" }, { "name": "zendframework/zend-diactoros", @@ -2432,7 +2433,7 @@ "psr", "psr-7" ], - "time": "2017-10-12T15:24:51+00:00" + "time": "2017-10-12 15:24:51" }, { "name": "zendframework/zend-escaper", @@ -2476,7 +2477,7 @@ "escaper", "zf2" ], - "time": "2016-06-30T19:48:38+00:00" + "time": "2016-06-30 19:48:38" }, { "name": "zendframework/zend-eventmanager", @@ -2523,7 +2524,7 @@ "eventmanager", "zf2" ], - "time": "2016-02-18T20:49:05+00:00" + "time": "2016-02-18 20:49:05" }, { "name": "zendframework/zend-filter", @@ -2583,7 +2584,7 @@ "filter", "zf2" ], - "time": "2017-05-17T20:56:17+00:00" + "time": "2017-05-17 20:56:17" }, { "name": "zendframework/zend-form", @@ -2660,7 +2661,7 @@ "form", "zf2" ], - "time": "2017-05-18T14:59:53+00:00" + "time": "2017-05-18 14:59:53" }, { "name": "zendframework/zend-http", @@ -2713,7 +2714,7 @@ "zend", "zf" ], - "time": "2017-10-13T12:06:24+00:00" + "time": "2017-10-13 12:06:24" }, { "name": "zendframework/zend-hydrator", @@ -2771,7 +2772,7 @@ "hydrator", "zf2" ], - "time": "2016-02-18T22:38:26+00:00" + "time": "2016-02-18 22:38:26" }, { "name": "zendframework/zend-i18n", @@ -2838,20 +2839,20 @@ "i18n", "zf2" ], - "time": "2017-05-17T17:00:12+00:00" + "time": "2017-05-17 17:00:12" }, { "name": "zendframework/zend-inputfilter", - "version": "2.7.4", + "version": "2.7.5", "source": { "type": "git", "url": "https://github.com/zendframework/zend-inputfilter.git", - "reference": "699ab4916e0aa73104e1f9ff068ef6d33c5f5fe4" + "reference": "02bbc6b5fc54991e43e7471e54e2173077708d7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/699ab4916e0aa73104e1f9ff068ef6d33c5f5fe4", - "reference": "699ab4916e0aa73104e1f9ff068ef6d33c5f5fe4", + "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/02bbc6b5fc54991e43e7471e54e2173077708d7b", + "reference": "02bbc6b5fc54991e43e7471e54e2173077708d7b", "shasum": "" }, "require": { @@ -2893,7 +2894,7 @@ "inputfilter", "zf2" ], - "time": "2017-05-18T14:20:56+00:00" + "time": "2017-11-07 17:08:00" }, { "name": "zendframework/zend-json", @@ -2948,7 +2949,7 @@ "json", "zf2" ], - "time": "2016-02-04T21:20:26+00:00" + "time": "2016-02-04 21:20:26" }, { "name": "zendframework/zend-loader", @@ -2992,7 +2993,7 @@ "loader", "zf2" ], - "time": "2015-06-03T14:05:47+00:00" + "time": "2015-06-03 14:05:47" }, { "name": "zendframework/zend-log", @@ -3063,7 +3064,7 @@ "logging", "zf2" ], - "time": "2017-05-17T16:03:26+00:00" + "time": "2017-05-17 16:03:26" }, { "name": "zendframework/zend-math", @@ -3113,7 +3114,7 @@ "math", "zf2" ], - "time": "2016-04-07T16:29:53+00:00" + "time": "2016-04-07 16:29:53" }, { "name": "zendframework/zend-modulemanager", @@ -3171,7 +3172,7 @@ "modulemanager", "zf2" ], - "time": "2017-11-01T18:30:41+00:00" + "time": "2017-11-01 18:30:41" }, { "name": "zendframework/zend-mvc", @@ -3263,7 +3264,7 @@ "mvc", "zf2" ], - "time": "2017-04-27T15:44:01+00:00" + "time": "2017-04-27 15:44:01" }, { "name": "zendframework/zend-psr7bridge", @@ -3312,7 +3313,7 @@ "psr", "psr-7" ], - "time": "2016-05-10T21:44:39+00:00" + "time": "2016-05-10 21:44:39" }, { "name": "zendframework/zend-serializer", @@ -3369,7 +3370,7 @@ "serializer", "zf2" ], - "time": "2016-06-21T17:01:55+00:00" + "time": "2016-06-21 17:01:55" }, { "name": "zendframework/zend-server", @@ -3415,7 +3416,7 @@ "server", "zf2" ], - "time": "2016-06-20T22:27:55+00:00" + "time": "2016-06-20 22:27:55" }, { "name": "zendframework/zend-servicemanager", @@ -3467,7 +3468,7 @@ "servicemanager", "zf2" ], - "time": "2016-12-19T19:14:29+00:00" + "time": "2016-12-19 19:14:29" }, { "name": "zendframework/zend-session", @@ -3533,7 +3534,7 @@ "session", "zf2" ], - "time": "2017-06-19T21:31:39+00:00" + "time": "2017-06-19 21:31:39" }, { "name": "zendframework/zend-soap", @@ -3585,7 +3586,7 @@ "soap", "zf2" ], - "time": "2016-04-21T16:06:27+00:00" + "time": "2016-04-21 16:06:27" }, { "name": "zendframework/zend-stdlib", @@ -3644,7 +3645,7 @@ "stdlib", "zf2" ], - "time": "2016-04-12T21:17:31+00:00" + "time": "2016-04-12 21:17:31" }, { "name": "zendframework/zend-text", @@ -3691,7 +3692,7 @@ "text", "zf2" ], - "time": "2016-02-08T19:03:52+00:00" + "time": "2016-02-08 19:03:52" }, { "name": "zendframework/zend-uri", @@ -3738,7 +3739,7 @@ "uri", "zf2" ], - "time": "2016-02-17T22:38:51+00:00" + "time": "2016-02-17 22:38:51" }, { "name": "zendframework/zend-validator", @@ -3809,7 +3810,7 @@ "validator", "zf2" ], - "time": "2017-08-22T14:19:23+00:00" + "time": "2017-08-22 14:19:23" }, { "name": "zendframework/zend-view", @@ -3896,27 +3897,27 @@ "view", "zf2" ], - "time": "2017-03-21T15:05:56+00:00" + "time": "2017-03-21 15:05:56" } ], "packages-dev": [ { "name": "doctrine/annotations", - "version": "v1.5.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "5beebb01b025c94e93686b7a0ed3edae81fe3e7f" + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5beebb01b025c94e93686b7a0ed3edae81fe3e7f", - "reference": "5beebb01b025c94e93686b7a0ed3edae81fe3e7f", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", "shasum": "" }, "require": { "doctrine/lexer": "1.*", - "php": "^7.1" + "php": "^5.6 || ^7.0" }, "require-dev": { "doctrine/cache": "1.*", @@ -3925,7 +3926,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -3966,36 +3967,36 @@ "docblock", "parser" ], - "time": "2017-07-22T10:58:02+00:00" + "time": "2017-02-24 16:22:25" }, { "name": "doctrine/instantiator", - "version": "1.1.0", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=5.3,<8.0-DEV" }, "require-dev": { "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "^6.2.3", - "squizlabs/php_codesniffer": "^3.0.2" + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -4020,7 +4021,7 @@ "constructor", "instantiate" ], - "time": "2017-07-22T11:58:36+00:00" + "time": "2015-06-14 21:17:01" }, { "name": "doctrine/lexer", @@ -4074,7 +4075,7 @@ "lexer", "parser" ], - "time": "2014-09-09T13:34:57+00:00" + "time": "2014-09-09 13:34:57" }, { "name": "friendsofphp/php-cs-fixer", @@ -4159,7 +4160,7 @@ } ], "description": "A tool to automatically fix PHP code style", - "time": "2017-11-02T12:46:49+00:00" + "time": "2017-11-02 12:46:49" }, { "name": "gecko-packages/gecko-php-unit", @@ -4203,7 +4204,7 @@ "filesystem", "phpunit" ], - "time": "2017-08-23T07:39:54+00:00" + "time": "2017-08-23 07:39:54" }, { "name": "ircmaxell/password-compat", @@ -4245,7 +4246,7 @@ "hashing", "password" ], - "time": "2014-11-20T16:49:30+00:00" + "time": "2014-11-20 16:49:30" }, { "name": "lusitanian/oauth", @@ -4312,7 +4313,7 @@ "oauth", "security" ], - "time": "2016-07-12T22:15:40+00:00" + "time": "2016-07-12 22:15:40" }, { "name": "myclabs/deep-copy", @@ -4357,7 +4358,7 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" + "time": "2017-10-19 19:58:43" }, { "name": "pdepend/pdepend", @@ -4397,7 +4398,7 @@ "BSD-3-Clause" ], "description": "Official version of pdepend to be handled with Composer", - "time": "2017-01-19T14:23:36+00:00" + "time": "2017-01-19 14:23:36" }, { "name": "phar-io/manifest", @@ -4452,7 +4453,7 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05T18:14:27+00:00" + "time": "2017-03-05 18:14:27" }, { "name": "phar-io/version", @@ -4499,7 +4500,7 @@ } ], "description": "Library for handling version information and constraints", - "time": "2017-03-05T17:38:23+00:00" + "time": "2017-03-05 17:38:23" }, { "name": "phpdocumentor/reflection-common", @@ -4553,7 +4554,7 @@ "reflection", "static analysis" ], - "time": "2017-09-11T18:02:19+00:00" + "time": "2017-09-11 18:02:19" }, { "name": "phpdocumentor/reflection-docblock", @@ -4598,7 +4599,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-08-30T18:51:59+00:00" + "time": "2017-08-30 18:51:59" }, { "name": "phpdocumentor/type-resolver", @@ -4645,7 +4646,7 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14T14:27:02+00:00" + "time": "2017-07-14 14:27:02" }, { "name": "phpmd/phpmd", @@ -4711,7 +4712,7 @@ "phpmd", "pmd" ], - "time": "2017-01-20T14:41:10+00:00" + "time": "2017-01-20 14:41:10" }, { "name": "phpspec/prophecy", @@ -4774,7 +4775,7 @@ "spy", "stub" ], - "time": "2017-09-04T11:05:03+00:00" + "time": "2017-09-04 11:05:03" }, { "name": "phpunit/php-code-coverage", @@ -4838,7 +4839,7 @@ "testing", "xunit" ], - "time": "2017-11-03T13:47:33+00:00" + "time": "2017-11-03 13:47:33" }, { "name": "phpunit/php-file-iterator", @@ -4885,7 +4886,7 @@ "filesystem", "iterator" ], - "time": "2016-10-03T07:40:28+00:00" + "time": "2016-10-03 07:40:28" }, { "name": "phpunit/php-text-template", @@ -4926,7 +4927,7 @@ "keywords": [ "template" ], - "time": "2015-06-21T13:50:34+00:00" + "time": "2015-06-21 13:50:34" }, { "name": "phpunit/php-timer", @@ -4975,7 +4976,7 @@ "keywords": [ "timer" ], - "time": "2017-02-26T11:10:40+00:00" + "time": "2017-02-26 11:10:40" }, { "name": "phpunit/php-token-stream", @@ -5024,7 +5025,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-08-20T05:47:52+00:00" + "time": "2017-08-20 05:47:52" }, { "name": "phpunit/phpunit", @@ -5108,7 +5109,7 @@ "testing", "xunit" ], - "time": "2017-08-03T13:59:28+00:00" + "time": "2017-08-03 13:59:28" }, { "name": "phpunit/phpunit-mock-objects", @@ -5167,7 +5168,7 @@ "mock", "xunit" ], - "time": "2017-08-03T14:08:16+00:00" + "time": "2017-08-03 14:08:16" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -5212,7 +5213,7 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "time": "2017-03-04 06:30:41" }, { "name": "sebastian/comparator", @@ -5276,7 +5277,7 @@ "compare", "equality" ], - "time": "2017-03-03T06:26:08+00:00" + "time": "2017-03-03 06:26:08" }, { "name": "sebastian/diff", @@ -5328,7 +5329,7 @@ "keywords": [ "diff" ], - "time": "2017-05-22T07:24:03+00:00" + "time": "2017-05-22 07:24:03" }, { "name": "sebastian/environment", @@ -5378,7 +5379,7 @@ "environment", "hhvm" ], - "time": "2017-07-01T08:51:00+00:00" + "time": "2017-07-01 08:51:00" }, { "name": "sebastian/exporter", @@ -5445,7 +5446,7 @@ "export", "exporter" ], - "time": "2017-04-03T13:19:02+00:00" + "time": "2017-04-03 13:19:02" }, { "name": "sebastian/finder-facade", @@ -5484,7 +5485,7 @@ ], "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", "homepage": "https://github.com/sebastianbergmann/finder-facade", - "time": "2016-02-17T07:02:23+00:00" + "time": "2016-02-17 07:02:23" }, { "name": "sebastian/global-state", @@ -5535,7 +5536,7 @@ "keywords": [ "global state" ], - "time": "2017-04-27T15:39:26+00:00" + "time": "2017-04-27 15:39:26" }, { "name": "sebastian/object-enumerator", @@ -5582,7 +5583,7 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "time": "2017-08-03 12:35:26" }, { "name": "sebastian/object-reflector", @@ -5627,7 +5628,7 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" + "time": "2017-03-29 09:07:27" }, { "name": "sebastian/phpcpd", @@ -5678,7 +5679,7 @@ ], "description": "Copy/Paste Detector (CPD) for PHP code.", "homepage": "https://github.com/sebastianbergmann/phpcpd", - "time": "2016-04-17T19:32:49+00:00" + "time": "2016-04-17 19:32:49" }, { "name": "sebastian/recursion-context", @@ -5731,7 +5732,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "time": "2017-03-03 06:23:57" }, { "name": "sebastian/resource-operations", @@ -5773,7 +5774,7 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" + "time": "2015-07-28 20:34:47" }, { "name": "sebastian/version", @@ -5816,7 +5817,7 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" + "time": "2016-10-03 07:35:21" }, { "name": "squizlabs/php_codesniffer", @@ -5867,7 +5868,7 @@ "phpcs", "standards" ], - "time": "2017-10-16T22:40:25+00:00" + "time": "2017-10-16 22:40:25" }, { "name": "symfony/config", @@ -5929,7 +5930,7 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2017-10-04T18:56:58+00:00" + "time": "2017-10-04 18:56:58" }, { "name": "symfony/dependency-injection", @@ -5999,7 +6000,7 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-10-04T17:15:30+00:00" + "time": "2017-10-04 17:15:30" }, { "name": "symfony/options-resolver", @@ -6053,7 +6054,7 @@ "configuration", "options" ], - "time": "2017-07-29T21:54:42+00:00" + "time": "2017-07-29 21:54:42" }, { "name": "symfony/polyfill-php54", @@ -6111,7 +6112,7 @@ "portable", "shim" ], - "time": "2017-10-11T12:05:26+00:00" + "time": "2017-10-11 12:05:26" }, { "name": "symfony/polyfill-php55", @@ -6167,7 +6168,7 @@ "portable", "shim" ], - "time": "2017-10-11T12:05:26+00:00" + "time": "2017-10-11 12:05:26" }, { "name": "symfony/polyfill-php70", @@ -6226,7 +6227,7 @@ "portable", "shim" ], - "time": "2017-10-11T12:05:26+00:00" + "time": "2017-10-11 12:05:26" }, { "name": "symfony/polyfill-php72", @@ -6281,7 +6282,7 @@ "portable", "shim" ], - "time": "2017-10-11T12:05:26+00:00" + "time": "2017-10-11 12:05:26" }, { "name": "symfony/stopwatch", @@ -6330,7 +6331,7 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2017-10-02T06:42:24+00:00" + "time": "2017-10-02 06:42:24" }, { "name": "theseer/fdomdocument", @@ -6370,7 +6371,7 @@ ], "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", "homepage": "https://github.com/theseer/fDOMDocument", - "time": "2017-06-30T11:53:12+00:00" + "time": "2017-06-30 11:53:12" }, { "name": "theseer/tokenizer", @@ -6410,7 +6411,7 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2017-04-07T12:08:54+00:00" + "time": "2017-04-07 12:08:54" }, { "name": "webmozart/assert", @@ -6460,7 +6461,7 @@ "check", "validate" ], - "time": "2016-11-23T20:04:58+00:00" + "time": "2016-11-23 20:04:58" } ], "aliases": [], From 75379cfc5b744fccd0698ccdc973b6490ecb915f Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov <ishakhsuvarov@magento.com> Date: Thu, 9 Nov 2017 13:34:49 +0200 Subject: [PATCH 166/653] magento/magento2#12061: Cleanup for object manager references and deprecated method - Updated coding style to match the one used in core magento - Updated integration test to verify for the escaped string --- app/code/Magento/Contact/Controller/Index/Post.php | 7 +++---- app/code/Magento/Contact/Model/Mail.php | 11 +++++------ .../Magento/Contact/Controller/IndexTest.php | 2 +- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/Contact/Controller/Index/Post.php b/app/code/Magento/Contact/Controller/Index/Post.php index 7b8d1d48eaecd..ee2d23b74df24 100644 --- a/app/code/Magento/Contact/Controller/Index/Post.php +++ b/app/code/Magento/Contact/Controller/Index/Post.php @@ -54,11 +54,10 @@ public function __construct( LoggerInterface $logger = null ) { parent::__construct($context, $contactsConfig); - $this->context = $context; - $this->mail = $mail; + $this->context = $context; + $this->mail = $mail; $this->dataPersistor = $dataPersistor; - $this->logger = $logger ?: - ObjectManager::getInstance()->get(LoggerInterface::class); + $this->logger = $logger ?: ObjectManager::getInstance()->get(LoggerInterface::class); } /** diff --git a/app/code/Magento/Contact/Model/Mail.php b/app/code/Magento/Contact/Model/Mail.php index f648c426d9a4e..43c1974252b5a 100644 --- a/app/code/Magento/Contact/Model/Mail.php +++ b/app/code/Magento/Contact/Model/Mail.php @@ -47,18 +47,17 @@ public function __construct( StateInterface $inlineTranslation, StoreManagerInterface $storeManager = null ) { - $this->contactsConfig = $contactsConfig; - $this->transportBuilder = $transportBuilder; + $this->contactsConfig = $contactsConfig; + $this->transportBuilder = $transportBuilder; $this->inlineTranslation = $inlineTranslation; - $this->storeManager = $storeManager ?: - ObjectManager::getInstance()->get(StoreManagerInterface::class); + $this->storeManager = $storeManager ?: ObjectManager::getInstance()->get(StoreManagerInterface::class); } /** * Send email from contact form * * @param string $replyTo - * @param array $variables + * @param array $variables * @return void */ public function send($replyTo, array $variables) @@ -72,7 +71,7 @@ public function send($replyTo, array $variables) ->setTemplateIdentifier($this->contactsConfig->emailTemplate()) ->setTemplateOptions( [ - 'area' => Area::AREA_FRONTEND, + 'area' => Area::AREA_FRONTEND, 'store' => $this->storeManager->getStore()->getId() ] ) diff --git a/dev/tests/integration/testsuite/Magento/Contact/Controller/IndexTest.php b/dev/tests/integration/testsuite/Magento/Contact/Controller/IndexTest.php index b8dbfec59845b..2d76632cae0b7 100644 --- a/dev/tests/integration/testsuite/Magento/Contact/Controller/IndexTest.php +++ b/dev/tests/integration/testsuite/Magento/Contact/Controller/IndexTest.php @@ -24,7 +24,7 @@ public function testPostAction() $this->assertRedirect($this->stringContains('contact/index')); $this->assertSessionMessages( $this->contains( - "Thanks for contacting us with your comments and questions. We'll respond to you very soon." + "Thanks for contacting us with your comments and questions. We'll respond to you very soon." ), \Magento\Framework\Message\MessageInterface::TYPE_SUCCESS ); From 1ff8aa46dbbab233cd27ff06db7943c90946b3c9 Mon Sep 17 00:00:00 2001 From: ChuckyK <33485610+ChuckyK@users.noreply.github.com> Date: Thu, 9 Nov 2017 14:03:27 +0200 Subject: [PATCH 167/653] Update button.phtml --- .../Magento/Checkout/view/frontend/templates/button.phtml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Checkout/view/frontend/templates/button.phtml b/app/code/Magento/Checkout/view/frontend/templates/button.phtml index e2bcd76cba35b..32a36acb46153 100644 --- a/app/code/Magento/Checkout/view/frontend/templates/button.phtml +++ b/app/code/Magento/Checkout/view/frontend/templates/button.phtml @@ -10,6 +10,8 @@ <?php /** @var $block \Magento\Checkout\Block\Onepage\Success */ ?> <?php if ($block->getCanViewOrder() && $block->getCanPrintOrder()) :?> - <?= /* @escapeNotVerified */ __('<a href="%1" onclick="this.target=\'_blank\'" class="print">Print receipt</a>', $block->getPrintUrl()) ?> + <a href="<?= /* @escapeNotVerified */ echo $block->getPrintUrl() ?>" target="_blank" class="print"> + <?= /* @escapeNotVerified */ echo __('Print receipt') ?> + </a> <?= $block->getChildHtml() ?> <?php endif;?> From 032316d53135a0ece8eefe14a76364d035ac5196 Mon Sep 17 00:00:00 2001 From: Vova Yatsyuk <vova.yatsyuk@gmail.com> Date: Thu, 9 Nov 2017 14:22:56 +0200 Subject: [PATCH 168/653] Fixed js error when disabling element, but editor is not active --- app/code/Magento/Ui/view/base/web/js/form/element/wysiwyg.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/wysiwyg.js b/app/code/Magento/Ui/view/base/web/js/form/element/wysiwyg.js index d0655a98d2586..90dc6b0293c7a 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/element/wysiwyg.js +++ b/app/code/Magento/Ui/view/base/web/js/form/element/wysiwyg.js @@ -94,7 +94,7 @@ define([ this.$wysiwygEditorButton.attr('disabled', status); /* eslint-disable no-undef */ - if (tinyMCE) { + if (tinyMCE && tinyMCE.activeEditor) { _.each(tinyMCE.activeEditor.controlManager.controls, function (property, index, controls) { controls[property.id].setDisabled(status); }); From 3b139c4cdc65d03c3c07a6f22837e222bf9d5315 Mon Sep 17 00:00:00 2001 From: Vova Yatsyuk <vova.yatsyuk@gmail.com> Date: Thu, 9 Nov 2017 14:23:40 +0200 Subject: [PATCH 169/653] Disable all editor buttons instead of the last one --- app/code/Magento/Ui/view/base/web/js/form/element/wysiwyg.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/wysiwyg.js b/app/code/Magento/Ui/view/base/web/js/form/element/wysiwyg.js index 90dc6b0293c7a..b8cd4a0f2c892 100644 --- a/app/code/Magento/Ui/view/base/web/js/form/element/wysiwyg.js +++ b/app/code/Magento/Ui/view/base/web/js/form/element/wysiwyg.js @@ -45,7 +45,8 @@ define([ component: this, selector: 'button' }, function (element) { - this.$wysiwygEditorButton = $(element); + this.$wysiwygEditorButton = this.$wysiwygEditorButton ? + this.$wysiwygEditorButton.add($(element)) : $(element); }.bind(this)); return this; From 3ae078594c051c551d6b00d6bddc231561465839 Mon Sep 17 00:00:00 2001 From: David Manners <dmanners87@gmail.com> Date: Thu, 9 Nov 2017 13:37:44 +0000 Subject: [PATCH 170/653] Filter the import to make sure we only update fields present in the import file. - https://github.com/magento/magento2/pull/11968 - Importing a import file to update customer data, results in entity fields being removed if the columns are not present on the imported file. --- .../Magento/CustomerImportExport/Model/Import/Customer.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php index 1122ac8f17826..016dca2fa526c 100644 --- a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php +++ b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php @@ -277,6 +277,12 @@ protected function _saveCustomerEntities(array $entitiesToCreate, array $entitie return $this; } + /** + * Filter the entity that are being updated so we only change fields found in the importer file + * + * @param array $entitiesToUpdate + * @return array + */ private function getCustomerEntityFieldsToUpdate(array $entitiesToUpdate): array { $firstCustomer = reset($entitiesToUpdate); From 817bc5fb91dff7249b706c06239d2808ddc17558 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Thu, 9 Nov 2017 16:09:57 +0200 Subject: [PATCH 171/653] 12110: Missing cascade into attribute set deletion. --- .../RemoveProductUrlRewrite.php | 83 +++++++++++++ .../RemoveProductUrlRewriteTest.php | 113 ++++++++++++++++++ .../CatalogUrlRewrite/etc/adminhtml/di.xml | 3 + .../RemoveProductUrlRewriteTest.php | 62 ++++++++++ .../_files/attribute_set_with_product.php | 11 ++ 5 files changed, 272 insertions(+) create mode 100644 app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php create mode 100644 app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php create mode 100644 dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php create mode 100644 dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php diff --git a/app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php b/app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php new file mode 100644 index 0000000000000..82a25531757a2 --- /dev/null +++ b/app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php @@ -0,0 +1,83 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository; + +use Magento\Catalog\Model\ResourceModel\Product\Collection; +use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; +use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator; +use Magento\Eav\Api\AttributeSetRepositoryInterface; +use Magento\Eav\Api\Data\AttributeSetInterface; +use Magento\UrlRewrite\Model\UrlPersistInterface; +use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; + +/** + * Remove url rewrites for products with given attribute set. + */ +class RemoveProductUrlRewrite +{ + /** + * @var int + */ + private $chunkSize = 1000; + + /** + * @var UrlPersistInterface + */ + private $urlPersist; + + /** + * @var CollectionFactory + */ + private $collectionFactory; + + /** + * ProductUrlRewriteProcessor constructor. + * + * @param UrlPersistInterface $urlPersist + * @param CollectionFactory $collectionFactory + */ + public function __construct(UrlPersistInterface $urlPersist, CollectionFactory $collectionFactory) + { + $this->urlPersist = $urlPersist; + $this->collectionFactory = $collectionFactory; + } + + /** + * Remove url rewrites for products with given attribute set. + * + * @param AttributeSetRepositoryInterface $subject + * @param \Closure $proceed + * @param AttributeSetInterface $attributeSet + * @return bool + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function aroundDelete( + AttributeSetRepositoryInterface $subject, + \Closure $proceed, + AttributeSetInterface $attributeSet + ) { + /** @var Collection $productCollection */ + $productCollection = $this->collectionFactory->create(); + $productCollection->addFieldToFilter('attribute_set_id', ['eq' => $attributeSet->getId()]); + $productIds = $productCollection->getAllIds(); + $result = $proceed($attributeSet); + if (!empty($productIds)) { + $productIds = array_chunk($productIds, $this->chunkSize); + foreach ($productIds as $ids) { + $this->urlPersist->deleteByData( + [ + UrlRewrite::ENTITY_ID => $ids, + UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE, + ] + ); + } + } + + return $result; + } +} diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php new file mode 100644 index 0000000000000..cf2337bf7c76c --- /dev/null +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php @@ -0,0 +1,113 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogUrlRewrite\Test\Unit\Plugin\Eav\AttributeSetRepository; + +use Magento\Catalog\Model\ResourceModel\Product\Collection; +use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; +use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator; +use Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository\RemoveProductUrlRewrite; +use Magento\Eav\Api\AttributeSetRepositoryInterface; +use Magento\Eav\Api\Data\AttributeSetInterface; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\UrlRewrite\Model\UrlPersistInterface; +use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; +use PHPUnit\Framework\TestCase; + +/** + * Provide tests for RemoveProductUrlRewrite plugin. + */ +class RemoveProductUrlRewriteTest extends TestCase +{ + /** + * @var RemoveProductUrlRewrite + */ + private $testSubject; + + /** + * @var CollectionFactory|\PHPUnit_Framework_MockObject_MockObject + */ + private $collectionFactory; + + /** + * @var UrlPersistInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $urlPersist; + + /** + * @inheritdoc + */ + protected function setUp() + { + $objectManager = new ObjectManager($this); + $this->collectionFactory = $this->getMockBuilder(CollectionFactory::class) + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $this->urlPersist = $this->getMockBuilder(UrlPersistInterface::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $this->testSubject = $objectManager->getObject( + RemoveProductUrlRewrite::class, + [ + 'collectionFactory' => $this->collectionFactory, + 'urlPersist' => $this->urlPersist, + ] + ); + } + + /** + * Test plugin will delete all url rewrites for products with given attribute set. + */ + public function testAroundDelete() + { + $attributeSetId = '1'; + $productId = '1'; + + /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collection */ + $collection = $this->getMockBuilder(Collection::class) + ->disableOriginalConstructor() + ->getMock(); + $collection->expects(self::once()) + ->method('addFieldToFilter') + ->with(self::identicalTo('attribute_set_id'), self::identicalTo(['eq' => $attributeSetId])); + $collection->expects(self::once()) + ->method('getAllIds') + ->willReturn([$productId]); + + $this->collectionFactory->expects(self::once()) + ->method('create') + ->willReturn($collection); + + $this->urlPersist->expects(self::once()) + ->method('deleteByData') + ->with(self::identicalTo( + [ + UrlRewrite::ENTITY_ID => [$productId], + UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE, + ] + )); + /** @var AttributeSetRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject $attributeSetRepository */ + $attributeSetRepository = $this->getMockBuilder(AttributeSetRepositoryInterface::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + + $proceed = function () { + return true; + }; + + /** @var AttributeSetInterface|\PHPUnit_Framework_MockObject_MockObject $attributeSet */ + $attributeSet = $this->getMockBuilder(AttributeSetInterface::class) + ->setMethods(['getId']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $attributeSet->expects(self::once()) + ->method('getId') + ->willReturn($attributeSetId); + + $this->testSubject->aroundDelete($attributeSetRepository, $proceed, $attributeSet); + } +} diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml index 32ecc97d0f85f..ebac217df5fcb 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml @@ -25,6 +25,9 @@ <type name="Magento\Catalog\Model\Category\DataProvider"> <plugin name="category_ui_form_url_key_plugin" type="Magento\CatalogUrlRewrite\Plugin\Catalog\Block\Adminhtml\Category\Tab\Attributes"/> </type> + <type name="Magento\Eav\Api\AttributeSetRepositoryInterface"> + <plugin name="attribute_set_delete_plugin" type="Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository\RemoveProductUrlRewrite"/> + </type> <virtualType name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Pool"> <arguments> <argument name="modifiers" xsi:type="array"> diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php new file mode 100644 index 0000000000000..3791bb7894ec4 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php @@ -0,0 +1,62 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository; + +use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Eav\Api\AttributeSetRepositoryInterface; +use Magento\Eav\Model\Entity\Attribute\Set; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\TestFramework\Interception\PluginList; +use Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollectionFactory; +use PHPUnit\Framework\TestCase; + +/** + * Provide tests for RemoveProductUrlRewrite plugin. + * @magentoAppArea adminhtml + */ +class RemoveProductUrlRewriteTest extends TestCase +{ + /** + * @return void + */ + public function testRemoveProductUrlRewriteIsRegistered() + { + $pluginInfo = Bootstrap::getObjectManager()->get(PluginList::class) + ->get(AttributeSetRepositoryInterface::class, []); + self::assertSame(RemoveProductUrlRewrite::class, $pluginInfo['attribute_set_delete_plugin']['instance']); + } + + /** + * Test url rewrite will be removed for product with given attribute set, if one will be deleted. + * + * @magentoDataFixture Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php + * @magentoDbIsolation disabled + */ + public function testAroundDelete() + { + $attributeSet = Bootstrap::getObjectManager()->get(Set::class); + $attributeSet->load('empty_attribute_set', 'attribute_set_name'); + + $productRepository = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class); + $product = $productRepository->get('simple'); + + $urlRewriteCollection = Bootstrap::getObjectManager()->get(UrlRewriteCollectionFactory::class)->create(); + $urlRewriteCollection->addFieldToFilter('entity_type', 'product'); + $urlRewriteCollection->addFieldToFilter('entity_id', $product->getId()); + + self::assertSame(1, $urlRewriteCollection->getSize()); + + $attributeSetRepository = Bootstrap::getObjectManager()->get(AttributeSetRepositoryInterface::class); + $attributeSetRepository->deleteById($attributeSet->getAttributeSetId()); + + $urlRewriteCollection = Bootstrap::getObjectManager()->get(UrlRewriteCollectionFactory::class)->create(); + $urlRewriteCollection->addFieldToFilter('entity_type', 'product'); + $urlRewriteCollection->addFieldToFilter('entity_id', $product->getId()); + + self::assertSame(0, $urlRewriteCollection->getSize()); + } +} diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php new file mode 100644 index 0000000000000..95f277c7124bd --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php @@ -0,0 +1,11 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +require __DIR__ . '/../../Eav/_files/empty_attribute_set.php'; +require __DIR__ . '/../../Catalog/_files/product_simple.php'; + +$product->setAttributeSetId($attributeSet->getId()); +$product->save(); From 49552388a3964eedeb1401f73ffb1126ac23f0b5 Mon Sep 17 00:00:00 2001 From: ChuckyK <33485610+ChuckyK@users.noreply.github.com> Date: Thu, 9 Nov 2017 16:40:20 +0200 Subject: [PATCH 172/653] Update String "Print receipt" --- app/code/Magento/Checkout/i18n/en_US.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Checkout/i18n/en_US.csv b/app/code/Magento/Checkout/i18n/en_US.csv index 53e6ef67d68cd..8d297c4060abd 100644 --- a/app/code/Magento/Checkout/i18n/en_US.csv +++ b/app/code/Magento/Checkout/i18n/en_US.csv @@ -62,7 +62,7 @@ Checkout,Checkout Error!,Error! "DB exception","DB exception" Message,Message -"<a href=""%1"" onclick=""this.target='_blank'"" class=""print"">Print receipt</a>","<a href=""%1"" onclick=""this.target='_blank'"" class=""print"">Print receipt</a>" +"Print receipt","Print receipt" "Apply Discount Code","Apply Discount Code" "Enter discount code","Enter discount code" "Apply Discount","Apply Discount" From 5cd2757494e5d685e685e12449f7047f56143e60 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Thu, 9 Nov 2017 18:21:24 +0200 Subject: [PATCH 173/653] 12110: Missing cascade into attribute set deletion. --- .../_files/attribute_set_with_product_rollback.php | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php new file mode 100644 index 0000000000000..53d35463f1ac4 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php @@ -0,0 +1,9 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +require __DIR__ . '/../../Catalog/_files/product_simple_rollback.php'; +require __DIR__ . '/../../Eav/_files/empty_attribute_set_rollback.php'; + From ff249e1dfbe355dbe3d55e050fefe2dc6b63dfb5 Mon Sep 17 00:00:00 2001 From: David Manners <dmanners87@gmail.com> Date: Thu, 9 Nov 2017 17:07:00 +0000 Subject: [PATCH 174/653] Add link to issue gates wiki page in the labels section of the readme --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9b1aa1b7b3e28..1dd81a7eed272 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,10 @@ To suggest documentation improvements, click [here][4]. | ![reject](http://devdocs.magento.com/common/images/github_reject.png) | The pull request has been rejected and will not be merged into mainline code. Possible reasons can include but are not limited to: issue has already been fixed in another code contribution, or there is an issue with the code contribution. | | ![bug report](http://devdocs.magento.com/common/images/github_bug.png) | The Magento Team has confirmed that this issue contains the minimum required information to reproduce. | | ![acknowledged](http://devdocs.magento.com/common/images/gitHub_acknowledged.png) | The Magento Team has validated the issue and an internal ticket has been created. | -| ![acknowledged](http://devdocs.magento.com/common/images/github_inProgress.png) | The internal ticket is currently in progress, fix is scheduled to be delivered. | -| ![acknowledged](http://devdocs.magento.com/common/images/github_needsUpdate.png) | The Magento Team needs additional information from the reporter to properly prioritize and process the issue or pull request. | +| ![in progress](http://devdocs.magento.com/common/images/github_inProgress.png) | The internal ticket is currently in progress, fix is scheduled to be delivered. | +| ![needs update](http://devdocs.magento.com/common/images/github_needsUpdate.png) | The Magento Team needs additional information from the reporter to properly prioritize and process the issue or pull request. | + +To learn more about issue gate labels click [here](https://github.com/magento/magento2/wiki/Magento-Issue-Gates) <h2>Reporting security issues</h2> From faee0ba000072d61f13b256be3e7061493ff0416 Mon Sep 17 00:00:00 2001 From: ChuckyK <33485610+ChuckyK@users.noreply.github.com> Date: Thu, 9 Nov 2017 19:09:19 +0200 Subject: [PATCH 175/653] Update button.phtml --- .../Magento/Checkout/view/frontend/templates/button.phtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Checkout/view/frontend/templates/button.phtml b/app/code/Magento/Checkout/view/frontend/templates/button.phtml index 32a36acb46153..c3edfe30f8bdd 100644 --- a/app/code/Magento/Checkout/view/frontend/templates/button.phtml +++ b/app/code/Magento/Checkout/view/frontend/templates/button.phtml @@ -10,8 +10,8 @@ <?php /** @var $block \Magento\Checkout\Block\Onepage\Success */ ?> <?php if ($block->getCanViewOrder() && $block->getCanPrintOrder()) :?> - <a href="<?= /* @escapeNotVerified */ echo $block->getPrintUrl() ?>" target="_blank" class="print"> - <?= /* @escapeNotVerified */ echo __('Print receipt') ?> + <a href="<?= /* @escapeNotVerified */ $block->getPrintUrl() ?>" target="_blank" class="print"> + <?= /* @escapeNotVerified */ __('Print receipt') ?> </a> <?= $block->getChildHtml() ?> <?php endif;?> From 661f8fa39c55b579457ca375f8b76d92a8504641 Mon Sep 17 00:00:00 2001 From: Patrick McLain <pmclain@somethingdigital.com> Date: Thu, 9 Nov 2017 16:51:01 -0500 Subject: [PATCH 176/653] Clear `mage-cache-sessid` on Ajax Login This commit adds code based on `Magento\Customer\Controller\Account\LoginPost::execute` that clears the `mage-cache-sessid` cookie on login. This triggers a refresh of the customer data in localStorage. The primary purpose is to make sure the customer cart is properly loaded after login. --- .../Customer/Controller/Ajax/Login.php | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Customer/Controller/Ajax/Login.php b/app/code/Magento/Customer/Controller/Ajax/Login.php index f1384ba188a0a..7d6ddc7316a3e 100644 --- a/app/code/Magento/Customer/Controller/Ajax/Login.php +++ b/app/code/Magento/Customer/Controller/Ajax/Login.php @@ -13,6 +13,8 @@ use Magento\Customer\Model\Account\Redirect as AccountRedirect; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Stdlib\CookieManagerInterface; +use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory; /** * Login controller @@ -58,6 +60,16 @@ class Login extends \Magento\Framework\App\Action\Action */ protected $scopeConfig; + /** + * @var CookieManagerInterface + */ + protected $cookieManager; + + /** + * @var CookieMetadataFactory + */ + protected $cookieMetadataFactory; + /** * Initialize Login controller * @@ -67,6 +79,8 @@ class Login extends \Magento\Framework\App\Action\Action * @param AccountManagementInterface $customerAccountManagement * @param \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory + * @param CookieManagerInterface $cookieManager + * @param CookieMetadataFactory $cookieMetadataFactory */ public function __construct( \Magento\Framework\App\Action\Context $context, @@ -74,7 +88,9 @@ public function __construct( \Magento\Framework\Json\Helper\Data $helper, AccountManagementInterface $customerAccountManagement, \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory, - \Magento\Framework\Controller\Result\RawFactory $resultRawFactory + \Magento\Framework\Controller\Result\RawFactory $resultRawFactory, + CookieManagerInterface $cookieManager, + CookieMetadataFactory $cookieMetadataFactory ) { parent::__construct($context); $this->customerSession = $customerSession; @@ -82,6 +98,8 @@ public function __construct( $this->customerAccountManagement = $customerAccountManagement; $this->resultJsonFactory = $resultJsonFactory; $this->resultRawFactory = $resultRawFactory; + $this->cookieManager = $cookieManager; + $this->cookieMetadataFactory = $cookieMetadataFactory; } /** @@ -169,6 +187,11 @@ public function execute() $this->customerSession->setCustomerDataAsLoggedIn($customer); $this->customerSession->regenerateId(); $redirectRoute = $this->getAccountRedirect()->getRedirectCookie(); + if ($this->cookieManager->getCookie('mage-cache-sessid')) { + $metadata = $this->cookieMetadataFactory->createCookieMetadata(); + $metadata->setPath('/'); + $this->cookieManager->deleteCookie('mage-cache-sessid', $metadata); + } if (!$this->getScopeConfig()->getValue('customer/startup/redirect_dashboard') && $redirectRoute) { $response['redirectUrl'] = $this->_redirect->success($redirectRoute); $this->getAccountRedirect()->clearRedirectCookie(); From 87152219a878c6e8566de68f93909bda0d511064 Mon Sep 17 00:00:00 2001 From: Patrick McLain <pmclain@somethingdigital.com> Date: Thu, 9 Nov 2017 17:12:05 -0500 Subject: [PATCH 177/653] Update Ajax LoginTest --- .../Test/Unit/Controller/Ajax/LoginTest.php | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Ajax/LoginTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Ajax/LoginTest.php index b759b1a62573f..6ab20c13acf3e 100644 --- a/app/code/Magento/Customer/Test/Unit/Controller/Ajax/LoginTest.php +++ b/app/code/Magento/Customer/Test/Unit/Controller/Ajax/LoginTest.php @@ -73,6 +73,21 @@ class LoginTest extends \PHPUnit\Framework\TestCase */ protected $redirectMock; + /** + * @var \Magento\Framework\Stdlib\CookieManagerInterface| \PHPUnit_Framework_MockObject_MockObject + */ + protected $cookieManager; + + /** + * @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory| \PHPUnit_Framework_MockObject_MockObject + */ + protected $cookieMetadataFactory; + + /** + * @var \Magento\Framework\Stdlib\Cookie\CookieMetadata| \PHPUnit_Framework_MockObject_MockObject + */ + protected $cookieMetadata; + protected function setUp() { $this->request = $this->getMockBuilder(\Magento\Framework\App\Request\Http::class) @@ -100,6 +115,16 @@ protected function setUp() ->setMethods(['create']) ->getMock(); + $this->cookieManager = $this->getMockBuilder(\Magento\Framework\Stdlib\CookieManagerInterface::class) + ->setMethods(['getCookie', 'deleteCookie']) + ->getMockForAbstractClass(); + $this->cookieMetadataFactory = $this->getMockBuilder(\Magento\Framework\Stdlib\Cookie\CookieMetadataFactory::class) + ->disableOriginalConstructor() + ->getMock(); + $this->cookieMetadata = $this->getMockBuilder(\Magento\Framework\Stdlib\Cookie\CookieMetadata::class) + ->disableOriginalConstructor() + ->getMock(); + $this->resultRaw = $this->getMockBuilder(\Magento\Framework\Controller\Result\Raw::class) ->disableOriginalConstructor() ->getMock(); @@ -128,6 +153,8 @@ protected function setUp() 'resultJsonFactory' => $this->resultJsonFactory, 'objectManager' => $this->objectManager, 'customerAccountManagement' => $this->customerAccountManagementMock, + 'cookieManager' => $this->cookieManager, + 'cookieMetadataFactory' => $this->cookieMetadataFactory ] ); } @@ -179,6 +206,22 @@ public function testLogin() $this->object->setAccountRedirect($redirectMock); $redirectMock->expects($this->once())->method('getRedirectCookie')->willReturn('some_url1'); + $this->cookieManager->expects($this->once()) + ->method('getCookie') + ->with('mage-cache-sessid') + ->willReturn(true); + $this->cookieMetadataFactory->expects($this->once()) + ->method('createCookieMetadata') + ->willReturn($this->cookieMetadata); + $this->cookieMetadata->expects($this->once()) + ->method('setPath') + ->with('/') + ->willReturnSelf(); + $this->cookieManager->expects($this->once()) + ->method('deleteCookie') + ->with('mage-cache-sessid', $this->cookieMetadata) + ->willReturnSelf(); + $scopeConfigMock = $this->createMock(\Magento\Framework\App\Config\ScopeConfigInterface::class); $this->object->setScopeConfig($scopeConfigMock); $scopeConfigMock->expects($this->once())->method('getValue') From 95f11ae29365f3f7e3d72a33c22ce4859c9b16fd Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Fri, 10 Nov 2017 10:27:55 +0200 Subject: [PATCH 178/653] 12110: Missing cascade into attribute set deletion. --- .../Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php | 2 +- .../_files/attribute_set_with_product_rollback.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php index 3791bb7894ec4..da189b85932c7 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php @@ -34,7 +34,7 @@ public function testRemoveProductUrlRewriteIsRegistered() * Test url rewrite will be removed for product with given attribute set, if one will be deleted. * * @magentoDataFixture Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php - * @magentoDbIsolation disabled + * @magentoDbIsolation enabled */ public function testAroundDelete() { diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php index 53d35463f1ac4..cd579bdb76f57 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php +++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php @@ -6,4 +6,3 @@ require __DIR__ . '/../../Catalog/_files/product_simple_rollback.php'; require __DIR__ . '/../../Eav/_files/empty_attribute_set_rollback.php'; - From fc34d7bf5afce2db5f6019dcb5c259e1178fb3dc Mon Sep 17 00:00:00 2001 From: Sergey Shvets <sshvets@magento.com> Date: Fri, 10 Nov 2017 12:32:12 +0200 Subject: [PATCH 179/653] MAGETWO-72301: [Github] Static content deploy with multiple locales: js-translation.json files are the same #10673 --- .../Magento/Deploy/Service/DeployPackage.php | 30 +++--- .../Deploy/Service/DeployStaticContent.php | 1 + .../Translation/Model/Json/PreProcessor.php | 28 ++++-- .../Test/Unit/Model/Json/PreProcessorTest.php | 16 ++- .../Magento/Framework/TranslateTest.php | 47 ++++++--- .../design/Magento/theme/i18n/en_US.csv | 3 + .../Framework/Test/Unit/TranslateTest.php | 95 ++++++++++++------ lib/internal/Magento/Framework/Translate.php | 97 ++++++++++--------- 8 files changed, 208 insertions(+), 109 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Translation/Model/_files/Magento/design/Magento/theme/i18n/en_US.csv diff --git a/app/code/Magento/Deploy/Service/DeployPackage.php b/app/code/Magento/Deploy/Service/DeployPackage.php index 0522702cbdc2b..ec80387e96cc9 100644 --- a/app/code/Magento/Deploy/Service/DeployPackage.php +++ b/app/code/Magento/Deploy/Service/DeployPackage.php @@ -3,14 +3,18 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Deploy\Service; use Magento\Deploy\Package\Package; use Magento\Deploy\Package\PackageFile; +use Magento\Framework\App\ObjectManager; use Magento\Framework\App\State as AppState; use Magento\Framework\Locale\ResolverInterface as LocaleResolver; use Magento\Framework\View\Asset\ContentProcessorException; use Magento\Deploy\Console\InputValidator; +use Magento\Framework\View\Design\Theme\ListInterface; +use Magento\Framework\View\DesignInterface; use Psr\Log\LoggerInterface; /** @@ -91,15 +95,15 @@ public function __construct( * @param array $options * @param bool $skipLogging * @return bool true on success + * @throws \Exception */ public function deploy(Package $package, array $options, $skipLogging = false) { $result = $this->appState->emulateAreaCode( - $package->getArea() == Package::BASE_AREA ? 'global' : $package->getArea(), + $package->getArea() === Package::BASE_AREA ? 'global' : $package->getArea(), function () use ($package, $options, $skipLogging) { // emulate application locale needed for correct file path resolving $this->localeResolver->setLocale($package->getLocale()); - $this->deployEmulated($package, $options, $skipLogging); } ); @@ -111,7 +115,7 @@ function () use ($package, $options, $skipLogging) { * @param Package $package * @param array $options * @param bool $skipLogging - * @return int + * @return bool */ public function deployEmulated(Package $package, array $options, $skipLogging = false) { @@ -200,14 +204,14 @@ private function processFile(PackageFile $file, Package $package) private function checkIfCanCopy(PackageFile $file, Package $package, Package $parentPackage = null) { return $parentPackage - && $file->getOrigPackage() !== $package - && ( - $file->getArea() !== $package->getArea() - || $file->getTheme() !== $package->getTheme() - || $file->getLocale() !== $package->getLocale() - ) - && $file->getOrigPackage() == $parentPackage - && $this->deployStaticFile->readFile($file->getDeployedFileId(), $parentPackage->getPath()); + && $file->getOrigPackage() !== $package + && ( + $file->getArea() !== $package->getArea() + || $file->getTheme() !== $package->getTheme() + || $file->getLocale() !== $package->getLocale() + ) + && $file->getOrigPackage() === $parentPackage + && $this->deployStaticFile->readFile($file->getDeployedFileId(), $parentPackage->getPath()); } /** @@ -219,10 +223,10 @@ private function checkIfCanCopy(PackageFile $file, Package $package, Package $pa */ private function checkFileSkip($filePath, array $options) { - if ($filePath != '.') { + if ($filePath !== '.') { $ext = strtolower(pathinfo($filePath, PATHINFO_EXTENSION)); $basename = pathinfo($filePath, PATHINFO_BASENAME); - if ($ext == 'less' && strpos($basename, '_') === 0) { + if ($ext === 'less' && strpos($basename, '_') === 0) { return true; } $option = isset(InputValidator::$fileExtensionOptionMap[$ext]) diff --git a/app/code/Magento/Deploy/Service/DeployStaticContent.php b/app/code/Magento/Deploy/Service/DeployStaticContent.php index 66ec6e7418afd..72de645868e22 100644 --- a/app/code/Magento/Deploy/Service/DeployStaticContent.php +++ b/app/code/Magento/Deploy/Service/DeployStaticContent.php @@ -112,6 +112,7 @@ public function deploy(array $options) $deployRjsConfig = $this->objectManager->create(DeployRequireJsConfig::class, [ 'logger' => $this->logger ]); + /** @var DeployTranslationsDictionary $deployI18n */ $deployI18n = $this->objectManager->create(DeployTranslationsDictionary::class, [ 'logger' => $this->logger ]); diff --git a/app/code/Magento/Translation/Model/Json/PreProcessor.php b/app/code/Magento/Translation/Model/Json/PreProcessor.php index e29d8d768a0d6..1b2dd565d4ce5 100644 --- a/app/code/Magento/Translation/Model/Json/PreProcessor.php +++ b/app/code/Magento/Translation/Model/Json/PreProcessor.php @@ -3,15 +3,18 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Translation\Model\Json; +use Magento\Framework\App\AreaList; +use Magento\Framework\App\ObjectManager; +use Magento\Framework\TranslateInterface; +use Magento\Framework\View\Asset\File\FallbackContext; +use Magento\Framework\View\Asset\PreProcessor\Chain; use Magento\Framework\View\Asset\PreProcessorInterface; +use Magento\Framework\View\DesignInterface; use Magento\Translation\Model\Js\Config; use Magento\Translation\Model\Js\DataProviderInterface; -use Magento\Framework\View\Asset\PreProcessor\Chain; -use Magento\Framework\View\Asset\File\FallbackContext; -use Magento\Framework\App\AreaList; -use Magento\Framework\TranslateInterface; /** * PreProcessor responsible for providing js translation dictionary @@ -41,23 +44,30 @@ class PreProcessor implements PreProcessorInterface * @var TranslateInterface */ protected $translate; + /** + * @var DesignInterface + */ + private $viewDesign; /** * @param Config $config * @param DataProviderInterface $dataProvider * @param AreaList $areaList * @param TranslateInterface $translate + * @param DesignInterface|null $viewDesign */ public function __construct( Config $config, DataProviderInterface $dataProvider, AreaList $areaList, - TranslateInterface $translate + TranslateInterface $translate, + DesignInterface $viewDesign = null ) { $this->config = $config; $this->dataProvider = $dataProvider; $this->areaList = $areaList; $this->translate = $translate; + $this->viewDesign = $viewDesign ?: ObjectManager::getInstance()->get(DesignInterface::class); } /** @@ -65,6 +75,7 @@ public function __construct( * * @param Chain $chain * @return void + * @throws \Exception */ public function process(Chain $chain) { @@ -77,7 +88,12 @@ public function process(Chain $chain) if ($context instanceof FallbackContext) { $themePath = $context->getThemePath(); $areaCode = $context->getAreaCode(); - $this->translate->setLocale($context->getLocale()); + + $this->viewDesign->setDesignTheme($themePath, $areaCode); + + $this->translate + ->setLocale($context->getLocale()) + ->loadData($areaCode); } $area = $this->areaList->getArea($areaCode); diff --git a/app/code/Magento/Translation/Test/Unit/Model/Json/PreProcessorTest.php b/app/code/Magento/Translation/Test/Unit/Model/Json/PreProcessorTest.php index eb53c5b442cdd..c99993e425da4 100644 --- a/app/code/Magento/Translation/Test/Unit/Model/Json/PreProcessorTest.php +++ b/app/code/Magento/Translation/Test/Unit/Model/Json/PreProcessorTest.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Translation\Test\Unit\Model\Json; use Magento\Translation\Model\Js\Config; @@ -41,7 +42,15 @@ protected function setUp() $this->configMock = $this->createMock(\Magento\Translation\Model\Js\Config::class); $this->dataProviderMock = $this->createMock(\Magento\Translation\Model\Js\DataProvider::class); $this->areaListMock = $this->createMock(\Magento\Framework\App\AreaList::class); - $this->translateMock = $this->getMockForAbstractClass(\Magento\Framework\TranslateInterface::class); + $this->translateMock = $this->getMockBuilder(\Magento\Framework\Translate::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->translateMock + ->expects($this->once()) + ->method('setLocale') + ->willReturn($this->translateMock); + $this->model = new PreProcessor( $this->configMock, $this->dataProviderMock, @@ -97,6 +106,11 @@ public function testGetData() ->method('setContentType') ->with('json'); + $this->translateMock + ->expects($this->once()) + ->method('loadData') + ->willReturn($this->translateMock); + $this->model->process($chain); } } diff --git a/dev/tests/integration/testsuite/Magento/Framework/TranslateTest.php b/dev/tests/integration/testsuite/Magento/Framework/TranslateTest.php index 73e6fba8276c7..b11b881847a57 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/TranslateTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/TranslateTest.php @@ -3,40 +3,43 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Framework; use Magento\TestFramework\Helper\Bootstrap; use Magento\TestFramework\Helper\CacheCleaner; +use PHPUnit\Framework\TestCase; +use PHPUnit_Framework_MockObject_MockObject; /** * @magentoAppIsolation enabled * @magentoCache all disabled * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class TranslateTest extends \PHPUnit\Framework\TestCase +class TranslateTest extends TestCase { /** @var \Magento\Framework\Translate */ private $translate; protected function setUp() { - /** @var \Magento\Framework\View\FileSystem $viewFileSystem */ + /** @var \Magento\Framework\View\FileSystem | PHPUnit_Framework_MockObject_MockObject $viewFileSystem */ $viewFileSystem = $this->createPartialMock( \Magento\Framework\View\FileSystem::class, - ['getLocaleFileName', 'getDesignTheme'] + ['getLocaleFileName'] ); $viewFileSystem->expects($this->any()) ->method('getLocaleFileName') ->will( - $this->returnValue(dirname(__DIR__) . '/Theme/Model/_files/design/frontend/Test/default/i18n/en_US.csv') + $this->returnValue( + dirname(__DIR__) . '/Translation/Model/_files/Magento/design/Magento/theme/i18n/en_US.csv' + ) ); - /** @var \Magento\Framework\View\Design\ThemeInterface $theme */ + /** @var \Magento\Framework\View\Design\ThemeInterface | PHPUnit_Framework_MockObject_MockObject $theme */ $theme = $this->createMock(\Magento\Framework\View\Design\ThemeInterface::class); - $theme->expects($this->any())->method('getId')->will($this->returnValue(10)); - - $viewFileSystem->expects($this->any())->method('getDesignTheme')->will($this->returnValue($theme)); + $theme->expects($this->any())->method('getThemePath')->will($this->returnValue('Magento/luma')); /** @var \Magento\TestFramework\ObjectManager $objectManager */ $objectManager = Bootstrap::getObjectManager(); @@ -55,7 +58,7 @@ protected function setUp() dirname(__DIR__) . '/Translation/Model/_files/Magento/Catalog/i18n' ); - /** @var \Magento\Theme\Model\View\Design $designModel */ + /** @var \Magento\Theme\Model\View\Design | \PHPUnit_Framework_MockObject_MockObject $designModel */ $designModel = $this->getMockBuilder(\Magento\Theme\Model\View\Design::class) ->setMethods(['getDesignTheme']) ->setConstructorArgs( @@ -96,6 +99,9 @@ public function testLoadData() /** * @magentoCache all disabled * @dataProvider translateDataProvider + * @param string $inputText + * @param string $expectedTranslation + * @throws Exception\LocalizedException */ public function testTranslate($inputText, $expectedTranslation) { @@ -111,9 +117,26 @@ public function translateDataProvider() { return [ ['', ''], - ['Text with different translation on different modules', 'Text translation that was last loaded'], - ['text_with_no_translation', 'text_with_no_translation'], - ['Design value to translate', 'Design translated value'] + [ + 'Theme phrase will be translated', + 'Theme phrase is translated', + ], + [ + 'Phrase in Magento_Store module that doesn\'t need translation', + 'Phrase in Magento_Store module that doesn\'t need translation', + ], + [ + 'Phrase in Magento_Catalog module that doesn\'t need translation', + 'Phrase in Magento_Catalog module that doesn\'t need translation', + ], + [ + 'Magento_Store module phrase will be override by theme translation', + 'Magento_Store module phrase is override by theme translation', + ], + [ + 'Magento_Catalog module phrase will be override by theme translation', + 'Magento_Catalog module phrase is override by theme translation', + ], ]; } } diff --git a/dev/tests/integration/testsuite/Magento/Translation/Model/_files/Magento/design/Magento/theme/i18n/en_US.csv b/dev/tests/integration/testsuite/Magento/Translation/Model/_files/Magento/design/Magento/theme/i18n/en_US.csv new file mode 100644 index 0000000000000..f34ef38890738 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Translation/Model/_files/Magento/design/Magento/theme/i18n/en_US.csv @@ -0,0 +1,3 @@ +"Theme phrase will be translated","Theme phrase is translated" +"Magento_Catalog module phrase will be override by theme translation","Magento_Catalog module phrase is override by theme translation" +"Magento_Store module phrase will be override by theme translation","Magento_Store module phrase is override by theme translation" diff --git a/lib/internal/Magento/Framework/Test/Unit/TranslateTest.php b/lib/internal/Magento/Framework/Test/Unit/TranslateTest.php index 5c689adc6743c..cca8d564d3199 100644 --- a/lib/internal/Magento/Framework/Test/Unit/TranslateTest.php +++ b/lib/internal/Magento/Framework/Test/Unit/TranslateTest.php @@ -121,27 +121,60 @@ protected function setUp() * @param string $area * @param bool $forceReload * @param array $cachedData + * @dataProvider dataProviderLoadDataCachedTranslation + */ + public function testLoadDataCachedTranslation($area, $forceReload, $cachedData) + { + $this->expectsSetConfig('Magento/luma'); + + $this->cache->expects($this->once()) + ->method('load') + ->will($this->returnValue(json_encode($cachedData))); + + $this->appState->expects($this->exactly($area ? 0 : 1)) + ->method('getAreaCode') + ->will($this->returnValue('frontend')); + + $this->translate->loadData($area, $forceReload); + $this->assertEquals($cachedData, $this->translate->getData()); + } + + public function dataProviderLoadDataCachedTranslation() + { + $cachedData = ['cached 1' => 'translated 1', 'cached 2' => 'translated 2']; + return [ + ['adminhtml', false, $cachedData], + ['frontend', false, $cachedData], + [null, false, $cachedData], + ]; + } + + /** + * @param string $area + * @param bool $forceReload * @dataProvider dataProviderForTestLoadData * @SuppressWarnings(PHPMD.NPathComplexity) */ - public function testLoadData($area, $forceReload, $cachedData) + public function testLoadData($area, $forceReload) { - $this->expectsSetConfig('themeId'); + $this->expectsSetConfig('Magento/luma'); + + $this->appState->expects($this->exactly($area ? 0 : 1)) + ->method('getAreaCode') + ->will($this->returnValue('frontend')); $this->cache->expects($this->exactly($forceReload ? 0 : 1)) ->method('load') - ->will($this->returnValue(json_encode($cachedData))); - - if (!$forceReload && $cachedData !== false) { - $this->translate->loadData($area, $forceReload); - $this->assertEquals($cachedData, $this->translate->getData()); - return; - } + ->will($this->returnValue(false)); $this->directory->expects($this->any())->method('isExist')->will($this->returnValue(true)); // _loadModuleTranslation() - $this->moduleList->expects($this->once())->method('getNames')->will($this->returnValue(['name'])); + $modules = ['some_module', 'other_module', 'another_module', 'current_module']; + $this->request->expects($this->any()) + ->method('getControllerModule') + ->willReturn('current_module'); + $this->moduleList->expects($this->once())->method('getNames')->will($this->returnValue($modules)); $moduleData = [ 'module original' => 'module translated', 'module theme' => 'module-theme original translated', @@ -167,11 +200,6 @@ public function testLoadData($area, $forceReload, $cachedData) ) ); - // _loadThemeTranslation() - $this->viewFileSystem->expects($this->any()) - ->method('getLocaleFileName') - ->will($this->returnValue('/theme.csv')); - // _loadPackTranslation $packData = [ 'pack original' => 'pack translated', @@ -180,6 +208,11 @@ public function testLoadData($area, $forceReload, $cachedData) ]; $this->packDictionary->expects($this->once())->method('getDictionary')->will($this->returnValue($packData)); + // _loadThemeTranslation() + $this->viewFileSystem->expects($this->any()) + ->method('getLocaleFileName') + ->will($this->returnValue('/theme.csv')); + // _loadDbTranslation() $dbData = [ 'db original' => 'db translated', @@ -187,9 +220,7 @@ public function testLoadData($area, $forceReload, $cachedData) ]; $this->resource->expects($this->any())->method('getTranslationArray')->will($this->returnValue($dbData)); - if (!$forceReload) { - $this->cache->expects($this->exactly(1))->method('save'); - } + $this->cache->expects($this->exactly($forceReload ? 0 : 1))->method('save'); $this->translate->loadData($area, $forceReload); @@ -207,20 +238,13 @@ public function testLoadData($area, $forceReload, $cachedData) public function dataProviderForTestLoadData() { - $cachedData = ['cached 1' => 'translated 1', 'cached 2' => 'translated 2']; return [ - ['adminhtml', true, false], - ['adminhtml', true, $cachedData], - ['adminhtml', false, $cachedData], - ['adminhtml', false, false], - ['frontend', true, false], - ['frontend', true, $cachedData], - ['frontend', false, $cachedData], - ['frontend', false, false], - [null, true, false], - [null, true, $cachedData], - [null, false, $cachedData], - [null, false, false] + ['adminhtml', true], + ['adminhtml', false], + ['frontend', true], + ['frontend', false], + [null, true], + [null, false] ]; } @@ -309,7 +333,14 @@ protected function expectsSetConfig($themeId, $localeCode = 'en_US') ] ) ); - $designTheme = new \Magento\Framework\DataObject(['id' => $themeId]); + $designTheme = $this->getMockBuilder(\Magento\Theme\Model\Theme::class) + ->disableOriginalConstructor() + ->getMock(); + + $designTheme->expects($this->once()) + ->method('getThemePath') + ->willReturn($themeId); + $this->viewDesign->expects($this->any())->method('getDesignTheme')->will($this->returnValue($designTheme)); } } diff --git a/lib/internal/Magento/Framework/Translate.php b/lib/internal/Magento/Framework/Translate.php index 9ce3925925e1e..3dc74175c8770 100644 --- a/lib/internal/Magento/Framework/Translate.php +++ b/lib/internal/Magento/Framework/Translate.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Framework; use Magento\Framework\App\Filesystem\DirectoryList; @@ -15,6 +16,12 @@ */ class Translate implements \Magento\Framework\TranslateInterface { + const CONFIG_AREA_KEY = 'area'; + const CONFIG_LOCALE_KEY = 'locale'; + const CONFIG_SCOPE_KEY = 'scope'; + const CONFIG_THEME_KEY = 'theme'; + const CONFIG_MODULE_KEY = 'module'; + /** * Locale code * @@ -158,6 +165,14 @@ public function __construct( $this->directory = $filesystem->getDirectoryRead(DirectoryList::ROOT); $this->_csvParser = $csvParser; $this->packDictionary = $packDictionary; + + $this->_config = [ + self::CONFIG_AREA_KEY => null, + self::CONFIG_LOCALE_KEY => null, + self::CONFIG_SCOPE_KEY => null, + self::CONFIG_THEME_KEY => null, + self::CONFIG_MODULE_KEY => null + ]; } /** @@ -166,20 +181,26 @@ public function __construct( * @param string|null $area * @param bool $forceReload * @return $this + * @throws Exception\LocalizedException */ public function loadData($area = null, $forceReload = false) { + $this->_data = []; + if ($area === null) { + $area = $this->_appState->getAreaCode(); + } $this->setConfig( - ['area' => isset($area) ? $area : $this->_appState->getAreaCode()] + [ + self::CONFIG_AREA_KEY => $area, + ] ); if (!$forceReload) { - $this->_data = $this->_loadCache(); - if ($this->_data !== false) { + if (false !== $data = $this->_loadCache()) { + $this->_data = $data; return $this; } } - $this->_data = []; $this->_loadModuleTranslation(); $this->_loadPackTranslation(); @@ -202,17 +223,17 @@ public function loadData($area = null, $forceReload = false) protected function setConfig($config) { $this->_config = $config; - if (!isset($this->_config['locale'])) { - $this->_config['locale'] = $this->getLocale(); + if (!isset($this->_config[self::CONFIG_LOCALE_KEY])) { + $this->_config[self::CONFIG_LOCALE_KEY] = $this->getLocale(); } - if (!isset($this->_config['scope'])) { - $this->_config['scope'] = $this->getScope(); + if (!isset($this->_config[self::CONFIG_SCOPE_KEY])) { + $this->_config[self::CONFIG_SCOPE_KEY] = $this->getScope(); } - if (!isset($this->_config['theme'])) { - $this->_config['theme'] = $this->_viewDesign->getDesignTheme()->getId(); + if (!isset($this->_config[self::CONFIG_THEME_KEY])) { + $this->_config[self::CONFIG_THEME_KEY] = $this->_viewDesign->getDesignTheme()->getThemePath(); } - if (!isset($this->_config['module'])) { - $this->_config['module'] = $this->getControllerModuleName(); + if (!isset($this->_config[self::CONFIG_MODULE_KEY])) { + $this->_config[self::CONFIG_MODULE_KEY] = $this->getControllerModuleName(); } return $this; } @@ -224,7 +245,7 @@ protected function setConfig($config) */ protected function getScope() { - $scope = ($this->getConfig('area') == 'adminhtml') ? 'admin' : null; + $scope = ($this->getConfig(self::CONFIG_AREA_KEY) === 'adminhtml') ? 'admin' : null; return $this->_scopeResolver->getScope($scope)->getCode(); } @@ -295,7 +316,7 @@ protected function _addData($data) } $key = str_replace('""', '"', $key); - $value = str_replace('""', '"', $value); + $value = str_replace('""', '"', $value); $this->_data[$key] = $value; } @@ -309,10 +330,6 @@ protected function _addData($data) */ protected function _loadThemeTranslation() { - if (!$this->_config['theme']) { - return $this; - } - $file = $this->_getThemeTranslationFile($this->getLocale()); if ($file) { $this->_addData($this->_getFileData($file)); @@ -339,7 +356,7 @@ protected function _loadPackTranslation() protected function _loadDbTranslation() { $data = $this->_translateResource->getTranslationArray(null, $this->getLocale()); - $this->_addData(array_map("htmlspecialchars_decode", $data)); + $this->_addData(array_map('htmlspecialchars_decode', $data)); return $this; } @@ -367,7 +384,7 @@ protected function _getThemeTranslationFile($locale) { return $this->_viewFileSystem->getLocaleFileName( 'i18n' . '/' . $locale . '.csv', - ['area' => $this->getConfig('area')] + $this->_config ); } @@ -422,8 +439,7 @@ public function getLocale() public function setLocale($locale) { $this->_localeCode = $locale; - $this->_config['locale'] = $locale; - $this->getCacheId(true); + $this->_config[self::CONFIG_LOCALE_KEY] = $locale; return $this; } @@ -434,11 +450,11 @@ public function setLocale($locale) */ public function getTheme() { - $theme = $this->request->getParam('theme'); + $theme = $this->request->getParam(self::CONFIG_THEME_KEY); if (empty($theme)) { - return 'theme' . $this->getConfig('theme'); + return self::CONFIG_THEME_KEY . $this->getConfig(self::CONFIG_THEME_KEY); } - return 'theme' . $theme['theme_title']; + return self::CONFIG_THEME_KEY . $theme['theme_title']; } /** @@ -446,28 +462,19 @@ public function getTheme() * * @param bool $forceReload * @return string + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ protected function getCacheId($forceReload = false) { - if ($this->_cacheId === null || $forceReload) { - $this->_cacheId = \Magento\Framework\App\Cache\Type\Translate::TYPE_IDENTIFIER; - if (isset($this->_config['locale'])) { - $this->_cacheId .= '_' . $this->_config['locale']; - } - if (isset($this->_config['area'])) { - $this->_cacheId .= '_' . $this->_config['area']; - } - if (isset($this->_config['scope'])) { - $this->_cacheId .= '_' . $this->_config['scope']; - } - if (isset($this->_config['theme'])) { - $this->_cacheId .= '_' . $this->_config['theme']; - } - if (isset($this->_config['module'])) { - $this->_cacheId .= '_' . $this->_config['module']; - } - } - return $this->_cacheId; + $_cacheId = \Magento\Framework\App\Cache\Type\Translate::TYPE_IDENTIFIER; + $_cacheId .= '_' . $this->_config[self::CONFIG_LOCALE_KEY]; + $_cacheId .= '_' . $this->_config[self::CONFIG_AREA_KEY]; + $_cacheId .= '_' . $this->_config[self::CONFIG_SCOPE_KEY]; + $_cacheId .= '_' . $this->_config[self::CONFIG_THEME_KEY]; + $_cacheId .= '_' . $this->_config[self::CONFIG_MODULE_KEY]; + + $this->_cacheId = $_cacheId; + return $_cacheId; } /** @@ -491,7 +498,7 @@ protected function _loadCache() */ protected function _saveCache() { - $this->_cache->save($this->getSerializer()->serialize($this->getData()), $this->getCacheId(true), [], false); + $this->_cache->save($this->getSerializer()->serialize($this->getData()), $this->getCacheId(), [], false); return $this; } From 52dff0b47ef921b1f08fda4015bdd042555e4b23 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Fri, 10 Nov 2017 12:36:57 +0200 Subject: [PATCH 180/653] 8022: Uncaught Error: Call to a member function addItem() on array in app/code/Magento/Sales/Model/Order/Shipment.php(backport to 2.2) --- .../Magento/Sales/Model/Order/Shipment.php | 18 +++++------ .../ResourceModel/Order/Shipment/Relation.php | 4 +-- .../Order/Shipment/RelationTest.php | 5 +-- .../Sales/Model/Order/ShipmentTest.php | 32 +++++++++++++++++++ 4 files changed, 46 insertions(+), 13 deletions(-) diff --git a/app/code/Magento/Sales/Model/Order/Shipment.php b/app/code/Magento/Sales/Model/Order/Shipment.php index cb26fb611f219..64e20d5a69041 100644 --- a/app/code/Magento/Sales/Model/Order/Shipment.php +++ b/app/code/Magento/Sales/Model/Order/Shipment.php @@ -93,6 +93,11 @@ class Shipment extends AbstractModel implements EntityInterface, ShipmentInterfa */ protected $orderRepository; + /** + * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\Collection|null + */ + private $tracksCollection = null; + /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry @@ -331,16 +336,11 @@ public function addItem(\Magento\Sales\Model\Order\Shipment\Item $item) */ public function getTracksCollection() { - if (!$this->hasData(ShipmentInterface::TRACKS)) { - $this->setTracks($this->_trackCollectionFactory->create()->setShipmentFilter($this->getId())); - - if ($this->getId()) { - foreach ($this->getTracks() as $track) { - $track->setShipment($this); - } - } + if ($this->tracksCollection === null) { + $this->tracksCollection = $this->_trackCollectionFactory->create()->setShipmentFilter($this->getId()); } - return $this->getTracks(); + + return $this->tracksCollection; } /** diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php index 5851b2d936139..9c8671d02c578 100644 --- a/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php +++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php @@ -62,8 +62,8 @@ public function processRelation(\Magento\Framework\Model\AbstractModel $object) $this->shipmentItemResource->save($item); } } - if (null !== $object->getTracks()) { - foreach ($object->getTracks() as $track) { + if (null !== $object->getTracksCollection()) { + foreach ($object->getTracksCollection() as $track) { $track->setParentId($object->getId()); $this->shipmentTrackResource->save($track); } diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/RelationTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/RelationTest.php index 787e6f8e065d2..a7a615fb0f508 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/RelationTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/RelationTest.php @@ -86,7 +86,8 @@ protected function setUp() 'getId', 'getItems', 'getTracks', - 'getComments' + 'getComments', + 'getTracksCollection', ] ) ->getMock(); @@ -123,7 +124,7 @@ public function testProcessRelations() ->method('getComments') ->willReturn([$this->commentMock]); $this->shipmentMock->expects($this->exactly(2)) - ->method('getTracks') + ->method('getTracksCollection') ->willReturn([$this->trackMock]); $this->itemMock->expects($this->once()) ->method('setParentId') diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/ShipmentTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/ShipmentTest.php index bfe839c0dfe9d..46820d1440ca6 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/ShipmentTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/ShipmentTest.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Sales\Model\Order; /** @@ -47,4 +48,35 @@ public function testPackages() $shipment->load($shipment->getId()); $this->assertEquals($packages, $shipment->getPackages()); } + + /** + * Check that getTracksCollection() always return collection instance. + * + * @magentoDataFixture Magento/Sales/_files/order.php + */ + public function testAddTrack() + { + $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + + $order = $objectManager->create(\Magento\Sales\Model\Order::class); + $order->loadByIncrementId('100000001'); + + /** @var \Magento\Sales\Model\Order\Shipment $shipment */ + $shipment = $objectManager->create(\Magento\Sales\Model\Order\Shipment::class); + $shipment->setOrder($order); + + $shipment->addItem($objectManager->create(\Magento\Sales\Model\Order\Shipment\Item::class)); + $shipment->save(); + + /** @var $track \Magento\Sales\Model\Order\Shipment\Track */ + $track = $objectManager->get(\Magento\Sales\Model\Order\Shipment\Track::class); + $track->setNumber('Test Number')->setTitle('Test Title')->setCarrierCode('Test CODE'); + + $this->assertEmpty($shipment->getTracks()); + $shipment->addTrack($track)->save(); + + //to empty cache + $shipment->setTracks(null); + $this->assertNotEmpty($shipment->getTracks()); + } } From 19fe0dfa6fbacc4ba30a2b33741def32dfb79275 Mon Sep 17 00:00:00 2001 From: David Manners <dmanners87@gmail.com> Date: Fri, 10 Nov 2017 10:54:53 +0000 Subject: [PATCH 181/653] Fix the Newsletter subscriber unit test so that it mocks the store manager correctly --- .../Magento/Newsletter/Test/Unit/Model/SubscriberTest.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/code/Magento/Newsletter/Test/Unit/Model/SubscriberTest.php b/app/code/Magento/Newsletter/Test/Unit/Model/SubscriberTest.php index 7716f4744a922..5a4032dc4dffd 100644 --- a/app/code/Magento/Newsletter/Test/Unit/Model/SubscriberTest.php +++ b/app/code/Magento/Newsletter/Test/Unit/Model/SubscriberTest.php @@ -187,6 +187,12 @@ public function testUpdateSubscription() $customerDataMock->expects($this->once())->method('getStoreId')->willReturn('store_id'); $customerDataMock->expects($this->once())->method('getEmail')->willReturn('email'); + $storeModel = $this->getMockBuilder(\Magento\Store\Model\Store::class) + ->disableOriginalConstructor() + ->setMethods(['getId']) + ->getMock(); + $this->storeManager->expects($this->any())->method('getStore')->willReturn($storeModel); + $this->assertEquals($this->subscriber, $this->subscriber->updateSubscription($customerId)); } From 2e2f66b7ce51aa17673c4fc9c4558fbf5911e35a Mon Sep 17 00:00:00 2001 From: David Manners <dmanners87@gmail.com> Date: Fri, 10 Nov 2017 11:13:52 +0000 Subject: [PATCH 182/653] Update the store id attached to the second customer when dealing with new newsletter subscription mapping --- .../testsuite/Magento/Newsletter/_files/subscribers.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/integration/testsuite/Magento/Newsletter/_files/subscribers.php b/dev/tests/integration/testsuite/Magento/Newsletter/_files/subscribers.php index 152d65681c54f..84e72979cc4c5 100644 --- a/dev/tests/integration/testsuite/Magento/Newsletter/_files/subscribers.php +++ b/dev/tests/integration/testsuite/Magento/Newsletter/_files/subscribers.php @@ -28,7 +28,7 @@ $subscriber = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() ->create(\Magento\Newsletter\Model\Subscriber::class); -$subscriber->setStoreId($otherStore) +$subscriber->setStoreId($currentStore) // Intentionally setting ID to 0 instead of 2 to test fallback mechanism in Subscriber model ->setCustomerId(0) ->setSubscriberEmail('customer_two@example.com') From 18b0e57f92922496439346c588b340ea2ec6f986 Mon Sep 17 00:00:00 2001 From: Andrii Dimov <adimov@magento.com> Date: Fri, 10 Nov 2017 12:12:34 +0200 Subject: [PATCH 183/653] MAGETWO-80568: Prepare codebase for 2.2.2 --- app/code/Magento/Analytics/composer.json | 2 +- .../Magento/CatalogAnalytics/composer.json | 2 +- .../Magento/CustomerAnalytics/composer.json | 2 +- app/code/Magento/QuoteAnalytics/composer.json | 2 +- .../Magento/ReviewAnalytics/composer.json | 2 +- app/code/Magento/SalesAnalytics/composer.json | 2 +- .../Magento/WishlistAnalytics/composer.json | 2 +- composer.json | 16 +- composer.lock | 235 +++++++++--------- 9 files changed, 132 insertions(+), 133 deletions(-) diff --git a/app/code/Magento/Analytics/composer.json b/app/code/Magento/Analytics/composer.json index edc3443e487b6..b17bb10cb4112 100644 --- a/app/code/Magento/Analytics/composer.json +++ b/app/code/Magento/Analytics/composer.json @@ -10,7 +10,7 @@ "magento/framework": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.2.0", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogAnalytics/composer.json b/app/code/Magento/CatalogAnalytics/composer.json index 6cda52197f80a..7c622f6fbfa07 100644 --- a/app/code/Magento/CatalogAnalytics/composer.json +++ b/app/code/Magento/CatalogAnalytics/composer.json @@ -7,7 +7,7 @@ "magento/module-catalog": "101.1.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.2.0", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CustomerAnalytics/composer.json b/app/code/Magento/CustomerAnalytics/composer.json index 36e7492decc50..d34d6ba751e2a 100644 --- a/app/code/Magento/CustomerAnalytics/composer.json +++ b/app/code/Magento/CustomerAnalytics/composer.json @@ -7,7 +7,7 @@ "magento/module-customer": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.2.0", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/QuoteAnalytics/composer.json b/app/code/Magento/QuoteAnalytics/composer.json index 7f38e489ab0b0..abbb0ce7a042b 100644 --- a/app/code/Magento/QuoteAnalytics/composer.json +++ b/app/code/Magento/QuoteAnalytics/composer.json @@ -7,7 +7,7 @@ "magento/module-quote": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.2.0", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ReviewAnalytics/composer.json b/app/code/Magento/ReviewAnalytics/composer.json index b31c420e181bf..965b6294db16a 100644 --- a/app/code/Magento/ReviewAnalytics/composer.json +++ b/app/code/Magento/ReviewAnalytics/composer.json @@ -7,7 +7,7 @@ "magento/module-review": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.2.0", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SalesAnalytics/composer.json b/app/code/Magento/SalesAnalytics/composer.json index 7c9270a503b0d..344971d7056cf 100644 --- a/app/code/Magento/SalesAnalytics/composer.json +++ b/app/code/Magento/SalesAnalytics/composer.json @@ -7,7 +7,7 @@ "magento/module-sales": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.2.0", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/WishlistAnalytics/composer.json b/app/code/Magento/WishlistAnalytics/composer.json index 20f414c00c320..11bd71276427c 100644 --- a/app/code/Magento/WishlistAnalytics/composer.json +++ b/app/code/Magento/WishlistAnalytics/composer.json @@ -7,7 +7,7 @@ "magento/module-wishlist": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0-dev", + "version": "100.2.0", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/composer.json b/composer.json index 5a237eb118d7d..2adfe8a789242 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "magento/magento2ce", "description": "Magento 2 (Open Source)", "type": "project", - "version": "2.2.1-dev", + "version": "2.2.2-dev", "license": [ "OSL-3.0", "AFL-3.0" @@ -85,7 +85,7 @@ "magento/module-marketplace": "100.2.0", "magento/module-admin-notification": "100.2.0", "magento/module-advanced-pricing-import-export": "100.2.1", - "magento/module-analytics": "100.2.0-dev", + "magento/module-analytics": "100.2.0", "magento/module-authorization": "100.2.0", "magento/module-authorizenet": "100.2.0", "magento/module-backend": "100.2.1", @@ -96,7 +96,7 @@ "magento/module-cache-invalidate": "100.2.0", "magento/module-captcha": "100.2.0", "magento/module-catalog": "102.0.1", - "magento/module-catalog-analytics": "100.2.0-dev", + "magento/module-catalog-analytics": "100.2.0", "magento/module-catalog-import-export": "100.2.1", "magento/module-catalog-inventory": "100.2.1", "magento/module-catalog-rule": "101.0.1", @@ -117,7 +117,7 @@ "magento/module-cron": "100.2.0", "magento/module-currency-symbol": "100.2.0", "magento/module-customer": "101.0.1", - "magento/module-customer-analytics": "100.2.0-dev", + "magento/module-customer-analytics": "100.2.0", "magento/module-customer-import-export": "100.2.0", "magento/module-deploy": "100.2.1", "magento/module-developer": "100.2.1", @@ -154,17 +154,17 @@ "magento/module-product-alert": "100.2.0", "magento/module-product-video": "100.2.0", "magento/module-quote": "101.0.1", - "magento/module-quote-analytics": "100.2.0-dev", + "magento/module-quote-analytics": "100.2.0", "magento/module-release-notification": "100.2.0", "magento/module-reports": "100.2.1", "magento/module-require-js": "100.2.0", "magento/module-review": "100.2.1", - "magento/module-review-analytics": "100.2.0-dev", + "magento/module-review-analytics": "100.2.0", "magento/module-robots": "100.2.0", "magento/module-rss": "100.2.0", "magento/module-rule": "100.2.0", "magento/module-sales": "101.0.1", - "magento/module-sales-analytics": "100.2.0-dev", + "magento/module-sales-analytics": "100.2.0", "magento/module-sales-inventory": "100.2.0", "magento/module-sales-rule": "101.0.0", "magento/module-sales-sequence": "100.2.0", @@ -196,7 +196,7 @@ "magento/module-weee": "100.2.0", "magento/module-widget": "101.0.0", "magento/module-wishlist": "101.0.0", - "magento/module-wishlist-analytics": "100.2.0-dev", + "magento/module-wishlist-analytics": "100.2.0", "magento/theme-adminhtml-backend": "100.2.0", "magento/theme-frontend-blank": "100.2.0", "magento/theme-frontend-luma": "100.2.1", diff --git a/composer.lock b/composer.lock index 32b3598bf0034..74465e5ce4cc7 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "057bdfbdba89c00c7240cddfa78527c4", - "content-hash": "738943bccb2a2949bdf94f661823f6b4", + "content-hash": "23a00df0db69f640bf698d3af413863f", "packages": [ { "name": "braintree/braintree_php", @@ -52,7 +51,7 @@ } ], "description": "Braintree PHP Client Library", - "time": "2017-02-16 19:59:04" + "time": "2017-02-16T19:59:04+00:00" }, { "name": "colinmollenhour/cache-backend-file", @@ -88,7 +87,7 @@ ], "description": "The stock Zend_Cache_Backend_File backend has extremely poor performance for cleaning by tags making it become unusable as the number of cached items increases. This backend makes many changes resulting in a huge performance boost, especially for tag cleaning.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_File", - "time": "2016-05-02 16:24:47" + "time": "2016-05-02T16:24:47+00:00" }, { "name": "colinmollenhour/cache-backend-redis", @@ -124,7 +123,7 @@ ], "description": "Zend_Cache backend using Redis with full support for tags.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis", - "time": "2017-03-25 04:54:24" + "time": "2017-03-25T04:54:24+00:00" }, { "name": "colinmollenhour/credis", @@ -164,7 +163,7 @@ ], "description": "Credis is a lightweight interface to the Redis key-value store which wraps the phpredis library when available for better performance.", "homepage": "https://github.com/colinmollenhour/credis", - "time": "2017-07-05 15:32:38" + "time": "2017-07-05T15:32:38+00:00" }, { "name": "colinmollenhour/php-redis-session-abstract", @@ -201,7 +200,7 @@ ], "description": "A Redis-based session handler with optimistic locking", "homepage": "https://github.com/colinmollenhour/php-redis-session-abstract", - "time": "2017-03-22 16:13:03" + "time": "2017-03-22T16:13:03+00:00" }, { "name": "composer/ca-bundle", @@ -260,7 +259,7 @@ "ssl", "tls" ], - "time": "2017-09-11 07:24:36" + "time": "2017-09-11T07:24:36+00:00" }, { "name": "composer/composer", @@ -337,7 +336,7 @@ "dependency", "package" ], - "time": "2017-03-10 08:29:45" + "time": "2017-03-10T08:29:45+00:00" }, { "name": "composer/semver", @@ -399,7 +398,7 @@ "validation", "versioning" ], - "time": "2016-08-30 16:08:34" + "time": "2016-08-30T16:08:34+00:00" }, { "name": "composer/spdx-licenses", @@ -460,7 +459,7 @@ "spdx", "validator" ], - "time": "2017-04-03 19:08:52" + "time": "2017-04-03T19:08:52+00:00" }, { "name": "container-interop/container-interop", @@ -491,7 +490,7 @@ ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", "homepage": "https://github.com/container-interop/container-interop", - "time": "2017-02-14 19:40:03" + "time": "2017-02-14T19:40:03+00:00" }, { "name": "justinrainbow/json-schema", @@ -557,7 +556,7 @@ "json", "schema" ], - "time": "2017-10-21 13:15:38" + "time": "2017-10-21T13:15:38+00:00" }, { "name": "league/climate", @@ -606,7 +605,7 @@ "php", "terminal" ], - "time": "2015-01-18 14:31:58" + "time": "2015-01-18T14:31:58+00:00" }, { "name": "magento/composer", @@ -642,7 +641,7 @@ "AFL-3.0" ], "description": "Magento composer library helps to instantiate Composer application and run composer commands.", - "time": "2017-04-24 09:57:02" + "time": "2017-04-24T09:57:02+00:00" }, { "name": "magento/magento-composer-installer", @@ -721,7 +720,7 @@ "composer-installer", "magento" ], - "time": "2016-10-06 16:05:07" + "time": "2016-10-06T16:05:07+00:00" }, { "name": "magento/zendframework1", @@ -768,7 +767,7 @@ "ZF1", "framework" ], - "time": "2017-06-21 14:56:23" + "time": "2017-06-21T14:56:23+00:00" }, { "name": "monolog/monolog", @@ -846,7 +845,7 @@ "logging", "psr-3" ], - "time": "2017-06-19 01:22:40" + "time": "2017-06-19T01:22:40+00:00" }, { "name": "oyejorge/less.php", @@ -908,7 +907,7 @@ "php", "stylesheet" ], - "time": "2017-03-28 22:19:25" + "time": "2017-03-28T22:19:25+00:00" }, { "name": "paragonie/random_compat", @@ -956,7 +955,7 @@ "pseudorandom", "random" ], - "time": "2017-09-27 21:40:39" + "time": "2017-09-27T21:40:39+00:00" }, { "name": "pelago/emogrifier", @@ -1012,7 +1011,7 @@ ], "description": "Converts CSS styles into inline style attributes in your HTML code", "homepage": "http://www.pelagodesign.com/sidecar/emogrifier/", - "time": "2015-05-15 11:37:51" + "time": "2015-05-15T11:37:51+00:00" }, { "name": "phpseclib/phpseclib", @@ -1104,7 +1103,7 @@ "x.509", "x509" ], - "time": "2017-10-23 05:04:54" + "time": "2017-10-23T05:04:54+00:00" }, { "name": "psr/container", @@ -1153,7 +1152,7 @@ "container-interop", "psr" ], - "time": "2017-02-14 16:28:37" + "time": "2017-02-14T16:28:37+00:00" }, { "name": "psr/log", @@ -1200,7 +1199,7 @@ "psr", "psr-3" ], - "time": "2016-10-10 12:19:37" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "ramsey/uuid", @@ -1282,7 +1281,7 @@ "identifier", "uuid" ], - "time": "2017-03-26 20:37:53" + "time": "2017-03-26T20:37:53+00:00" }, { "name": "seld/cli-prompt", @@ -1330,7 +1329,7 @@ "input", "prompt" ], - "time": "2017-03-18 11:32:45" + "time": "2017-03-18T11:32:45+00:00" }, { "name": "seld/jsonlint", @@ -1379,7 +1378,7 @@ "parser", "validator" ], - "time": "2017-06-18 15:11:04" + "time": "2017-06-18T15:11:04+00:00" }, { "name": "seld/phar-utils", @@ -1423,7 +1422,7 @@ "keywords": [ "phra" ], - "time": "2015-10-13 18:44:15" + "time": "2015-10-13T18:44:15+00:00" }, { "name": "sjparkinson/static-review", @@ -1476,7 +1475,7 @@ } ], "description": "An extendable framework for version control hooks.", - "time": "2014-09-22 08:40:36" + "time": "2014-09-22T08:40:36+00:00" }, { "name": "symfony/console", @@ -1537,7 +1536,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-10-01 21:00:16" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "symfony/debug", @@ -1594,7 +1593,7 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-07-30 07:22:48" + "time": "2016-07-30T07:22:48+00:00" }, { "name": "symfony/event-dispatcher", @@ -1654,7 +1653,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-10-01 21:00:16" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "symfony/filesystem", @@ -1703,7 +1702,7 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2017-10-03 13:33:10" + "time": "2017-10-03T13:33:10+00:00" }, { "name": "symfony/finder", @@ -1752,7 +1751,7 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-10-02 06:42:24" + "time": "2017-10-02T06:42:24+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -1811,7 +1810,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/process", @@ -1860,7 +1859,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-10-01 21:00:16" + "time": "2017-10-01T21:00:16+00:00" }, { "name": "tedivm/jshrink", @@ -1906,7 +1905,7 @@ "javascript", "minifier" ], - "time": "2015-07-04 07:35:09" + "time": "2015-07-04T07:35:09+00:00" }, { "name": "tubalmartin/cssmin", @@ -1959,7 +1958,7 @@ "minify", "yui" ], - "time": "2017-05-16 13:45:26" + "time": "2017-05-16T13:45:26+00:00" }, { "name": "zendframework/zend-captcha", @@ -2016,7 +2015,7 @@ "captcha", "zf2" ], - "time": "2017-02-23 08:09:44" + "time": "2017-02-23T08:09:44+00:00" }, { "name": "zendframework/zend-code", @@ -2069,7 +2068,7 @@ "code", "zf2" ], - "time": "2016-10-24 13:23:32" + "time": "2016-10-24T13:23:32+00:00" }, { "name": "zendframework/zend-config", @@ -2125,7 +2124,7 @@ "config", "zf2" ], - "time": "2016-02-04 23:01:10" + "time": "2016-02-04T23:01:10+00:00" }, { "name": "zendframework/zend-console", @@ -2177,7 +2176,7 @@ "console", "zf2" ], - "time": "2016-02-09 17:15:12" + "time": "2016-02-09T17:15:12+00:00" }, { "name": "zendframework/zend-crypt", @@ -2227,7 +2226,7 @@ "crypt", "zf2" ], - "time": "2016-02-03 23:46:30" + "time": "2016-02-03T23:46:30+00:00" }, { "name": "zendframework/zend-db", @@ -2284,7 +2283,7 @@ "db", "zf2" ], - "time": "2016-08-09 19:28:55" + "time": "2016-08-09T19:28:55+00:00" }, { "name": "zendframework/zend-di", @@ -2331,7 +2330,7 @@ "di", "zf2" ], - "time": "2016-04-25 20:58:11" + "time": "2016-04-25T20:58:11+00:00" }, { "name": "zendframework/zend-escaper", @@ -2375,7 +2374,7 @@ "escaper", "zf2" ], - "time": "2016-06-30 19:48:38" + "time": "2016-06-30T19:48:38+00:00" }, { "name": "zendframework/zend-eventmanager", @@ -2422,7 +2421,7 @@ "eventmanager", "zf2" ], - "time": "2016-02-18 20:49:05" + "time": "2016-02-18T20:49:05+00:00" }, { "name": "zendframework/zend-filter", @@ -2482,7 +2481,7 @@ "filter", "zf2" ], - "time": "2017-05-17 20:56:17" + "time": "2017-05-17T20:56:17+00:00" }, { "name": "zendframework/zend-form", @@ -2559,7 +2558,7 @@ "form", "zf2" ], - "time": "2017-05-18 14:59:53" + "time": "2017-05-18T14:59:53+00:00" }, { "name": "zendframework/zend-http", @@ -2612,7 +2611,7 @@ "zend", "zf" ], - "time": "2017-10-13 12:06:24" + "time": "2017-10-13T12:06:24+00:00" }, { "name": "zendframework/zend-hydrator", @@ -2670,7 +2669,7 @@ "hydrator", "zf2" ], - "time": "2016-02-18 22:38:26" + "time": "2016-02-18T22:38:26+00:00" }, { "name": "zendframework/zend-i18n", @@ -2737,20 +2736,20 @@ "i18n", "zf2" ], - "time": "2017-05-17 17:00:12" + "time": "2017-05-17T17:00:12+00:00" }, { "name": "zendframework/zend-inputfilter", - "version": "2.7.4", + "version": "2.7.5", "source": { "type": "git", "url": "https://github.com/zendframework/zend-inputfilter.git", - "reference": "699ab4916e0aa73104e1f9ff068ef6d33c5f5fe4" + "reference": "02bbc6b5fc54991e43e7471e54e2173077708d7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/699ab4916e0aa73104e1f9ff068ef6d33c5f5fe4", - "reference": "699ab4916e0aa73104e1f9ff068ef6d33c5f5fe4", + "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/02bbc6b5fc54991e43e7471e54e2173077708d7b", + "reference": "02bbc6b5fc54991e43e7471e54e2173077708d7b", "shasum": "" }, "require": { @@ -2792,7 +2791,7 @@ "inputfilter", "zf2" ], - "time": "2017-05-18 14:20:56" + "time": "2017-11-07T17:08:00+00:00" }, { "name": "zendframework/zend-json", @@ -2847,7 +2846,7 @@ "json", "zf2" ], - "time": "2016-02-04 21:20:26" + "time": "2016-02-04T21:20:26+00:00" }, { "name": "zendframework/zend-loader", @@ -2891,7 +2890,7 @@ "loader", "zf2" ], - "time": "2015-06-03 14:05:47" + "time": "2015-06-03T14:05:47+00:00" }, { "name": "zendframework/zend-log", @@ -2962,7 +2961,7 @@ "logging", "zf2" ], - "time": "2017-05-17 16:03:26" + "time": "2017-05-17T16:03:26+00:00" }, { "name": "zendframework/zend-math", @@ -3012,7 +3011,7 @@ "math", "zf2" ], - "time": "2016-04-07 16:29:53" + "time": "2016-04-07T16:29:53+00:00" }, { "name": "zendframework/zend-modulemanager", @@ -3070,7 +3069,7 @@ "modulemanager", "zf2" ], - "time": "2017-11-01 18:30:41" + "time": "2017-11-01T18:30:41+00:00" }, { "name": "zendframework/zend-mvc", @@ -3157,7 +3156,7 @@ "mvc", "zf2" ], - "time": "2016-02-23 15:24:59" + "time": "2016-02-23T15:24:59+00:00" }, { "name": "zendframework/zend-serializer", @@ -3214,7 +3213,7 @@ "serializer", "zf2" ], - "time": "2016-06-21 17:01:55" + "time": "2016-06-21T17:01:55+00:00" }, { "name": "zendframework/zend-server", @@ -3260,7 +3259,7 @@ "server", "zf2" ], - "time": "2016-06-20 22:27:55" + "time": "2016-06-20T22:27:55+00:00" }, { "name": "zendframework/zend-servicemanager", @@ -3312,7 +3311,7 @@ "servicemanager", "zf2" ], - "time": "2016-12-19 19:14:29" + "time": "2016-12-19T19:14:29+00:00" }, { "name": "zendframework/zend-session", @@ -3378,7 +3377,7 @@ "session", "zf2" ], - "time": "2017-06-19 21:31:39" + "time": "2017-06-19T21:31:39+00:00" }, { "name": "zendframework/zend-soap", @@ -3430,7 +3429,7 @@ "soap", "zf2" ], - "time": "2016-04-21 16:06:27" + "time": "2016-04-21T16:06:27+00:00" }, { "name": "zendframework/zend-stdlib", @@ -3489,7 +3488,7 @@ "stdlib", "zf2" ], - "time": "2016-04-12 21:17:31" + "time": "2016-04-12T21:17:31+00:00" }, { "name": "zendframework/zend-text", @@ -3536,7 +3535,7 @@ "text", "zf2" ], - "time": "2016-02-08 19:03:52" + "time": "2016-02-08T19:03:52+00:00" }, { "name": "zendframework/zend-uri", @@ -3583,7 +3582,7 @@ "uri", "zf2" ], - "time": "2016-02-17 22:38:51" + "time": "2016-02-17T22:38:51+00:00" }, { "name": "zendframework/zend-validator", @@ -3654,7 +3653,7 @@ "validator", "zf2" ], - "time": "2017-08-22 14:19:23" + "time": "2017-08-22T14:19:23+00:00" }, { "name": "zendframework/zend-view", @@ -3741,7 +3740,7 @@ "view", "zf2" ], - "time": "2017-03-21 15:05:56" + "time": "2017-03-21T15:05:56+00:00" } ], "packages-dev": [ @@ -3797,7 +3796,7 @@ "constructor", "instantiate" ], - "time": "2015-06-14 21:17:01" + "time": "2015-06-14T21:17:01+00:00" }, { "name": "friendsofphp/php-cs-fixer", @@ -3867,7 +3866,7 @@ } ], "description": "A tool to automatically fix PHP code style", - "time": "2017-03-31 12:59:38" + "time": "2017-03-31T12:59:38+00:00" }, { "name": "ircmaxell/password-compat", @@ -3909,7 +3908,7 @@ "hashing", "password" ], - "time": "2014-11-20 16:49:30" + "time": "2014-11-20T16:49:30+00:00" }, { "name": "lusitanian/oauth", @@ -3976,7 +3975,7 @@ "oauth", "security" ], - "time": "2016-07-12 22:15:40" + "time": "2016-07-12T22:15:40+00:00" }, { "name": "myclabs/deep-copy", @@ -4021,7 +4020,7 @@ "object", "object graph" ], - "time": "2017-10-19 19:58:43" + "time": "2017-10-19T19:58:43+00:00" }, { "name": "pdepend/pdepend", @@ -4061,7 +4060,7 @@ "BSD-3-Clause" ], "description": "Official version of pdepend to be handled with Composer", - "time": "2017-01-19 14:23:36" + "time": "2017-01-19T14:23:36+00:00" }, { "name": "phar-io/manifest", @@ -4116,7 +4115,7 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05 18:14:27" + "time": "2017-03-05T18:14:27+00:00" }, { "name": "phar-io/version", @@ -4163,7 +4162,7 @@ } ], "description": "Library for handling version information and constraints", - "time": "2017-03-05 17:38:23" + "time": "2017-03-05T17:38:23+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -4217,7 +4216,7 @@ "reflection", "static analysis" ], - "time": "2017-09-11 18:02:19" + "time": "2017-09-11T18:02:19+00:00" }, { "name": "phpdocumentor/reflection-docblock", @@ -4262,7 +4261,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-08-30 18:51:59" + "time": "2017-08-30T18:51:59+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -4309,7 +4308,7 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14 14:27:02" + "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpmd/phpmd", @@ -4375,7 +4374,7 @@ "phpmd", "pmd" ], - "time": "2017-01-20 14:41:10" + "time": "2017-01-20T14:41:10+00:00" }, { "name": "phpspec/prophecy", @@ -4438,7 +4437,7 @@ "spy", "stub" ], - "time": "2017-09-04 11:05:03" + "time": "2017-09-04T11:05:03+00:00" }, { "name": "phpunit/php-code-coverage", @@ -4502,7 +4501,7 @@ "testing", "xunit" ], - "time": "2017-11-03 13:47:33" + "time": "2017-11-03T13:47:33+00:00" }, { "name": "phpunit/php-file-iterator", @@ -4549,7 +4548,7 @@ "filesystem", "iterator" ], - "time": "2016-10-03 07:40:28" + "time": "2016-10-03T07:40:28+00:00" }, { "name": "phpunit/php-text-template", @@ -4590,7 +4589,7 @@ "keywords": [ "template" ], - "time": "2015-06-21 13:50:34" + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", @@ -4639,7 +4638,7 @@ "keywords": [ "timer" ], - "time": "2017-02-26 11:10:40" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", @@ -4688,7 +4687,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-08-20 05:47:52" + "time": "2017-08-20T05:47:52+00:00" }, { "name": "phpunit/phpunit", @@ -4772,7 +4771,7 @@ "testing", "xunit" ], - "time": "2017-08-03 13:59:28" + "time": "2017-08-03T13:59:28+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -4831,7 +4830,7 @@ "mock", "xunit" ], - "time": "2017-08-03 14:08:16" + "time": "2017-08-03T14:08:16+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -4876,7 +4875,7 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04 06:30:41" + "time": "2017-03-04T06:30:41+00:00" }, { "name": "sebastian/comparator", @@ -4940,7 +4939,7 @@ "compare", "equality" ], - "time": "2017-03-03 06:26:08" + "time": "2017-03-03T06:26:08+00:00" }, { "name": "sebastian/diff", @@ -4992,7 +4991,7 @@ "keywords": [ "diff" ], - "time": "2017-05-22 07:24:03" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", @@ -5042,7 +5041,7 @@ "environment", "hhvm" ], - "time": "2017-07-01 08:51:00" + "time": "2017-07-01T08:51:00+00:00" }, { "name": "sebastian/exporter", @@ -5109,7 +5108,7 @@ "export", "exporter" ], - "time": "2017-04-03 13:19:02" + "time": "2017-04-03T13:19:02+00:00" }, { "name": "sebastian/finder-facade", @@ -5148,7 +5147,7 @@ ], "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", "homepage": "https://github.com/sebastianbergmann/finder-facade", - "time": "2016-02-17 07:02:23" + "time": "2016-02-17T07:02:23+00:00" }, { "name": "sebastian/global-state", @@ -5199,7 +5198,7 @@ "keywords": [ "global state" ], - "time": "2017-04-27 15:39:26" + "time": "2017-04-27T15:39:26+00:00" }, { "name": "sebastian/object-enumerator", @@ -5246,7 +5245,7 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03 12:35:26" + "time": "2017-08-03T12:35:26+00:00" }, { "name": "sebastian/object-reflector", @@ -5291,7 +5290,7 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29 09:07:27" + "time": "2017-03-29T09:07:27+00:00" }, { "name": "sebastian/phpcpd", @@ -5342,7 +5341,7 @@ ], "description": "Copy/Paste Detector (CPD) for PHP code.", "homepage": "https://github.com/sebastianbergmann/phpcpd", - "time": "2016-04-17 19:32:49" + "time": "2016-04-17T19:32:49+00:00" }, { "name": "sebastian/recursion-context", @@ -5395,7 +5394,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03 06:23:57" + "time": "2017-03-03T06:23:57+00:00" }, { "name": "sebastian/resource-operations", @@ -5437,7 +5436,7 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28 20:34:47" + "time": "2015-07-28T20:34:47+00:00" }, { "name": "sebastian/version", @@ -5480,7 +5479,7 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03 07:35:21" + "time": "2016-10-03T07:35:21+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -5531,7 +5530,7 @@ "phpcs", "standards" ], - "time": "2017-06-14 01:23:49" + "time": "2017-06-14T01:23:49+00:00" }, { "name": "symfony/config", @@ -5593,7 +5592,7 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2017-10-04 18:56:58" + "time": "2017-10-04T18:56:58+00:00" }, { "name": "symfony/dependency-injection", @@ -5663,7 +5662,7 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-10-04 17:15:30" + "time": "2017-10-04T17:15:30+00:00" }, { "name": "symfony/polyfill-php54", @@ -5721,7 +5720,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-php55", @@ -5777,7 +5776,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-php70", @@ -5836,7 +5835,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-php72", @@ -5891,7 +5890,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-xml", @@ -5939,7 +5938,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/stopwatch", @@ -5988,7 +5987,7 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2017-10-02 06:42:24" + "time": "2017-10-02T06:42:24+00:00" }, { "name": "theseer/fdomdocument", @@ -6028,7 +6027,7 @@ ], "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", "homepage": "https://github.com/theseer/fDOMDocument", - "time": "2017-06-30 11:53:12" + "time": "2017-06-30T11:53:12+00:00" }, { "name": "theseer/tokenizer", @@ -6068,7 +6067,7 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2017-04-07 12:08:54" + "time": "2017-04-07T12:08:54+00:00" }, { "name": "webmozart/assert", @@ -6118,7 +6117,7 @@ "check", "validate" ], - "time": "2016-11-23 20:04:58" + "time": "2016-11-23T20:04:58+00:00" } ], "aliases": [], From 194ba57c450a030889015cc36466d4f6cadf616a Mon Sep 17 00:00:00 2001 From: David Manners <dmanners87@gmail.com> Date: Fri, 10 Nov 2017 11:50:41 +0000 Subject: [PATCH 184/653] Setup the store id attached to the customer on the admin index save test --- .../Magento/Customer/Controller/Adminhtml/IndexTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php index 769120127329e..dca24e92f0040 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php @@ -347,6 +347,7 @@ public function testSaveActionExistingCustomerUnsubscribeNewsletter() 'email' => 'customer@example.com', 'firstname' => 'test firstname', 'lastname' => 'test lastname', + 'sendemail_store_id' => 1 ], 'subscription' => '0' ]; From e81b6fda6b9880448fb0a776c8772d8be282d4db Mon Sep 17 00:00:00 2001 From: Volodymyr Kublytskyi <vkublytskyi@magento.com> Date: Fri, 10 Nov 2017 13:59:19 +0200 Subject: [PATCH 185/653] Shipping rates should not be calculated until quote is created as this may cause issues in 3rd party modules which expects all properties filled in rate request. --- .../ShippingMethodChoose/CarrierFinder.php | 63 +++++++++++++++ .../CheapestMethodChooser.php | 15 ++-- .../ShippingRateFinder.php | 81 ------------------- .../Magento/InstantPurchase/composer.json | 1 + 4 files changed, 71 insertions(+), 89 deletions(-) create mode 100644 app/code/Magento/InstantPurchase/Model/ShippingMethodChoose/CarrierFinder.php delete mode 100644 app/code/Magento/InstantPurchase/Model/ShippingMethodChoose/ShippingRateFinder.php diff --git a/app/code/Magento/InstantPurchase/Model/ShippingMethodChoose/CarrierFinder.php b/app/code/Magento/InstantPurchase/Model/ShippingMethodChoose/CarrierFinder.php new file mode 100644 index 0000000000000..0eb2afd04140a --- /dev/null +++ b/app/code/Magento/InstantPurchase/Model/ShippingMethodChoose/CarrierFinder.php @@ -0,0 +1,63 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\InstantPurchase\Model\ShippingMethodChoose; + +use Magento\Customer\Model\Address; +use Magento\Framework\DataObject; +use Magento\Shipping\Model\Config as CarriersConfig; +use Magento\Store\Model\StoreManagerInterface; + +/** + * Collect shipping rates for customer address without packaging estiamtion. + */ +class CarrierFinder +{ + /** + * @var CarriersConfig + */ + private $carriersConfig; + + /** + * @var StoreManagerInterface + */ + private $storeManager; + + /** + * CarrierFinder constructor. + * @param CarriersConfig $carriersConfig + * @param StoreManagerInterface $storeManager + */ + public function __construct( + CarriersConfig $carriersConfig, + StoreManagerInterface $storeManager + ) { + $this->carriersConfig = $carriersConfig; + $this->storeManager = $storeManager; + } + + /** + * Finds carriers delivering to customer address + * + * @param Address $address + * @return array + */ + public function getCarriersForCustomerAddress(Address $address): array + { + $request = new DataObject([ + 'dest_country_id' => $address->getCountryId() + ]); + + $carriers = []; + foreach ($this->carriersConfig->getActiveCarriers($this->storeManager->getStore()->getId()) as $carrier) { + $checked = $carrier->checkAvailableShipCountries($request); + if (false !== $checked && null === $checked->getErrorMessage() && !empty($checked->getAllowedMethods())) { + $carriers[] = $checked; + } + } + + return $carriers; + } +} diff --git a/app/code/Magento/InstantPurchase/Model/ShippingMethodChoose/CheapestMethodChooser.php b/app/code/Magento/InstantPurchase/Model/ShippingMethodChoose/CheapestMethodChooser.php index a9abf09c8b22c..f01bde29cbc7d 100644 --- a/app/code/Magento/InstantPurchase/Model/ShippingMethodChoose/CheapestMethodChooser.php +++ b/app/code/Magento/InstantPurchase/Model/ShippingMethodChoose/CheapestMethodChooser.php @@ -6,7 +6,6 @@ namespace Magento\InstantPurchase\Model\ShippingMethodChoose; use Magento\Customer\Model\Address; -use Magento\Quote\Api\Data\ShippingMethodInterface; use Magento\Quote\Api\Data\ShippingMethodInterfaceFactory; /** @@ -20,21 +19,21 @@ class CheapestMethodChooser implements ShippingMethodChooserInterface private $shippingMethodFactory; /** - * @var ShippingRateFinder + * @var CarrierFinder */ - private $shippingRateFinder; + private $carrierFinder; /** * CheapestMethodChooser constructor. * @param ShippingMethodInterfaceFactory $shippingMethodFactory - * @param ShippingRateFinder $shippingRateFinder + * @param CarrierFinder $carrierFinder */ public function __construct( ShippingMethodInterfaceFactory $shippingMethodFactory, - ShippingRateFinder $shippingRateFinder + CarrierFinder $carrierFinder ) { $this->shippingMethodFactory = $shippingMethodFactory; - $this->shippingRateFinder = $shippingRateFinder; + $this->carrierFinder = $carrierFinder; } /** @@ -58,7 +57,7 @@ public function choose(Address $address) */ private function areShippingMethodsAvailable(Address $address): bool { - $shippingRatesForAddress = $this->shippingRateFinder->getRatesForCustomerAddress($address); - return !empty($shippingRatesForAddress); + $carriersForAddress = $this->carrierFinder->getCarriersForCustomerAddress($address); + return !empty($carriersForAddress); } } diff --git a/app/code/Magento/InstantPurchase/Model/ShippingMethodChoose/ShippingRateFinder.php b/app/code/Magento/InstantPurchase/Model/ShippingMethodChoose/ShippingRateFinder.php deleted file mode 100644 index 065f3fe946e71..0000000000000 --- a/app/code/Magento/InstantPurchase/Model/ShippingMethodChoose/ShippingRateFinder.php +++ /dev/null @@ -1,81 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\InstantPurchase\Model\ShippingMethodChoose; - -use Magento\Customer\Model\Address; -use Magento\Quote\Model\Quote\Address\RateCollectorInterfaceFactory; -use Magento\Quote\Model\Quote\Address\RateRequest; -use Magento\Quote\Model\Quote\Address\RateRequestFactory; -use Magento\Store\Model\StoreManagerInterface; - -/** - * Collect shipping rates for customer address without packaging estiamtion. - */ -class ShippingRateFinder -{ - /** - * @var RateRequestFactory - */ - private $rateRequestFactory; - /** - * @var StoreManagerInterface - */ - private $storeManager; - /** - * @var RateCollectorInterfaceFactory - */ - private $rateCollectorFactory; - - /** - * RateCheck constructor. - * @param RateRequestFactory $rateRequestFactory - * @param RateCollectorInterfaceFactory $rateCollectorFactory - * @param StoreManagerInterface $storeManager - */ - public function __construct( - RateRequestFactory $rateRequestFactory, - RateCollectorInterfaceFactory $rateCollectorFactory, - StoreManagerInterface $storeManager - ) { - $this->rateRequestFactory = $rateRequestFactory; - $this->storeManager = $storeManager; - $this->rateCollectorFactory = $rateCollectorFactory; - } - - /** - * Finds shipping rates for an address. - * - * @param Address $address - * @return array - */ - public function getRatesForCustomerAddress(Address $address): array - { - /** @var $request RateRequest */ - $request = $this->rateRequestFactory->create(); - $request->setDestCountryId($address->getCountryId()); - $request->setDestRegionId($address->getRegionId()); - $request->setDestRegionCode($address->getRegionCode()); - $request->setDestStreet($address->getStreetFull()); - $request->setDestCity($address->getCity()); - $request->setDestPostcode($address->getPostcode()); - $request->setStoreId($this->storeManager->getStore()->getId()); - $request->setWebsiteId($this->storeManager->getWebsite()->getId()); - $request->setBaseCurrency($this->storeManager->getStore()->getBaseCurrency()); - $request->setPackageCurrency($this->storeManager->getStore()->getCurrentCurrency()); - // Because of wrong compare operator in \Magento\OfflineShipping\Model\Carrier\Tablerate on line: 167 - $request->setPackageQty(-1); - - $result = $this->rateCollectorFactory->create()->collectRates($request)->getResult(); - - $shippingRates = []; - - if ($result) { - $shippingRates = $result->getAllRates(); - } - - return $shippingRates; - } -} diff --git a/app/code/Magento/InstantPurchase/composer.json b/app/code/Magento/InstantPurchase/composer.json index df13e10f55b8f..1c3b97a6beb94 100644 --- a/app/code/Magento/InstantPurchase/composer.json +++ b/app/code/Magento/InstantPurchase/composer.json @@ -13,6 +13,7 @@ "magento/module-catalog": "102.0.*", "magento/module-customer": "101.0.*", "magento/module-sales": "101.0.*", + "magento/module-shipping": "100.2.*", "magento/module-quote": "101.0.*", "magento/module-vault": "101.0.*", "magento/framework": "100.2.*" From 17aa13c9664fd55d02e535131b0d882102e61aab Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Fri, 3 Nov 2017 17:04:21 +0200 Subject: [PATCH 186/653] 11532: Duplicate Simple Product Throws Error: Undefined offset: 0 in SaveHandler.php on line 122 --- .../Catalog/Model/Category/Link/SaveHandler.php | 5 ++++- .../Unit/Model/Category/Link/SaveHandlerTest.php | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Model/Category/Link/SaveHandler.php b/app/code/Magento/Catalog/Model/Category/Link/SaveHandler.php index 29a1ef60a43de..3b66de87d0dea 100644 --- a/app/code/Magento/Catalog/Model/Category/Link/SaveHandler.php +++ b/app/code/Magento/Catalog/Model/Category/Link/SaveHandler.php @@ -119,7 +119,10 @@ private function mergeCategoryLinks($newCategoryPositions, $oldCategoryPositions if ($key === false) { $result[] = $newCategoryPosition; - } elseif ($oldCategoryPositions[$key]['position'] != $newCategoryPosition['position']) { + } elseif ( + isset($oldCategoryPositions[$key]) + && $oldCategoryPositions[$key]['position'] != $newCategoryPosition['position'] + ) { $result[] = $newCategoryPositions[$key]; unset($oldCategoryPositions[$key]); } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Category/Link/SaveHandlerTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Category/Link/SaveHandlerTest.php index 78db12be56b42..0b85ef38387fa 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Category/Link/SaveHandlerTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Category/Link/SaveHandlerTest.php @@ -197,6 +197,21 @@ public function getCategoryDataProvider() ], [], //affected category_ids ], + [ + [3], //model category_ids + [ + ['category_id' => 3, 'position' => 20], + ['category_id' => 4, 'position' => 30], + ], // dto category links + [ + ['category_id' => 3, 'position' => 10], + ], + [ + ['category_id' => 3, 'position' => 20], + ['category_id' => 4, 'position' => 30], + ], + [3, 4], //affected category_ids + ], ]; } From 87ce3215f5773b8cea882d6236aaa0e1b467a0da Mon Sep 17 00:00:00 2001 From: Volodymyr Kublytskyi <vkublytskyi@magento.com> Date: Fri, 10 Nov 2017 15:41:16 +0200 Subject: [PATCH 187/653] Fixed static tests failure (refactoring to avoid very long lines) --- .../Customer/Model/AccountManagement.php | 32 ++++++++++++------- .../Test/Unit/Model/AccountManagementTest.php | 8 ++--- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/app/code/Magento/Customer/Model/AccountManagement.php b/app/code/Magento/Customer/Model/AccountManagement.php index c81f4eed0d4b2..ba646549f6919 100644 --- a/app/code/Magento/Customer/Model/AccountManagement.php +++ b/app/code/Magento/Customer/Model/AccountManagement.php @@ -531,17 +531,8 @@ public function initiatePasswordReset($email, $template, $websiteId = null) $this->getEmailNotification()->passwordResetConfirmation($customer); break; default: - throw new InputException( - __( - 'Invalid value of "%value" provided for the %fieldName field. Possible values are %template1 or %template2.', - [ - 'value' => $template, - 'fieldName' => 'template', - 'template1' => AccountManagement::EMAIL_REMINDER, - 'template2' => AccountManagement::EMAIL_RESET - ] - ) - ); + $this->handleUnknownTemplate($template); + break; } return true; } catch (MailException $e) { @@ -551,6 +542,25 @@ public function initiatePasswordReset($email, $template, $websiteId = null) return false; } + /** + * Handle not supported template + * + * @param string $template + * @throws InputException + */ + private function handleUnknownTemplate($template) + { + throw new InputException(__( + 'Invalid value of "%value" provided for the %fieldName field. Possible values: %template1 or %template2.', + [ + 'value' => $template, + 'fieldName' => 'template', + 'template1' => AccountManagement::EMAIL_REMINDER, + 'template2' => AccountManagement::EMAIL_RESET + ] + )); + } + /** * {@inheritdoc} */ diff --git a/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php b/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php index 6a010f01aec65..2a6b9fe6fd4ea 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php @@ -1173,10 +1173,6 @@ public function testInitiatePasswordResetEmailReset() $this->assertTrue($this->accountManagement->initiatePasswordReset($email, $template)); } - /** - * @expectedException \Magento\Framework\Exception\InputException - * @expectedExceptionMessage Invalid value of "" provided for the template field. Possible values are email_reminder or email_reset. - */ public function testInitiatePasswordResetNoTemplate() { $storeId = 1; @@ -1192,6 +1188,10 @@ public function testInitiatePasswordResetNoTemplate() $this->prepareInitiatePasswordReset($email, $templateIdentifier, $sender, $storeId, $customerId, $hash); + $this->expectException(\Magento\Framework\Exception\InputException::class); + $this->expectExceptionMessage( + 'Invalid value of "" provided for the template field. Possible values: email_reminder or email_reset.' + ); $this->accountManagement->initiatePasswordReset($email, $template); } From 8e4bd2c1290430675b0353c88c911e800dd97f85 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Fri, 10 Nov 2017 15:53:21 +0200 Subject: [PATCH 188/653] magento/magento2#10834: Signing in after selecting checkout button, will not end up to checkout page --- .../Customer/Test/TestStep/LoginCustomerOnFrontendStep.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestStep/LoginCustomerOnFrontendStep.php b/dev/tests/functional/tests/app/Magento/Customer/Test/TestStep/LoginCustomerOnFrontendStep.php index dc5d6076731c6..7e4dee7072679 100644 --- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestStep/LoginCustomerOnFrontendStep.php +++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestStep/LoginCustomerOnFrontendStep.php @@ -75,6 +75,8 @@ public function run() $this->cmsIndex->getCmsPageBlock()->waitPageInit(); $this->customerAccountLogin->getLoginBlock()->login($this->customer); $this->cmsIndex->getCmsPageBlock()->waitPageInit(); + $this->cmsIndex->getLinksBlock()->openLink('My Account'); + $this->cmsIndex->getCmsPageBlock()->waitPageInit(); } /** From d47a3fe1be687dc1f76b45fa3677a089ee799fd8 Mon Sep 17 00:00:00 2001 From: cstergianos <cstergianos@protonmail.com> Date: Fri, 10 Nov 2017 15:34:53 +0100 Subject: [PATCH 189/653] Update wishlist_email_rss.xml This is reproduced on Feestwinken and Grasscity so for sure on M2:2.1.9 Firstly, login to your admin area and navigate to Stores> Configuration. Then click to expand Catalog tab and select RSS Feeds. Then enable ths RSS feeds for Wishlist. After that follow the steps: 1. Open the front-end of a magneto 2 installation. 2. Login 3. Add multiple product to wish list 4. Go to My Account> My wish list 5. Ckeck on "Share wish list" 6. Choose to use RSS feed in Checkbox and submit Share Wish List --- .../Wishlist/view/frontend/layout/wishlist_email_rss.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/code/Magento/Wishlist/view/frontend/layout/wishlist_email_rss.xml b/app/code/Magento/Wishlist/view/frontend/layout/wishlist_email_rss.xml index 7bb186ef2ce03..3ba1c66e991ca 100644 --- a/app/code/Magento/Wishlist/view/frontend/layout/wishlist_email_rss.xml +++ b/app/code/Magento/Wishlist/view/frontend/layout/wishlist_email_rss.xml @@ -7,8 +7,6 @@ --> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> - <referenceContainer name="root"> - <block class="Magento\Wishlist\Block\Rss\EmailLink" name="wishlist.email.rss" cacheable="false"/> - </referenceContainer> + <block class="Magento\Wishlist\Block\Rss\EmailLink" name="wishlist.email.rss" cacheable="false"/> </body> </page> From 3f79b80549bf42ebf96ead47d39824d949723daa Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Fri, 10 Nov 2017 17:32:16 +0200 Subject: [PATCH 190/653] 11532: Duplicate Simple Product Throws Error: Undefined offset: 0 in SaveHandler.php on line 122 --- app/code/Magento/Catalog/Model/Category/Link/SaveHandler.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Category/Link/SaveHandler.php b/app/code/Magento/Catalog/Model/Category/Link/SaveHandler.php index 3b66de87d0dea..f22c6903a230c 100644 --- a/app/code/Magento/Catalog/Model/Category/Link/SaveHandler.php +++ b/app/code/Magento/Catalog/Model/Category/Link/SaveHandler.php @@ -119,8 +119,7 @@ private function mergeCategoryLinks($newCategoryPositions, $oldCategoryPositions if ($key === false) { $result[] = $newCategoryPosition; - } elseif ( - isset($oldCategoryPositions[$key]) + } elseif (isset($oldCategoryPositions[$key]) && $oldCategoryPositions[$key]['position'] != $newCategoryPosition['position'] ) { $result[] = $newCategoryPositions[$key]; From ad72d1cbb90bc3c611559d3390fbaff6c8db486d Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov <ishakhsuvarov@magento.com> Date: Fri, 10 Nov 2017 18:10:45 +0200 Subject: [PATCH 191/653] magento/magento2#11459: Migrates Apache Access Syntax to 2.4 - updated sample htaccess --- .htaccess.sample | 162 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 126 insertions(+), 36 deletions(-) diff --git a/.htaccess.sample b/.htaccess.sample index 91a0372ef7f16..f3a4474aec949 100644 --- a/.htaccess.sample +++ b/.htaccess.sample @@ -180,76 +180,166 @@ RedirectMatch 403 /\.git <Files composer.json> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files composer.lock> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files .gitignore> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files .htaccess> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files .htaccess.sample> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files .php_cs.dist> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files .travis.yml> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files CHANGELOG.md> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files CONTRIBUTING.md> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files COPYING.txt> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files Gruntfile.js> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files LICENSE.txt> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files LICENSE_AFL.txt> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files nginx.conf.sample> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files package.json> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files php.ini.sample> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files README.md> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> <Files magento_umask> - order allow,deny - deny from all + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> </Files> # For 404s and 403s that aren't handled by the application, show plain 404 response From 3b3ae75cece7b6c38151fd10de075d513c26c3bd Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov <ishakhsuvarov@magento.com> Date: Fri, 10 Nov 2017 18:23:21 +0200 Subject: [PATCH 192/653] magento/magento2#11459: Migrates Apache Access Syntax to 2.4 - updated functional tests sample htaccess --- dev/tests/functional/.htaccess.sample | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dev/tests/functional/.htaccess.sample b/dev/tests/functional/.htaccess.sample index d089eb3c4f848..67c2f3fe2d027 100644 --- a/dev/tests/functional/.htaccess.sample +++ b/dev/tests/functional/.htaccess.sample @@ -1,6 +1,11 @@ ############################################## ## Allow access to command.php, website.php, export.php, pathChecker.php, locales.php, deleteMagentoGeneratedCode.php and log.php <FilesMatch "command.php|website.php|export.php|pathChecker.php|deleteMagentoGeneratedCode.php|log.php|locales.php"> - order allow,deny - allow from all + <IfVersion < 2.4> + order allow,deny + allow from all + </IfVersion> + <IfVersion >= 2.4> + Require all granted + </IfVersion> </FilesMatch> From 78d1d8555c25dc1526a17d7bf6751827a5c641fd Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Fri, 10 Nov 2017 18:29:50 +0100 Subject: [PATCH 193/653] Fix unit tests for option "share" of shell command "config:set" --- .../Command/ConfigSet/ProcessorFacadeTest.php | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php index 4e65ab3f4cc21..51318a8e303ca 100644 --- a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php +++ b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php @@ -217,8 +217,29 @@ public function testExecuteLock() ->method('clean'); $this->assertSame( - 'Value was saved and locked.', + 'Value was saved in app/etc/env.php and locked.', $this->model->process('test/test/test', 'test', ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null, true) ); } + + public function testExecuteShare() + { + $this->scopeValidatorMock->expects($this->once()) + ->method('isValid') + ->willReturn(true); + $this->configSetProcessorFactoryMock->expects($this->once()) + ->method('create') + ->with(ConfigSetProcessorFactory::TYPE_SHARE) + ->willReturn($this->processorMock); + $this->processorMock->expects($this->once()) + ->method('process') + ->with('test/test/test', 'test', ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null); + $this->configMock->expects($this->once()) + ->method('clean'); + + $this->assertSame( + 'Value was saved in app/etc/config.php and locked.', + $this->model->process('test/test/test', 'test', ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null, false, true) + ); + } } From 3cc4070b138852479be8476a829f8ef43c5fa19d Mon Sep 17 00:00:00 2001 From: rossbrandon <rbrandon@magento.com> Date: Fri, 10 Nov 2017 15:16:37 -0600 Subject: [PATCH 194/653] MAGETWO-83184: Static Content Update for ReleaseNotification Module --- .../templates/admin/access_denied.phtml | 10 +- .../ui_component/release_notification.xml | 85 +++++++------- .../web/css/source/_module.less | 24 ++-- .../web/images/analytics-icon.svg | 109 +++++------------- .../web/images/b2b-icon.svg | 60 ---------- .../web/images/developer-experience-icon.svg | 28 ----- .../web/images/email-marketing-icon.svg | 27 +++++ .../web/images/instant-purchase-icon.svg | 32 +++++ 8 files changed, 150 insertions(+), 225 deletions(-) delete mode 100644 app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/b2b-icon.svg delete mode 100644 app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/developer-experience-icon.svg create mode 100644 app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/email-marketing-icon.svg create mode 100644 app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/instant-purchase-icon.svg diff --git a/app/code/Magento/Backend/view/adminhtml/templates/admin/access_denied.phtml b/app/code/Magento/Backend/view/adminhtml/templates/admin/access_denied.phtml index 4db99b3ed5de7..18d0b47d21498 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/admin/access_denied.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/admin/access_denied.phtml @@ -9,7 +9,7 @@ ?> <?php /** - * @see \Magento\Backend\Block\Template + * @see \Magento\Backend\Block\Denied */ ?> <hr class="access-denied-hr"/> @@ -21,9 +21,15 @@ <li><span><?= $block->escapeHtml(__('Contact a system administrator or store owner to gain permissions.')) ?></span></li> <li> <span><?= $block->escapeHtml(__('Return to ')) ?> - <a href="<?= $block->escapeHtmlAttr(__('javascript:history.back()')) ?>"> + <a href="<?= $block->escapeHtmlAttr(__('javascript:history.back()')) ?>" + onclick="<?= $block->escapeHtmlAttr(__('goBackToReferer(); return false;')) ?>"> <?= $block->escapeHtml(__('previous page')) ?></a><?= $block->escapeHtml(__('.')) ?> </span> </li> </ul> </div> +<script> + function goBackToReferer() { + window.location.href = document.referrer; + } +</script> diff --git a/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml b/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml index 708d366f455bf..4364e8948adf5 100644 --- a/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml +++ b/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml @@ -60,22 +60,22 @@ <item name="label" xsi:type="string"/> <item name="additionalClasses" xsi:type="string">release-notification-text</item> <item name="text" xsi:type="string" translate="true"><![CDATA[ - <p>Magento 2.2.2 offers an exciting set of features and enhancements, including:</p> + <p>Magento 2.2.2 offers advanced new features, including:</p> <br /> <div class="analytics-highlight"> <h3>Advanced Reporting</h3> <p>Gain valuable insights through a dynamic suite of product, order, and customer reports, powered by Magento Business Intelligence.</p> </div> - <div class="developer-experience-highlight"> - <h3>Developer Experience</h3> - <p>We've improved the entire development lifecycle - installation, development, and maintenance - - while ensuring Magento's commitment to quality.</p> + <div class="instant-purchase-highlight"> + <h3>Instant Purchase</h3> + <p>Simplify ordering and boost conversion rates by allowing your customers to use stored + payment and shipping information to skip tedious checkout steps.</p> </div> - <div class="b2b-highlight"> - <h3>Business-to-Business (B2B) <span>Magento Commerce only</span></h3> - <p>Features to manage your complex company accounts, rapid reordering, new buyers' roles and - permissions, and more.</p> + <div class="email-marketing-highlight"> + <h3>Email Marketing Automation</span></h3> + <p>Send smarter, faster email campaigns with marketing automation from dotmailer, powered by + your Magento store's live data.</p> </div> <p>Release notes and additional details can be found at <a href="http://devdocs.magento.com/" target="_blank">Magento DevDocs</a>. @@ -184,7 +184,7 @@ <item name="actionName" xsi:type="string">closeModal</item> </item> <item name="1" xsi:type="array"> - <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = developer_experience_modal</item> + <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = instant_purchase_modal</item> <item name="actionName" xsi:type="string">openModal</item> </item> </item> @@ -198,12 +198,12 @@ </container> </fieldset> </modal> - <modal name="developer_experience_modal" component="Magento_ReleaseNotification/js/modal/component"> + <modal name="instant_purchase_modal" component="Magento_ReleaseNotification/js/modal/component"> <settings> <onCancel>actionCancel</onCancel> <options> - <option name="modalClass" xsi:type="string">developer-experience-modal</option> - <option name="title" xsi:type="string" translate="true">Developer Experience</option> + <option name="modalClass" xsi:type="string">instant-purchase-modal</option> + <option name="title" xsi:type="string" translate="true">Instant Purchase</option> <option name="type" xsi:type="string">popup</option> <option name="responsive" xsi:type="boolean">true</option> <option name="innerScroll" xsi:type="boolean">true</option> @@ -220,17 +220,20 @@ <item name="label" xsi:type="string"/> <item name="additionalClasses" xsi:type="string">release-notification-text</item> <item name="text" xsi:type="string" translate="true"><![CDATA[ - <p>Magento's 2.2.2 release offers a set of improvements that were developed using increased - quality standards. The release includes these features, among others: + <p>Now you can deliver an Amazon-like experience with a new, streamlined checkout option. + Logged-in customers can use previously-stored payment credentials and shipping information + to skip steps, making the process faster and easier, especially for mobile shoppers. Key + features include: </p> <ul> - <li><span>GitHub Community Moderator Team</span></li> - <li><span>GitHub Community Videos</span></li> - <li><span>DevDocs Enhancements</span></li> - </ul> - <p>Find the 2.2.2 details and future plans in the - <a href="http://community.magento.com/devblog" target="_blank">Magento DevBlog</a>. - </p>]]> + <li><span>Configurable “Instant Purchase” button to place orders</span></li> + <li><span>Support for all payment solutions using Braintree Vault, including Braintree Credit + Card, Braintree PayPal, and PayPal Payflow Pro.</span></li> + <li><span>Shipping to the customer’s default address using the lowest cost, available shipping + method</span></li> + <li><span>Ability for developers to customize the Instant Purchase business logic to meet + merchant needs</span></li> + </ul>]]> </item> </item> </argument> @@ -247,7 +250,7 @@ <item name="buttonClasses" xsi:type="string">release-notification-button-back</item> <item name="actions" xsi:type="array"> <item name="0" xsi:type="array"> - <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = developer_experience_modal</item> + <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = instant_purchase_modal</item> <item name="actionName" xsi:type="string">closeModal</item> </item> <item name="1" xsi:type="array"> @@ -268,11 +271,11 @@ <item name="buttonClasses" xsi:type="string">release-notification-button-next</item> <item name="actions" xsi:type="array"> <item name="0" xsi:type="array"> - <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = developer_experience_modal</item> + <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = instant_purchase_modal</item> <item name="actionName" xsi:type="string">closeModal</item> </item> <item name="1" xsi:type="array"> - <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = b2b_modal</item> + <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = email_marketing_modal</item> <item name="actionName" xsi:type="string">openModal</item> </item> </item> @@ -286,13 +289,12 @@ </container> </fieldset> </modal> - <modal name="b2b_modal" component="Magento_ReleaseNotification/js/modal/component"> + <modal name="email_marketing_modal" component="Magento_ReleaseNotification/js/modal/component"> <settings> <onCancel>actionCancel</onCancel> <options> - <option name="modalClass" xsi:type="string">b2b-modal</option> - <option name="title" xsi:type="string" translate="true"><![CDATA[Business-to-Business (B2B) - <span>Magento Commerce only</span>]]></option> + <option name="modalClass" xsi:type="string">email-marketing-modal</option> + <option name="title" xsi:type="string" translate="true">Email Marketing Automation</option> <option name="type" xsi:type="string">popup</option> <option name="responsive" xsi:type="boolean">true</option> <option name="innerScroll" xsi:type="boolean">true</option> @@ -309,17 +311,18 @@ <item name="label" xsi:type="string"/> <item name="additionalClasses" xsi:type="string">release-notification-text</item> <item name="text" xsi:type="string" translate="true"><![CDATA[ - <p>Magento Commerce 2.2.2 offers rich new functionality that empowers B2B merchants to transform - their online purchasing experience to achieve greater operational efficiency, improved customer - service, and sales growth. New capabilities include: + <p>Unlock an unparalleled level of insight and control of your eCommerce marketing with + dotmailer Email Marketing Automation. Included with Magento 2.2.2 for easy set-up, dotmailer + ensures every customer’s journey is captured, segmented, and personalized, enabling you to + deliver customer-centric campaigns that beat your results over and over again. Benefits include: </p> <ul> - <li><span>Company accounts with multiple tiers of buyers</span></li> - <li><span>Buyer roles and permissions</span></li> - <li><span>Custom catalogs and pricing</span></li> - <li><span>Quoting support</span></li> - <li><span>Rapid reorder experience</span></li> - <li><span>Payments on credit</span></li> + <li><span>No obligation 14-day trial.</span></li> + <li><span>Automation campaigns using your live Magento store data that drive revenue, + including abandoned cart, abandoned browse, product replenishment, and many more</span></li> + <li><span>Custom catalogs and pricing.</span></li> + <li><span>Built-in solution for transactional emails.</span></li> + <li><span>Telephone support and advice from marketing experts included.</span></li> </ul>]]> </item> </item> @@ -337,11 +340,11 @@ <item name="buttonClasses" xsi:type="string">release-notification-button-back</item> <item name="actions" xsi:type="array"> <item name="0" xsi:type="array"> - <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = b2b_modal</item> + <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = email_marketing_modal</item> <item name="actionName" xsi:type="string">closeModal</item> </item> <item name="1" xsi:type="array"> - <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = developer_experience_modal</item> + <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = instant_purchase_modal</item> <item name="actionName" xsi:type="string">openModal</item> </item> </item> @@ -358,7 +361,7 @@ <item name="buttonClasses" xsi:type="string">release-notification-button-next</item> <item name="actions" xsi:type="array"> <item name="0" xsi:type="array"> - <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = b2b_modal</item> + <item name="targetName" xsi:type="string">ns = ${ $.ns }, index = email_marketing_modal</item> <item name="actionName" xsi:type="string">closeReleaseNotes</item> </item> </item> diff --git a/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/css/source/_module.less index 81c9b70c71889..ce7a49481b6ea 100644 --- a/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/css/source/_module.less +++ b/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/css/source/_module.less @@ -7,7 +7,7 @@ // Magento_ReleaseNotification Modal on dashboard // --------------------------------------------- -.release-notification-modal, .analytics-subscription-modal, .developer-experience-modal, .b2b-modal { +.release-notification-modal, .analytics-subscription-modal, .instant-purchase-modal, .email-marketing-modal { -webkit-transition: visibility 0s .5s, opacity .5s ease; transition: visibility 0s .5s, opacity .5s ease; @@ -54,7 +54,9 @@ span { font-size: @font-size__base; - margin-left: 2rem; + vertical-align: middle; + position: relative; + left: 1rem; } } } @@ -77,17 +79,17 @@ background-size: 65px 58px; } -.b2b-highlight { - background: url("Magento_ReleaseNotification::images/b2b-icon.svg") no-repeat; +.email-marketing-highlight { + background: url("Magento_ReleaseNotification::images/email-marketing-icon.svg") no-repeat; background-size: 65px 53.37px; } -.developer-experience-highlight { - background: url("Magento_ReleaseNotification::images/developer-experience-icon.svg") no-repeat; +.instant-purchase-highlight { + background: url("Magento_ReleaseNotification::images/instant-purchase-icon.svg") no-repeat; background-size: 65px 59px; } -.analytics-highlight, .b2b-highlight, .developer-experience-highlight { +.analytics-highlight, .email-marketing-highlight, .instant-purchase-highlight { padding: 0 0 2rem 8.5rem; margin-left: 1rem; @@ -110,17 +112,17 @@ } } -.b2b-modal { +.email-marketing-modal { h1:first-of-type { - background: url("Magento_ReleaseNotification::images/b2b-icon.svg") no-repeat; + background: url("Magento_ReleaseNotification::images/email-marketing-icon.svg") no-repeat; background-size: 55px 49.92px; padding: 1.5rem 0 2rem 7rem; } } -.developer-experience-modal { +.instant-purchase-modal { h1:first-of-type { - background: url("Magento_ReleaseNotification::images/developer-experience-icon.svg") no-repeat; + background: url("Magento_ReleaseNotification::images/instant-purchase-icon.svg") no-repeat; background-size: 55px 46px; padding: 1.5rem 0 2rem 7rem; } diff --git a/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/analytics-icon.svg b/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/analytics-icon.svg index fde91d775d444..2846b29627df6 100644 --- a/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/analytics-icon.svg +++ b/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/analytics-icon.svg @@ -1,84 +1,27 @@ -<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" - height="105px" viewBox="0 0 120 105" enable-background="new 0 0 120 105" xml:space="preserve"> -<g id="Layer_1" display="none"> - <rect x="2.904" y="27.946" display="inline" fill="#F06524" width="113.745" height="12.408"/> - <path display="inline" fill="#636667" d="M95.811,85.511c-0.753-2.551-1.775-5.013-3.059-7.344 - c-0.207-0.387-0.134-0.884,0.191-1.208c2.857-2.869,2.857-7.489,0.013-10.346l-3.649-3.686c-2.873-2.86-7.493-2.86-10.348-0.016 - c-0.334,0.336-0.828,0.409-1.228,0.193c-2.321-1.271-4.785-2.295-7.337-3.047c-0.419-0.126-0.714-0.525-0.712-0.979 - c0.004-1.947-0.766-3.812-2.139-5.187c-1.37-1.377-3.233-2.148-5.176-2.148h-5.184c-4.039,0-7.312,3.274-7.312,7.314 - c0.001,0.464-0.294,0.863-0.728,0.993c-2.537,0.747-5.002,1.771-7.335,3.051c-0.391,0.213-0.882,0.143-1.199-0.178 - c-1.377-1.381-3.236-2.15-5.176-2.15c-1.938,0-3.799,0.77-5.168,2.143l-3.688,3.744c-2.833,2.845-2.833,7.465,0.011,10.321 - c0.336,0.336,0.41,0.835,0.191,1.24c-1.269,2.312-2.294,4.772-3.045,7.324c-0.487,1.657,0.46,3.396,2.117,3.885 - c1.658,0.487,3.396-0.46,3.884-2.117c0.624-2.12,1.475-4.164,2.538-6.101c1.544-2.863,1.027-6.375-1.262-8.653 - c-0.405-0.407-0.405-1.082,0.009-1.497l3.686-3.742c0.181-0.182,0.449-0.291,0.727-0.291c0.279,0,0.545,0.109,0.743,0.307 - c2.271,2.289,5.794,2.805,8.634,1.253c1.944-1.065,3.993-1.918,6.115-2.541c3.105-0.933,5.213-3.781,5.2-7.005 - C56.126,58.473,56.6,58,57.184,58h5.184c0.281,0,0.55,0.112,0.75,0.31c0.199,0.2,0.309,0.471,0.309,0.752 - c-0.012,3.217,2.098,6.065,5.185,6.992c2.138,0.631,4.187,1.482,6.129,2.545c2.854,1.546,6.369,1.026,8.646-1.269 - c0.403-0.401,1.075-0.401,1.492,0.015l3.639,3.675c0.42,0.424,0.42,1.098,0.007,1.515c-2.283,2.265-2.802,5.783-1.261,8.628 - c1.071,1.952,1.922,3.997,2.545,6.116c0.489,1.657,2.228,2.604,3.886,2.116C95.351,88.907,96.297,87.169,95.811,85.511z"/> - <path display="inline" fill="#636667" d="M118.29,1.486C117.337,0.536,116.046,0,114.7,0H4.843 - C2.035,0.014-0.224,2.283-0.224,5.076v89.103c-0.006,1.334,0.524,2.629,1.475,3.584c0.951,0.955,2.244,1.492,3.592,1.492h109.851 - c1.35,0.005,2.645-0.529,3.6-1.484c0.955-0.954,1.49-2.254,1.482-3.605V5.076C119.776,3.73,119.243,2.439,118.29,1.486z - M113.521,6.255v18.564H6.032V6.255H113.521z M41.2,93c1.493-8.922,9.23-15.729,18.576-15.729c9.348,0,17.083,6.808,18.576,15.729 - H41.2z M84.673,93c-1.542-12.39-12.089-21.984-24.896-21.984C46.97,71.016,36.422,80.61,34.879,93H6.032V31.074h107.49V93H84.673z" - /> - <path display="inline" fill="#636667" d="M21.661,19.955c-1.204,1.203-2.836,1.879-4.539,1.879c-3.545,0-6.419-2.873-6.419-6.418 - s2.874-6.418,6.419-6.418s6.418,2.873,6.418,6.418C23.541,17.118,22.865,18.751,21.661,19.955z"/> - <circle display="inline" fill="#636667" cx="31.611" cy="15.416" r="6.418"/> - <path display="inline" fill="#636667" d="M52.518,15.416c-0.009,3.545-2.873,6.408-6.418,6.418c-3.545,0-6.419-2.873-6.419-6.418 - s2.874-6.418,6.419-6.418C49.645,8.998,52.518,11.871,52.518,15.416z"/> -</g> -<g id="Layer_2" display="none"> - <g display="inline"> - <path fill="#F06725" d="M99.814,64.673V46.052h13.125v18.621H99.814z M120,64.673v43.361H92.758V64.673H120z"/> - <rect y="50.855" fill="#F06725" width="9.017" height="57.181"/> - <path fill="#F06725" d="M53.04,108.034V55.046h16.718v52.988H53.04z M58.535,55.046V44.188h5.724v10.858H58.535z"/> - <rect x="18.373" y="30.743" fill="#646767" width="3.105" height="4.451"/> - <rect x="29.501" y="30.743" fill="#646767" width="3.105" height="4.451"/> - <rect x="40.586" y="30.743" fill="#646767" width="3.104" height="4.451"/> - <rect x="18.373" y="43.411" fill="#646767" width="3.105" height="4.503"/> - <rect x="29.501" y="43.411" fill="#646767" width="3.105" height="4.503"/> - <rect x="40.609" y="43.411" fill="#646767" width="3.104" height="4.503"/> - <rect x="18.373" y="56.082" fill="#646767" width="3.105" height="4.5"/> - <rect x="29.501" y="56.082" fill="#646767" width="3.105" height="4.5"/> - <rect x="40.609" y="56.082" fill="#646767" width="3.104" height="4.5"/> - <rect x="18.373" y="68.752" fill="#646767" width="3.105" height="4.501"/> - <rect x="29.501" y="68.752" fill="#646767" width="3.105" height="4.501"/> - <rect x="40.609" y="68.752" fill="#646767" width="3.104" height="4.501"/> - <rect x="18.373" y="81.422" fill="#646767" width="3.105" height="4.491"/> - <rect x="29.501" y="81.422" fill="#646767" width="3.105" height="4.491"/> - <rect x="40.586" y="81.422" fill="#646767" width="3.104" height="4.491"/> - <rect x="18.373" y="94.091" fill="#646767" width="3.105" height="4.504"/> - <rect x="29.501" y="94.091" fill="#646767" width="3.105" height="4.504"/> - <rect x="40.609" y="94.091" fill="#646767" width="3.104" height="4.504"/> - <path fill="#646767" d="M94.309,106.481V55.761h-4.378V33.247h-7.132V16.168h-3.105v17.079h-7.112v22.514h-4.378v50.721h-13.61 - V19.75h-8.655V9.006h-8.859V0H24.977v9.006h-8.859V19.75H7.483v86.731H0v3.104h7.483h47.109h13.61h26.105H120v-3.104H94.309z - M75.687,36.353h11.139V55.74H75.687V36.353z M28.082,3.105h5.892v5.9h-5.892V3.105z M19.221,12.11h5.756h12.102h5.754v7.64 - H19.221V12.11z M10.588,106.481V22.854h5.53h29.82h5.548v83.627H10.588z M71.309,106.481V58.868h19.896v47.613H71.309z"/> - </g> -</g> -<g id="Layer_3"> - <path fill="#636768" d="M2.66,104.889h112.106c1.47,0,2.66-1.194,2.66-2.662c0-1.473-1.19-2.663-2.66-2.663H2.66 - c-1.471,0-2.661,1.19-2.661,2.663C0,103.694,1.189,104.889,2.66,104.889z"/> - <rect x="2.66" y="52.421" fill="#F06725" width="12.314" height="39.343"/> - <rect x="102.453" y="31.996" fill="#F06725" width="12.313" height="59.768"/> - <rect x="35.928" y="31.25" fill="#F06725" width="12.315" height="60.514"/> - <rect x="69.187" y="50.168" fill="#F06725" width="12.323" height="41.596"/> - <circle fill="#F06725" cx="42.038" cy="11.39" r="3.76"/> - <circle fill="#F06725" cx="108.608" cy="12.135" r="3.76"/> - <path fill="#656668" d="M108.61,0.744c-6.28,0-11.387,5.11-11.387,11.389c0,0.877,0.107,1.729,0.293,2.55l-16.983,9.726 - c-1.392-1.221-3.194-1.988-5.187-1.988c-1.931,0-3.681,0.728-5.054,1.882L53.252,13.614c0.145-0.722,0.222-1.464,0.222-2.227 - C53.474,5.109,48.364,0,42.085,0c-6.281,0-11.39,5.109-11.39,11.391c0,1.168,0.178,2.296,0.508,3.36l-18.246,11.1 - c-1.208-0.748-2.617-1.202-4.138-1.202c-4.363,0-7.913,3.549-7.913,7.911c0,4.361,3.549,7.911,7.913,7.911 - c2.113,0,4.101-0.823,5.593-2.317c1.492-1.493,2.315-3.48,2.315-5.593c0-0.881-0.177-1.712-0.444-2.504l17.646-10.733 - c2.07,2.129,4.959,3.457,8.156,3.457c3.601,0,6.81-1.684,8.9-4.301l16.61,10.419c-0.086,0.463-0.146,0.938-0.146,1.422 - c-0.003,4.353,3.534,7.899,7.889,7.908h0.004c4.361,0,7.913-3.55,7.913-7.917c-0.003-0.43-0.063-0.841-0.128-1.251l16.774-9.605 - c2.085,2.485,5.217,4.069,8.71,4.069c6.28,0,11.388-5.11,11.388-11.39C119.998,5.855,114.889,0.744,108.61,0.744z M10.648,34.389 - c-0.488,0.49-1.139,0.758-1.83,0.758c-1.427,0-2.587-1.161-2.587-2.587c0-1.427,1.16-2.588,2.587-2.588 - c1.426,0,2.587,1.161,2.587,2.588C11.405,33.25,11.137,33.901,10.648,34.389z M42.085,17.456c-3.345,0-6.065-2.721-6.065-6.065 - c0-3.345,2.723-6.068,6.065-6.068c3.343,0,6.066,2.723,6.066,6.068C48.151,14.733,45.43,17.456,42.085,17.456z M75.347,32.903 - c-1.418-0.001-2.571-1.16-2.571-2.58c0-1.419,1.157-2.576,2.578-2.578c1.421,0,2.578,1.155,2.578,2.569 - C77.928,31.742,76.771,32.902,75.347,32.903z M108.61,18.2c-3.345,0-6.066-2.723-6.066-6.065c0-3.344,2.722-6.066,6.066-6.066 - c3.344,0,6.066,2.723,6.066,6.066C114.677,15.478,111.954,18.2,108.61,18.2z"/> -</g> +<svg version="1.1" id="Analytics" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="120px" height="105px" viewBox="0 0 120 105" enable-background="new 0 0 120 105" xml:space="preserve"> +<path fill="#F16423" d="M47.946,16.377c0-1.802-1.459-3.264-3.263-3.264c-1.804,0-3.263,1.462-3.263,3.264 + c0,1.804,1.459,3.264,3.263,3.264C46.487,19.641,47.946,18.181,47.946,16.377"/> +<path fill="#636567" d="M107.749,96.971H10.475c-0.981,0-1.776-0.794-1.776-1.775s0.794-1.775,1.776-1.775h97.274 + c0.981,0,1.776,0.794,1.776,1.775S108.73,96.971,107.749,96.971z"/> +<rect x="10.475" y="51.978" fill="#F16423" width="10.686" height="34.14"/> +<rect x="97.062" y="34.261" fill="#F16423" width="10.687" height="51.857"/> +<rect x="39.34" y="33.61" fill="#F16423" width="10.686" height="52.508"/> +<path fill="#636567" d="M44.684,25.726c-5.156,0-9.351-4.194-9.351-9.349c0-5.155,4.194-9.349,9.351-9.349 + c5.155,0,9.349,4.194,9.349,9.349C54.033,21.532,49.838,25.726,44.684,25.726z M44.684,10.58c-3.197,0-5.798,2.6-5.798,5.797 + c0,3.196,2.602,5.796,5.798,5.796c3.196,0,5.796-2.6,5.796-5.796C50.48,13.18,47.88,10.58,44.684,10.58z"/> +<path fill="#F16423" d="M105.668,17.025c0-1.8-1.455-3.262-3.261-3.262s-3.263,1.462-3.263,3.262c0,1.804,1.457,3.266,3.263,3.266 + S105.668,18.829,105.668,17.025"/> +<path fill="#636567" d="M102.407,26.377c-5.154,0-9.349-4.195-9.349-9.352c0-5.155,4.193-9.349,9.349-9.349s9.349,4.194,9.349,9.349 + C111.756,22.182,107.562,26.377,102.407,26.377z M102.407,11.229c-3.196,0-5.798,2.6-5.798,5.796c0,3.198,2.602,5.8,5.798,5.8 + s5.797-2.602,5.797-5.8C108.204,13.829,105.604,11.229,102.407,11.229z"/> +<rect x="68.199" y="50.028" fill="#F16423" width="10.691" height="36.09"/> +<path fill="#636567" d="M15.815,41.075c-3.484,0-6.32-2.839-6.32-6.329c0-3.49,2.836-6.327,6.32-6.327 + c1.339,0,2.581,0.417,3.604,1.127l17.832-10.828l1.844,3.035L21.671,32.335c0.307,0.744,0.477,1.558,0.477,2.411 + C22.148,38.236,19.307,41.075,15.815,41.075z M15.815,31.971c-1.526,0-2.768,1.245-2.768,2.775c0,1.532,1.242,2.777,2.768,2.777 + c1.533,0,2.78-1.245,2.78-2.777C18.596,33.216,17.349,31.971,15.815,31.971z M73.541,39.124c-3.486,0-6.323-2.839-6.323-6.329 + c0-0.519,0.062-1.021,0.181-1.504L50.721,20.822l1.887-3.008l16.574,10.401c1.135-1.082,2.672-1.746,4.358-1.746 + c1.745,0,3.327,0.709,4.474,1.852l16.688-9.57l1.766,3.08l-16.742,9.604c0.098,0.439,0.147,0.894,0.147,1.36 + C79.872,36.285,77.032,39.124,73.541,39.124z M73.541,30.021c-1.527,0-2.771,1.244-2.771,2.773c0,1.532,1.244,2.777,2.771,2.777 + c1.531,0,2.777-1.245,2.777-2.777C76.318,31.265,75.072,30.021,73.541,30.021z"/> </svg> diff --git a/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/b2b-icon.svg b/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/b2b-icon.svg deleted file mode 100644 index 20552d6178c25..0000000000000 --- a/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/b2b-icon.svg +++ /dev/null @@ -1,60 +0,0 @@ -<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="120px" - height="111px" viewBox="0 0 120 111" enable-background="new 0 0 120 111" xml:space="preserve"> -<g id="Layer_1" display="none"> - <rect x="2.904" y="27.946" display="inline" fill="#F06524" width="113.745" height="12.408"/> - <path display="inline" fill="#636667" d="M95.811,85.511c-0.753-2.551-1.775-5.013-3.059-7.344 - c-0.207-0.387-0.134-0.884,0.191-1.208c2.857-2.869,2.857-7.489,0.013-10.346l-3.649-3.686c-2.873-2.86-7.493-2.86-10.348-0.016 - c-0.334,0.336-0.828,0.409-1.228,0.193c-2.321-1.271-4.785-2.295-7.337-3.047c-0.419-0.126-0.714-0.525-0.712-0.979 - c0.004-1.947-0.766-3.812-2.139-5.187c-1.37-1.377-3.233-2.148-5.176-2.148h-5.184c-4.039,0-7.312,3.274-7.312,7.314 - c0.001,0.464-0.294,0.863-0.728,0.993c-2.537,0.747-5.002,1.771-7.335,3.051c-0.391,0.213-0.882,0.143-1.199-0.178 - c-1.377-1.381-3.236-2.15-5.176-2.15c-1.938,0-3.799,0.77-5.168,2.143l-3.688,3.744c-2.833,2.845-2.833,7.465,0.011,10.321 - c0.336,0.336,0.41,0.835,0.191,1.24c-1.269,2.312-2.294,4.772-3.045,7.324c-0.487,1.657,0.46,3.396,2.117,3.885 - c1.658,0.487,3.396-0.46,3.884-2.117c0.624-2.12,1.475-4.164,2.538-6.101c1.544-2.863,1.027-6.375-1.262-8.653 - c-0.405-0.407-0.405-1.082,0.009-1.497l3.686-3.742c0.181-0.182,0.449-0.291,0.727-0.291c0.279,0,0.545,0.109,0.743,0.307 - c2.271,2.289,5.794,2.805,8.634,1.253c1.944-1.065,3.993-1.918,6.115-2.541c3.105-0.933,5.213-3.781,5.2-7.005 - C56.126,58.473,56.6,58,57.184,58h5.184c0.281,0,0.55,0.112,0.75,0.31c0.199,0.2,0.309,0.471,0.309,0.752 - c-0.012,3.217,2.098,6.065,5.185,6.992c2.138,0.631,4.187,1.482,6.129,2.545c2.854,1.546,6.369,1.026,8.646-1.269 - c0.403-0.401,1.075-0.401,1.492,0.015l3.639,3.675c0.42,0.424,0.42,1.098,0.007,1.515c-2.283,2.265-2.802,5.783-1.261,8.628 - c1.071,1.952,1.922,3.997,2.545,6.116c0.489,1.657,2.228,2.604,3.886,2.116C95.351,88.907,96.297,87.169,95.811,85.511z"/> - <path display="inline" fill="#636667" d="M118.29,1.486C117.337,0.536,116.046,0,114.7,0H4.843 - C2.035,0.014-0.224,2.283-0.224,5.076v89.103c-0.006,1.334,0.524,2.629,1.475,3.584c0.951,0.955,2.244,1.492,3.592,1.492h109.851 - c1.35,0.005,2.645-0.529,3.6-1.484c0.955-0.954,1.49-2.254,1.482-3.605V5.076C119.776,3.73,119.243,2.439,118.29,1.486z - M113.521,6.255v18.564H6.032V6.255H113.521z M41.2,93c1.493-8.922,9.23-15.729,18.576-15.729c9.348,0,17.083,6.808,18.576,15.729 - H41.2z M84.673,93c-1.542-12.39-12.089-21.984-24.896-21.984C46.97,71.016,36.422,80.61,34.879,93H6.032V31.074h107.49V93H84.673z" - /> - <path display="inline" fill="#636667" d="M21.661,19.955c-1.204,1.203-2.836,1.879-4.539,1.879c-3.545,0-6.419-2.873-6.419-6.418 - s2.874-6.418,6.419-6.418s6.418,2.873,6.418,6.418C23.541,17.118,22.865,18.751,21.661,19.955z"/> - <circle display="inline" fill="#636667" cx="31.611" cy="15.416" r="6.418"/> - <path display="inline" fill="#636667" d="M52.518,15.416c-0.009,3.545-2.873,6.408-6.418,6.418c-3.545,0-6.419-2.873-6.419-6.418 - s2.874-6.418,6.419-6.418C49.645,8.998,52.518,11.871,52.518,15.416z"/> -</g> -<g id="Layer_2"> - <g> - <path fill="#F06725" d="M99.814,64.673V46.052h13.125v18.621H99.814z M120,64.673v43.361H92.758V64.673H120z"/> - <rect y="50.855" fill="#F06725" width="9.017" height="57.181"/> - <path fill="#F06725" d="M53.04,108.034V55.046h16.718v52.988H53.04z M58.535,55.046V44.188h5.724v10.858H58.535z"/> - <rect x="18.373" y="30.743" fill="#646767" width="3.105" height="4.451"/> - <rect x="29.501" y="30.743" fill="#646767" width="3.105" height="4.451"/> - <rect x="40.586" y="30.743" fill="#646767" width="3.104" height="4.451"/> - <rect x="18.373" y="43.411" fill="#646767" width="3.105" height="4.503"/> - <rect x="29.501" y="43.411" fill="#646767" width="3.105" height="4.503"/> - <rect x="40.609" y="43.411" fill="#646767" width="3.104" height="4.503"/> - <rect x="18.373" y="56.082" fill="#646767" width="3.105" height="4.5"/> - <rect x="29.501" y="56.082" fill="#646767" width="3.105" height="4.5"/> - <rect x="40.609" y="56.082" fill="#646767" width="3.104" height="4.5"/> - <rect x="18.373" y="68.752" fill="#646767" width="3.105" height="4.501"/> - <rect x="29.501" y="68.752" fill="#646767" width="3.105" height="4.501"/> - <rect x="40.609" y="68.752" fill="#646767" width="3.104" height="4.501"/> - <rect x="18.373" y="81.422" fill="#646767" width="3.105" height="4.491"/> - <rect x="29.501" y="81.422" fill="#646767" width="3.105" height="4.491"/> - <rect x="40.586" y="81.422" fill="#646767" width="3.104" height="4.491"/> - <rect x="18.373" y="94.091" fill="#646767" width="3.105" height="4.504"/> - <rect x="29.501" y="94.091" fill="#646767" width="3.105" height="4.504"/> - <rect x="40.609" y="94.091" fill="#646767" width="3.104" height="4.504"/> - <path fill="#646767" d="M94.309,106.481V55.761h-4.378V33.247h-7.132V16.168h-3.105v17.079h-7.112v22.514h-4.378v50.721h-13.61 - V19.75h-8.655V9.006h-8.859V0H24.977v9.006h-8.859V19.75H7.483v86.731H0v3.104h7.483h47.109h13.61h26.105H120v-3.104H94.309z - M75.687,36.353h11.139V55.74H75.687V36.353z M28.082,3.105h5.892v5.9h-5.892V3.105z M19.221,12.11h5.756h12.102h5.754v7.64 - H19.221V12.11z M10.588,106.481V22.854h5.53h29.82h5.548v83.627H10.588z M71.309,106.481V58.868h19.896v47.613H71.309z"/> - </g> -</g> -</svg> diff --git a/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/developer-experience-icon.svg b/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/developer-experience-icon.svg deleted file mode 100644 index 50d208118aedf..0000000000000 --- a/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/developer-experience-icon.svg +++ /dev/null @@ -1,28 +0,0 @@ -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - width="120px" height="100px" viewBox="0 0 120 100" enable-background="new 0 0 120 100" xml:space="preserve"> -<rect x="2.904" y="27.946" fill="#F06524" width="113.745" height="12.408"/> -<path fill="#636667" d="M95.811,85.511c-0.753-2.551-1.775-5.013-3.059-7.344c-0.207-0.387-0.134-0.884,0.191-1.208 - c2.857-2.869,2.857-7.489,0.013-10.346l-3.649-3.686c-2.873-2.86-7.493-2.86-10.348-0.016c-0.334,0.336-0.828,0.409-1.228,0.193 - c-2.321-1.271-4.785-2.295-7.337-3.047c-0.419-0.126-0.714-0.525-0.712-0.979c0.004-1.947-0.766-3.812-2.139-5.187 - c-1.37-1.377-3.233-2.148-5.176-2.148h-5.184c-4.039,0-7.312,3.274-7.312,7.314c0.001,0.464-0.294,0.863-0.728,0.993 - c-2.537,0.747-5.002,1.771-7.335,3.051c-0.391,0.213-0.882,0.143-1.199-0.178c-1.377-1.381-3.236-2.15-5.176-2.15 - c-1.938,0-3.799,0.77-5.168,2.143l-3.688,3.744c-2.833,2.845-2.833,7.465,0.011,10.321c0.336,0.336,0.41,0.835,0.191,1.24 - c-1.269,2.312-2.294,4.772-3.045,7.324c-0.487,1.657,0.46,3.396,2.117,3.885c1.658,0.487,3.396-0.46,3.884-2.117 - c0.624-2.12,1.475-4.164,2.538-6.101c1.544-2.863,1.027-6.375-1.262-8.653c-0.405-0.407-0.405-1.082,0.009-1.497l3.686-3.742 - c0.181-0.182,0.449-0.291,0.727-0.291c0.279,0,0.545,0.109,0.743,0.307c2.271,2.289,5.794,2.805,8.634,1.253 - c1.944-1.065,3.993-1.918,6.115-2.541c3.105-0.933,5.213-3.781,5.2-7.005C56.126,58.473,56.6,58,57.184,58h5.184 - c0.281,0,0.55,0.112,0.75,0.31c0.199,0.2,0.309,0.471,0.309,0.752c-0.012,3.217,2.098,6.065,5.185,6.992 - c2.138,0.631,4.187,1.482,6.129,2.545c2.854,1.546,6.369,1.026,8.646-1.269c0.403-0.401,1.075-0.401,1.492,0.015l3.639,3.675 - c0.42,0.424,0.42,1.098,0.007,1.515c-2.283,2.265-2.802,5.783-1.261,8.628c1.071,1.952,1.922,3.997,2.545,6.116 - c0.489,1.657,2.228,2.604,3.886,2.116C95.351,88.907,96.297,87.169,95.811,85.511z"/> -<path fill="#636667" d="M118.29,1.486C117.337,0.536,116.046,0,114.7,0H4.843C2.035,0.014-0.224,2.283-0.224,5.076v89.103 - c-0.006,1.334,0.524,2.629,1.475,3.584c0.951,0.955,2.244,1.492,3.592,1.492h109.851c1.35,0.005,2.645-0.529,3.6-1.484 - c0.955-0.954,1.49-2.254,1.482-3.605V5.076C119.776,3.73,119.243,2.439,118.29,1.486z M113.521,6.255v18.564H6.032V6.255H113.521z - M41.2,93c1.493-8.922,9.23-15.729,18.576-15.729c9.348,0,17.083,6.808,18.576,15.729H41.2z M84.673,93 - c-1.542-12.39-12.089-21.984-24.896-21.984C46.97,71.016,36.422,80.61,34.879,93H6.032V31.074h107.49V93H84.673z"/> -<path fill="#636667" d="M21.661,19.955c-1.204,1.203-2.836,1.879-4.539,1.879c-3.545,0-6.419-2.873-6.419-6.418 - s2.874-6.418,6.419-6.418s6.418,2.873,6.418,6.418C23.541,17.118,22.865,18.751,21.661,19.955z"/> -<circle fill="#636667" cx="31.611" cy="15.416" r="6.418"/> -<path fill="#636667" d="M52.518,15.416c-0.009,3.545-2.873,6.408-6.418,6.418c-3.545,0-6.419-2.873-6.419-6.418 - s2.874-6.418,6.419-6.418C49.645,8.998,52.518,11.871,52.518,15.416z"/> -</svg> diff --git a/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/email-marketing-icon.svg b/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/email-marketing-icon.svg new file mode 100644 index 0000000000000..dc9ac2103d93f --- /dev/null +++ b/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/email-marketing-icon.svg @@ -0,0 +1,27 @@ +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="120px" height="105px" viewBox="0 0 120 105" enable-background="new 0 0 120 105" xml:space="preserve"> +<path fill="#636567" d="M80.118,95.919c-0.604,0-1.195-0.302-1.539-0.853l-6.324-10.07c-6.037,3.441-13.018,5.409-20.45,5.409 + c-7.431,0-14.411-1.97-20.448-5.409l-6.322,10.07c-0.53,0.853-1.651,1.108-2.502,0.574c-0.85-0.533-1.106-1.654-0.573-2.504 + l6.324-10.078c-10.802-7.479-17.891-19.961-17.891-34.067c0-22.836,18.577-41.415,41.412-41.415c11.066,0,21.466,4.31,29.289,12.132 + c0.709,0.709,0.709,1.858,0,2.568c-0.71,0.709-1.859,0.709-2.568,0C71.389,15.138,61.9,11.208,51.806,11.208 + c-20.833,0-37.78,16.949-37.78,37.783c0,20.833,16.947,37.782,37.78,37.782c20.836,0,37.79-16.949,37.79-37.782 + c0-2.749-0.303-5.506-0.898-8.197c-0.217-0.979,0.402-1.949,1.383-2.165c0.975-0.217,1.947,0.402,2.165,1.381 + c0.651,2.946,0.981,5.968,0.981,8.98c0,14.105-7.092,26.589-17.896,34.07l6.323,10.075c0.533,0.851,0.277,1.972-0.572,2.503 + C80.781,95.828,80.448,95.919,80.118,95.919z M51.805,73.473c-13.498,0-24.479-10.98-24.479-24.48 + c0-13.499,10.981-24.48,24.479-24.48c6.384,0,12.427,2.444,17.02,6.881c0.722,0.697,0.741,1.846,0.044,2.566 + c-0.693,0.722-1.848,0.741-2.566,0.044c-3.912-3.777-9.061-5.859-14.498-5.859c-11.496,0-20.847,9.353-20.847,20.848 + c0,11.496,9.351,20.849,20.847,20.849c11.496,0,20.847-9.354,20.847-20.849c0-1.479-0.149-2.935-0.445-4.329 + c-0.208-0.981,0.42-1.946,1.4-2.153c0.98-0.209,1.944,0.42,2.152,1.401c0.348,1.64,0.523,3.35,0.523,5.081 + C76.284,62.491,65.303,73.473,51.805,73.473z M59.665,53.282c-0.168,0-0.339-0.023-0.509-0.073l-9.802-2.859l2.16-9.592 + c0.22-0.98,1.194-1.591,2.171-1.373c0.979,0.22,1.592,1.192,1.373,2.17l-0.92,4.083L84.9,28.742l2.43-9.151 + c0.259-0.968,1.255-1.54,2.223-1.289c0.969,0.257,1.547,1.252,1.288,2.222l-2.165,8.149l8.147,2.165 + c0.97,0.259,1.546,1.254,1.288,2.222c-0.258,0.97-1.258,1.541-2.221,1.29l-9.199-2.448l-30.388,16.69l3.871,1.13 + c0.963,0.28,1.516,1.289,1.234,2.252C61.178,52.768,60.452,53.282,59.665,53.282z M104.223,29.94c-0.156,0-0.312-0.02-0.469-0.061 + L92.1,26.776l3.104-11.657c0.261-0.97,1.261-1.536,2.224-1.288c0.969,0.259,1.545,1.254,1.287,2.224l-2.17,8.146l8.145,2.167 + c0.97,0.259,1.545,1.254,1.289,2.222C105.76,29.404,105.023,29.94,104.223,29.94z M112.09,25.467c-0.156,0-0.312-0.02-0.469-0.061 + l-11.654-3.102l3.104-11.659c0.261-0.97,1.256-1.536,2.225-1.288c0.969,0.259,1.545,1.254,1.287,2.224l-2.171,8.147l8.146,2.166 + c0.969,0.259,1.545,1.254,1.289,2.222C113.627,24.932,112.893,25.467,112.09,25.467z"/> +<path fill="#F16523" d="M20.371,50.808c-1.004,0-1.816-0.812-1.816-1.816c0-18.335,14.917-33.252,33.252-33.252 + c1.004,0,1.816,0.812,1.816,1.816c0,1.003-0.812,1.816-1.816,1.816c-16.333,0-29.62,13.287-29.62,29.62 + C22.187,49.996,21.375,50.808,20.371,50.808z"/> +</svg> diff --git a/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/instant-purchase-icon.svg b/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/instant-purchase-icon.svg new file mode 100644 index 0000000000000..c832fb75efe18 --- /dev/null +++ b/app/design/adminhtml/Magento/backend/Magento_ReleaseNotification/web/images/instant-purchase-icon.svg @@ -0,0 +1,32 @@ +<svg version="1.1" id="Cart" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="120px" height="105px" viewBox="0 0 120 105" enable-background="new 0 0 120 105" xml:space="preserve"> +<path fill="#636567" d="M101.766,80.426H54.435c-6.864,0-12.96-4.613-14.823-11.22l-14.926-52.49 + c-0.957-3.368-4.066-5.719-7.562-5.719H9.316c-1.014,0-1.837-0.822-1.837-1.838c0-1.015,0.824-1.837,1.837-1.837h7.808 + c5.132,0,9.695,3.451,11.097,8.391l14.927,52.493c1.421,5.033,6.062,8.544,11.288,8.544h47.33c1.016,0,1.838,0.822,1.838,1.839 + C103.602,79.604,102.779,80.426,101.766,80.426z"/> +<path fill="#636567" d="M103.557,63.122H51.98c-0.828,0-1.552-0.554-1.771-1.351l-7.48-27.108c-0.271-0.978,0.303-1.99,1.283-2.259 + c0.969-0.26,1.99,0.303,2.259,1.283l7.11,25.76h48.664l6.475-33.153c0.105-0.553-0.133-0.946-0.287-1.132 + c-0.152-0.185-0.492-0.497-1.051-0.497H28.435c-1.014,0-1.837-0.822-1.837-1.838c0-1.016,0.824-1.837,1.837-1.837h78.745 + c1.512,0,2.928,0.669,3.889,1.835c0.963,1.168,1.348,2.69,1.057,4.174l-6.764,34.637C105.191,62.499,104.438,63.122,103.557,63.122z + "/> +<path fill="#636567" d="M60.945,56.262c-0.887,0-1.667-0.643-1.812-1.543l-3.282-20.28c-0.162-1.002,0.519-1.945,1.52-2.108 + c1.018-0.163,1.945,0.519,2.108,1.52l3.283,20.28c0.161,1.003-0.52,1.945-1.521,2.108C61.141,56.255,61.042,56.262,60.945,56.262z" + /> +<path fill="#636567" d="M71.57,56.262c-1.016,0-1.838-0.822-1.838-1.838V34.145c0-1.016,0.822-1.838,1.838-1.838 + c1.017,0,1.837,0.822,1.837,1.838v20.279C73.407,55.439,72.587,56.262,71.57,56.262z"/> +<path fill="#636567" d="M94.062,56.262c-0.098,0-0.195-0.007-0.295-0.022c-1.002-0.161-1.684-1.105-1.521-2.106l3.277-20.28 + c0.16-1.001,1.105-1.685,2.105-1.522c1.003,0.162,1.684,1.106,1.521,2.107l-3.276,20.28C95.729,55.619,94.949,56.262,94.062,56.262z + "/> +<path fill="#636567" d="M83.426,56.262c-1.015,0-1.837-0.822-1.837-1.838V34.145c0-1.016,0.822-1.838,1.837-1.838 + c1.018,0,1.838,0.822,1.838,1.838v20.279C85.264,55.439,84.441,56.262,83.426,56.262z"/> +<path fill="#636567" d="M97.337,36.013H44.499c-1.015,0-1.837-0.822-1.837-1.838c0-1.015,0.822-1.837,1.837-1.837h52.838 + c1.017,0,1.838,0.822,1.838,1.837C99.175,35.191,98.354,36.013,97.337,36.013z"/> +<path fill="#636567" d="M95.404,47.96H47.795c-1.016,0-1.838-0.822-1.838-1.838s0.822-1.837,1.838-1.837h47.609 + c1.016,0,1.838,0.822,1.838,1.837S96.42,47.96,95.404,47.96z"/> +<path fill="#F16523" d="M92.198,96.445c-3.835,0-6.953-3.115-6.953-6.944c0-3.832,3.118-6.948,6.953-6.948 + c3.829,0,6.944,3.116,6.944,6.948C99.143,93.33,96.027,96.445,92.198,96.445z M92.198,86.229c-1.808,0-3.278,1.467-3.278,3.272 + c0,1.804,1.471,3.271,3.278,3.271c1.804,0,3.269-1.467,3.269-3.271C95.467,87.695,94.002,86.229,92.198,86.229z"/> +<path fill="#F16523" d="M58.65,96.445c-3.83,0-6.945-3.115-6.945-6.944c0-3.832,3.115-6.948,6.945-6.948 + c3.829,0,6.944,3.116,6.944,6.948C65.596,93.33,62.479,96.445,58.65,96.445z M58.65,86.229c-1.804,0-3.27,1.467-3.27,3.272 + c0,1.804,1.466,3.271,3.27,3.271c1.803,0,3.269-1.467,3.269-3.271C61.919,87.695,60.453,86.229,58.65,86.229z"/> +</svg> From 24de9b0cad98f399b5f5ca6af7f8bb0a7af2c9d2 Mon Sep 17 00:00:00 2001 From: rossbrandon <rbrandon@magento.com> Date: Fri, 10 Nov 2017 16:08:16 -0600 Subject: [PATCH 195/653] MAGETWO-83184: Static Content Update for ReleaseNotification Module --- .../view/adminhtml/templates/admin/access_denied.phtml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/code/Magento/Backend/view/adminhtml/templates/admin/access_denied.phtml b/app/code/Magento/Backend/view/adminhtml/templates/admin/access_denied.phtml index 18d0b47d21498..b476e54d642c6 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/admin/access_denied.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/admin/access_denied.phtml @@ -21,15 +21,9 @@ <li><span><?= $block->escapeHtml(__('Contact a system administrator or store owner to gain permissions.')) ?></span></li> <li> <span><?= $block->escapeHtml(__('Return to ')) ?> - <a href="<?= $block->escapeHtmlAttr(__('javascript:history.back()')) ?>" - onclick="<?= $block->escapeHtmlAttr(__('goBackToReferer(); return false;')) ?>"> + <a href="<?= $block->escapeHtmlAttr(__('javascript:history.back()')) ?>"> <?= $block->escapeHtml(__('previous page')) ?></a><?= $block->escapeHtml(__('.')) ?> </span> </li> </ul> </div> -<script> - function goBackToReferer() { - window.location.href = document.referrer; - } -</script> From 9ae097af660f77a27e36208d44ea3132a8027457 Mon Sep 17 00:00:00 2001 From: rossbrandon <rbrandon@magento.com> Date: Fri, 10 Nov 2017 17:00:06 -0600 Subject: [PATCH 196/653] MAGETWO-83184: Static Content Update for ReleaseNotification Module --- .../templates/admin/access_denied.phtml | 9 +- .../ReleaseNotification/i18n/en_US.csv | 123 +++++++++--------- .../ui_component/release_notification.xml | 2 +- 3 files changed, 73 insertions(+), 61 deletions(-) diff --git a/app/code/Magento/Backend/view/adminhtml/templates/admin/access_denied.phtml b/app/code/Magento/Backend/view/adminhtml/templates/admin/access_denied.phtml index b476e54d642c6..843328fbf17d7 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/admin/access_denied.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/admin/access_denied.phtml @@ -21,8 +21,13 @@ <li><span><?= $block->escapeHtml(__('Contact a system administrator or store owner to gain permissions.')) ?></span></li> <li> <span><?= $block->escapeHtml(__('Return to ')) ?> - <a href="<?= $block->escapeHtmlAttr(__('javascript:history.back()')) ?>"> - <?= $block->escapeHtml(__('previous page')) ?></a><?= $block->escapeHtml(__('.')) ?> + <?php if(isset($_SERVER['HTTP_REFERER'])): ?> + <a href="<?= $block->escapeUrl(__($_SERVER['HTTP_REFERER'])) ?>"> + <?= $block->escapeHtml(__('previous page')) ?></a><?= $block->escapeHtml(__('.')) ?> + <?php else: ?> + <a href="<?= $block->escapeHtmlAttr(__('javascript:history.back()')) ?>"> + <?= $block->escapeHtml(__('previous page')) ?></a><?= $block->escapeHtml(__('.')) ?> + <?php endif ?> </span> </li> </ul> diff --git a/app/code/Magento/ReleaseNotification/i18n/en_US.csv b/app/code/Magento/ReleaseNotification/i18n/en_US.csv index 3fd0be63b4ab1..bf70afad8bf1a 100644 --- a/app/code/Magento/ReleaseNotification/i18n/en_US.csv +++ b/app/code/Magento/ReleaseNotification/i18n/en_US.csv @@ -1,42 +1,42 @@ "Next >","Next >" "< Back","< Back" "Done","Done" -"What's new for Magento 2.2.2","What's new for Magento 2.2.2" -"<p>Magento 2.2.2 offers an exciting set of features and enhancements, including:</p> +"What's new with Magento 2.2.2","What's new with Magento 2.2.2" +"<p>Magento 2.2.2 offers advanced new features, including:</p> <br /> <div class=""analytics-highlight""> <h3>Advanced Reporting</h3> <p>Gain valuable insights through a dynamic suite of product, order, and customer reports, powered by Magento Business Intelligence.</p> </div> - <div class=""developer-experience-highlight""> - <h3>Developer Experience</h3> - <p>We've improved the entire development lifecycle - installation, development, and maintenance - - while ensuring Magento's commitment to quality.</p> + <div class=""instant-purchase-highlight""> + <h3>Instant Purchase</h3> + <p>Simplify ordering and boost conversion rates by allowing your customers to use stored + payment and shipping information to skip tedious checkout steps.</p> </div> - <div class=""b2b-highlight""> - <h3>Business-to-Business (B2B) <span>Magento Commerce only</span></h3> - <p>Features to manage your complex company accounts, rapid reordering, new buyers' roles and - permissions, and more.</p> + <div class=""email-marketing-highlight""> + <h3>Email Marketing Automation</span></h3> + <p>Send smarter, faster email campaigns with marketing automation from dotmailer, powered by + your Magento store's live data.</p> </div> <p>Release notes and additional details can be found at <a href=""http://devdocs.magento.com/"" target=""_blank"">Magento DevDocs</a>. - </p>","<p>Magento 2.2.2 offers an exciting set of features and enhancements, including:</p> + </p>","<p>Magento 2.2.2 offers advanced new features, including:</p> <br /> <div class=""analytics-highlight""> <h3>Advanced Reporting</h3> <p>Gain valuable insights through a dynamic suite of product, order, and customer reports, powered by Magento Business Intelligence.</p> </div> - <div class=""developer-experience-highlight""> - <h3>Developer Experience</h3> - <p>We've improved the entire development lifecycle - installation, development, and maintenance - - while ensuring Magento's commitment to quality.</p> + <div class=""instant-purchase-highlight""> + <h3>Instant Purchase</h3> + <p>Simplify ordering and boost conversion rates by allowing your customers to use stored + payment and shipping information to skip tedious checkout steps.</p> </div> - <div class=""b2b-highlight""> - <h3>Business-to-Business (B2B) <span>Magento Commerce only</span></h3> - <p>Features to manage your complex company accounts, rapid reordering, new buyers' roles and - permissions, and more.</p> + <div class=""email-marketing-highlight""> + <h3>Email Marketing Automation</span></h3> + <p>Send smarter, faster email campaigns with marketing automation from dotmailer, powered by + your Magento store's live data.</p> </div> <p>Release notes and additional details can be found at <a href=""http://devdocs.magento.com/"" target=""_blank"">Magento DevDocs</a>. @@ -57,51 +57,58 @@ with new and improved analytics.</p><br /><p>By using Magento 2.2, you agree to the Advanced Reporting <a href=""https://magento.com/legal/terms/privacy"" target=""_blank"">Privacy Policy</a> and <a href=""https://magento.com/legal/terms/cloud-terms"" target=""_blank"">Terms - of Service</a>. You may opt out at any time from the Stores Configuration page.</p> - " -"Developer Experience","Developer Experience" -"<p>Magento's 2.2.2 release offers a set of improvements that were developed using increased - quality standards. The release includes these features, among others: + of Service</a>. You may opt out at any time from the Stores Configuration page.</p>" +"Instant Purchase","Instant Purchase" +"<p>Now you can deliver an Amazon-like experience with a new, streamlined checkout option. + Logged-in customers can use previously-stored payment credentials and shipping information + to skip steps, making the process faster and easier, especially for mobile shoppers. Key + features include: </p> <ul> - <li><span>GitHub Community Moderator Team</span></li> - <li><span>GitHub Community Videos</span></li> - <li><span>DevDocs Enhancements</span></li> - </ul> - <p>Find the 2.2.2 details and future plans in the - <a href=""http://community.magento.com/devblog"" target=""_blank"">Magento DevBlog</a>. - </p>","<p>Magento's 2.2.2 release offers a set of improvements that were developed using increased - quality standards. The release includes these features, among others: + <li><span>Configurable “Instant Purchase” button to place orders</span></li> + <li><span>Support for all payment solutions using Braintree Vault, including Braintree Credit + Card, Braintree PayPal, and PayPal Payflow Pro.</span></li> + <li><span>Shipping to the customer’s default address using the lowest cost, available shipping + method</span></li> + <li><span>Ability for developers to customize the Instant Purchase business logic to meet + merchant needs</span></li> + </ul>","<p>Now you can deliver an Amazon-like experience with a new, streamlined checkout option. + Logged-in customers can use previously-stored payment credentials and shipping information + to skip steps, making the process faster and easier, especially for mobile shoppers. Key + features include: </p> <ul> - <li><span>GitHub Community Moderator Team</span></li> - <li><span>GitHub Community Videos</span></li> - <li><span>DevDocs Enhancements</span></li> - </ul> - <p>Find the 2.2.2 details and future plans in the - <a href=""http://community.magento.com/devblog"" target=""_blank"">Magento DevBlog</a>. - </p>" -"Business-to-Business (B2B) <span>Magento Commerce only</span>","Business-to-Business (B2B) <span>Magento Commerce only</span>" -"<p>Magento Commerce 2.2.2 offers rich new functionality that empowers B2B merchants to transform - their online purchasing experience to achieve greater operational efficiency, improved customer - service, and sales growth. New capabilities include: + <li><span>Configurable “Instant Purchase” button to place orders</span></li> + <li><span>Support for all payment solutions using Braintree Vault, including Braintree Credit + Card, Braintree PayPal, and PayPal Payflow Pro.</span></li> + <li><span>Shipping to the customer’s default address using the lowest cost, available shipping + method</span></li> + <li><span>Ability for developers to customize the Instant Purchase business logic to meet + merchant needs</span></li> + </ul>" +"Email Marketing Automation","Email Marketing Automation" +"<p>Unlock an unparalleled level of insight and control of your eCommerce marketing with + dotmailer Email Marketing Automation. Included with Magento 2.2.2 for easy set-up, dotmailer + ensures every customer’s journey is captured, segmented, and personalized, enabling you to + deliver customer-centric campaigns that beat your results over and over again. Benefits include: </p> <ul> - <li><span>Company accounts with multiple tiers of buyers</span></li> - <li><span>Buyer roles and permissions</span></li> - <li><span>Custom catalogs and pricing</span></li> - <li><span>Quoting support</span></li> - <li><span>Rapid reorder experience</span></li> - <li><span>Payments on credit</span></li> - </ul>","<p>Magento Commerce 2.2.2 offers rich new functionality that empowers B2B merchants to transform - their online purchasing experience to achieve greater operational efficiency, improved customer - service, and sales growth. New capabilities include: + <li><span>No obligation 14-day trial.</span></li> + <li><span>Automation campaigns using your live Magento store data that drive revenue, + including abandoned cart, abandoned browse, product replenishment, and many more</span></li> + <li><span>Custom catalogs and pricing.</span></li> + <li><span>Built-in solution for transactional emails.</span></li> + <li><span>Telephone support and advice from marketing experts included.</span></li> + </ul>","<p>Unlock an unparalleled level of insight and control of your eCommerce marketing with + dotmailer Email Marketing Automation. Included with Magento 2.2.2 for easy set-up, dotmailer + ensures every customer’s journey is captured, segmented, and personalized, enabling you to + deliver customer-centric campaigns that beat your results over and over again. Benefits include: </p> <ul> - <li><span>Company accounts with multiple tiers of buyers</span></li> - <li><span>Buyer roles and permissions</span></li> - <li><span>Custom catalogs and pricing</span></li> - <li><span>Quoting support</span></li> - <li><span>Rapid reorder experience</span></li> - <li><span>Payments on credit</span></li> + <li><span>No obligation 14-day trial.</span></li> + <li><span>Automation campaigns using your live Magento store data that drive revenue, + including abandoned cart, abandoned browse, product replenishment, and many more</span></li> + <li><span>Custom catalogs and pricing.</span></li> + <li><span>Built-in solution for transactional emails.</span></li> + <li><span>Telephone support and advice from marketing experts included.</span></li> </ul>" diff --git a/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml b/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml index 4364e8948adf5..7a6f0af74716d 100644 --- a/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml +++ b/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml @@ -43,7 +43,7 @@ <state>true</state> <options> <option name="modalClass" xsi:type="string">release-notification-modal</option> - <option name="title" xsi:type="string" translate="true">What's new for Magento 2.2.2</option> + <option name="title" xsi:type="string" translate="true">What's new with Magento 2.2.2</option> <option name="type" xsi:type="string">popup</option> <option name="responsive" xsi:type="boolean">true</option> <option name="innerScroll" xsi:type="boolean">true</option> From a781bf6f75c74a6e871f1640ae679b18967ac000 Mon Sep 17 00:00:00 2001 From: Timon de Groot <tdegroot96@gmail.com> Date: Sat, 11 Nov 2017 11:56:37 +0100 Subject: [PATCH 197/653] Add backwards compatibility to XmlCatalog PhpStorm changes --- .../Model/XmlCatalog/Format/PhpStorm.php | 13 ++++++------ .../Format/PhpStorm/DomDocumentFactory.php | 20 ++++++++++++++++--- .../DomDocument/DomDocumentFactory.php | 5 +++-- .../DomDocument/DomDocumentFactoryTest.php | 8 ++++---- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php index 54b7526b0d1a8..669af0145b53c 100644 --- a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php +++ b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm.php @@ -7,10 +7,11 @@ namespace Magento\Developer\Model\XmlCatalog\Format; use Magento\Developer\Model\XmlCatalog\Format\PhpStorm\DomDocumentFactory; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Filesystem\Directory\ReadFactory; use Magento\Framework\Filesystem\Directory\ReadInterface; -use Magento\Framework\Filesystem\File\WriteFactory as FileWriteFactory; +use Magento\Framework\Filesystem\File\WriteFactory; /** * Class PhpStorm generates URN catalog for PhpStorm 9 @@ -23,7 +24,7 @@ class PhpStorm implements FormatInterface private $currentDirRead; /** - * @var FileWriteFactory + * @var WriteFactory */ private $fileWriteFactory; @@ -34,17 +35,17 @@ class PhpStorm implements FormatInterface /** * @param ReadFactory $readFactory - * @param FileWriteFactory $fileWriteFactory + * @param WriteFactory $fileWriteFactory * @param DomDocumentFactory $domDocumentFactory */ public function __construct( ReadFactory $readFactory, - FileWriteFactory $fileWriteFactory, - DomDocumentFactory $domDocumentFactory + WriteFactory $fileWriteFactory, + DomDocumentFactory $domDocumentFactory = null ) { $this->currentDirRead = $readFactory->create(getcwd()); $this->fileWriteFactory = $fileWriteFactory; - $this->domDocumentFactory = $domDocumentFactory; + $this->domDocumentFactory = $domDocumentFactory ?: ObjectManager::getInstance()->get(DomDocumentFactory::class); } /** diff --git a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php index 3a04b28db8332..3363f05ac4a3c 100644 --- a/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php +++ b/app/code/Magento/Developer/Model/XmlCatalog/Format/PhpStorm/DomDocumentFactory.php @@ -7,14 +7,28 @@ use DOMDocument; -class DomDocumentFactory extends \Magento\Framework\DomDocument\DomDocumentFactory +class DomDocumentFactory { + /** + * @var \Magento\Framework\DomDocument\DomDocumentFactory + */ + private $documentFactory; + + /** + * DomDocumentFactory constructor. + * @param \Magento\Framework\DomDocument\DomDocumentFactory $documentFactory + */ + public function __construct(\Magento\Framework\DomDocument\DomDocumentFactory $documentFactory) + { + $this->documentFactory = $documentFactory; + } + /** * {@inheritdoc} */ - public function create($data = null) + public function create(string $data = null) { - $dom = parent::create($data); + $dom = $this->documentFactory->create($data); if (empty($data)) { $this->initializeDocument($dom); diff --git a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php index 91c1f91577cbc..d70b0d6071034 100644 --- a/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php +++ b/lib/internal/Magento/Framework/DomDocument/DomDocumentFactory.php @@ -34,11 +34,12 @@ public function __construct(\Magento\Framework\ObjectManagerInterface $objectMan * * @return DOMDocument */ - public function create($data = null) + public function create(string $data = null) { + /** @var DOMDocument $dom */ $dom = $this->objectManager->create(DOMDocument::class); - if (!empty($data) && is_string($data)) { + if (!empty($data)) { $dom->loadXML($data); } diff --git a/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php b/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php index d04a9be97306a..c5590d5712d30 100644 --- a/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php +++ b/lib/internal/Magento/Framework/Test/Unit/DomDocument/DomDocumentFactoryTest.php @@ -68,14 +68,14 @@ public function testCreate($data = null) ->with(DOMDocument::class) ->willReturn($this->domDocumentMock); - if (empty($data) || !is_string($data)) { - $this->domDocumentMock->expects($this->never()) - ->method('loadXML'); - } else { + if (!empty($data)) { $this->domDocumentMock->expects($this->once()) ->method('loadXML') ->with($data) ->willReturn(true); + } else { + $this->domDocumentMock->expects($this->never()) + ->method('loadXML'); } $this->domDocumentFactory->create($data); From f4857ec271a8a5dc9944fb9b6f664dbaf7c62e27 Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Sat, 11 Nov 2017 12:58:43 +0000 Subject: [PATCH 198/653] Fix extends phpunit class --- .../Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php index 6a2f215144f0d..292adb55c5533 100644 --- a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php +++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php @@ -17,7 +17,7 @@ /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class IndexerStatusMviewCommandTest extends \PHPUnit_Framework_TestCase +class IndexerStatusMviewCommandTest extends \PHPUnit\Framework\TestCase { /** * @var IndexerStatusMviewCommand From c80710a023a1ff6ca3c13f2cc3ba2a867e482638 Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Sat, 11 Nov 2017 13:03:32 +0000 Subject: [PATCH 199/653] Add mview getListSize command --- .../Command/IndexerStatusMviewCommand.php | 2 +- .../Command/IndexerStatusMviewCommandTest.php | 9 ++--- .../Framework/Mview/View/Changelog.php | 36 ++++++++++++++++--- .../Mview/View/ChangelogInterface.php | 9 +++++ 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php index 0efeef4a71be5..37caabc613e66 100644 --- a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php +++ b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php @@ -61,7 +61,7 @@ protected function execute(InputInterface $input, OutputInterface $output) continue; } - $pendingCount = count($changelog->getList($state->getVersionId(), $currentVersionId)); + $pendingCount = $changelog->getListSize($state->getVersionId(), $currentVersionId); $pendingString = "<error>$pendingCount</error>"; if ($pendingCount <= 0) { diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php index 292adb55c5533..4ae3ca83870e7 100644 --- a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php +++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php @@ -176,14 +176,11 @@ protected function generateMviewStub(array $viewData, array $changelogData, arra ->disableOriginalConstructor() ->getMock(); - $list = []; - if ($changelogData['version_id'] !== $stateData['version_id']) { - $list = range($stateData['version_id']+1, $changelogData['version_id']); - } + $listSize = $changelogData['version_id'] - $stateData['version_id']; $changelog->expects($this->any()) - ->method('getList') - ->willReturn($list); + ->method('getListSize') + ->willReturn($listSize); $changelog->expects($this->any()) ->method('getVersion') diff --git a/lib/internal/Magento/Framework/Mview/View/Changelog.php b/lib/internal/Magento/Framework/Mview/View/Changelog.php index 91caf66228360..4f648d6b7d6ae 100644 --- a/lib/internal/Magento/Framework/Mview/View/Changelog.php +++ b/lib/internal/Magento/Framework/Mview/View/Changelog.php @@ -127,14 +127,12 @@ public function clear($versionId) } /** - * Retrieve entity ids by range [$fromVersionId..$toVersionId] - * * @param int $fromVersionId * @param int $toVersionId - * @return int[] + * @return \Magento\Framework\DB\Select * @throws ChangelogTableNotExistsException */ - public function getList($fromVersionId, $toVersionId) + protected function getListSelect($fromVersionId, $toVersionId) { $changelogTableName = $this->resource->getTableName($this->getName()); if (!$this->connection->isTableExists($changelogTableName)) { @@ -154,9 +152,39 @@ public function getList($fromVersionId, $toVersionId) (int)$toVersionId ); + return $select; + } + + /** + * Retrieve entity ids by range [$fromVersionId..$toVersionId] + * + * @param int $fromVersionId + * @param int $toVersionId + * @return int[] + * @throws ChangelogTableNotExistsException + */ + public function getList($fromVersionId, $toVersionId) + { + $select = $this->getListSelect($fromVersionId, $toVersionId); return $this->connection->fetchCol($select); } + /** + * Retrieve the count of entity ids in the range [$fromVersionId..$toVersionId] + * + * @param int $fromVersionId + * @param int $toVersionId + * @return int[] + * @throws ChangelogTableNotExistsException + */ + public function getListSize($fromVersionId, $toVersionId) + { + $countSelect = $this->getListSelect($fromVersionId, $toVersionId); + $countSelect->reset(\Magento\Framework\DB\Select::COLUMNS); + $countSelect->columns(new \Zend_Db_Expr(("COUNT(DISTINCT " . $this->getColumnName() . ")"))); + return $this->connection->fetchOne($countSelect); + } + /** * Get maximum version_id from changelog * @return int diff --git a/lib/internal/Magento/Framework/Mview/View/ChangelogInterface.php b/lib/internal/Magento/Framework/Mview/View/ChangelogInterface.php index b00c1ca3a2e33..da115ecdb83ee 100644 --- a/lib/internal/Magento/Framework/Mview/View/ChangelogInterface.php +++ b/lib/internal/Magento/Framework/Mview/View/ChangelogInterface.php @@ -42,6 +42,15 @@ public function clear($versionId); */ public function getList($fromVersionId, $toVersionId); + /** + * Retrieve the count of entity ids in the range [$fromVersionId..$toVersionId] + * + * @param $fromVersionId + * @param $toVersionId + * @return mixed + */ + public function getListSize($fromVersionId, $toVersionId); + /** * Get maximum version_id from changelog * From 149268c5c30267a04d50f8cc63f2ea3df0b8708e Mon Sep 17 00:00:00 2001 From: Andrew Garside <andrew.garside@temando.com> Date: Sun, 12 Nov 2017 14:24:12 +1000 Subject: [PATCH 200/653] Update the fixture and tests to reflect the functionality of getShippingMethod --- .../testsuite/Magento/Sales/Service/V1/OrderCreateTest.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderCreateTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderCreateTest.php index b61bfdabe25cd..a907faac98b72 100755 --- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderCreateTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderCreateTest.php @@ -140,7 +140,7 @@ protected function prepareOrder() [ 'shipping' => [ 'address' => $address, - 'method' => 'Flat Rate - Fixed' + 'method' => 'flatrate_flatrate' ], 'items' => [$orderItem->getData()], 'stock_id' => null, @@ -232,6 +232,9 @@ public function testOrderCreate() $this->assertEquals($order['grand_total'], $model->getGrandTotal()); $this->assertNotNull($model->getShippingAddress()); $this->assertTrue((bool)$model->getShippingAddress()->getId()); - $this->assertEquals('Flat Rate - Fixed', $model->getShippingMethod()); + $this->assertEquals('Flat Rate - Fixed', $model->getShippingDescription()); + $shippingMethod = $model->getShippingMethod(true); + $this->assertEquals('flatrate', $shippingMethod['carrier_code']); + $this->assertEquals('flatrate', $shippingMethod['method']); } } From b75399cd9045dc2ef111e300ee962f4158b0d471 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Mon, 13 Nov 2017 10:30:26 +0200 Subject: [PATCH 201/653] 11882: It's not possible to enable "log to file" (debugging) in production mode. Psr logger debug method does not work by the default in developer mode --- app/code/Magento/Backend/etc/adminhtml/di.xml | 13 ++++++++++++- .../Deploy/App/Mode/ConfigProvider.php | 4 ++-- app/code/Magento/Deploy/Model/Mode.php | 10 +++++----- .../Deploy/Test/Unit/Model/ModeTest.php | 4 ++-- app/code/Magento/Deploy/etc/di.xml | 19 ++++++++++++++++++- .../Developer/etc/adminhtml/system.xml | 1 - .../Model/Logger/Handler/DebugTest.php | 1 - 7 files changed, 39 insertions(+), 13 deletions(-) diff --git a/app/code/Magento/Backend/etc/adminhtml/di.xml b/app/code/Magento/Backend/etc/adminhtml/di.xml index 97a39139411c0..f3d2e9accc983 100644 --- a/app/code/Magento/Backend/etc/adminhtml/di.xml +++ b/app/code/Magento/Backend/etc/adminhtml/di.xml @@ -142,7 +142,18 @@ <type name="Magento\Config\Model\Config\Structure\ConcealInProductionConfigList"> <arguments> <argument name="configs" xsi:type="array"> - <item name="dev" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev/restrict" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev/front_end_development_workflow" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev/template" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev/translate_inline" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev/js" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev/css" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev/image" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev/static" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev/grid" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev/debug/template_hints_storefront" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev/debug/template_hints_admin" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev/debug/template_hints_blocks" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> <item name="general/locale/code" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::DISABLED</item> </argument> </arguments> diff --git a/app/code/Magento/Deploy/App/Mode/ConfigProvider.php b/app/code/Magento/Deploy/App/Mode/ConfigProvider.php index 142e3fe819438..900908a1f158f 100644 --- a/app/code/Magento/Deploy/App/Mode/ConfigProvider.php +++ b/app/code/Magento/Deploy/App/Mode/ConfigProvider.php @@ -16,7 +16,7 @@ class ConfigProvider * [ * 'developer' => [ * 'production' => [ - * {{setting_path}} => {{setting_value}} + * {{setting_path}} => ['value' => {{setting_value}}, 'lock' => {{lock_value}}] * ] * ] * ] @@ -41,7 +41,7 @@ public function __construct(array $config = []) * need to turn off 'dev/debug/debug_logging' setting in this case method * will return array * [ - * {{setting_path}} => {{setting_value}} + * {{setting_path}} => ['value' => {{setting_value}}, 'lock' => {{lock_value}}] * ] * * @param string $currentMode diff --git a/app/code/Magento/Deploy/Model/Mode.php b/app/code/Magento/Deploy/Model/Mode.php index ba3e8652fd443..c20a459561d76 100644 --- a/app/code/Magento/Deploy/Model/Mode.php +++ b/app/code/Magento/Deploy/Model/Mode.php @@ -205,17 +205,17 @@ protected function setStoreMode($mode) private function saveAppConfigs($mode) { $configs = $this->configProvider->getConfigs($this->getMode(), $mode); - foreach ($configs as $path => $value) { - $this->emulatedAreaProcessor->process(function () use ($path, $value) { + foreach ($configs as $path => $item) { + $this->emulatedAreaProcessor->process(function () use ($path, $item) { $this->processorFacadeFactory->create()->process( $path, - $value, + $item['value'], ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null, - true + $item['lock'] ); }); - $this->output->writeln('Config "' . $path . ' = ' . $value . '" has been saved.'); + $this->output->writeln('Config "' . $path . ' = ' . $item['value'] . '" has been saved.'); } } diff --git a/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php b/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php index f80c6cb69f1a9..3db2023e12f40 100644 --- a/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php +++ b/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php @@ -226,7 +226,7 @@ public function testEnableProductionModeMinimal() ->method('getConfigs') ->with('developer', 'production') ->willReturn([ - 'dev/debug/debug_logging' => 0 + 'dev/debug/debug_logging' => ['value' => 0, 'lock' => false] ]); $this->emulatedAreaProcessor->expects($this->once()) ->method('process') @@ -245,7 +245,7 @@ public function testEnableProductionModeMinimal() 0, ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null, - true + false ); $this->outputMock->expects($this->once()) ->method('writeln') diff --git a/app/code/Magento/Deploy/etc/di.xml b/app/code/Magento/Deploy/etc/di.xml index e47fca3a6b946..e59ad7e39fc43 100644 --- a/app/code/Magento/Deploy/etc/di.xml +++ b/app/code/Magento/Deploy/etc/di.xml @@ -75,7 +75,24 @@ <argument name="config" xsi:type="array"> <item name="developer" xsi:type="array"> <item name="production" xsi:type="array"> - <item name="dev/debug/debug_logging" xsi:type="string">0</item> + <item name="dev/debug/debug_logging" xsi:type="array"> + <item name="value" xsi:type="string">0</item> + <item name="lock" xsi:type="boolean">false</item> + </item> + </item> + <item name="developer" xsi:type="array"> + <item name="dev/debug/debug_logging" xsi:type="array"> + <item name="value" xsi:type="string">1</item> + <item name="lock" xsi:type="boolean">false</item> + </item> + </item> + </item> + <item name="production" xsi:type="array"> + <item name="developer" xsi:type="array"> + <item name="dev/debug/debug_logging" xsi:type="array"> + <item name="value" xsi:type="string">1</item> + <item name="lock" xsi:type="boolean">false</item> + </item> </item> </item> </argument> diff --git a/app/code/Magento/Developer/etc/adminhtml/system.xml b/app/code/Magento/Developer/etc/adminhtml/system.xml index 9663cff72bc9d..0166814d889c2 100644 --- a/app/code/Magento/Developer/etc/adminhtml/system.xml +++ b/app/code/Magento/Developer/etc/adminhtml/system.xml @@ -28,7 +28,6 @@ <group id="debug" translate="label" type="text" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1"> <field id="debug_logging" translate="label comment" type="select" sortOrder="30" showInDefault="1" showInWebsite="0" showInStore="0"> <label>Log to File</label> - <comment>Not available in production mode.</comment> <source_model>Magento\Config\Model\Config\Source\Yesno</source_model> </field> </group> diff --git a/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php b/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php index 71e61162d29c9..a40a7c8ad2962 100644 --- a/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php +++ b/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php @@ -95,7 +95,6 @@ public function setUp() // Preconditions $this->mode->enableDeveloperMode(); - $this->enableDebugging(); if (file_exists($this->getDebuggerLogPath())) { unlink($this->getDebuggerLogPath()); } From 061229bef7809fd0f55cee299a203ecc736b2fba Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Mon, 13 Nov 2017 12:03:20 +0200 Subject: [PATCH 202/653] MAGETWO-70726: [GITHUB] [2.1] Store View Language switch leads to 404 on some cases #5416 --- .../Model/Storage/DbStorage.php | 52 ++++++++----------- .../Test/Unit/Model/Storage/DbStorageTest.php | 16 +----- 2 files changed, 23 insertions(+), 45 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php index 9e9007e7f667c..f0351467e5f0e 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php @@ -12,47 +12,37 @@ class DbStorage extends BaseDbStorage { /** - * @param array $data - * @return \Magento\Framework\DB\Select + * {@inheritDoc} */ protected function prepareSelect(array $data) { - if (!array_key_exists(UrlRewrite::ENTITY_ID, $data) - || !array_key_exists(UrlRewrite::ENTITY_TYPE, $data) - || !array_key_exists(UrlRewrite::STORE_ID, $data) - ) { - throw new \InvalidArgumentException( - UrlRewrite::ENTITY_ID . ', ' . UrlRewrite::ENTITY_TYPE - . ' and ' . UrlRewrite::STORE_ID . ' parameters are required.' - ); + $metadata = []; + if (array_key_exists(UrlRewrite::METADATA, $data)) { + $metadata = $data[UrlRewrite::METADATA]; + unset($data[UrlRewrite::METADATA]); } $select = $this->connection->select(); - $select->from(['url_rewrite' => $this->resource->getTableName('url_rewrite')]) - ->joinLeft( - ['relation' => $this->resource->getTableName(Product::TABLE_NAME)], - 'url_rewrite.url_rewrite_id = relation.url_rewrite_id' - ) - ->where( - 'url_rewrite.entity_id IN (?)', - $data[UrlRewrite::ENTITY_ID] - ) - ->where( - 'url_rewrite.entity_type = ?', - $data[UrlRewrite::ENTITY_TYPE] - ) - ->where('url_rewrite.store_id IN (?)', $data[UrlRewrite::STORE_ID]); - if (array_key_exists(UrlRewrite::REDIRECT_TYPE, $data)) { - $select->where( - 'url_rewrite.redirect_type = ?', - $data[UrlRewrite::REDIRECT_TYPE] - ); + $select->from([ + 'url_rewrite' => $this->resource->getTableName(self::TABLE_NAME) + ]); + $select->joinLeft( + ['relation' => $this->resource->getTableName(Product::TABLE_NAME)], + 'url_rewrite.url_rewrite_id = relation.url_rewrite_id' + ); + + foreach ($data as $column => $value) { + $select->where('url_rewrite.' . $column . ' IN (?)', $value); } - if (empty($data[UrlRewrite::METADATA]['category_id'])) { + if (empty($metadata['category_id'])) { $select->where('relation.category_id IS NULL'); } else { - $select->where('relation.category_id = ?', $data[UrlRewrite::METADATA]['category_id']); + $select->where( + 'relation.category_id = ?', + $metadata['category_id'] + ); } + return $select; } } diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php index 89e9616f107e0..d00b0c87fa5ad 100644 --- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php @@ -89,18 +89,6 @@ protected function setUp() public function testPrepareSelect() { - //Not passing requried parameters. - try { - $this->storage->findOneByData(['SomeOtherParam'=>42]); - $this->fail('Didn\'t ask for required parameters'); - } catch (\InvalidArgumentException $exception) { - $this->assertEquals( - UrlRewrite::ENTITY_ID . ', ' . UrlRewrite::ENTITY_TYPE - . ' and ' . UrlRewrite::STORE_ID . ' parameters are required.', - $exception->getMessage() - ); - } - //Passing expected parameters, checking select built. $entityType = 'custom'; $entityId= 42; @@ -116,7 +104,7 @@ public function testPrepareSelect() $this->select ->expects($this->at(3)) ->method('where') - ->with('url_rewrite.entity_type = ?', $entityType) + ->with('url_rewrite.entity_type IN (?)', $entityType) ->willReturn($this->select); $this->select ->expects($this->at(4)) @@ -126,7 +114,7 @@ public function testPrepareSelect() $this->select ->expects($this->at(5)) ->method('where') - ->with('url_rewrite.redirect_type = ?', $redirectType) + ->with('url_rewrite.redirect_type IN (?)', $redirectType) ->willReturn($this->select); $this->select ->expects($this->at(6)) From 7db3049f6565075fcec68c85c995627af046d0f8 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko <vgoncharenko@magento.com> Date: Mon, 13 Nov 2017 15:37:31 +0200 Subject: [PATCH 203/653] MAGETWO-83755: Impossible to create magento project for 2.2.2 --- lib/internal/Magento/Framework/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json index aee3e0442c259..c2330ce679014 100644 --- a/lib/internal/Magento/Framework/composer.json +++ b/lib/internal/Magento/Framework/composer.json @@ -26,7 +26,7 @@ "monolog/monolog": "^1.17", "oyejorge/less.php": "~1.7.0", "symfony/console": "~2.3, !=2.7.0", - "tedivm/jshrink": "~1.1.0", + "tedivm/jshrink": "~1.2.0", "zendframework/zend-code": "^3.1.0", "zendframework/zend-crypt": "^2.6.0", "zendframework/zend-mvc": "~2.6.3", From b750e583b36d4409dfd2b2b3a82bea06a31b2511 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Fri, 10 Nov 2017 12:29:03 +0200 Subject: [PATCH 204/653] 7691: address with saveInAddressBook 0 are still being added to the address book for new customers(backport to 2.2) --- .../Magento/Quote/Model/QuoteManagement.php | 2 + .../Test/Unit/Model/QuoteManagementTest.php | 67 +++++++++++----- .../Sales/Model/Order/CustomerManagement.php | 37 ++++++++- app/code/Magento/Sales/Setup/UpgradeData.php | 80 ++++++++++++++++++- .../Model/Order/CustomerManagementTest.php | 46 ++++++++++- app/code/Magento/Sales/etc/module.xml | 2 +- .../adminhtml/web/order/create/scripts.js | 4 +- .../Order/Create/Shipping/Method.php | 10 ++- 8 files changed, 213 insertions(+), 35 deletions(-) diff --git a/app/code/Magento/Quote/Model/QuoteManagement.php b/app/code/Magento/Quote/Model/QuoteManagement.php index 6f03bba5072a2..9bdcb083808ad 100644 --- a/app/code/Magento/Quote/Model/QuoteManagement.php +++ b/app/code/Magento/Quote/Model/QuoteManagement.php @@ -475,6 +475,7 @@ protected function submitQuote(QuoteEntity $quote, $orderData = []) 'email' => $quote->getCustomerEmail() ] ); + $shippingAddress->setData('quote_address_id', $quote->getShippingAddress()->getId()); $addresses[] = $shippingAddress; $order->setShippingAddress($shippingAddress); $order->setShippingMethod($quote->getShippingAddress()->getShippingMethod()); @@ -486,6 +487,7 @@ protected function submitQuote(QuoteEntity $quote, $orderData = []) 'email' => $quote->getCustomerEmail() ] ); + $billingAddress->setData('quote_address_id', $quote->getBillingAddress()->getId()); $addresses[] = $billingAddress; $order->setBillingAddress($billingAddress); $order->setAddresses($addresses); diff --git a/app/code/Magento/Quote/Test/Unit/Model/QuoteManagementTest.php b/app/code/Magento/Quote/Test/Unit/Model/QuoteManagementTest.php index 8316885e9b45c..145a18fb34ca3 100644 --- a/app/code/Magento/Quote/Test/Unit/Model/QuoteManagementTest.php +++ b/app/code/Magento/Quote/Test/Unit/Model/QuoteManagementTest.php @@ -7,8 +7,8 @@ namespace Magento\Quote\Test\Unit\Model; use Magento\Framework\Exception\NoSuchEntityException; - use Magento\Quote\Model\CustomerManagement; +use Magento\Sales\Api\Data\OrderAddressInterface; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) @@ -540,12 +540,12 @@ public function testSubmit() $shippingAddress = $this->createMock(\Magento\Quote\Model\Quote\Address::class); $payment = $this->createMock(\Magento\Quote\Model\Quote\Payment::class); $baseOrder = $this->createMock(\Magento\Sales\Api\Data\OrderInterface::class); - $convertedBillingAddress = $this->createMock(\Magento\Sales\Api\Data\OrderAddressInterface::class); - $convertedShippingAddress = $this->createMock(\Magento\Sales\Api\Data\OrderAddressInterface::class); + $convertedBilling = $this->createPartialMockForAbstractClass(OrderAddressInterface::class, ['setData']); + $convertedShipping = $this->createPartialMockForAbstractClass(OrderAddressInterface::class, ['setData']); $convertedPayment = $this->createMock(\Magento\Sales\Api\Data\OrderPaymentInterface::class); $convertedQuoteItem = $this->createMock(\Magento\Sales\Api\Data\OrderItemInterface::class); - $addresses = [$convertedShippingAddress, $convertedBillingAddress]; + $addresses = [$convertedShipping, $convertedBilling]; $quoteItems = [$quoteItem]; $convertedItems = [$convertedQuoteItem]; @@ -574,7 +574,7 @@ public function testSubmit() 'email' => 'customer@example.com' ] ) - ->willReturn($convertedShippingAddress); + ->willReturn($convertedShipping); $this->quoteAddressToOrderAddress->expects($this->at(1)) ->method('convert') ->with( @@ -584,22 +584,27 @@ public function testSubmit() 'email' => 'customer@example.com' ] ) - ->willReturn($convertedBillingAddress); + ->willReturn($convertedBilling); + + $billingAddress->expects($this->once())->method('getId')->willReturn(4); + $convertedBilling->expects($this->once())->method('setData')->with('quote_address_id', 4); $this->quoteItemToOrderItem->expects($this->once())->method('convert') ->with($quoteItem, ['parent_item' => null]) ->willReturn($convertedQuoteItem); $this->quotePaymentToOrderPayment->expects($this->once())->method('convert')->with($payment) ->willReturn($convertedPayment); $shippingAddress->expects($this->once())->method('getShippingMethod')->willReturn('free'); + $shippingAddress->expects($this->once())->method('getId')->willReturn(5); + $convertedShipping->expects($this->once())->method('setData')->with('quote_address_id', 5); $order = $this->prepareOrderFactory( $baseOrder, - $convertedBillingAddress, + $convertedBilling, $addresses, $convertedPayment, $convertedItems, $quoteId, - $convertedShippingAddress + $convertedShipping ); $this->orderManagement->expects($this->once()) @@ -973,9 +978,6 @@ protected function setPropertyValue(&$object, $property, $value) return $object; } - /** - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) - */ public function testSubmitForCustomer() { $orderData = []; @@ -988,16 +990,12 @@ public function testSubmitForCustomer() $shippingAddress = $this->createMock(\Magento\Quote\Model\Quote\Address::class); $payment = $this->createMock(\Magento\Quote\Model\Quote\Payment::class); $baseOrder = $this->createMock(\Magento\Sales\Api\Data\OrderInterface::class); - $convertedBillingAddress = $this->createMock( - \Magento\Sales\Api\Data\OrderAddressInterface::class - ); - $convertedShippingAddress = $this->createMock( - \Magento\Sales\Api\Data\OrderAddressInterface::class - ); + $convertedBilling = $this->createPartialMockForAbstractClass(OrderAddressInterface::class, ['setData']); + $convertedShipping = $this->createPartialMockForAbstractClass(OrderAddressInterface::class, ['setData']); $convertedPayment = $this->createMock(\Magento\Sales\Api\Data\OrderPaymentInterface::class); $convertedQuoteItem = $this->createMock(\Magento\Sales\Api\Data\OrderItemInterface::class); - $addresses = [$convertedShippingAddress, $convertedBillingAddress]; + $addresses = [$convertedShipping, $convertedBilling]; $quoteItems = [$quoteItem]; $convertedItems = [$convertedQuoteItem]; @@ -1026,7 +1024,7 @@ public function testSubmitForCustomer() 'email' => 'customer@example.com' ] ) - ->willReturn($convertedShippingAddress); + ->willReturn($convertedShipping); $this->quoteAddressToOrderAddress->expects($this->at(1)) ->method('convert') ->with( @@ -1036,22 +1034,24 @@ public function testSubmitForCustomer() 'email' => 'customer@example.com' ] ) - ->willReturn($convertedBillingAddress); + ->willReturn($convertedBilling); $this->quoteItemToOrderItem->expects($this->once())->method('convert') ->with($quoteItem, ['parent_item' => null]) ->willReturn($convertedQuoteItem); $this->quotePaymentToOrderPayment->expects($this->once())->method('convert')->with($payment) ->willReturn($convertedPayment); $shippingAddress->expects($this->once())->method('getShippingMethod')->willReturn('free'); + $shippingAddress->expects($this->once())->method('getId')->willReturn(5); + $convertedShipping->expects($this->once())->method('setData')->with('quote_address_id', 5); $order = $this->prepareOrderFactory( $baseOrder, - $convertedBillingAddress, + $convertedBilling, $addresses, $convertedPayment, $convertedItems, $quoteId, - $convertedShippingAddress + $convertedShipping ); $customerAddressMock = $this->getMockBuilder(\Magento\Customer\Api\Data\AddressInterface::class) ->getMockForAbstractClass(); @@ -1060,6 +1060,8 @@ public function testSubmitForCustomer() $quote->expects($this->any())->method('addCustomerAddress')->with($customerAddressMock); $billingAddress->expects($this->once())->method('getCustomerId')->willReturn(2); $billingAddress->expects($this->once())->method('getSaveInAddressBook')->willReturn(false); + $billingAddress->expects($this->once())->method('getId')->willReturn(4); + $convertedBilling->expects($this->once())->method('setData')->with('quote_address_id', 4); $this->orderManagement->expects($this->once()) ->method('place') ->with($order) @@ -1073,4 +1075,25 @@ public function testSubmitForCustomer() $this->quoteRepositoryMock->expects($this->once())->method('save')->with($quote); $this->assertEquals($order, $this->model->submit($quote, $orderData)); } + + /** + * Get mock for abstract class with methods. + * + * @param string $className + * @param array $methods + * + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function createPartialMockForAbstractClass($className, $methods = []) + { + return $this->getMockForAbstractClass( + $className, + [], + '', + true, + true, + true, + $methods + ); + } } diff --git a/app/code/Magento/Sales/Model/Order/CustomerManagement.php b/app/code/Magento/Sales/Model/Order/CustomerManagement.php index a84d90693e087..bf54e65d0ce10 100644 --- a/app/code/Magento/Sales/Model/Order/CustomerManagement.php +++ b/app/code/Magento/Sales/Model/Order/CustomerManagement.php @@ -3,8 +3,10 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Sales\Model\Order; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Exception\AlreadyExistsException; use Magento\Quote\Model\Quote\Address as QuoteAddress; @@ -43,6 +45,11 @@ class CustomerManagement implements \Magento\Sales\Api\OrderCustomerManagementIn */ protected $objectCopyService; + /** + * @var \Magento\Quote\Model\Quote\AddressFactory + */ + private $quoteAddressFactory; + /** * @param \Magento\Framework\DataObject\Copy $objectCopyService * @param \Magento\Customer\Api\AccountManagementInterface $accountManagement @@ -50,6 +57,7 @@ class CustomerManagement implements \Magento\Sales\Api\OrderCustomerManagementIn * @param \Magento\Customer\Api\Data\AddressInterfaceFactory $addressFactory * @param \Magento\Customer\Api\Data\RegionInterfaceFactory $regionFactory * @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository + * @param \Magento\Quote\Model\Quote\AddressFactory|null $quoteAddressFactory */ public function __construct( \Magento\Framework\DataObject\Copy $objectCopyService, @@ -57,7 +65,8 @@ public function __construct( \Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory, \Magento\Customer\Api\Data\AddressInterfaceFactory $addressFactory, \Magento\Customer\Api\Data\RegionInterfaceFactory $regionFactory, - \Magento\Sales\Api\OrderRepositoryInterface $orderRepository + \Magento\Sales\Api\OrderRepositoryInterface $orderRepository, + \Magento\Quote\Model\Quote\AddressFactory $quoteAddressFactory = null ) { $this->objectCopyService = $objectCopyService; $this->accountManagement = $accountManagement; @@ -65,6 +74,9 @@ public function __construct( $this->customerFactory = $customerFactory; $this->addressFactory = $addressFactory; $this->regionFactory = $regionFactory; + $this->quoteAddressFactory = $quoteAddressFactory ?: ObjectManager::getInstance()->get( + \Magento\Quote\Model\Quote\AddressFactory::class + ); } /** @@ -84,6 +96,9 @@ public function create($orderId) ); $addresses = $order->getAddresses(); foreach ($addresses as $address) { + if (!$this->isNeededToSaveAddress($address->getData('quote_address_id'))) { + continue; + } $addressData = $this->objectCopyService->copyFieldsetToTarget( 'order_address', 'to_customer_address', @@ -117,6 +132,26 @@ public function create($orderId) $account = $this->accountManagement->createAccount($customer); $order->setCustomerId($account->getId()); $this->orderRepository->save($order); + return $account; } + + /** + * Check if we need to save address in address book. + * + * @param int $quoteAddressId + * + * @return bool + */ + private function isNeededToSaveAddress($quoteAddressId) + { + $saveInAddressBook = true; + + $quoteAddress = $this->quoteAddressFactory->create()->load($quoteAddressId); + if ($quoteAddress && $quoteAddress->getId()) { + $saveInAddressBook = (int)$quoteAddress->getData('save_in_address_book'); + } + + return $saveInAddressBook; + } } diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 8b104b0b35590..1c36a9a538366 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -3,18 +3,25 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Sales\Setup; use Magento\Eav\Model\Config; +use Magento\Framework\App\State; use Magento\Framework\DB\AggregatedFieldDataConverter; use Magento\Framework\DB\DataConverter\SerializedToJson; use Magento\Framework\DB\FieldToConvert; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\ModuleDataSetupInterface; use Magento\Framework\Setup\UpgradeDataInterface; +use Magento\Quote\Model\QuoteFactory; +use Magento\Sales\Model\OrderFactory; +use Magento\Sales\Model\ResourceModel\Order\Address\CollectionFactory as AddressCollectionFactory; /** * Data upgrade script + * + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class UpgradeData implements UpgradeDataInterface { @@ -36,20 +43,50 @@ class UpgradeData implements UpgradeDataInterface private $aggregatedFieldConverter; /** - * Constructor - * + * @var AddressCollectionFactory + */ + private $addressCollectionFactory; + + /** + * @var OrderFactory + */ + private $orderFactory; + + /** + * @var QuoteFactory + */ + private $quoteFactory; + + /** + * @var State + */ + private $state; + + /** * @param SalesSetupFactory $salesSetupFactory * @param Config $eavConfig * @param AggregatedFieldDataConverter $aggregatedFieldConverter + * @param AddressCollectionFactory $addressCollFactory + * @param OrderFactory $orderFactory + * @param QuoteFactory $quoteFactory + * @param State $state */ public function __construct( SalesSetupFactory $salesSetupFactory, Config $eavConfig, - AggregatedFieldDataConverter $aggregatedFieldConverter + AggregatedFieldDataConverter $aggregatedFieldConverter, + AddressCollectionFactory $addressCollFactory, + OrderFactory $orderFactory, + QuoteFactory $quoteFactory, + State $state ) { $this->salesSetupFactory = $salesSetupFactory; $this->eavConfig = $eavConfig; $this->aggregatedFieldConverter = $aggregatedFieldConverter; + $this->addressCollectionFactory = $addressCollFactory; + $this->orderFactory = $orderFactory; + $this->quoteFactory = $quoteFactory; + $this->state = $state; } /** @@ -64,6 +101,13 @@ public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface if (version_compare($context->getVersion(), '2.0.6', '<')) { $this->convertSerializedDataToJson($context->getVersion(), $salesSetup); } + if (version_compare($context->getVersion(), '2.0.8', '<')) { + $this->state->emulateAreaCode( + \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE, + [$this, 'fillQuoteAddressIdInSalesOrderAddress'], + [$setup] + ); + } $this->eavConfig->clear(); } @@ -118,4 +162,34 @@ private function convertSerializedDataToJson($setupVersion, SalesSetup $salesSet } $this->aggregatedFieldConverter->convert($fieldsToUpdate, $salesSetup->getConnection()); } + + /** + * Fill quote_address_id in table sales_order_address if it is empty. + */ + public function fillQuoteAddressIdInSalesOrderAddress() + { + $addressCollection = $this->addressCollectionFactory->create(); + /** @var \Magento\Sales\Model\Order\Address $orderAddress */ + foreach ($addressCollection as $orderAddress) { + if (!$orderAddress->getData('quote_address_id')) { + $orderId = $orderAddress->getParentId(); + $addressType = $orderAddress->getAddressType(); + + /** @var \Magento\Sales\Model\Order $order */ + $order = $this->orderFactory->create()->load($orderId); + $quoteId = $order->getQuoteId(); + $quote = $this->quoteFactory->create()->load($quoteId); + + if ($addressType == \Magento\Sales\Model\Order\Address::TYPE_SHIPPING) { + $quoteAddressId = $quote->getShippingAddress()->getId(); + $orderAddress->setData('quote_address_id', $quoteAddressId); + } elseif ($addressType == \Magento\Sales\Model\Order\Address::TYPE_BILLING) { + $quoteAddressId = $quote->getBillingAddress()->getId(); + $orderAddress->setData('quote_address_id', $quoteAddressId); + } + + $orderAddress->save(); + } + } + } } diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/CustomerManagementTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/CustomerManagementTest.php index 8a2305543c490..2794860793ed6 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/CustomerManagementTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/CustomerManagementTest.php @@ -6,6 +6,7 @@ namespace Magento\Sales\Test\Unit\Model\Order; use Magento\Quote\Model\Quote\Address; +use Magento\Sales\Api\Data\OrderAddressInterface; /** * Class BuilderTest @@ -49,6 +50,11 @@ class CustomerManagementTest extends \PHPUnit\Framework\TestCase */ protected $service; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $quoteAddressFactory; + protected function setUp() { $this->objectCopyService = $this->createMock(\Magento\Framework\DataObject\Copy::class); @@ -66,6 +72,7 @@ protected function setUp() ['create'] ); $this->orderRepository = $this->createMock(\Magento\Sales\Api\OrderRepositoryInterface::class); + $this->quoteAddressFactory = $this->createMock(\Magento\Quote\Model\Quote\AddressFactory::class); $this->service = new \Magento\Sales\Model\Order\CustomerManagement( $this->objectCopyService, @@ -73,7 +80,8 @@ protected function setUp() $this->customerFactory, $this->addressFactory, $this->regionFactory, - $this->orderRepository + $this->orderRepository, + $this->quoteAddressFactory ); } @@ -94,12 +102,12 @@ public function testCreateCreatesCustomerBasedonGuestOrder() $orderMock->expects($this->once())->method('getCustomerId')->will($this->returnValue(null)); $orderMock->expects($this->any())->method('getBillingAddress')->will($this->returnValue('billing_address')); - $orderBillingAddress = $this->createMock(\Magento\Sales\Api\Data\OrderAddressInterface::class); + $orderBillingAddress = $this->createPartialMockForAbstractClass(OrderAddressInterface::class, ['getData']); $orderBillingAddress->expects($this->once()) ->method('getAddressType') ->willReturn(Address::ADDRESS_TYPE_BILLING); - $orderShippingAddress = $this->createMock(\Magento\Sales\Api\Data\OrderAddressInterface::class); + $orderShippingAddress = $this->createPartialMockForAbstractClass(OrderAddressInterface::class, ['getData']); $orderShippingAddress->expects($this->once()) ->method('getAddressType') ->willReturn(Address::ADDRESS_TYPE_SHIPPING); @@ -108,6 +116,17 @@ public function testCreateCreatesCustomerBasedonGuestOrder() ->method('getAddresses') ->will($this->returnValue([$orderBillingAddress, $orderShippingAddress])); + $billingQuoteAddress = $this->createMock(\Magento\Quote\Model\Quote\Address::class); + $billingQuoteAddress->expects($this->once())->method('load')->willReturn($billingQuoteAddress); + $billingQuoteAddress->expects($this->once())->method('getId')->willReturn(4); + $billingQuoteAddress->expects($this->once())->method('getData')->with('save_in_address_book')->willReturn(1); + + $shippingQuoteAddress = $this->createMock(\Magento\Quote\Model\Quote\Address::class); + $shippingQuoteAddress->expects($this->once())->method('load')->willReturn($shippingQuoteAddress); + $shippingQuoteAddress->expects($this->once())->method('getId')->willReturn(5); + $shippingQuoteAddress->expects($this->once())->method('getData')->with('save_in_address_book')->willReturn(1); + $this->quoteAddressFactory->expects($this->exactly(2))->method('create') + ->willReturnOnConsecutiveCalls($billingQuoteAddress, $shippingQuoteAddress); $this->orderRepository->expects($this->once())->method('get')->with(1)->will($this->returnValue($orderMock)); $this->objectCopyService->expects($this->any())->method('copyFieldsetToTarget')->will($this->returnValueMap( [ @@ -142,4 +161,25 @@ public function testCreateCreatesCustomerBasedonGuestOrder() $this->orderRepository->expects($this->once())->method('save')->with($orderMock); $this->assertEquals($customerMock, $this->service->create(1)); } + + /** + * Get mock for abstract class with methods. + * + * @param string $className + * @param array $methods + * + * @return \PHPUnit_Framework_MockObject_MockObject + */ + private function createPartialMockForAbstractClass($className, $methods = []) + { + return $this->getMockForAbstractClass( + $className, + [], + '', + true, + true, + true, + $methods + ); + } } diff --git a/app/code/Magento/Sales/etc/module.xml b/app/code/Magento/Sales/etc/module.xml index 4c1a534faddf7..58c7a4f21202a 100644 --- a/app/code/Magento/Sales/etc/module.xml +++ b/app/code/Magento/Sales/etc/module.xml @@ -6,7 +6,7 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> - <module name="Magento_Sales" setup_version="2.0.7"> + <module name="Magento_Sales" setup_version="2.0.8"> <sequence> <module name="Magento_Rule"/> <module name="Magento_Catalog"/> diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js index 02529cee5c0ff..8990ea8d3f75b 100644 --- a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js +++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js @@ -325,12 +325,12 @@ define([ data = this.serializeData(this.billingAddressContainer); } else { data = this.serializeData(this.shippingAddressContainer); - areasToLoad.push('shipping_method'); } + areasToLoad.push('shipping_method'); data = data.toObject(); data['shipping_as_billing'] = flag ? 1 : 0; data['reset_shipping'] = 1; - this.loadArea( areasToLoad, true, data); + this.loadArea(areasToLoad, true, data); }, resetShippingMethod : function(data){ diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Method.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Method.php index e435211b69bc7..2ee6269c39d47 100644 --- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Method.php +++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Create/Shipping/Method.php @@ -44,9 +44,13 @@ class Method extends Block public function selectShippingMethod(array $shippingMethod) { $this->waitFormLoading(); - if ($this->_rootElement->find($this->shippingMethodsLink)->isVisible()) { - $this->_rootElement->find($this->shippingMethodsLink)->click(); - } + $this->_rootElement->waitUntil( + function () { + return $this->_rootElement->find($this->shippingMethodsLink)->isVisible() ? true : null; + } + ); + + $this->_rootElement->find($this->shippingMethodsLink)->click(); $selector = sprintf( $this->shippingMethod, $shippingMethod['shipping_service'], From 97390b3d84dc463f99656a7bede6bb63fb8cf26e Mon Sep 17 00:00:00 2001 From: Kostyantyn Alexeyev <kalexeyev@magento.com> Date: Mon, 13 Nov 2017 16:55:04 +0200 Subject: [PATCH 205/653] MAGETWO-52974: Configurable product options not saved when editing - for mainline --- .../web/js/fotorama-add-video-events.js | 4 +- .../Block/Product/Renderer/Configurable.php | 6 ++ ...ckout_cart_configure_type_configurable.xml | 12 +++- ...list_index_configure_type_configurable.xml | 6 +- .../templates/product/listing/renderer.phtml | 2 +- .../templates/product/view/renderer.phtml | 6 +- .../web/js/configurable-customer-data.js | 59 +++++++++++++------ .../view/frontend/web/js/swatch-renderer.js | 47 ++++++++++++--- 8 files changed, 108 insertions(+), 34 deletions(-) diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js index 03ce42bf25c4a..1dfcc95a552c6 100644 --- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js +++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js @@ -134,7 +134,6 @@ define([ */ _create: function () { $(this.element).on('gallery:loaded', $.proxy(function () { - this.fotoramaItem = $(this.element).find('.fotorama-item'); this._initialize(); }, this)); }, @@ -154,6 +153,7 @@ define([ this.defaultVideoData = this.options.videoData = this.videoDataPlaceholder; } + this.fotoramaItem = $(this.element).find('.fotorama-item'); this.clearEvents(); if (this._checkForVideoExist()) { @@ -164,6 +164,8 @@ define([ this._initFotoramaVideo(); this._attachFotoramaEvents(); } + + this.element.trigger('AddFotoramaVideoEvents:loaded'); }, /** diff --git a/app/code/Magento/Swatches/Block/Product/Renderer/Configurable.php b/app/code/Magento/Swatches/Block/Product/Renderer/Configurable.php index aef8a25da2834..dfd3d6ce15f71 100644 --- a/app/code/Magento/Swatches/Block/Product/Renderer/Configurable.php +++ b/app/code/Magento/Swatches/Block/Product/Renderer/Configurable.php @@ -119,6 +119,12 @@ public function __construct( $configurableAttributeData, $data ); + + $this->addData( + [ + 'cache_lifetime' => isset($data['cache_lifetime']) ? $data['cache_lifetime'] : 3600 + ] + ); } /** diff --git a/app/code/Magento/Swatches/view/frontend/layout/checkout_cart_configure_type_configurable.xml b/app/code/Magento/Swatches/view/frontend/layout/checkout_cart_configure_type_configurable.xml index 593ae32374417..62d6e57221f82 100644 --- a/app/code/Magento/Swatches/view/frontend/layout/checkout_cart_configure_type_configurable.xml +++ b/app/code/Magento/Swatches/view/frontend/layout/checkout_cart_configure_type_configurable.xml @@ -6,7 +6,13 @@ */ --> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> - <head> - <link src="Magento_Swatches::js/configurable-customer-data.js"/> - </head> + <body> + <referenceBlock name="product.info.options.wrapper"> + <block class="Magento\Swatches\Block\Product\Renderer\Configurable" name="product.info.options.swatches" as="swatch_options" before="-"> + <arguments> + <argument name="cache_lifetime" xsi:type="boolean">false</argument> + </arguments> + </block> + </referenceBlock> + </body> </page> diff --git a/app/code/Magento/Swatches/view/frontend/layout/wishlist_index_configure_type_configurable.xml b/app/code/Magento/Swatches/view/frontend/layout/wishlist_index_configure_type_configurable.xml index 28bf7baac0a36..9f47b4386c742 100644 --- a/app/code/Magento/Swatches/view/frontend/layout/wishlist_index_configure_type_configurable.xml +++ b/app/code/Magento/Swatches/view/frontend/layout/wishlist_index_configure_type_configurable.xml @@ -12,7 +12,11 @@ <body> <referenceBlock name="product.info.options.configurable" remove="true"/> <referenceBlock name="product.info.options.wrapper"> - <block class="Magento\Swatches\Block\Product\Renderer\Configurable" name="product.info.options.swatches" as="swatch_options" before="-" /> + <block class="Magento\Swatches\Block\Product\Renderer\Configurable" name="product.info.options.swatches" as="swatch_options" before="-"> + <arguments> + <argument name="cache_lifetime" xsi:type="boolean">false</argument> + </arguments> + </block> </referenceBlock> </body> </page> diff --git a/app/code/Magento/Swatches/view/frontend/templates/product/listing/renderer.phtml b/app/code/Magento/Swatches/view/frontend/templates/product/listing/renderer.phtml index 7ecd6558ef6ea..75a39a0e4e270 100644 --- a/app/code/Magento/Swatches/view/frontend/templates/product/listing/renderer.phtml +++ b/app/code/Magento/Swatches/view/frontend/templates/product/listing/renderer.phtml @@ -4,7 +4,7 @@ * See COPYING.txt for license details. */ ?> -<?php /** @var $block \Magento\Swatches\Block\Product\Renderer\Configurable */ ?> +<?php /** @var $block \Magento\Swatches\Block\Product\Renderer\Listing\Configurable */ ?> <div class="swatch-opt-<?= /* @escapeNotVerified */ $block->getProduct()->getId() ?>"></div> <script> require([ diff --git a/app/code/Magento/Swatches/view/frontend/templates/product/view/renderer.phtml b/app/code/Magento/Swatches/view/frontend/templates/product/view/renderer.phtml index fc1de530a66bd..c5ed960de79cf 100644 --- a/app/code/Magento/Swatches/view/frontend/templates/product/view/renderer.phtml +++ b/app/code/Magento/Swatches/view/frontend/templates/product/view/renderer.phtml @@ -14,11 +14,13 @@ "[data-role=swatch-options]": { "Magento_Swatches/js/swatch-renderer": { "jsonConfig": <?= /* @escapeNotVerified */ $swatchOptions = $block->getJsonConfig() ?>, - "jsonSwatchConfig": <?php /* @escapeNotVerified */ - echo $swatchOptions = $block->getJsonSwatchConfig(); ?>, + "jsonSwatchConfig": <?php /* @escapeNotVerified */ echo $block->getJsonSwatchConfig(); ?>, "mediaCallback": "<?= /* @escapeNotVerified */ $block->getMediaCallback() ?>", "gallerySwitchStrategy": "<?php /* @escapeNotVerified */ echo $block->getVar('gallery_switch_strategy', 'Magento_ConfigurableProduct') ?: 'replace'; ?>" + }, + "Magento_Swatches/js/configurable-customer-data": { + "swatchOptions": <?php /* @escapeNotVerified */ echo $swatchOptions ?> } } } diff --git a/app/code/Magento/Swatches/view/frontend/web/js/configurable-customer-data.js b/app/code/Magento/Swatches/view/frontend/web/js/configurable-customer-data.js index 6467c6276da58..8cea83c1bd551 100644 --- a/app/code/Magento/Swatches/view/frontend/web/js/configurable-customer-data.js +++ b/app/code/Magento/Swatches/view/frontend/web/js/configurable-customer-data.js @@ -1,28 +1,51 @@ -require([ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +define([ 'jquery', - 'Magento_ConfigurableProduct/js/options-updater' + 'Magento_ConfigurableProduct/js/options-updater', + 'jquery/ui' ], function ($, Updater) { 'use strict'; - var selectors = { - formSelector: '#product_addtocart_form', - swatchSelector: '.swatch-opt' + $.widget('mage.selectSwatch', { + options: { + swatchOptions: null, + selectors: { + formSelector: '#product_addtocart_form', + swatchSelector: '.swatch-opt' + }, + swatchWidgetName: 'mageSwatchRenderer', + widgetInitEvent: 'swatch.initialized', + clickEventName: 'emulateClick' }, - swatchWidgetName = 'mageSwatchRenderer', - widgetInitEvent = 'swatch.initialized', - /** - * Sets all configurable swatch attribute's selected values - */ - updateSwatchOptions = function () { - var swatchWidget = $(selectors.swatchSelector).data(swatchWidgetName); + /** + * Widget initialisation. + * Configurable product options updater listens to selected swatch options + */ + _init: function () { + var updater; - if (!swatchWidget || !swatchWidget._EmulateSelectedByAttributeId) { - return; + updater = new Updater(this.options.widgetInitEvent, this.selectDefaultSwatchOptions.bind(this)); + updater.listen(); + }, + + /** + * Sets default configurable swatch attribute's selected + */ + selectDefaultSwatchOptions: function () { + var swatchWidget = $(this.options.selectors.swatchSelector).data(this.options.swatchWidgetName); + + if (!swatchWidget || !swatchWidget._EmulateSelectedByAttributeId) { + return; + } + swatchWidget._EmulateSelectedByAttributeId( + this.options.swatchOptions.defaultValues, this.options.clickEventName + ); } - swatchWidget._EmulateSelectedByAttributeId(this.productOptions); - }, - updater = new Updater(widgetInitEvent, updateSwatchOptions); + }); - updater.listen(); + return $.mage.selectSwatch; }); diff --git a/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js b/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js index d1f7c477ba8d7..c09c17f0ad6ba 100644 --- a/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js +++ b/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js @@ -616,6 +616,10 @@ define([ return $widget._OnClick($(this), $widget); }); + $widget.element.on('emulateClick', '.' + options.optionClass, function () { + return $widget._OnClick($(this), $widget, 'emulateClick'); + }); + $widget.element.on('change', '.' + options.selectClass, function () { return $widget._OnChange($(this), $widget); }); @@ -646,9 +650,10 @@ define([ /** * Load media gallery using ajax or json config. * + * @param {String|undefined} eventName * @private */ - _loadMedia: function () { + _loadMedia: function (eventName) { var $main = this.inProductList ? this.element.parents('.product-item-info') : this.element.parents('.column.main'), @@ -663,7 +668,7 @@ define([ images = this.options.mediaGalleryInitial; } - this.updateBaseImage(images, $main, !this.inProductList); + this.updateBaseImage(images, $main, !this.inProductList, eventName); } }, @@ -672,9 +677,10 @@ define([ * * @param {Object} $this * @param {Object} $widget + * @param {String|undefined} eventName * @private */ - _OnClick: function ($this, $widget) { + _OnClick: function ($this, $widget, eventName) { var $parent = $this.parents('.' + $widget.options.classes.attributeClass), $wrapper = $this.parents('.' + $widget.options.classes.attributeOptionsWrapper), $label = $parent.find('.' + $widget.options.classes.attributeSelectedOptionLabelClass), @@ -713,7 +719,7 @@ define([ $widget._UpdatePrice(); } - $widget._loadMedia(); + $widget._loadMedia(eventName); $input.trigger('change'); }, @@ -1117,16 +1123,36 @@ define([ return images; }, + /** + * Start update base image process based on event name + * @param {Array} images + * @param {jQuery} context + * @param {Boolean} isInProductView + * @param {String|undefined} eventName + */ + updateBaseImage: function (images, context, isInProductView, eventName) { + var gallery = context.find(this.options.mediaGallerySelector).data('gallery'); + + if (eventName === undefined) { + this.processUpdateBaseImage(images, context, isInProductView, gallery); + } else { + context.find(this.options.mediaGallerySelector).on('gallery:loaded', function (loadedGallery) { + loadedGallery = context.find(this.options.mediaGallerySelector).data('gallery'); + this.processUpdateBaseImage(images, context, isInProductView, loadedGallery); + }.bind(this)); + } + }, + /** * Update [gallery-placeholder] or [product-image-photo] * @param {Array} images * @param {jQuery} context * @param {Boolean} isInProductView + * @param {Object} gallery */ - updateBaseImage: function (images, context, isInProductView) { + processUpdateBaseImage: function (images, context, isInProductView, gallery) { var justAnImage = images[0], initialImages = this.options.mediaGalleryInitial, - gallery = context.find(this.options.mediaGallerySelector).data('gallery'), imagesToUpdate, isInitial; @@ -1203,14 +1229,19 @@ define([ /** * Emulate mouse click or selection change on all swatches that should be selected * @param {Object} [selectedAttributes] + * @param {String} triggerClick * @private */ - _EmulateSelectedByAttributeId: function (selectedAttributes) { + _EmulateSelectedByAttributeId: function (selectedAttributes, triggerClick) { $.each(selectedAttributes, $.proxy(function (attributeId, optionId) { var elem = this.element.find('.' + this.options.classes.attributeClass + '[attribute-id="' + attributeId + '"] [option-id="' + optionId + '"]'), parentInput = elem.parent(); + if (triggerClick === null || triggerClick === '') { + triggerClick = 'click'; + } + if (elem.hasClass('selected')) { return; } @@ -1219,7 +1250,7 @@ define([ parentInput.val(optionId); parentInput.trigger('change'); } else { - elem.trigger('click'); + elem.trigger(triggerClick); } }, this)); }, From 1afffb3d475c12ca291acb7ccf52123ca5ec1fe5 Mon Sep 17 00:00:00 2001 From: Chris Pook <chris.pook@absolutecommerce.co.uk> Date: Mon, 13 Nov 2017 07:23:30 -0800 Subject: [PATCH 206/653] 12180 Remove unnecessary use operator for Context, causes 503 error in account address book. --- app/code/Magento/Customer/Model/AttributeChecker.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/Customer/Model/AttributeChecker.php b/app/code/Magento/Customer/Model/AttributeChecker.php index 6cc27697ccff7..dcdd47691386e 100644 --- a/app/code/Magento/Customer/Model/AttributeChecker.php +++ b/app/code/Magento/Customer/Model/AttributeChecker.php @@ -8,7 +8,6 @@ use Magento\Customer\Api\AddressMetadataInterface; use Magento\Customer\Api\AddressMetadataManagementInterface; use Magento\Customer\Model\Metadata\AttributeResolver; -use Magento\Framework\App\Helper\Context; /** * Customer attribute checker. From 119b5640c3aee2f8da69e432ed75dd94d4fe42c5 Mon Sep 17 00:00:00 2001 From: Kostyantyn Alexeyev <kalexeyev@magento.com> Date: Mon, 13 Nov 2017 17:42:57 +0200 Subject: [PATCH 207/653] MAGETWO-52974: Configurable product options not saved when editing - for mainline --- .../view/frontend/templates/product/view/renderer.phtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Swatches/view/frontend/templates/product/view/renderer.phtml b/app/code/Magento/Swatches/view/frontend/templates/product/view/renderer.phtml index c5ed960de79cf..ea166b9080f5c 100644 --- a/app/code/Magento/Swatches/view/frontend/templates/product/view/renderer.phtml +++ b/app/code/Magento/Swatches/view/frontend/templates/product/view/renderer.phtml @@ -14,13 +14,13 @@ "[data-role=swatch-options]": { "Magento_Swatches/js/swatch-renderer": { "jsonConfig": <?= /* @escapeNotVerified */ $swatchOptions = $block->getJsonConfig() ?>, - "jsonSwatchConfig": <?php /* @escapeNotVerified */ echo $block->getJsonSwatchConfig(); ?>, + "jsonSwatchConfig": <?php /* @noEscape */ echo $block->getJsonSwatchConfig(); ?>, "mediaCallback": "<?= /* @escapeNotVerified */ $block->getMediaCallback() ?>", "gallerySwitchStrategy": "<?php /* @escapeNotVerified */ echo $block->getVar('gallery_switch_strategy', 'Magento_ConfigurableProduct') ?: 'replace'; ?>" }, "Magento_Swatches/js/configurable-customer-data": { - "swatchOptions": <?php /* @escapeNotVerified */ echo $swatchOptions ?> + "swatchOptions": <?php /* @noEscape */ echo $swatchOptions ?> } } } From f2bfdd941c0c8c6c7c745156d1ce206e38c76820 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Mon, 13 Nov 2017 17:43:17 +0200 Subject: [PATCH 208/653] 11740: Sending emails from Admin in Multi-Store Environment defaults to Primary Store --- .../Sales/Model/Order/Email/SenderBuilder.php | 16 ++++- .../Model/Order/Email/SenderBuilderTest.php | 14 +++- .../Mail/Template/TransportBuilder.php | 14 ---- .../Mail/Template/TransportBuilderByStore.php | 54 ++++++++++++++++ .../Template/TransportBuilderByStoreTest.php | 64 +++++++++++++++++++ .../Unit/Template/TransportBuilderTest.php | 19 ------ 6 files changed, 143 insertions(+), 38 deletions(-) create mode 100644 lib/internal/Magento/Framework/Mail/Template/TransportBuilderByStore.php create mode 100644 lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderByStoreTest.php diff --git a/app/code/Magento/Sales/Model/Order/Email/SenderBuilder.php b/app/code/Magento/Sales/Model/Order/Email/SenderBuilder.php index af3ace9090834..7ec089b882972 100644 --- a/app/code/Magento/Sales/Model/Order/Email/SenderBuilder.php +++ b/app/code/Magento/Sales/Model/Order/Email/SenderBuilder.php @@ -5,7 +5,9 @@ */ namespace Magento\Sales\Model\Order\Email; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Mail\Template\TransportBuilder; +use Magento\Framework\Mail\Template\TransportBuilderByStore; use Magento\Sales\Model\Order\Email\Container\IdentityInterface; use Magento\Sales\Model\Order\Email\Container\Template; @@ -26,19 +28,29 @@ class SenderBuilder */ protected $transportBuilder; + /** + * @var TransportBuilderByStore + */ + private $transportBuilderByStore; + /** * @param Template $templateContainer * @param IdentityInterface $identityContainer * @param TransportBuilder $transportBuilder + * @param TransportBuilderByStore $transportBuilderByStore */ public function __construct( Template $templateContainer, IdentityInterface $identityContainer, - TransportBuilder $transportBuilder + TransportBuilder $transportBuilder, + TransportBuilderByStore $transportBuilderByStore = null ) { $this->templateContainer = $templateContainer; $this->identityContainer = $identityContainer; $this->transportBuilder = $transportBuilder; + $this->transportBuilderByStore = $transportBuilderByStore ?: ObjectManager::getInstance()->get( + TransportBuilderByStore::class + ); } /** @@ -98,7 +110,7 @@ protected function configureEmailTemplate() $this->transportBuilder->setTemplateIdentifier($this->templateContainer->getTemplateId()); $this->transportBuilder->setTemplateOptions($this->templateContainer->getTemplateOptions()); $this->transportBuilder->setTemplateVars($this->templateContainer->getTemplateVars()); - $this->transportBuilder->setFromByStore( + $this->transportBuilderByStore->setFromByStore( $this->identityContainer->getEmailIdentity(), $this->identityContainer->getStore()->getId() ); diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php index 00be3c10d6498..38209bb22aef4 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php @@ -6,6 +6,7 @@ namespace Magento\Sales\Test\Unit\Model\Order\Email; +use Magento\Framework\Mail\Template\TransportBuilderByStore; use Magento\Sales\Model\Order\Email\SenderBuilder; class SenderBuilderTest extends \PHPUnit\Framework\TestCase @@ -35,6 +36,11 @@ class SenderBuilderTest extends \PHPUnit\Framework\TestCase */ private $storeMock; + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $transportBuilderByStore; + protected function setUp() { $templateId = 'test_template_id'; @@ -76,10 +82,11 @@ protected function setUp() 'setTemplateIdentifier', 'setTemplateOptions', 'setTemplateVars', - 'setFromByStore', ] ); + $this->transportBuilderByStore = $this->createMock(TransportBuilderByStore::class); + $this->templateContainerMock->expects($this->once()) ->method('getTemplateId') ->will($this->returnValue($templateId)); @@ -102,7 +109,7 @@ protected function setUp() $this->identityContainerMock->expects($this->once()) ->method('getEmailIdentity') ->will($this->returnValue($emailIdentity)); - $this->transportBuilder->expects($this->once()) + $this->transportBuilderByStore->expects($this->once()) ->method('setFromByStore') ->with($this->equalTo($emailIdentity)); @@ -113,7 +120,8 @@ protected function setUp() $this->senderBuilder = new SenderBuilder( $this->templateContainerMock, $this->identityContainerMock, - $this->transportBuilder + $this->transportBuilder, + $this->transportBuilderByStore ); } diff --git a/lib/internal/Magento/Framework/Mail/Template/TransportBuilder.php b/lib/internal/Magento/Framework/Mail/Template/TransportBuilder.php index 8e474a58cdac8..18b241d77a426 100644 --- a/lib/internal/Magento/Framework/Mail/Template/TransportBuilder.php +++ b/lib/internal/Magento/Framework/Mail/Template/TransportBuilder.php @@ -171,20 +171,6 @@ public function setFrom($from) return $this; } - /** - * Set mail from address by store. - * - * @param string|array $from - * @param string|int $store - * @return $this - */ - public function setFromByStore($from, $store) - { - $result = $this->_senderResolver->resolve($from, $store); - $this->message->setFrom($result['email'], $result['name']); - return $this; - } - /** * Set template identifier * diff --git a/lib/internal/Magento/Framework/Mail/Template/TransportBuilderByStore.php b/lib/internal/Magento/Framework/Mail/Template/TransportBuilderByStore.php new file mode 100644 index 0000000000000..785c93824a57d --- /dev/null +++ b/lib/internal/Magento/Framework/Mail/Template/TransportBuilderByStore.php @@ -0,0 +1,54 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Framework\Mail\Template; + +use Magento\Framework\Mail\MessageInterface; + +class TransportBuilderByStore +{ + /** + * Message. + * + * @var \Magento\Framework\Mail\Message + */ + protected $message; + + /** + * Sender resolver. + * + * @var \Magento\Framework\Mail\Template\SenderResolverInterface + */ + private $senderResolver; + + /** + * @param MessageInterface $message + * @param SenderResolverInterface $senderResolver + */ + public function __construct( + MessageInterface $message, + SenderResolverInterface $senderResolver + ) { + $this->message = $message; + $this->senderResolver = $senderResolver; + } + + /** + * Set mail from address by store. + * + * @param string|array $from + * @param string|int $store + * + * @return $this + */ + public function setFromByStore($from, $store) + { + $result = $this->senderResolver->resolve($from, $store); + $this->message->setFrom($result['email'], $result['name']); + + return $this; + } +} diff --git a/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderByStoreTest.php b/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderByStoreTest.php new file mode 100644 index 0000000000000..d49cbfb1e2044 --- /dev/null +++ b/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderByStoreTest.php @@ -0,0 +1,64 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Framework\Mail\Test\Unit\Template; + +use Magento\Framework\Mail\Template\TransportBuilderByStore; + +class TransportBuilderByStoreTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var \Magento\Framework\Mail\Template\TransportBuilderByStore + */ + protected $model; + + /** + * @var \Magento\Framework\Mail\Message | \PHPUnit_Framework_MockObject_MockObject + */ + protected $messageMock; + + /** + * @var \Magento\Framework\Mail\Template\SenderResolverInterface | \PHPUnit_Framework_MockObject_MockObject + */ + protected $senderResolverMock; + + /** + * @return void + */ + protected function setUp() + { + $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $this->messageMock = $this->createMock(\Magento\Framework\Mail\Message::class); + $this->senderResolverMock = $this->createMock(\Magento\Framework\Mail\Template\SenderResolverInterface::class); + + $this->model = $objectManagerHelper->getObject( + TransportBuilderByStore::class, + [ + 'message' => $this->messageMock, + 'senderResolver' => $this->senderResolverMock, + ] + ); + } + + /** + * @return void + */ + public function setFromByStore() + { + $sender = ['email' => 'from@example.com', 'name' => 'name']; + $store = 1; + $this->senderResolverMock->expects($this->once()) + ->method('resolve') + ->with($sender, $store) + ->willReturn($sender); + $this->messageMock->expects($this->once()) + ->method('setFrom') + ->with('from@example.com', 'name') + ->willReturnSelf(); + + $this->model->setFromByStore($sender, $store); + } +} diff --git a/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php b/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php index ab03be5ee844b..927e17c824e33 100644 --- a/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php +++ b/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php @@ -168,25 +168,6 @@ public function testSetFrom() $this->builder->setFrom($sender); } - /** - * @return void - */ - public function setFromByStore() - { - $sender = ['email' => 'from@example.com', 'name' => 'name']; - $store = 1; - $this->senderResolverMock->expects($this->once()) - ->method('resolve') - ->with($sender, $store) - ->willReturn($sender); - $this->messageMock->expects($this->once()) - ->method('setFrom') - ->with('from@example.com', 'name') - ->willReturnSelf(); - - $this->builder->setFromByStore($sender); - } - /** * @return void */ From b3227183b97f6ba993e2ee64b504f0ab98262e8b Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Mon, 13 Nov 2017 17:51:04 +0200 Subject: [PATCH 209/653] 11740: Sending emails from Admin in Multi-Store Environment defaults to Primary Store --- .../Mail/Test/Unit/Template/TransportBuilderByStoreTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderByStoreTest.php b/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderByStoreTest.php index d49cbfb1e2044..80df2887a3a93 100644 --- a/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderByStoreTest.php +++ b/lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderByStoreTest.php @@ -46,7 +46,7 @@ protected function setUp() /** * @return void */ - public function setFromByStore() + public function testSetFromByStore() { $sender = ['email' => 'from@example.com', 'name' => 'name']; $store = 1; From 954d355cae89e81eeb0c3f4bacdc2bf35e039409 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko <vgoncharenko@magento.com> Date: Mon, 13 Nov 2017 18:10:25 +0200 Subject: [PATCH 210/653] MAGETWO-83755: Impossible to create magento project for 2.2.2 - Up dependency versions for new modules --- app/code/Magento/Analytics/composer.json | 4 ++-- app/code/Magento/CatalogAnalytics/composer.json | 4 ++-- app/code/Magento/CustomerAnalytics/composer.json | 4 ++-- app/code/Magento/InstantPurchase/composer.json | 2 +- app/code/Magento/QuoteAnalytics/composer.json | 4 ++-- app/code/Magento/ReviewAnalytics/composer.json | 2 +- app/code/Magento/SalesAnalytics/composer.json | 4 ++-- app/code/Magento/WishlistAnalytics/composer.json | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/code/Magento/Analytics/composer.json b/app/code/Magento/Analytics/composer.json index b17bb10cb4112..349e5f3c08c4c 100644 --- a/app/code/Magento/Analytics/composer.json +++ b/app/code/Magento/Analytics/composer.json @@ -4,10 +4,10 @@ "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", "magento/module-backend": "100.2.*", - "magento/module-config": "100.2.*", + "magento/module-config": "101.0.*", "magento/module-integration": "100.2.*", "magento/module-store": "100.2.*", - "magento/framework": "100.2.*" + "magento/framework": "101.0.*" }, "type": "magento2-module", "version": "100.2.0", diff --git a/app/code/Magento/CatalogAnalytics/composer.json b/app/code/Magento/CatalogAnalytics/composer.json index 7c622f6fbfa07..bc3c8a1010449 100644 --- a/app/code/Magento/CatalogAnalytics/composer.json +++ b/app/code/Magento/CatalogAnalytics/composer.json @@ -3,8 +3,8 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-catalog": "101.1.*" + "magento/framework": "101.0.*", + "magento/module-catalog": "102.0.*" }, "type": "magento2-module", "version": "100.2.0", diff --git a/app/code/Magento/CustomerAnalytics/composer.json b/app/code/Magento/CustomerAnalytics/composer.json index d34d6ba751e2a..8b88beea19a2c 100644 --- a/app/code/Magento/CustomerAnalytics/composer.json +++ b/app/code/Magento/CustomerAnalytics/composer.json @@ -3,8 +3,8 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-customer": "100.2.*" + "magento/framework": "101.0.*", + "magento/module-customer": "101.0.*" }, "type": "magento2-module", "version": "100.2.0", diff --git a/app/code/Magento/InstantPurchase/composer.json b/app/code/Magento/InstantPurchase/composer.json index 1c3b97a6beb94..680890d190655 100644 --- a/app/code/Magento/InstantPurchase/composer.json +++ b/app/code/Magento/InstantPurchase/composer.json @@ -16,7 +16,7 @@ "magento/module-shipping": "100.2.*", "magento/module-quote": "101.0.*", "magento/module-vault": "101.0.*", - "magento/framework": "100.2.*" + "magento/framework": "101.0.*" }, "autoload": { "files": [ diff --git a/app/code/Magento/QuoteAnalytics/composer.json b/app/code/Magento/QuoteAnalytics/composer.json index abbb0ce7a042b..c75abc5bb5da2 100644 --- a/app/code/Magento/QuoteAnalytics/composer.json +++ b/app/code/Magento/QuoteAnalytics/composer.json @@ -3,8 +3,8 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-quote": "100.2.*" + "magento/framework": "101.0.*", + "magento/module-quote": "101.0.*" }, "type": "magento2-module", "version": "100.2.0", diff --git a/app/code/Magento/ReviewAnalytics/composer.json b/app/code/Magento/ReviewAnalytics/composer.json index 965b6294db16a..2c982969a391f 100644 --- a/app/code/Magento/ReviewAnalytics/composer.json +++ b/app/code/Magento/ReviewAnalytics/composer.json @@ -3,7 +3,7 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", + "magento/framework": "101.0.*", "magento/module-review": "100.2.*" }, "type": "magento2-module", diff --git a/app/code/Magento/SalesAnalytics/composer.json b/app/code/Magento/SalesAnalytics/composer.json index 344971d7056cf..e1e60bed3bd53 100644 --- a/app/code/Magento/SalesAnalytics/composer.json +++ b/app/code/Magento/SalesAnalytics/composer.json @@ -3,8 +3,8 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-sales": "100.2.*" + "magento/framework": "101.0.*", + "magento/module-sales": "101.0.*" }, "type": "magento2-module", "version": "100.2.0", diff --git a/app/code/Magento/WishlistAnalytics/composer.json b/app/code/Magento/WishlistAnalytics/composer.json index 11bd71276427c..6d3858acbe944 100644 --- a/app/code/Magento/WishlistAnalytics/composer.json +++ b/app/code/Magento/WishlistAnalytics/composer.json @@ -3,8 +3,8 @@ "description": "N/A", "require": { "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/framework": "100.2.*", - "magento/module-wishlist": "100.2.*" + "magento/framework": "101.0.*", + "magento/module-wishlist": "101.0.*" }, "type": "magento2-module", "version": "100.2.0", From 632ecfe1a555e8dc34153f0ff82db12ca8e4e012 Mon Sep 17 00:00:00 2001 From: rossbrandon <rbrandon@magento.com> Date: Mon, 13 Nov 2017 10:44:04 -0600 Subject: [PATCH 211/653] MAGETWO-83184: Static Content Update for ReleaseNotification Module --- app/code/Magento/ReleaseNotification/i18n/en_US.csv | 2 -- .../view/adminhtml/ui_component/release_notification.xml | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/app/code/Magento/ReleaseNotification/i18n/en_US.csv b/app/code/Magento/ReleaseNotification/i18n/en_US.csv index bf70afad8bf1a..81d12fa358744 100644 --- a/app/code/Magento/ReleaseNotification/i18n/en_US.csv +++ b/app/code/Magento/ReleaseNotification/i18n/en_US.csv @@ -96,7 +96,6 @@ <li><span>No obligation 14-day trial.</span></li> <li><span>Automation campaigns using your live Magento store data that drive revenue, including abandoned cart, abandoned browse, product replenishment, and many more</span></li> - <li><span>Custom catalogs and pricing.</span></li> <li><span>Built-in solution for transactional emails.</span></li> <li><span>Telephone support and advice from marketing experts included.</span></li> </ul>","<p>Unlock an unparalleled level of insight and control of your eCommerce marketing with @@ -108,7 +107,6 @@ <li><span>No obligation 14-day trial.</span></li> <li><span>Automation campaigns using your live Magento store data that drive revenue, including abandoned cart, abandoned browse, product replenishment, and many more</span></li> - <li><span>Custom catalogs and pricing.</span></li> <li><span>Built-in solution for transactional emails.</span></li> <li><span>Telephone support and advice from marketing experts included.</span></li> </ul>" diff --git a/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml b/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml index 7a6f0af74716d..1aa50e254d2d5 100644 --- a/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml +++ b/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml @@ -319,8 +319,7 @@ <ul> <li><span>No obligation 14-day trial.</span></li> <li><span>Automation campaigns using your live Magento store data that drive revenue, - including abandoned cart, abandoned browse, product replenishment, and many more</span></li> - <li><span>Custom catalogs and pricing.</span></li> + including abandoned cart, abandoned browse, product replenishment, and many more.</span></li> <li><span>Built-in solution for transactional emails.</span></li> <li><span>Telephone support and advice from marketing experts included.</span></li> </ul>]]> From 2ded6b2aaa3feda7ec679074023860d3a3dd9531 Mon Sep 17 00:00:00 2001 From: rossbrandon <rbrandon@magento.com> Date: Mon, 13 Nov 2017 11:38:07 -0600 Subject: [PATCH 212/653] MAGETWO-83184: Static Content Update for ReleaseNotification Module --- app/code/Magento/ReleaseNotification/i18n/en_US.csv | 4 ++-- .../view/adminhtml/ui_component/release_notification.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/ReleaseNotification/i18n/en_US.csv b/app/code/Magento/ReleaseNotification/i18n/en_US.csv index 81d12fa358744..0f4a1f87b8b4e 100644 --- a/app/code/Magento/ReleaseNotification/i18n/en_US.csv +++ b/app/code/Magento/ReleaseNotification/i18n/en_US.csv @@ -46,7 +46,7 @@ provides you with a dynamic suite of reports with rich insights about the health of your business.</p><br /><p>As part of the Advanced Reporting service, we may also use your customer data for such purposes as benchmarking, improving our products and services, and providing you - with new and improved analytics.</p><br /><p>By using Magento 2.2, you agree to the Advanced + with new and improved analytics.</p><br /><p>By using Magento 2.2.2, you agree to the Advanced Reporting <a href=""https://magento.com/legal/terms/privacy"" target=""_blank"">Privacy Policy</a> and <a href=""https://magento.com/legal/terms/cloud-terms"" target=""_blank"">Terms of Service</a>. You may opt out at any time from the Stores Configuration page.</p> @@ -54,7 +54,7 @@ provides you with a dynamic suite of reports with rich insights about the health of your business.</p><br /><p>As part of the Advanced Reporting service, we may also use your customer data for such purposes as benchmarking, improving our products and services, and providing you - with new and improved analytics.</p><br /><p>By using Magento 2.2, you agree to the Advanced + with new and improved analytics.</p><br /><p>By using Magento 2.2.2, you agree to the Advanced Reporting <a href=""https://magento.com/legal/terms/privacy"" target=""_blank"">Privacy Policy</a> and <a href=""https://magento.com/legal/terms/cloud-terms"" target=""_blank"">Terms of Service</a>. You may opt out at any time from the Stores Configuration page.</p>" diff --git a/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml b/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml index 1aa50e254d2d5..1ddfde5cafb9c 100644 --- a/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml +++ b/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml @@ -139,7 +139,7 @@ provides you with a dynamic suite of reports with rich insights about the health of your business.</p><br /><p>As part of the Advanced Reporting service, we may also use your customer data for such purposes as benchmarking, improving our products and services, and providing you - with new and improved analytics.</p><br /><p>By using Magento 2.2, you agree to the Advanced + with new and improved analytics.</p><br /><p>By using Magento 2.2.2, you agree to the Advanced Reporting <a href="https://magento.com/legal/terms/privacy" target="_blank">Privacy Policy</a> and <a href="https://magento.com/legal/terms/cloud-terms" target="_blank">Terms of Service</a>. You may opt out at any time from the Stores Configuration page.</p>]]> From 8de80d74dc1933e8c9b3a4039948632e5203da11 Mon Sep 17 00:00:00 2001 From: Leonid Poluyanov <lpoluyanov@magento.com> Date: Mon, 13 Nov 2017 20:02:37 +0200 Subject: [PATCH 213/653] MAGETWO-83169: Loaded quote items collection contains removed product items --- .../ResourceModel/Quote/Item/Collection.php | 34 ++++++------ .../Quote/Model/QuoteManagementTest.php | 54 +++++++++++++++++-- .../_files/quote_with_bundle_rollback.php | 24 +++++---- 3 files changed, 81 insertions(+), 31 deletions(-) diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php index 5161c3a7f01f2..82126ce95261f 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php @@ -147,21 +147,6 @@ public function resetJoinQuotes($quotesTableName, $productId = null) return $this; } - /** - * Join product entities to select existing products items only - * - * @return void - */ - protected function _beforeLoad() - { - parent::_beforeLoad(); - $this->join( - ['cpe' => $this->getResource()->getTable('catalog_product_entity')], - "cpe.entity_id = main_table.product_id", - [] - ); - } - /** * After load processing * @@ -171,16 +156,29 @@ protected function _afterLoad() { parent::_afterLoad(); - /** - * Assign parent items - */ + $productIds = []; foreach ($this as $item) { + // Assign parent items if ($item->getParentItemId()) { $item->setParentItem($this->getItemById($item->getParentItemId())); } if ($this->_quote) { $item->setQuote($this->_quote); } + // Collect quote products ids + $productIds[] = (int)$item->getProductId(); + } + $this->_productIds = array_merge($this->_productIds, $productIds); + $productCollection = $this->_productCollectionFactory->create()->addIdFilter($this->_productIds); + $existingProductsIds = $productCollection->getAllIds(); + $absentProductsIds = array_diff($this->_productIds, $existingProductsIds); + // Remove not existing products from items collection + if (!empty($absentProductsIds)) { + foreach ($absentProductsIds as $productIdToExclude) { + /** @var \Magento\Quote\Model\Quote\Item $quoteItem */ + $quoteItem = $this->getItemByColumnValue('product_id', $productIdToExclude); + $this->removeItemByKey($quoteItem->getId()); + } } /** diff --git a/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteManagementTest.php b/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteManagementTest.php index b3e8605b54792..0b0071beb5133 100644 --- a/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteManagementTest.php +++ b/dev/tests/integration/testsuite/Magento/Quote/Model/QuoteManagementTest.php @@ -8,18 +8,22 @@ use Magento\Catalog\Model\Product\Type; use Magento\TestFramework\Helper\Bootstrap; +/** + * Class for testing QuoteManagement model + */ class QuoteManagementTest extends \PHPUnit\Framework\TestCase { /** * Create order with product that has child items * + * @magentoAppIsolation enabled * @magentoDataFixture Magento/Sales/_files/quote_with_bundle.php */ public function testSubmit() { /** * Preconditions: - * Load quote with Bundle product that has at least to child products + * Load quote with Bundle product that has at least two child products */ $objectManager = Bootstrap::getObjectManager(); /** @var \Magento\Quote\Model\Quote $quote */ @@ -28,8 +32,11 @@ public function testSubmit() /** Execute SUT */ /** @var \Magento\Quote\Api\CartManagementInterface $model */ - $model = $objectManager->create(\Magento\Quote\Api\CartManagementInterface::class); - $order = $model->submit($quote); + $cartManagement = $objectManager->create(\Magento\Quote\Api\CartManagementInterface::class); + /** @var \Magento\Sales\Api\OrderRepositoryInterface $orderRepository */ + $orderRepository = $objectManager->create(\Magento\Sales\Api\OrderRepositoryInterface::class); + $orderId = $cartManagement->placeOrder($quote->getId()); + $order = $orderRepository->get($orderId); /** Check if SUT caused expected effects */ $orderItems = $order->getItems(); @@ -41,4 +48,45 @@ public function testSubmit() } } } + + /** + * Create order with product that has child items and one of them was deleted + * + * @magentoAppArea adminhtml + * @magentoAppIsolation enabled + * @magentoDataFixture Magento/Sales/_files/quote_with_bundle.php + */ + public function testSubmitWithDeletedItem() + { + /** + * Preconditions: + * Load quote with Bundle product that have at least to child products + */ + $objectManager = Bootstrap::getObjectManager(); + /** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ + $productRepository = $objectManager->get(\Magento\Catalog\Api\ProductRepositoryInterface::class); + $product = $productRepository->get('simple-2'); + $productRepository->delete($product); + /** @var \Magento\Quote\Model\Quote $quote */ + $quote = $objectManager->create(\Magento\Quote\Model\Quote::class); + $quote->load('test01', 'reserved_order_id'); + + /** Execute SUT */ + /** @var \Magento\Quote\Api\CartManagementInterface $model */ + $cartManagement = $objectManager->create(\Magento\Quote\Api\CartManagementInterface::class); + /** @var \Magento\Sales\Api\OrderRepositoryInterface $orderRepository */ + $orderRepository = $objectManager->create(\Magento\Sales\Api\OrderRepositoryInterface::class); + $orderId = $cartManagement->placeOrder($quote->getId()); + $order = $orderRepository->get($orderId); + + /** Check if SUT caused expected effects */ + $orderItems = $order->getItems(); + $this->assertCount(2, $orderItems); + foreach ($orderItems as $orderItem) { + if ($orderItem->getProductType() == Type::TYPE_SIMPLE) { + $this->assertNotEmpty($orderItem->getParentItem(), 'Parent is not set for child product'); + $this->assertNotEmpty($orderItem->getParentItemId(), 'Parent is not set for child product'); + } + } + } } diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/quote_with_bundle_rollback.php b/dev/tests/integration/testsuite/Magento/Sales/_files/quote_with_bundle_rollback.php index 5a63a813caa96..c45e0aa4d9dc5 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/_files/quote_with_bundle_rollback.php +++ b/dev/tests/integration/testsuite/Magento/Sales/_files/quote_with_bundle_rollback.php @@ -4,25 +4,29 @@ * See COPYING.txt for license details. */ +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); /** @var \Magento\Framework\Registry $registry */ -$registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Framework\Registry::class); +$registry = $objectManager->get(\Magento\Framework\Registry::class); $registry->unregister('isSecureArea'); $registry->register('isSecureArea', true); +// Delete quote /** @var $quote \Magento\Quote\Model\Quote */ -$quote = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Quote\Model\Quote::class); +$quote = $objectManager->create(\Magento\Quote\Model\Quote::class); $quote->load('test01', 'reserved_order_id'); if ($quote->getId()) { $quote->delete(); } - -/** @var $product \Magento\Catalog\Model\Product */ -$productIds = [1, 2, 3]; -$product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Catalog\Model\Product::class); -foreach ($productIds as $productId) { - $product->load($productId); - if ($product->getId()) { - $product->delete(); +// Delete products +$productSkus = ['simple-1', 'simple-2', 'bundle-product']; +/** @var Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ +$productRepository = $objectManager->get(Magento\Catalog\Api\ProductRepositoryInterface::class); +foreach ($productSkus as $sku) { + try { + $product = $productRepository->get($sku, false, null, true); + $productRepository->delete($product); + } catch (\Magento\Framework\Exception\NoSuchEntityException $e) { + //Product already removed } } From 1d341efa8875779b266c00bee84c9d88f2037c59 Mon Sep 17 00:00:00 2001 From: Anton Evers <anton@eve.rs> Date: Tue, 14 Nov 2017 09:22:10 +0100 Subject: [PATCH 214/653] use InvoiceInterface instead of Invoice model to check if an invoice is set on the credit memo --- app/code/Magento/Sales/Model/Order/Creditmemo.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo.php b/app/code/Magento/Sales/Model/Order/Creditmemo.php index 3cf4d01727338..64b903fe5b5c1 100644 --- a/app/code/Magento/Sales/Model/Order/Creditmemo.php +++ b/app/code/Magento/Sales/Model/Order/Creditmemo.php @@ -389,7 +389,7 @@ public function canRefund() */ public function getInvoice() { - if (!$this->getData('invoice') instanceof \Magento\Sales\Model\Order\Invoice && $this->getInvoiceId()) { + if (!$this->getData('invoice') instanceof \Magento\Sales\Api\Data\InvoiceInterface && $this->getInvoiceId()) { $this->setInvoice($this->invoiceFactory->create()->load($this->getInvoiceId())); } return $this->getData('invoice'); From 64ddd51bb43a4bc1b3501672a6b2f3cbac34dc0e Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Tue, 14 Nov 2017 10:30:01 +0200 Subject: [PATCH 215/653] 8255: Export Products action doesn't consider hide_for_product_page value. --- .../Model/Export/Product.php | 1 + .../Model/Import/Product.php | 235 +--------- .../Import/Product/MediaGalleryProcessor.php | 407 ++++++++++++++++++ .../Model/Export/ProductTest.php | 13 +- 4 files changed, 431 insertions(+), 225 deletions(-) create mode 100644 app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php diff --git a/app/code/Magento/CatalogImportExport/Model/Export/Product.php b/app/code/Magento/CatalogImportExport/Model/Export/Product.php index c5618ef482ef7..4174fbefd90ef 100644 --- a/app/code/Magento/CatalogImportExport/Model/Export/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Export/Product.php @@ -1104,6 +1104,7 @@ protected function collectMultirawData() * @param \Magento\Catalog\Model\Product $item * @param int $storeId * @return bool + * @deprecated */ protected function hasMultiselectData($item, $storeId) { diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 477493cdbd06f..80ef6305e5b71 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -7,6 +7,7 @@ use Magento\Catalog\Model\Config as CatalogConfig; use Magento\Catalog\Model\Product\Visibility; +use Magento\CatalogImportExport\Model\Import\Product\MediaGalleryProcessor; use Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface as ValidatorInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Filesystem; @@ -698,6 +699,13 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity */ private $catalogConfig; + /** + * Provide ability to process and save images during import. + * + * @var MediaGalleryProcessor + */ + private $mediaProcessor; + /** * @param \Magento\Framework\Json\Helper\Data $jsonHelper * @param \Magento\ImportExport\Helper\Data $importExportData @@ -737,6 +745,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity * @param array $data * @param array $dateAttrCodes * @param CatalogConfig $catalogConfig + * @param MediaGalleryProcessor $mediaProcessor * @throws \Magento\Framework\Exception\LocalizedException * * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -780,7 +789,8 @@ public function __construct( \Magento\Catalog\Model\Product\Url $productUrl, array $data = [], array $dateAttrCodes = [], - CatalogConfig $catalogConfig = null + CatalogConfig $catalogConfig = null, + MediaGalleryProcessor $mediaProcessor = null ) { $this->_eventManager = $eventManager; $this->stockRegistry = $stockRegistry; @@ -813,7 +823,8 @@ public function __construct( $this->dateAttrCodes = array_merge($this->dateAttrCodes, $dateAttrCodes); $this->catalogConfig = $catalogConfig ?: \Magento\Framework\App\ObjectManager::getInstance() ->get(CatalogConfig::class); - + $this->mediaProcessor = $mediaProcessor ?: \Magento\Framework\App\ObjectManager::getInstance() + ->get(MediaGalleryProcessor::class); parent::__construct( $jsonHelper, $importExportData, @@ -1447,6 +1458,7 @@ private function getNewSkuFieldsForSelect() * Init media gallery resources * @return void * @since 100.0.4 + * @deprecated */ protected function initMediaGalleryResources() { @@ -1470,48 +1482,7 @@ protected function initMediaGalleryResources() */ protected function getExistingImages($bunch) { - $result = []; - if ($this->getErrorAggregator()->hasToBeTerminated()) { - return $result; - } - - $this->initMediaGalleryResources(); - $productSKUs = array_map('strval', array_column($bunch, self::COL_SKU)); - $select = $this->_connection->select()->from( - ['mg' => $this->mediaGalleryTableName], - ['value' => 'mg.value'] - )->joinInner( - ['mgvte' => $this->mediaGalleryEntityToValueTableName], - '(mg.value_id = mgvte.value_id)', - [ - $this->getProductEntityLinkField() => 'mgvte.' . $this->getProductEntityLinkField(), - 'value_id' => 'mgvte.value_id' - ] - )->joinLeft( - ['mgv' => $this->mediaGalleryValueTableName], - sprintf( - '(mg.value_id = mgv.value_id AND mgv.%s = mgvte.%s AND mgv.store_id = %d)', - $this->getProductEntityLinkField(), - $this->getProductEntityLinkField(), - \Magento\Store\Model\Store::DEFAULT_STORE_ID - ), - [ - 'label' => 'mgv.label' - ] - )->joinInner( - ['pe' => $this->productEntityTableName], - "(mgvte.{$this->getProductEntityLinkField()} = pe.{$this->getProductEntityLinkField()})", - ['sku' => 'pe.sku'] - )->where( - 'pe.sku IN (?)', - $productSKUs - ); - - foreach ($this->_connection->fetchAll($select) as $image) { - $result[$image['sku']][$image['value']] = $image; - } - - return $result; + return $this->mediaProcessor->getExistingImages($bunch); } /** @@ -2082,93 +2053,13 @@ private function getSystemFile($fileName) * * @param array $mediaGalleryData * @return $this - * @SuppressWarnings(PHPMD.CyclomaticComplexity) - * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function _saveMediaGallery(array $mediaGalleryData) { if (empty($mediaGalleryData)) { return $this; } - $this->initMediaGalleryResources(); - $imageNames = []; - $multiInsertData = []; - $valueToProductId = []; - $mediaGalleryData = $this->restoreDisableImage($mediaGalleryData); - foreach (array_keys($mediaGalleryData) as $storeId) { - foreach ($mediaGalleryData[$storeId] as $productSku => $mediaGalleryRows) { - $productId = $this->skuProcessor->getNewSku($productSku)[$this->getProductEntityLinkField()]; - - $insertedGalleryImgs = []; - foreach ($mediaGalleryRows as $insertValue) { - if (!in_array($insertValue['value'], $insertedGalleryImgs)) { - $valueArr = [ - 'attribute_id' => $insertValue['attribute_id'], - 'value' => $insertValue['value'], - ]; - $valueToProductId[$insertValue['value']][] = $productId; - $imageNames[] = $insertValue['value']; - $multiInsertData[] = $valueArr; - $insertedGalleryImgs[] = $insertValue['value']; - } - } - } - } - $multiInsertData = $this->filterImageInsertData($multiInsertData, $imageNames); - if ($multiInsertData) { - $this->_connection->insertOnDuplicate($this->mediaGalleryTableName, $multiInsertData); - } - $newMediaSelect = $this->_connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value']) - ->where('value IN (?)', $imageNames); - $dataForSkinnyTable = []; - $multiInsertData = []; - $newMediaValues = $this->_connection->fetchAssoc($newMediaSelect); - foreach (array_keys($mediaGalleryData) as $storeId) { - foreach ($mediaGalleryData[$storeId] as $productSku => $mediaGalleryRows) { - foreach ($mediaGalleryRows as $insertValue) { - foreach ($newMediaValues as $value_id => $values) { - if ($values['value'] == $insertValue['value']) { - $insertValue['value_id'] = $value_id; - $insertValue[$this->getProductEntityLinkField()] - = array_shift($valueToProductId[$values['value']]); - break; - } - } - if (isset($insertValue['value_id'])) { - $valueArr = [ - 'value_id' => $insertValue['value_id'], - 'store_id' => $storeId, - $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], - 'label' => $insertValue['label'], - 'position' => $insertValue['position'], - 'disabled' => $insertValue['disabled'], - ]; - $multiInsertData[] = $valueArr; - $dataForSkinnyTable[] = [ - 'value_id' => $insertValue['value_id'], - $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], - ]; - } - } - } - } - try { - $this->_connection->insertOnDuplicate( - $this->mediaGalleryValueTableName, - $multiInsertData, - ['value_id', 'store_id', $this->getProductEntityLinkField(), 'label', 'position', 'disabled'] - ); - $this->_connection->insertOnDuplicate( - $this->mediaGalleryEntityToValueTableName, - $dataForSkinnyTable, - ['value_id'] - ); - } catch (\Exception $e) { - $this->_connection->delete( - $this->mediaGalleryTableName, - $this->_connection->quoteInto('value_id IN (?)', $newMediaValues) - ); - } + $this->mediaProcessor->saveMediaGallery($mediaGalleryData); return $this; } @@ -2920,39 +2811,7 @@ private function updateMediaGalleryLabels(array $labels) if (empty($labels)) { return; } - - $insertData = []; - foreach ($labels as $label) { - $imageData = $label['imageData']; - - if ($imageData['label'] === null) { - $insertData[] = [ - 'label' => $label['label'], - $this->getProductEntityLinkField() => $imageData[$this->getProductEntityLinkField()], - 'value_id' => $imageData['value_id'], - 'store_id' => \Magento\Store\Model\Store::DEFAULT_STORE_ID - ]; - } else { - $this->_connection->update( - $this->mediaGalleryValueTableName, - [ - 'label' => $label['label'] - ], - [ - $this->getProductEntityLinkField() . ' = ?' => $imageData[$this->getProductEntityLinkField()], - 'value_id = ?' => $imageData['value_id'], - 'store_id = ?' => \Magento\Store\Model\Store::DEFAULT_STORE_ID - ] - ); - } - } - - if (!empty($insertData)) { - $this->_connection->insertMultiple( - $this->mediaGalleryValueTableName, - $insertData - ); - } + $this->mediaProcessor->updateMediaGalleryLabels($labels); } /** @@ -2991,64 +2850,4 @@ private function getExistingSku($sku) { return $this->_oldSku[strtolower($sku)]; } - - /** - * Set product images 'disable' = 0 for specified store. - * - * @param array $mediaGalleryData - * @return array - */ - private function restoreDisableImage(array $mediaGalleryData) - { - $restoreData = []; - foreach (array_keys($mediaGalleryData) as $storeId) { - foreach ($mediaGalleryData[$storeId] as $productSku => $mediaGalleryRows) { - $productId = $this->skuProcessor->getNewSku($productSku)[$this->getProductEntityLinkField()]; - $restoreData[] = sprintf( - 'store_id = %s and %s = %s', - $storeId, - $this->getProductEntityLinkField(), - $productId - ); - if (isset($mediaGalleryRows['all']['restore'])) { - unset($mediaGalleryData[$storeId][$productSku]); - } - } - } - - $this->_connection->update( - $this->mediaGalleryValueTableName, - ['disabled' => 0], - new \Zend_Db_Expr(implode(' or ', $restoreData)) - ); - - return $mediaGalleryData; - } - - /** - * Remove existed images from insert data. - * - * @param array $multiInsertData - * @param array $imageNames - * @return array - */ - private function filterImageInsertData(array $multiInsertData, array $imageNames) - { - //Remove image duplicates for stores. - $multiInsertData = array_map("unserialize", array_unique(array_map("serialize", $multiInsertData))); - $oldMediaValues = $this->_connection->fetchAssoc( - $this->_connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value', 'attribute_id']) - ->where('value IN (?)', $imageNames) - ); - foreach ($multiInsertData as $key => $data) { - foreach ($oldMediaValues as $mediaValue) { - if ($data['value'] == $mediaValue['value'] && $data['attribute_id'] == $mediaValue['attribute_id']) { - unset($multiInsertData[$key]); - break; - } - } - } - - return $multiInsertData; - } } diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php new file mode 100644 index 0000000000000..bced070ae5609 --- /dev/null +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php @@ -0,0 +1,407 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\CatalogImportExport\Model\Import\Product; + +use Magento\Catalog\Api\Data\ProductInterface; +use Magento\CatalogImportExport\Model\Import\Product; +use Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModelFactory; +use Magento\Framework\App\ResourceConnection; +use Magento\Framework\EntityManager\MetadataPool; +use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface; +use Magento\Store\Model\Store; + +/** + * Process and saves images during import. + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class MediaGalleryProcessor +{ + /** + * @var SkuProcessor + */ + private $skuProcessor; + + /** + * @var MetadataPool + */ + private $metadataPool; + + /** + * DB connection. + * + * @var \Magento\Framework\DB\Adapter\AdapterInterface + */ + private $connection; + + /** + * @var ResourceModelFactory + */ + private $resourceFactory; + + /** + * @var \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModel + */ + private $resourceModel; + + /** + * @var ProcessingErrorAggregatorInterface + */ + private $errorAggregator; + + /** + * @var string + */ + private $productEntityLinkField; + + /** + * @var string + */ + private $mediaGalleryTableName; + + /** + * @var string + */ + private $mediaGalleryValueTableName; + + /** + * @var string + */ + private $mediaGalleryEntityToValueTableName; + + /** + * @var string + */ + private $productEntityTableName; + + /** + * MediaProcessor constructor. + * + * @param SkuProcessor $skuProcessor + * @param MetadataPool $metadataPool + * @param ResourceConnection $resourceConnection + * @param ResourceModelFactory $resourceModelFactory + * @param ProcessingErrorAggregatorInterface $errorAggregator + */ + public function __construct( + SkuProcessor $skuProcessor, + MetadataPool $metadataPool, + ResourceConnection $resourceConnection, + ResourceModelFactory $resourceModelFactory, + ProcessingErrorAggregatorInterface $errorAggregator + ) { + $this->skuProcessor = $skuProcessor; + $this->metadataPool = $metadataPool; + $this->connection = $resourceConnection->getConnection(); + $this->resourceFactory = $resourceModelFactory; + $this->errorAggregator = $errorAggregator; + } + + /** + * Save product media gallery. + * + * @param $mediaGalleryData + * @return void + */ + public function saveMediaGallery(array $mediaGalleryData) + { + $this->initMediaGalleryResources(); + $imageNames = []; + $multiInsertData = []; + $valueToProductId = []; + $mediaGalleryData = $this->restoreDisableImage($mediaGalleryData); + foreach (array_keys($mediaGalleryData) as $storeId) { + foreach ($mediaGalleryData[$storeId] as $productSku => $mediaGalleryRows) { + $productId = $this->skuProcessor->getNewSku($productSku)[$this->getProductEntityLinkField()]; + + $insertedGalleryImgs = []; + foreach ($mediaGalleryRows as $insertValue) { + if (!in_array($insertValue['value'], $insertedGalleryImgs)) { + $valueArr = [ + 'attribute_id' => $insertValue['attribute_id'], + 'value' => $insertValue['value'], + ]; + $valueToProductId[$insertValue['value']][] = $productId; + $imageNames[] = $insertValue['value']; + $multiInsertData[] = $valueArr; + $insertedGalleryImgs[] = $insertValue['value']; + } + } + } + } + $multiInsertData = $this->filterImageInsertData($multiInsertData, $imageNames); + if ($multiInsertData) { + $this->connection->insertOnDuplicate($this->mediaGalleryTableName, $multiInsertData); + } + $newMediaSelect = $this->connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value']) + ->where('value IN (?)', $imageNames); + + $newMediaValues = $this->connection->fetchAssoc($newMediaSelect); + list($multiInsertData, $dataForSkinnyTable) = $this->prepareInsertData( + $mediaGalleryData, + $newMediaValues, + $valueToProductId + ); + try { + $this->connection->insertOnDuplicate( + $this->mediaGalleryValueTableName, + $multiInsertData, + ['value_id', 'store_id', $this->getProductEntityLinkField(), 'label', 'position', 'disabled'] + ); + $this->connection->insertOnDuplicate( + $this->mediaGalleryEntityToValueTableName, + $dataForSkinnyTable, + ['value_id'] + ); + } catch (\Exception $e) { + $this->connection->delete( + $this->mediaGalleryTableName, + $this->connection->quoteInto('value_id IN (?)', $newMediaValues) + ); + } + } + + /** + * Update media gallery labels. + * + * @param array $labels + * @return void + */ + public function updateMediaGalleryLabels(array $labels) + { + $insertData = []; + foreach ($labels as $label) { + $imageData = $label['imageData']; + + if ($imageData['label'] === null) { + $insertData[] = [ + 'label' => $label['label'], + $this->getProductEntityLinkField() => $imageData[$this->getProductEntityLinkField()], + 'value_id' => $imageData['value_id'], + 'store_id' => Store::DEFAULT_STORE_ID, + ]; + } else { + $this->connection->update( + $this->mediaGalleryValueTableName, + [ + 'label' => $label['label'], + ], + [ + $this->getProductEntityLinkField() . ' = ?' => $imageData[$this->getProductEntityLinkField()], + 'value_id = ?' => $imageData['value_id'], + 'store_id = ?' => Store::DEFAULT_STORE_ID, + ] + ); + } + } + + if (!empty($insertData)) { + $this->connection->insertMultiple( + $this->mediaGalleryValueTableName, + $insertData + ); + } + } + + /** + * Get existing images for current bunch. + * + * @param array $bunch + * @return array + */ + public function getExistingImages(array $bunch) + { + $result = []; + if ($this->errorAggregator->hasToBeTerminated()) { + return $result; + } + $this->initMediaGalleryResources(); + $productSKUs = array_map( + 'strval', + array_column($bunch, Product::COL_SKU) + ); + $select = $this->connection->select()->from( + ['mg' => $this->mediaGalleryTableName], + ['value' => 'mg.value'] + )->joinInner( + ['mgvte' => $this->mediaGalleryEntityToValueTableName], + '(mg.value_id = mgvte.value_id)', + [ + $this->getProductEntityLinkField() => 'mgvte.' . $this->getProductEntityLinkField(), + 'value_id' => 'mgvte.value_id', + ] + )->joinLeft( + ['mgv' => $this->mediaGalleryValueTableName], + sprintf( + '(mg.value_id = mgv.value_id AND mgv.%s = mgvte.%s AND mgv.store_id = %d)', + $this->getProductEntityLinkField(), + $this->getProductEntityLinkField(), + Store::DEFAULT_STORE_ID + ), + [ + 'label' => 'mgv.label', + ] + )->joinInner( + ['pe' => $this->productEntityTableName], + "(mgvte.{$this->getProductEntityLinkField()} = pe.{$this->getProductEntityLinkField()})", + ['sku' => 'pe.sku'] + )->where( + 'pe.sku IN (?)', + $productSKUs + ); + + foreach ($this->connection->fetchAll($select) as $image) { + $result[$image['sku']][$image['value']] = $image; + } + + return $result; + } + + /** + * Init media gallery resources. + * + * @return void + */ + private function initMediaGalleryResources() + { + if (null == $this->mediaGalleryTableName) { + $this->productEntityTableName = $this->getResource()->getTable('catalog_product_entity'); + $this->mediaGalleryTableName = $this->getResource()->getTable('catalog_product_entity_media_gallery'); + $this->mediaGalleryValueTableName = $this->getResource()->getTable( + 'catalog_product_entity_media_gallery_value' + ); + $this->mediaGalleryEntityToValueTableName = $this->getResource()->getTable( + 'catalog_product_entity_media_gallery_value_to_entity' + ); + } + } + + /** + * Remove existed images from insert data. + * + * @param array $multiInsertData + * @param array $imageNames + * @return array + */ + private function filterImageInsertData(array $multiInsertData, array $imageNames) + { + $oldMediaValues = $this->connection->fetchAssoc( + $this->connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value', 'attribute_id']) + ->where('value IN (?)', $imageNames) + ); + foreach ($multiInsertData as $key => $data) { + foreach ($oldMediaValues as $mediaValue) { + if ($data['value'] === $mediaValue['value'] && $data['attribute_id'] === $mediaValue['attribute_id']) { + unset($multiInsertData[$key]); + } + } + } + + return $multiInsertData; + } + + /** + * Set product images 'disable' = 0 for specified store. + * + * @param array $mediaGalleryData + * @return array + */ + private function restoreDisableImage(array $mediaGalleryData) + { + $restoreData = []; + foreach (array_keys($mediaGalleryData) as $storeId) { + foreach ($mediaGalleryData[$storeId] as $productSku => $mediaGalleryRows) { + $productId = $this->skuProcessor->getNewSku($productSku)[$this->getProductEntityLinkField()]; + $restoreData[] = sprintf( + 'store_id = %s and %s = %s', + $storeId, + $this->getProductEntityLinkField(), + $productId + ); + if (isset($mediaGalleryRows['all']['restore'])) { + unset($mediaGalleryData[$storeId][$productSku]); + } + } + } + + $this->connection->update( + $this->mediaGalleryValueTableName, + ['disabled' => 0], + new \Zend_Db_Expr(implode(' or ', $restoreData)) + ); + + return $mediaGalleryData; + } + + /** + * Get product entity link field. + * + * @return string + */ + private function getProductEntityLinkField() + { + if (!$this->productEntityLinkField) { + $this->productEntityLinkField = $this->metadataPool->getMetadata(ProductInterface::class)->getLinkField(); + } + + return $this->productEntityLinkField; + } + + /** + * @return \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModel + */ + private function getResource() + { + if (!$this->resourceModel) { + $this->resourceModel = $this->resourceFactory->create(); + } + + return $this->resourceModel; + } + + /** + * @param array $mediaGalleryData + * @param array $newMediaValues + * @param array $valueToProductId + * @return array + */ + private function prepareInsertData(array $mediaGalleryData, array $newMediaValues, array $valueToProductId) + { + $dataForSkinnyTable = []; + $multiInsertData = []; + foreach (array_keys($mediaGalleryData) as $storeId) { + foreach ($mediaGalleryData[$storeId] as $mediaGalleryRows) { + foreach ($mediaGalleryRows as $insertValue) { + foreach ($newMediaValues as $value_id => $values) { + if ($values['value'] == $insertValue['value']) { + $insertValue['value_id'] = $value_id; + $insertValue[$this->getProductEntityLinkField()] + = array_shift($valueToProductId[$values['value']]); + break; + } + } + if (isset($insertValue['value_id'])) { + $valueArr = [ + 'value_id' => $insertValue['value_id'], + 'store_id' => $storeId, + $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], + 'label' => $insertValue['label'], + 'position' => $insertValue['position'], + 'disabled' => $insertValue['disabled'], + ]; + $multiInsertData[] = $valueArr; + $dataForSkinnyTable[] = [ + 'value_id' => $insertValue['value_id'], + $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], + ]; + } + } + } + } + + return [$multiInsertData, $dataForSkinnyTable]; + } +} diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Export/ProductTest.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Export/ProductTest.php index 269572ebcc27c..66dc304388a94 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Export/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Export/ProductTest.php @@ -303,11 +303,6 @@ public function testExportWithMedia() $product = $productRepository->get('simple', 1); $mediaGallery = $product->getData('media_gallery'); $image = array_shift($mediaGallery['images']); - $expected = [ - 'hide_from_product_page' => 'hide_from_product_page', - '' => '', - $image['file'] => $image['file'], - ]; $this->model->setWriter( $this->objectManager->create( \Magento\ImportExport\Model\Export\Adapter\Csv::class @@ -320,7 +315,11 @@ public function testExportWithMedia() $varDirectory->writeFile('test_product_with_image.csv', $exportData); /** @var \Magento\Framework\File\Csv $csv */ $csv = $this->objectManager->get(\Magento\Framework\File\Csv::class); - $data = $csv->getDataPairs($varDirectory->getAbsolutePath('test_product_with_image.csv'), 76, 76); - self::assertSame($expected, $data); + $data = $csv->getData($varDirectory->getAbsolutePath('test_product_with_image.csv')); + foreach ($data[0] as $columnNumber => $columnName) { + if ($columnName === 'hide_from_product_page') { + self::assertSame($image['file'], $data[2][$columnNumber]); + } + } } } From 3e7c7c83c83b62e06c90c04bd90d3d0309f8c090 Mon Sep 17 00:00:00 2001 From: Leonid Poluyanov <lpoluyanov@magento.com> Date: Tue, 14 Nov 2017 10:52:16 +0200 Subject: [PATCH 216/653] MAGETWO-83169: Loaded quote items collection contains removed product items --- .../ResourceModel/Quote/Item/Collection.php | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php index 82126ce95261f..0487d7e46eb26 100644 --- a/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php +++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php @@ -169,18 +169,7 @@ protected function _afterLoad() $productIds[] = (int)$item->getProductId(); } $this->_productIds = array_merge($this->_productIds, $productIds); - $productCollection = $this->_productCollectionFactory->create()->addIdFilter($this->_productIds); - $existingProductsIds = $productCollection->getAllIds(); - $absentProductsIds = array_diff($this->_productIds, $existingProductsIds); - // Remove not existing products from items collection - if (!empty($absentProductsIds)) { - foreach ($absentProductsIds as $productIdToExclude) { - /** @var \Magento\Quote\Model\Quote\Item $quoteItem */ - $quoteItem = $this->getItemByColumnValue('product_id', $productIdToExclude); - $this->removeItemByKey($quoteItem->getId()); - } - } - + $this->removeItemsWithAbsentProducts(); /** * Assign options and products */ @@ -218,12 +207,6 @@ protected function _assignOptions() protected function _assignProducts() { \Magento\Framework\Profiler::start('QUOTE:' . __METHOD__, ['group' => 'QUOTE', 'method' => __METHOD__]); - $productIds = []; - foreach ($this as $item) { - $productIds[] = (int)$item->getProductId(); - } - $this->_productIds = array_merge($this->_productIds, $productIds); - $productCollection = $this->_productCollectionFactory->create()->setStoreId( $this->getStoreId() )->addIdFilter( @@ -318,4 +301,24 @@ private function addTierPriceData(ProductCollection $productCollection) $productCollection->addTierPriceDataByGroupId($this->_quote->getCustomerGroupId()); } } + + /** + * Find and remove quote items with non existing products + * + * @return void + */ + private function removeItemsWithAbsentProducts() + { + $productCollection = $this->_productCollectionFactory->create()->addIdFilter($this->_productIds); + $existingProductsIds = $productCollection->getAllIds(); + $absentProductsIds = array_diff($this->_productIds, $existingProductsIds); + // Remove not existing products from items collection + if (!empty($absentProductsIds)) { + foreach ($absentProductsIds as $productIdToExclude) { + /** @var \Magento\Quote\Model\Quote\Item $quoteItem */ + $quoteItem = $this->getItemByColumnValue('product_id', $productIdToExclude); + $this->removeItemByKey($quoteItem->getId()); + } + } + } } From 550abf420792f9ca968cfc5e37f2f789a6910205 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko <vgoncharenko@magento.com> Date: Tue, 14 Nov 2017 11:25:23 +0200 Subject: [PATCH 217/653] MAGETWO-83755: Impossible to create magento project for 2.2.2 - fix dependencies in modules according to root composer file --- app/code/Magento/Braintree/composer.json | 2 +- lib/internal/Magento/Framework/composer.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Braintree/composer.json b/app/code/Magento/Braintree/composer.json index 0248a62ccfbb2..a1ff7970e4921 100644 --- a/app/code/Magento/Braintree/composer.json +++ b/app/code/Magento/Braintree/composer.json @@ -18,7 +18,7 @@ "magento/module-quote": "101.0.*", "magento/module-paypal": "100.2.*", "magento/module-ui": "101.0.*", - "braintree/braintree_php": "3.22.0" + "braintree/braintree_php": "3.25.0" }, "suggest": { "magento/module-checkout-agreements": "100.2.*", diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json index c2330ce679014..ad625b3fd29de 100644 --- a/lib/internal/Magento/Framework/composer.json +++ b/lib/internal/Magento/Framework/composer.json @@ -27,9 +27,9 @@ "oyejorge/less.php": "~1.7.0", "symfony/console": "~2.3, !=2.7.0", "tedivm/jshrink": "~1.2.0", - "zendframework/zend-code": "^3.1.0", + "zendframework/zend-code": "~3.1.0", "zendframework/zend-crypt": "^2.6.0", - "zendframework/zend-mvc": "~2.6.3", + "zendframework/zend-mvc": "~2.7.12", "zendframework/zend-uri": "^2.5.1", "zendframework/zend-validator": "^2.6.0", "zendframework/zend-stdlib": "^2.7.7", From 2a1b0418485c59a0711e88f6674137f97fa672de Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Tue, 14 Nov 2017 11:44:17 +0200 Subject: [PATCH 218/653] 8255: Export Products action doesn't consider hide_for_product_page value. --- .../_files/product_export_with_images.php | 10 +++++----- .../_files/product_export_with_images_rollback.php | 8 ++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_images_rollback.php diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_images.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_images.php index 1c9dbbb5553f8..da456767257e1 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_images.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_images.php @@ -30,18 +30,18 @@ ] )->save(); $image = array_shift($product->getData('media_gallery')['images']); -$product->setStoreId(1)->setData( +$product = $productRepository->get('simple', false, 1, true); +$product->setData( 'media_gallery', [ 'images' => [ [ - 'file' => $image['file'], 'value_id' => $image['value_id'], - 'position' => 1, - 'label' => 'Image Alt Text', + 'file' => $image['file'], 'disabled' => 1, 'media_type' => 'image', ], ], ] -)->save(); +); +$productRepository->save($product); diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_images_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_images_rollback.php new file mode 100644 index 0000000000000..d7a52465ead4a --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/_files/product_export_with_images_rollback.php @@ -0,0 +1,8 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +require dirname(__DIR__, 2) . '/Catalog/_files/product_image_rollback.php'; +require dirname(__DIR__, 2) . '/Catalog/_files/product_simple_rollback.php'; From 7f6b56078edb8eacc5b54e41cc84deb2fcf1fb41 Mon Sep 17 00:00:00 2001 From: Vova Yatsyuk <vova.yatsyuk@gmail.com> Date: Tue, 14 Nov 2017 14:31:35 +0200 Subject: [PATCH 219/653] Fixed php notice when invalid ui_component config is used --- .../Magento/Framework/ObjectManager/Factory/AbstractFactory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php b/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php index 99b35509c4bad..020159985105d 100644 --- a/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php +++ b/lib/internal/Magento/Framework/ObjectManager/Factory/AbstractFactory.php @@ -127,12 +127,12 @@ protected function createObject($type, $args) protected function resolveArgument(&$argument, $paramType, $paramDefault, $paramName, $requestedType) { if ($paramType && $argument !== $paramDefault && !is_object($argument)) { - $argumentType = $argument['instance']; if (!isset($argument['instance']) || $argument !== (array)$argument) { throw new \UnexpectedValueException( 'Invalid parameter configuration provided for $' . $paramName . ' argument of ' . $requestedType ); } + $argumentType = $argument['instance']; if (isset($argument['shared'])) { $isShared = $argument['shared']; From ef165a2d3666d92a109252541c399e55695c830b Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Tue, 14 Nov 2017 14:42:29 +0200 Subject: [PATCH 220/653] 10128: New Orders not being saved to order grid --- .../Backend/Block/Dashboard/Orders/Grid.php | 2 +- .../Block/Dashboard/Orders/GridTest.php | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 dev/tests/integration/testsuite/Magento/Backend/Block/Dashboard/Orders/GridTest.php diff --git a/app/code/Magento/Backend/Block/Dashboard/Orders/Grid.php b/app/code/Magento/Backend/Block/Dashboard/Orders/Grid.php index 9d9409fba093b..50279786c0a5b 100644 --- a/app/code/Magento/Backend/Block/Dashboard/Orders/Grid.php +++ b/app/code/Magento/Backend/Block/Dashboard/Orders/Grid.php @@ -92,7 +92,7 @@ protected function _prepareCollection() protected function _afterLoadCollection() { foreach ($this->getCollection() as $item) { - $item->getCustomer() ?: $item->setCustomer('Guest'); + $item->getCustomer() ?: $item->setCustomer($item->getBillingAddress()->getName()); } return $this; } diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/Dashboard/Orders/GridTest.php b/dev/tests/integration/testsuite/Magento/Backend/Block/Dashboard/Orders/GridTest.php new file mode 100644 index 0000000000000..859837d4af130 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/Dashboard/Orders/GridTest.php @@ -0,0 +1,40 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Backend\Block\Dashboard\Orders; + +use Magento\Backend\Block\Template\Context; + +class GridTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var Grid + */ + private $block; + + protected function setUp() + { + parent::setUp(); + + $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $block = $this->createMock(\Magento\Backend\Block\Dashboard\Orders\Grid::class); + $layout = $this->createMock(\Magento\Framework\View\LayoutInterface::class); + $layout->expects($this->atLeastOnce())->method('getChildName')->willReturn('test'); + $layout->expects($this->atLeastOnce())->method('getBlock')->willReturn($block); + $context = $objectManager->create(Context::class, ['layout' => $layout]); + + $this->block = $objectManager->create(Grid::class, ['context' => $context]); + } + + /** + * @magentoDataFixture Magento/Sales/_files/order.php + */ + public function testGetPreparedCollection() + { + $collection = $this->block->getPreparedCollection(); + $this->assertEquals('firstname lastname', $collection->getItems()[1]->getCustomer()); + } +} From 60ae06727d43948962e892e936f59009040f32e2 Mon Sep 17 00:00:00 2001 From: Patrick McLain <pmclain@somethingdigital.com> Date: Tue, 14 Nov 2017 08:16:43 -0500 Subject: [PATCH 221/653] Backward compatible constructor updates * Make new properties `private` * Update new constructor arguments to follow Backward compatible development guide --- app/code/Magento/Customer/Controller/Ajax/Login.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Customer/Controller/Ajax/Login.php b/app/code/Magento/Customer/Controller/Ajax/Login.php index 7d6ddc7316a3e..d275b563553ca 100644 --- a/app/code/Magento/Customer/Controller/Ajax/Login.php +++ b/app/code/Magento/Customer/Controller/Ajax/Login.php @@ -63,12 +63,12 @@ class Login extends \Magento\Framework\App\Action\Action /** * @var CookieManagerInterface */ - protected $cookieManager; + private $cookieManager; /** * @var CookieMetadataFactory */ - protected $cookieMetadataFactory; + private $cookieMetadataFactory; /** * Initialize Login controller @@ -89,8 +89,8 @@ public function __construct( AccountManagementInterface $customerAccountManagement, \Magento\Framework\Controller\Result\JsonFactory $resultJsonFactory, \Magento\Framework\Controller\Result\RawFactory $resultRawFactory, - CookieManagerInterface $cookieManager, - CookieMetadataFactory $cookieMetadataFactory + CookieManagerInterface $cookieManager = null, + CookieMetadataFactory $cookieMetadataFactory = null ) { parent::__construct($context); $this->customerSession = $customerSession; @@ -98,8 +98,8 @@ public function __construct( $this->customerAccountManagement = $customerAccountManagement; $this->resultJsonFactory = $resultJsonFactory; $this->resultRawFactory = $resultRawFactory; - $this->cookieManager = $cookieManager; - $this->cookieMetadataFactory = $cookieMetadataFactory; + $this->cookieManager = $cookieManager ?: ObjectManager::getInstance()->get(CookieManagerInterface::class); + $this->cookieMetadataFactory = $cookieMetadataFactory ?: ObjectManager::getInstance()->get(CookieMetadataFactory::class); } /** From 1ebcd7add6e6bcb2f8deb62ba5754e3110b59f12 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Tue, 14 Nov 2017 15:19:44 +0200 Subject: [PATCH 222/653] 10128: New Orders not being saved to order grid --- .../Magento/Backend/Block/Dashboard/Orders/GridTest.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/Dashboard/Orders/GridTest.php b/dev/tests/integration/testsuite/Magento/Backend/Block/Dashboard/Orders/GridTest.php index 859837d4af130..9572bf10618fc 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Block/Dashboard/Orders/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/Dashboard/Orders/GridTest.php @@ -8,6 +8,10 @@ use Magento\Backend\Block\Template\Context; +/** + * @magentoAppIsolation enabled + * @magentoDbIsolation enabled + */ class GridTest extends \PHPUnit\Framework\TestCase { /** From 2149833868eef9a89e2c3d11e99246d78e5a670b Mon Sep 17 00:00:00 2001 From: Patrick McLain <pmclain@somethingdigital.com> Date: Tue, 14 Nov 2017 08:19:55 -0500 Subject: [PATCH 223/653] Make new test class properties `private` --- .../Customer/Test/Unit/Controller/Ajax/LoginTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Ajax/LoginTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Ajax/LoginTest.php index 6ab20c13acf3e..2fca6c99be319 100644 --- a/app/code/Magento/Customer/Test/Unit/Controller/Ajax/LoginTest.php +++ b/app/code/Magento/Customer/Test/Unit/Controller/Ajax/LoginTest.php @@ -76,17 +76,17 @@ class LoginTest extends \PHPUnit\Framework\TestCase /** * @var \Magento\Framework\Stdlib\CookieManagerInterface| \PHPUnit_Framework_MockObject_MockObject */ - protected $cookieManager; + private $cookieManager; /** * @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory| \PHPUnit_Framework_MockObject_MockObject */ - protected $cookieMetadataFactory; + private $cookieMetadataFactory; /** * @var \Magento\Framework\Stdlib\Cookie\CookieMetadata| \PHPUnit_Framework_MockObject_MockObject */ - protected $cookieMetadata; + private $cookieMetadata; protected function setUp() { From a933cf745b4e6cc82d07cefb00cd4af9874e034f Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Tue, 14 Nov 2017 15:46:34 +0200 Subject: [PATCH 224/653] 10128: New Orders not being saved to order grid --- .../Backend/Block/Dashboard/Orders/GridTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Backend/Block/Dashboard/Orders/GridTest.php b/dev/tests/integration/testsuite/Magento/Backend/Block/Dashboard/Orders/GridTest.php index 9572bf10618fc..6c91afb80fd4a 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Block/Dashboard/Orders/GridTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Block/Dashboard/Orders/GridTest.php @@ -8,10 +8,6 @@ use Magento\Backend\Block\Template\Context; -/** - * @magentoAppIsolation enabled - * @magentoDbIsolation enabled - */ class GridTest extends \PHPUnit\Framework\TestCase { /** @@ -39,6 +35,10 @@ protected function setUp() public function testGetPreparedCollection() { $collection = $this->block->getPreparedCollection(); - $this->assertEquals('firstname lastname', $collection->getItems()[1]->getCustomer()); + foreach ($collection->getItems() as $item) { + if ($item->getIncrementId() == '100000001') { + $this->assertEquals('firstname lastname', $item->getCustomer()); + } + } } } From 5f533738d7f982d11641f5a60490ad8699b62156 Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Tue, 14 Nov 2017 16:04:04 +0200 Subject: [PATCH 225/653] MAGETWO-80568: Prepare codebase for 2.2.2 --- .htaccess | 9 +++++++++ .htaccess.sample | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/.htaccess b/.htaccess index f824f0b7bbc59..fd4f5a63de051 100644 --- a/.htaccess +++ b/.htaccess @@ -355,6 +355,15 @@ Require all denied </IfVersion> </Files> + <Files auth.json> + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> + </Files> <Files magento_umask> <IfVersion < 2.4> order allow,deny diff --git a/.htaccess.sample b/.htaccess.sample index f3a4474aec949..a6c1bc4caf30b 100644 --- a/.htaccess.sample +++ b/.htaccess.sample @@ -332,6 +332,15 @@ Require all denied </IfVersion> </Files> + <Files auth.json> + <IfVersion < 2.4> + order allow,deny + deny from all + </IfVersion> + <IfVersion >= 2.4> + Require all denied + </IfVersion> + </Files> <Files magento_umask> <IfVersion < 2.4> order allow,deny From 6330103f3092db7414f2118588d9ffcee3a03e8a Mon Sep 17 00:00:00 2001 From: Sam Carr <samcarr4@googlemail.com> Date: Fri, 10 Nov 2017 01:16:29 +0000 Subject: [PATCH 226/653] Fix delay initialization options for customized JQuery UI menu widget --- lib/web/mage/menu.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/web/mage/menu.js b/lib/web/mage/menu.js index 05d3217414883..6ad60333d2e1b 100644 --- a/lib/web/mage/menu.js +++ b/lib/web/mage/menu.js @@ -21,6 +21,7 @@ define([ expanded: false, showDelay: 42, hideDelay: 300, + delay: 300, mediaBreakpoint: '(max-width: 768px)' }, @@ -30,6 +31,8 @@ define([ _create: function () { var self = this; + this.delay = this.options.delay; + this._super(); $(window).on('resize', function () { self.element.find('.submenu-reverse').removeClass('submenu-reverse'); @@ -583,7 +586,7 @@ define([ html.removeClass('nav-open'); setTimeout(function () { html.removeClass('nav-before-open'); - }, 300); + }, this.options.hideDelay); } }, From 7b6d50db506ad1ca0784c454fc4736aeebe38410 Mon Sep 17 00:00:00 2001 From: Daniel Renaud <drenaud@magento.com> Date: Tue, 14 Nov 2017 13:16:04 -0600 Subject: [PATCH 227/653] =?UTF-8?q?MAGETWO-80622:=20=D0=A1heckCustomerType?= =?UTF-8?q?Test=20failure=20on=20FAT-EXT-B2B-UR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev/tests/functional/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/functional/composer.json b/dev/tests/functional/composer.json index f92311f6ef351..32baa5a070b39 100644 --- a/dev/tests/functional/composer.json +++ b/dev/tests/functional/composer.json @@ -1,6 +1,6 @@ { "require": { - "magento/mtf": "1.0.0-rc56", + "magento/mtf": "1.0.0-rc57", "php": "7.0.2|~7.0.6|~7.1.0", "phpunit/phpunit": "~4.8.0|~5.5.0", "phpunit/phpunit-selenium": ">=1.2" From f9366049ae72400c587a6fe7225d9c6022bc1218 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga <carlos.lizaga@pronovias.com> Date: Tue, 14 Nov 2017 21:53:41 +0100 Subject: [PATCH 228/653] Fix PHPDoc for uploadMediaFiles function in order to show $renameFileOff param as optional set as false by default. --- app/code/Magento/CatalogImportExport/Model/Import/Product.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 5f4a512ec34de..bfed36c8712fb 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -2029,6 +2029,8 @@ public function getUploader() * Return a new file name if the same file is already exists. * * @param string $fileName + * @param bool $renameFileOff [optional] boolean to pass. Default is false + * which will set not to rename the file after import. * @return string */ protected function uploadMediaFiles($fileName, $renameFileOff = false) From 3ce246d476e090cb45b91ffa45416a1b2aade7f0 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga <carlos.lizaga@pronovias.com> Date: Tue, 14 Nov 2017 22:17:56 +0100 Subject: [PATCH 229/653] Fix PHPDoc typo on __construct method. --- app/code/Magento/CatalogImportExport/Model/Import/Product.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index bfed36c8712fb..165eb28a010b5 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -712,7 +712,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity * @param \Magento\CatalogInventory\Model\Spi\StockStateProviderInterface $stockStateProvider * @param \Magento\Catalog\Helper\Data $catalogData * @param \Magento\ImportExport\Model\Import\Config $importConfig - * @param Proxy\Product\ResourceFactory $resourceFactory + * @param Proxy\Product\ResourceModelFactory $resourceFactory * @param Product\OptionFactory $optionFactory * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setColFactory * @param Product\Type\Factory $productTypeFactory From 8f1aa87d249294fd756469ccf4f84a271d21c432 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga <carlos.lizaga@pronovias.com> Date: Tue, 14 Nov 2017 22:34:09 +0100 Subject: [PATCH 230/653] Fix PHPDoc _saveProducts method to include throws \Magento\Framework\Exception\LocalizedException --- app/code/Magento/CatalogImportExport/Model/Import/Product.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 165eb28a010b5..217f78d20b03b 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -1551,6 +1551,7 @@ public function getImagesFromRow(array $rowData) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) * @SuppressWarnings(PHPMD.UnusedLocalVariable) + * @throws \Magento\Framework\Exception\LocalizedException */ protected function _saveProducts() { From 41a43c1a57bc0a38ccce14f27e5ae8373d0fd76d Mon Sep 17 00:00:00 2001 From: Carlos Lizaga <carlos.lizaga@pronovias.com> Date: Tue, 14 Nov 2017 22:50:14 +0100 Subject: [PATCH 231/653] Remove deprecated gmDate function from _saveProducts() and _saveStockItem() functions. Used Intl library for datetime handling: http://php.net/manual/en/book.intl.php --- app/code/Magento/CatalogImportExport/Model/Import/Product.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 217f78d20b03b..5ed492b2ec3d6 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -1815,7 +1815,7 @@ protected function _saveProducts() ) { $attrValue = $this->dateTime->formatDate($attrValue, false); } elseif ('datetime' == $attribute->getBackendType() && strtotime($attrValue)) { - $attrValue = $this->dateTime->gmDate( + $attrValue = gmdate( 'Y-m-d H:i:s', $this->_localeDate->date($attrValue)->getTimestamp() ); @@ -2240,7 +2240,7 @@ protected function _saveStockItem() $stockItemDo->setData($row); $row['is_in_stock'] = $this->stockStateProvider->verifyStock($stockItemDo); if ($this->stockStateProvider->verifyNotification($stockItemDo)) { - $row['low_stock_date'] = $this->dateTime->gmDate( + $row['low_stock_date'] = gmdate( 'Y-m-d H:i:s', (new \DateTime())->getTimestamp() ); From 19de842b1d291f731937adcbe0c1aa3213cbb861 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga <carlos.lizaga@pronovias.com> Date: Tue, 14 Nov 2017 22:57:58 +0100 Subject: [PATCH 232/653] Fix PHPDoc for _saveValidatedBunches(). Return shall be declared as $this|\Magento\ImportExport\Model\Import\Entity\AbstractEntity Removed 'void' as declaration from _saveValidatedBunches() function as it shall return $this [\Magento\ImportExport\Model\Import\Entity\AbstractEntity] --- app/code/Magento/CatalogImportExport/Model/Import/Product.php | 2 +- .../Magento/ImportExport/Model/Import/Entity/AbstractEntity.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 5ed492b2ec3d6..2727ce008c88b 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -2758,7 +2758,7 @@ private function _customFieldsMapping($rowData) /** * Validate data rows and save bunches to DB * - * @return $this + * @return $this|\Magento\ImportExport\Model\Import\Entity\AbstractEntity */ protected function _saveValidatedBunches() { diff --git a/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php b/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php index c61292f7c34f7..37c85a4384900 100644 --- a/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php +++ b/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php @@ -378,7 +378,7 @@ protected function addErrors($code, $errors) /** * Validate data rows and save bunches to DB. * - * @return $this|void + * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function _saveValidatedBunches() From dc22a8249dad15e168a781a2c32ffebdf5c51869 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga <carlos.lizaga@pronovias.com> Date: Tue, 14 Nov 2017 23:06:25 +0100 Subject: [PATCH 233/653] Fine tuning: add use Magento\Framework\Exception\LocalizedException in order to use LocalizedException and reuse ObjectManager instead of classpath. --- .../Model/Import/Entity/AbstractEntity.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php b/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php index 37c85a4384900..e7883693fbe74 100644 --- a/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php +++ b/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php @@ -7,6 +7,7 @@ use Magento\Framework\App\ObjectManager; use Magento\Framework\App\ResourceConnection; +use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Serialize\Serializer\Json; use Magento\ImportExport\Model\Import\AbstractSource; use Magento\ImportExport\Model\Import as ImportExport; @@ -310,7 +311,7 @@ public function __construct( protected function _getSource() { if (!$this->_source) { - throw new \Magento\Framework\Exception\LocalizedException(__('Please specify a source.')); + throw new LocalizedException(__('Please specify a source.')); } return $this->_source; } @@ -548,11 +549,11 @@ public function getBehavior() if (!isset( $this->_parameters['behavior'] ) || - $this->_parameters['behavior'] != \Magento\ImportExport\Model\Import::BEHAVIOR_APPEND && - $this->_parameters['behavior'] != \Magento\ImportExport\Model\Import::BEHAVIOR_REPLACE && - $this->_parameters['behavior'] != \Magento\ImportExport\Model\Import::BEHAVIOR_DELETE + $this->_parameters['behavior'] != ImportExport::BEHAVIOR_APPEND && + $this->_parameters['behavior'] != ImportExport::BEHAVIOR_REPLACE && + $this->_parameters['behavior'] != ImportExport::BEHAVIOR_DELETE ) { - return \Magento\ImportExport\Model\Import::getDefaultBehavior(); + return ImportExport::getDefaultBehavior(); } return $this->_parameters['behavior']; } @@ -604,7 +605,7 @@ public function getProcessedRowsCount() public function getSource() { if (!$this->_source) { - throw new \Magento\Framework\Exception\LocalizedException(__('The source is not set.')); + throw new LocalizedException(__('The source is not set.')); } return $this->_source; } @@ -879,7 +880,7 @@ public function getValidColumnNames() protected function getMetadataPool() { if (!$this->metadataPool) { - $this->metadataPool = \Magento\Framework\App\ObjectManager::getInstance() + $this->metadataPool = ObjectManager::getInstance() ->get(\Magento\Framework\EntityManager\MetadataPool::class); } return $this->metadataPool; From 820c0973bfeb5ba67e374c367bb584261f2ac0c1 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga <carlos.lizaga@pronovias.com> Date: Tue, 14 Nov 2017 23:14:29 +0100 Subject: [PATCH 234/653] Fine tuning: add use Magento\Framework\Exception\LocalizedException in order to use LocalizedException. --- .../CatalogImportExport/Model/Import/Product.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 2727ce008c88b..91e7c95e86f7b 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -9,6 +9,7 @@ use Magento\Catalog\Model\Product\Visibility; use Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface as ValidatorInterface; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Filesystem; use Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor; use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface; @@ -1084,12 +1085,12 @@ protected function _initTypeModels() $params = [$this, $productTypeName]; if (!($model = $this->_productTypeFactory->create($productTypeConfig['model'], ['params' => $params])) ) { - throw new \Magento\Framework\Exception\LocalizedException( + throw new LocalizedException( __('Entity type model \'%1\' is not found', $productTypeConfig['model']) ); } if (!$model instanceof \Magento\CatalogImportExport\Model\Import\Product\Type\AbstractType) { - throw new \Magento\Framework\Exception\LocalizedException( + throw new LocalizedException( __( 'Entity type model must be an instance of ' . \Magento\CatalogImportExport\Model\Import\Product\Type\AbstractType::class @@ -1612,7 +1613,7 @@ protected function _saveProducts() // wrong attribute_set_code was received if (!$attributeSetId) { - throw new \Magento\Framework\Exception\LocalizedException( + throw new LocalizedException( __( 'Wrong attribute set code "%1", please correct it and try again.', $rowData['attribute_set_code'] @@ -1999,7 +2000,7 @@ protected function _getUploader() } if (!$this->_fileUploader->setTmpDir($tmpPath)) { - throw new \Magento\Framework\Exception\LocalizedException( + throw new LocalizedException( __('File directory \'%1\' is not readable.', $tmpPath) ); } @@ -2008,7 +2009,7 @@ protected function _getUploader() $this->_mediaDirectory->create($destinationPath); if (!$this->_fileUploader->setDestDir($destinationPath)) { - throw new \Magento\Framework\Exception\LocalizedException( + throw new LocalizedException( __('File directory \'%1\' is not writable.', $destinationPath) ); } From 94422cb5ad76281be8eb22a6492d13db6fcf2566 Mon Sep 17 00:00:00 2001 From: Todd Christensen <tchristensen@somethingdigital.com> Date: Tue, 14 Nov 2017 18:33:37 -0800 Subject: [PATCH 235/653] Always use linkIds for category flat EAV indexing. This keeps full and rows indexing consistent. --- .../Model/Indexer/Category/Flat/AbstractAction.php | 5 +++-- .../Model/Indexer/Category/Flat/Action/Full.php | 8 ++++++-- .../Model/Indexer/Category/Flat/Action/Rows.php | 14 ++++++++------ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/AbstractAction.php index c5efbc619694a..8f0e6e9c0cdb5 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/AbstractAction.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/AbstractAction.php @@ -376,13 +376,14 @@ protected function getAttributeValues($entityIds, $storeId) $attributes = $this->getAttributes(); $attributesType = ['varchar', 'int', 'decimal', 'text', 'datetime']; + $linkField = $this->getCategoryMetadata()->getLinkField(); foreach ($attributesType as $type) { foreach ($this->getAttributeTypeValues($type, $entityIds, $storeId) as $row) { - if (isset($row[$this->getCategoryMetadata()->getLinkField()]) && isset($row['attribute_id'])) { + if (isset($row[$linkField]) && isset($row['attribute_id'])) { $attributeId = $row['attribute_id']; if (isset($attributes[$attributeId])) { $attributeCode = $attributes[$attributeId]['attribute_code']; - $values[$row[$this->getCategoryMetadata()->getLinkField()]][$attributeCode] = $row['value']; + $values[$row[$linkField]][$attributeCode] = $row['value']; } } } diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Action/Full.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Action/Full.php index eeac2e80af97e..64a8f930d83ee 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Action/Full.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Action/Full.php @@ -64,18 +64,22 @@ protected function populateFlatTables(array $stores) } /** @TODO Do something with chunks */ $categoriesIdsChunks = array_chunk($categoriesIds[$store->getRootCategoryId()], 500); + foreach ($categoriesIdsChunks as $categoriesIdsChunk) { $attributesData = $this->getAttributeValues($categoriesIdsChunk, $store->getId()); + $linkField = $this->categoryMetadata->getLinkField(); + $data = []; foreach ($categories[$store->getRootCategoryId()] as $category) { - if (!isset($attributesData[$category[$this->categoryMetadata->getLinkField()]])) { + if (!isset($attributesData[$category[$linkField]])) { continue; } $category['store_id'] = $store->getId(); $data[] = $this->prepareValuesToInsert( - array_merge($category, $attributesData[$category[$this->categoryMetadata->getLinkField()]]) + array_merge($category, $attributesData[$category[$linkField]]) ); } + $this->connection->insertMultiple( $this->addTemporaryTableSuffix($this->getMainStoreTable($store->getId())), $data diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Action/Rows.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Action/Rows.php index 2368c27e02d72..bc17d731f04c0 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Action/Rows.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Action/Rows.php @@ -69,22 +69,24 @@ public function reindex(array $entityIds = [], $useTempTable = false) $categoriesIdsChunk = $this->filterIdsByStore($categoriesIdsChunk, $store); $attributesData = $this->getAttributeValues($categoriesIdsChunk, $store->getId()); + $linkField = $this->categoryMetadata->getLinkField(); $data = []; foreach ($categoriesIdsChunk as $categoryId) { - if (!isset($attributesData[$categoryId])) { - continue; - } - try { $category = $this->categoryRepository->get($categoryId); } catch (NoSuchEntityException $e) { continue; } + $categoryData = $category->getData(); + if (!isset($attributesData[$categoryData[$linkField]])) { + continue; + } + $data[] = $this->prepareValuesToInsert( array_merge( - $category->getData(), - $attributesData[$categoryId], + $categoryData, + $attributesData[$categoryData[$linkField]], ['store_id' => $store->getId()] ) ); From 7800e5dd8aac704da3f2b1799baadf2a01269c61 Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Wed, 15 Nov 2017 11:22:02 +0100 Subject: [PATCH 236/653] 7241 Re-add removed protected method and mark it as deprecated This is due to Backwards Compatibility reasons. --- app/code/Magento/Customer/Model/Options.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/code/Magento/Customer/Model/Options.php b/app/code/Magento/Customer/Model/Options.php index bdd5fd9fd1137..23a8c87a84ba4 100644 --- a/app/code/Magento/Customer/Model/Options.php +++ b/app/code/Magento/Customer/Model/Options.php @@ -63,6 +63,18 @@ public function getNameSuffixOptions($store = null) ); } + /** + * @param $options + * @param bool $isOptional + * @return array|bool + * + * @deprecated See prepareNamePrefixSuffixOptions + */ + protected function _prepareNamePrefixSuffixOptions($options, $isOptional = false) + { + return $this->prepareNamePrefixSuffixOptions($options, $isOptional); + } + /** * Unserialize and clear name prefix or suffix options * If field is optional, add an empty first option. From 58763646d51fa268bb75e3306bf2ce83ce85cffd Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Wed, 15 Nov 2017 12:40:31 +0200 Subject: [PATCH 237/653] MAGETWO-83152: [github] Pages are cached in browser and not updated --- app/code/Magento/PageCache/etc/varnish4.vcl | 6 ++++++ app/code/Magento/PageCache/etc/varnish5.vcl | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/app/code/Magento/PageCache/etc/varnish4.vcl b/app/code/Magento/PageCache/etc/varnish4.vcl index 9e57f1e362320..c0b72acfe26db 100644 --- a/app/code/Magento/PageCache/etc/varnish4.vcl +++ b/app/code/Magento/PageCache/etc/varnish4.vcl @@ -157,8 +157,14 @@ sub vcl_backend_response { } # validate if we need to cache it and prevent from setting cookie + # images, css and js are cacheable by default so we have to remove cookie also if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) { unset beresp.http.set-cookie; + if (bereq.url !~ "\.(7z|avi|bmp|bz2|css|csv|doc|docx|eot|flac|flv|gif|gz|ico|jpeg|jpg|js|less|mka|mkv|mov|mp3|mp4|mpeg|mpg|odt|otf|ogg|ogm|opus|pdf|png|ppt|pptx|rar|rtf|svg|svgz|swf|tar|tbz|tgz|tiff|ttf|txt|txz|wav|webm|webp|woff|woff2|xls|xlsx|xml|xz|zip)(\?|$)") { + set beresp.http.Pragma = "no-cache"; + set beresp.http.Expires = "-1"; + set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0"; + } } # If page is not cacheable then bypass varnish for 2 minutes as Hit-For-Pass diff --git a/app/code/Magento/PageCache/etc/varnish5.vcl b/app/code/Magento/PageCache/etc/varnish5.vcl index cfc2192688748..b314bd5dfd5e1 100644 --- a/app/code/Magento/PageCache/etc/varnish5.vcl +++ b/app/code/Magento/PageCache/etc/varnish5.vcl @@ -158,8 +158,14 @@ sub vcl_backend_response { } # validate if we need to cache it and prevent from setting cookie + # images, css and js are cacheable by default so we have to remove cookie also if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) { unset beresp.http.set-cookie; + if (bereq.url !~ "\.(7z|avi|bmp|bz2|css|csv|doc|docx|eot|flac|flv|gif|gz|ico|jpeg|jpg|js|less|mka|mkv|mov|mp3|mp4|mpeg|mpg|odt|otf|ogg|ogm|opus|pdf|png|ppt|pptx|rar|rtf|svg|svgz|swf|tar|tbz|tgz|tiff|ttf|txt|txz|wav|webm|webp|woff|woff2|xls|xlsx|xml|xz|zip)(\?|$)") { + set beresp.http.Pragma = "no-cache"; + set beresp.http.Expires = "-1"; + set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0"; + } } # If page is not cacheable then bypass varnish for 2 minutes as Hit-For-Pass From d39ad575a20c255206312d720ad81ab90e04b690 Mon Sep 17 00:00:00 2001 From: olysenko <olysenko@magento.com> Date: Wed, 15 Nov 2017 12:53:41 +0200 Subject: [PATCH 238/653] MAGETWO-83898: Can't install magento with enabled redis on 2.2.2 --- composer.json | 4 +-- composer.lock | 68 +++++++++++++++++++++++++-------------------------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/composer.json b/composer.json index be94575957261..8582329eb2fa7 100644 --- a/composer.json +++ b/composer.json @@ -35,9 +35,9 @@ "zendframework/zend-captcha": "^2.7.1", "zendframework/zend-session": "^2.7.3", "magento/zendframework1": "~1.13.0", - "colinmollenhour/credis": "1.9.1", + "colinmollenhour/credis": "1.8.2", "colinmollenhour/php-redis-session-abstract": "1.3.4", - "colinmollenhour/cache-backend-redis": "1.10.4", + "colinmollenhour/cache-backend-redis": "1.10.2", "colinmollenhour/cache-backend-file": "1.4", "composer/composer": "1.4.1", "monolog/monolog": "^1.17", diff --git a/composer.lock b/composer.lock index c126da645a6de..9ce11b21ef0fa 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "923fde043cfee16a442bb4e85cc032c6", - "content-hash": "da93a2422778d99a80c69037a53d447a", + "hash": "3b2ba3e98cc2a56b3186806f02004c8b", + "content-hash": "88afa1b36a58e8b4aa2572dd415eacbb", "packages": [ { "name": "braintree/braintree_php", @@ -92,16 +92,16 @@ }, { "name": "colinmollenhour/cache-backend-redis", - "version": "1.10.4", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis.git", - "reference": "6bf0a4b7a3f8dc4a6255fad5b6e42213253d9972" + "reference": "18b33e4b69cf15747ab98b4f2c98ab445da05abd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_Redis/zipball/6bf0a4b7a3f8dc4a6255fad5b6e42213253d9972", - "reference": "6bf0a4b7a3f8dc4a6255fad5b6e42213253d9972", + "url": "https://api.github.com/repos/colinmollenhour/Cm_Cache_Backend_Redis/zipball/18b33e4b69cf15747ab98b4f2c98ab445da05abd", + "reference": "18b33e4b69cf15747ab98b4f2c98ab445da05abd", "shasum": "" }, "require": { @@ -124,20 +124,20 @@ ], "description": "Zend_Cache backend using Redis with full support for tags.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis", - "time": "2017-10-05 20:50:44" + "time": "2017-03-25 04:54:24" }, { "name": "colinmollenhour/credis", - "version": "1.9.1", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/colinmollenhour/credis.git", - "reference": "049ccfb2c680e4dfa6adcfa97f2f29d086919abd" + "reference": "9c14b4bb0779127638a17dd8aab8f05f28c6df43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/049ccfb2c680e4dfa6adcfa97f2f29d086919abd", - "reference": "049ccfb2c680e4dfa6adcfa97f2f29d086919abd", + "url": "https://api.github.com/repos/colinmollenhour/credis/zipball/9c14b4bb0779127638a17dd8aab8f05f28c6df43", + "reference": "9c14b4bb0779127638a17dd8aab8f05f28c6df43", "shasum": "" }, "require": { @@ -164,7 +164,7 @@ ], "description": "Credis is a lightweight interface to the Redis key-value store which wraps the phpredis library when available for better performance.", "homepage": "https://github.com/colinmollenhour/credis", - "time": "2017-10-05 20:28:58" + "time": "2017-07-05 15:32:38" }, { "name": "colinmollenhour/php-redis-session-abstract", @@ -205,16 +205,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.0.8", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "9dd73a03951357922d8aee6cc084500de93e2343" + "reference": "36344aeffdc37711335563e6108cda86566432a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/9dd73a03951357922d8aee6cc084500de93e2343", - "reference": "9dd73a03951357922d8aee6cc084500de93e2343", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/36344aeffdc37711335563e6108cda86566432a6", + "reference": "36344aeffdc37711335563e6108cda86566432a6", "shasum": "" }, "require": { @@ -260,7 +260,7 @@ "ssl", "tls" ], - "time": "2017-09-11 07:24:36" + "time": "2017-11-13 15:51:25" }, { "name": "composer/composer", @@ -1534,16 +1534,16 @@ }, { "name": "symfony/console", - "version": "v2.8.29", + "version": "v2.8.30", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "89143ce2b463515a75b5f5e9650e6ecfb2684158" + "reference": "3eeaec6a5d9a253925139cd19eda07d882635d87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/89143ce2b463515a75b5f5e9650e6ecfb2684158", - "reference": "89143ce2b463515a75b5f5e9650e6ecfb2684158", + "url": "https://api.github.com/repos/symfony/console/zipball/3eeaec6a5d9a253925139cd19eda07d882635d87", + "reference": "3eeaec6a5d9a253925139cd19eda07d882635d87", "shasum": "" }, "require": { @@ -1591,7 +1591,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-11-07 14:08:47" + "time": "2017-11-12 16:36:54" }, { "name": "symfony/debug", @@ -1652,7 +1652,7 @@ }, { "name": "symfony/event-dispatcher", - "version": "v2.8.29", + "version": "v2.8.30", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -1712,7 +1712,7 @@ }, { "name": "symfony/filesystem", - "version": "v3.3.11", + "version": "v3.3.12", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", @@ -1761,7 +1761,7 @@ }, { "name": "symfony/finder", - "version": "v3.3.11", + "version": "v3.3.12", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", @@ -1869,7 +1869,7 @@ }, { "name": "symfony/process", - "version": "v2.8.29", + "version": "v2.8.30", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -5876,7 +5876,7 @@ }, { "name": "symfony/config", - "version": "v3.3.11", + "version": "v3.3.12", "source": { "type": "git", "url": "https://github.com/symfony/config.git", @@ -5938,16 +5938,16 @@ }, { "name": "symfony/dependency-injection", - "version": "v3.3.11", + "version": "v3.3.12", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "50cdc753c61a4268608226647b0ce72e33a4a2b1" + "reference": "4e84f5af2c2d51ee3dee72df40b7fc08f49b4ab8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/50cdc753c61a4268608226647b0ce72e33a4a2b1", - "reference": "50cdc753c61a4268608226647b0ce72e33a4a2b1", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/4e84f5af2c2d51ee3dee72df40b7fc08f49b4ab8", + "reference": "4e84f5af2c2d51ee3dee72df40b7fc08f49b4ab8", "shasum": "" }, "require": { @@ -6004,11 +6004,11 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-11-07 14:12:55" + "time": "2017-11-13 18:10:32" }, { "name": "symfony/options-resolver", - "version": "v3.3.11", + "version": "v3.3.12", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", @@ -6290,7 +6290,7 @@ }, { "name": "symfony/stopwatch", - "version": "v3.3.11", + "version": "v3.3.12", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", From 41e9ec05e7b7330ff0ee0d278e1012527d9889b5 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Wed, 15 Nov 2017 14:43:29 +0200 Subject: [PATCH 239/653] magento/magento2#12083: Cannot import zero (0) value into custom attribute --- .../Import/Product/Type/AbstractType.php | 2 +- .../Import/Product/Type/AbstractTest.php | 74 ++++++++++++++----- .../Model/Import/_files/custom_attributes.php | 40 ++++++++++ .../_files/custom_attributes_rollback.php | 20 +++++ 4 files changed, 118 insertions(+), 18 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/custom_attributes.php create mode 100644 dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/custom_attributes_rollback.php diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractType.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractType.php index 5681b1aa6607d..939d6b2de67ee 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractType.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractType.php @@ -534,7 +534,7 @@ public function prepareAttributesWithDefaultValueForSave(array $rowData, $withDe public function clearEmptyData(array $rowData) { foreach ($this->_getProductAttributes($rowData) as $attrCode => $attrParams) { - if (!$attrParams['is_static'] && empty($rowData[$attrCode])) { + if (!$attrParams['is_static'] && !isset($rowData[$attrCode])) { unset($rowData[$attrCode]); } } diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractTest.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractTest.php index 8860c12f0f983..ff07963d0e3ad 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractTest.php @@ -12,20 +12,25 @@ class AbstractTest extends \PHPUnit\Framework\TestCase */ protected $_model; + /** + * @var \Magento\TestFramework\ObjectManager + */ + private $objectManager; + /** * On product import abstract class methods level it doesn't matter what product type is using. * That is why current tests are using simple product entity type by default */ protected function setUp() { - $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $params = [$objectManager->create(\Magento\CatalogImportExport\Model\Import\Product::class), 'simple']; + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $params = [$this->objectManager->create(\Magento\CatalogImportExport\Model\Import\Product::class), 'simple']; $this->_model = $this->getMockForAbstractClass( \Magento\CatalogImportExport\Model\Import\Product\Type\AbstractType::class, [ - $objectManager->get(\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory::class), - $objectManager->get(\Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory::class), - $objectManager->get(\Magento\Framework\App\ResourceConnection::class), + $this->objectManager->get(\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory::class), + $this->objectManager->get(\Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory::class), + $this->objectManager->get(\Magento\Framework\App\ResourceConnection::class), $params ] ); @@ -130,6 +135,11 @@ public function prepareAttributesWithDefaultValueForSaveDataProvider() } /** + * Test cleaning imported attribute data from empty values (note '0' is not empty). + * + * @magentoDbIsolation enabled + * @magentoAppIsolation enabled + * @magentoDataFixture Magento/CatalogImportExport/Model/Import/_files/custom_attributes.php * @dataProvider clearEmptyDataDataProvider */ public function testClearEmptyData($rowData, $expectedAttributes) @@ -141,8 +151,14 @@ public function testClearEmptyData($rowData, $expectedAttributes) } } + /** + * Data provider for testClearEmptyData. + * + * @return array + */ public function clearEmptyDataDataProvider() { + // We use sku attribute to test static attributes. return [ [ [ @@ -152,6 +168,7 @@ public function clearEmptyDataDataProvider() 'product_type' => 'simple', 'name' => 'Simple 01', 'price' => 10, + 'test_attribute' => '1', ], [ 'sku' => 'simple1', @@ -159,26 +176,49 @@ public function clearEmptyDataDataProvider() '_attribute_set' => 'Default', 'product_type' => 'simple', 'name' => 'Simple 01', - 'price' => 10 + 'price' => 10, + 'test_attribute' => '1', ], ], [ [ - 'sku' => '', - 'store_view_code' => 'German', + 'sku' => '0', + 'store_view_code' => '', '_attribute_set' => 'Default', - 'product_type' => '', - 'name' => 'Simple 01 German', - 'price' => '', + 'product_type' => 'simple', + 'name' => 'Simple 01', + 'price' => 10, + 'test_attribute' => '0', ], [ - 'sku' => '', - 'store_view_code' => 'German', + 'sku' => '0', + 'store_view_code' => '', '_attribute_set' => 'Default', - 'product_type' => '', - 'name' => 'Simple 01 German' - ] - ] + 'product_type' => 'simple', + 'name' => 'Simple 01', + 'price' => 10, + 'test_attribute' => '0', + ], + ], + [ + [ + 'sku' => null, + 'store_view_code' => '', + '_attribute_set' => 'Default', + 'product_type' => 'simple', + 'name' => 'Simple 01', + 'price' => 10, + 'test_attribute' => null, + ], + [ + 'sku' => null, + 'store_view_code' => '', + '_attribute_set' => 'Default', + 'product_type' => 'simple', + 'name' => 'Simple 01', + 'price' => 10, + ], + ], ]; } } diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/custom_attributes.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/custom_attributes.php new file mode 100644 index 0000000000000..82c22594f30aa --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/custom_attributes.php @@ -0,0 +1,40 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +/** @var \Magento\Eav\Model\Entity\Type $entityType */ +$entityType = $objectManager->create(\Magento\Eav\Model\Entity\Type::class); +$entityType->loadByCode('catalog_product'); +$entityTypeId = $entityType->getId(); + +/** @var \Magento\Eav\Model\Entity\Attribute\Set $attributeSet */ +$attributeSet = $objectManager->create(\Magento\Eav\Model\Entity\Attribute\Set::class); +$attributeSet->load('default', 'attribute_set_name'); +$attributeSetId = $attributeSet->getId(); + +$attributeGroupId = $attributeSet->getDefaultGroupId($entityType->getDefaultAttributeSetId()); + +$attributeData = [ + [ + 'attribute_code' => 'test_attribute', + 'entity_type_id' => $entityTypeId, + 'backend_type' => 'varchar', + 'is_required' => 1, + 'is_user_defined' => 1, + 'is_unique' => 0, + 'attribute_set_id' => $attributeSetId, + 'attribute_group_id' => $attributeGroupId, + ], +]; + +foreach ($attributeData as $data) { + /** @var \Magento\Eav\Model\Entity\Attribute $attribute */ + $attribute = $objectManager->create(\Magento\Eav\Model\Entity\Attribute::class); + $attribute->setData($data); + $attribute->setIsStatic(true); + $attribute->save(); +} diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/custom_attributes_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/custom_attributes_rollback.php new file mode 100644 index 0000000000000..f3afb096347ed --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/custom_attributes_rollback.php @@ -0,0 +1,20 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +$attributeCodes = [ + 'test_attribute', + ]; + +foreach ($attributeCodes as $attributeCode) { + /** @var \Magento\Eav\Model\Entity\Attribute $attribute */ + $attribute = $objectManager->create(\Magento\Eav\Model\Entity\Attribute::class); + $attribute->loadByCode('catalog_product', $attributeCode); + if ($attribute->getId()) { + $attribute->delete(); + } +} From 89d613c1da1c7a054fc256df3fda206ff32bd458 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Wed, 15 Nov 2017 15:23:59 +0200 Subject: [PATCH 240/653] magento/magento2#12083: Cannot import zero (0) value into custom attribute --- .../Model/Import/Product/Type/AbstractTest.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractTest.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractTest.php index ff07963d0e3ad..862ecb4cbe028 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractTest.php @@ -28,9 +28,15 @@ protected function setUp() $this->_model = $this->getMockForAbstractClass( \Magento\CatalogImportExport\Model\Import\Product\Type\AbstractType::class, [ - $this->objectManager->get(\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory::class), - $this->objectManager->get(\Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory::class), - $this->objectManager->get(\Magento\Framework\App\ResourceConnection::class), + $this->objectManager->get( + \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory::class + ), + $this->objectManager->get( + \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory::class + ), + $this->objectManager->get( + \Magento\Framework\App\ResourceConnection::class + ), $params ] ); From 0976cad4326c4ccc831faf6fcfc2504647fb3209 Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko <okorshenko@magento.com> Date: Wed, 15 Nov 2017 13:42:00 -0600 Subject: [PATCH 241/653] MAGETWO-81841: Added CLI command to enable and disable the Profiler #11407 --- .../Developer/Console/Command/ProfilerDisableCommand.php | 2 +- .../Magento/Developer/Console/Command/ProfilerEnableCommand.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Developer/Console/Command/ProfilerDisableCommand.php b/app/code/Magento/Developer/Console/Command/ProfilerDisableCommand.php index f1b2458bbdc90..40916703ed28f 100644 --- a/app/code/Magento/Developer/Console/Command/ProfilerDisableCommand.php +++ b/app/code/Magento/Developer/Console/Command/ProfilerDisableCommand.php @@ -34,7 +34,7 @@ class ProfilerDisableCommand extends Command /** * @var File */ - protected $filesystem; + private $filesystem; /** * Initialize dependencies. diff --git a/app/code/Magento/Developer/Console/Command/ProfilerEnableCommand.php b/app/code/Magento/Developer/Console/Command/ProfilerEnableCommand.php index 6117223eab06a..0917f55cd1bdc 100644 --- a/app/code/Magento/Developer/Console/Command/ProfilerEnableCommand.php +++ b/app/code/Magento/Developer/Console/Command/ProfilerEnableCommand.php @@ -45,7 +45,7 @@ class ProfilerEnableCommand extends Command /** * @var File */ - protected $filesystem; + private $filesystem; /** * Initialize dependencies. From 11649b7dd5564d27897ab45d0db5e297d5913ca1 Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko <okorshenko@magento.com> Date: Wed, 15 Nov 2017 18:21:52 -0600 Subject: [PATCH 242/653] MAGETWO-83958: Phpdoc improvements #12257 - reverted some changes that were done incorrectly --- .../CatalogImportExport/Model/Import/Product.php | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 91e7c95e86f7b..d383c84876421 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -1552,7 +1552,7 @@ public function getImagesFromRow(array $rowData) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) * @SuppressWarnings(PHPMD.UnusedLocalVariable) - * @throws \Magento\Framework\Exception\LocalizedException + * @throws LocalizedException */ protected function _saveProducts() { @@ -1816,7 +1816,7 @@ protected function _saveProducts() ) { $attrValue = $this->dateTime->formatDate($attrValue, false); } elseif ('datetime' == $attribute->getBackendType() && strtotime($attrValue)) { - $attrValue = gmdate( + $attrValue = $this->dateTime->gmDate( 'Y-m-d H:i:s', $this->_localeDate->date($attrValue)->getTimestamp() ); @@ -2031,8 +2031,7 @@ public function getUploader() * Return a new file name if the same file is already exists. * * @param string $fileName - * @param bool $renameFileOff [optional] boolean to pass. Default is false - * which will set not to rename the file after import. + * @param bool $renameFileOff * @return string */ protected function uploadMediaFiles($fileName, $renameFileOff = false) @@ -2241,7 +2240,7 @@ protected function _saveStockItem() $stockItemDo->setData($row); $row['is_in_stock'] = $this->stockStateProvider->verifyStock($stockItemDo); if ($this->stockStateProvider->verifyNotification($stockItemDo)) { - $row['low_stock_date'] = gmdate( + $row['low_stock_date'] = $this->dateTime->gmDate( 'Y-m-d H:i:s', (new \DateTime())->getTimestamp() ); @@ -2757,9 +2756,7 @@ private function _customFieldsMapping($rowData) } /** - * Validate data rows and save bunches to DB - * - * @return $this|\Magento\ImportExport\Model\Import\Entity\AbstractEntity + * {@inheritdoc} */ protected function _saveValidatedBunches() { From addda4281d079e1b9988ee6fc97d7d79f092acfd Mon Sep 17 00:00:00 2001 From: Oleksandr Yeremenko <madonzy13@gmail.com> Date: Thu, 16 Nov 2017 03:19:04 +0100 Subject: [PATCH 243/653] Issue: 3596. Resolve Notice with undefined index 'value' while preview order with instance payable method selected if custom offline payment method is defined in system --- app/code/Magento/Payment/Helper/Data.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Payment/Helper/Data.php b/app/code/Magento/Payment/Helper/Data.php index e3122913d5dfa..f3565ea324290 100644 --- a/app/code/Magento/Payment/Helper/Data.php +++ b/app/code/Magento/Payment/Helper/Data.php @@ -293,6 +293,7 @@ public function getPaymentMethodList($sorted = true, $asLabelValue = false, $wit foreach ($methods as $code => $title) { if (isset($groups[$code])) { $labelValues[$code]['label'] = $title; + $labelValues[$code]['value'] = null; } elseif (isset($groupRelations[$code])) { unset($labelValues[$code]); $labelValues[$groupRelations[$code]]['value'][$code] = ['value' => $code, 'label' => $title]; From ba47d85ec578e7635eb8db76d58d2467a5b52a4e Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Wed, 15 Nov 2017 16:11:00 +0200 Subject: [PATCH 244/653] 9764: exception message is wrong and misleading in findAccessorMethodName() of Magento\Framework\Reflection\NameFinder --- .../Framework/Reflection/NameFinder.php | 3 ++- .../Reflection/Test/Unit/NameFinderTest.php | 26 +++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/internal/Magento/Framework/Reflection/NameFinder.php b/lib/internal/Magento/Framework/Reflection/NameFinder.php index 97f4b2f81c128..5cd4ab744bb1b 100644 --- a/lib/internal/Magento/Framework/Reflection/NameFinder.php +++ b/lib/internal/Magento/Framework/Reflection/NameFinder.php @@ -99,8 +99,9 @@ public function findAccessorMethodName( } else { throw new \LogicException( sprintf( - 'Property "%s" does not have corresponding setter in class "%s".', + 'Property "%s" does not have accessor method "%s" in class "%s".', $camelCaseProperty, + $accessorName, $class->getName() ) ); diff --git a/lib/internal/Magento/Framework/Reflection/Test/Unit/NameFinderTest.php b/lib/internal/Magento/Framework/Reflection/Test/Unit/NameFinderTest.php index 9ddc6d6aa0c9a..ccf81305df6eb 100644 --- a/lib/internal/Magento/Framework/Reflection/Test/Unit/NameFinderTest.php +++ b/lib/internal/Magento/Framework/Reflection/Test/Unit/NameFinderTest.php @@ -37,7 +37,9 @@ public function testGetSetterMethodName() /** * @expectedException \Exception - * @expectedExceptionMessageRegExp /Property "InvalidAttribute" does not have corresponding setter in class (.*?)/ + * @codingStandardsIgnoreStart + * @expectedExceptionMessage Property "InvalidAttribute" does not have accessor method "setInvalidAttribute" in class "Magento\Framework\Reflection\Test\Unit\DataObject" + * @codingStandardsIgnoreEnd */ public function testGetSetterMethodNameInvalidAttribute() { @@ -47,11 +49,31 @@ public function testGetSetterMethodNameInvalidAttribute() /** * @expectedException \Exception - * @expectedExceptionMessageRegExp /Property "ActivE" does not have corresponding setter in class (.*?)/ + * @codingStandardsIgnoreStart + * @expectedExceptionMessage Property "ActivE" does not have accessor method "setActivE" in class "Magento\Framework\Reflection\Test\Unit\DataObject" + * @codingStandardsIgnoreEnd */ public function testGetSetterMethodNameWrongCamelCasedAttribute() { $class = new ClassReflection("\\Magento\\Framework\\Reflection\\Test\\Unit\\DataObject"); $this->nameFinder->getSetterMethodName($class, 'ActivE'); } + + /** + * @expectedException \LogicException + * @expectedExceptionMessage Property "Property" does not have accessor method "getProperty" in class "className". + */ + public function testFindAccessorMethodName() + { + $reflectionClass = $this->createMock(\Zend\Code\Reflection\ClassReflection::class); + $reflectionClass->expects($this->atLeastOnce())->method('hasMethod')->willReturn(false); + $reflectionClass->expects($this->atLeastOnce())->method('getName')->willReturn('className'); + + $this->nameFinder->findAccessorMethodName( + $reflectionClass, + 'Property', + 'getProperty', + 'isProperty' + ); + } } From 0a76034167a2f92e1d066014f899e899d2e42768 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Thu, 16 Nov 2017 11:14:21 +0200 Subject: [PATCH 245/653] 9764: exception message is wrong and misleading in findAccessorMethodName() of Magento\Framework\Reflection\NameFinder --- .../Framework/Reflection/Test/Unit/NameFinderTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/internal/Magento/Framework/Reflection/Test/Unit/NameFinderTest.php b/lib/internal/Magento/Framework/Reflection/Test/Unit/NameFinderTest.php index ccf81305df6eb..a467c4b7b5aad 100644 --- a/lib/internal/Magento/Framework/Reflection/Test/Unit/NameFinderTest.php +++ b/lib/internal/Magento/Framework/Reflection/Test/Unit/NameFinderTest.php @@ -27,7 +27,7 @@ protected function setUp() public function testGetSetterMethodName() { - $class = new ClassReflection("\\Magento\\Framework\\Reflection\\Test\\Unit\\DataObject"); + $class = new ClassReflection(\Magento\Framework\Reflection\Test\Unit\DataObject::class); $setterName = $this->nameFinder->getSetterMethodName($class, 'AttrName'); $this->assertEquals("setAttrName", $setterName); @@ -43,7 +43,7 @@ public function testGetSetterMethodName() */ public function testGetSetterMethodNameInvalidAttribute() { - $class = new ClassReflection("\\Magento\\Framework\\Reflection\\Test\\Unit\\DataObject"); + $class = new ClassReflection(\Magento\Framework\Reflection\Test\Unit\DataObject::class); $this->nameFinder->getSetterMethodName($class, 'InvalidAttribute'); } @@ -55,7 +55,7 @@ public function testGetSetterMethodNameInvalidAttribute() */ public function testGetSetterMethodNameWrongCamelCasedAttribute() { - $class = new ClassReflection("\\Magento\\Framework\\Reflection\\Test\\Unit\\DataObject"); + $class = new ClassReflection(\Magento\Framework\Reflection\Test\Unit\DataObject::class); $this->nameFinder->getSetterMethodName($class, 'ActivE'); } From 574f032d7facd5d9f16d647a5c6d9392a60dd83b Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Thu, 16 Nov 2017 11:56:41 +0200 Subject: [PATCH 246/653] MAGETWO-75217: SKU parameter in capital letters on CSV ignored by database in Import but OK'd by validator --- .../Import/Product/Type/Configurable.php | 45 ++++++++++++++++--- .../Import/Product/Type/ConfigurableTest.php | 41 +++++++++++++++++ 2 files changed, 79 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php b/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php index 718a7dba73eb2..2e37c7dfd615d 100644 --- a/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php +++ b/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php @@ -13,6 +13,7 @@ use Magento\Catalog\Api\Data\ProductInterface; use Magento\CatalogImportExport\Model\Import\Product as ImportProduct; use Magento\Framework\EntityManager\MetadataPool; +use Magento\Framework\Exception\LocalizedException; /** * Importing configurable products @@ -34,16 +35,24 @@ class Configurable extends \Magento\CatalogImportExport\Model\Import\Product\Typ const ERROR_DUPLICATED_VARIATIONS = 'duplicatedVariations'; + const ERROR_UNIDENTIFIABLE_VARIATION = 'unidentifiableVariation'; + /** * Validation failure message template definitions * * @var array */ protected $_messageTemplates = [ - self::ERROR_ATTRIBUTE_CODE_IS_NOT_SUPER => 'Attribute with code "%s" is not super', - self::ERROR_INVALID_OPTION_VALUE => 'Invalid option value for attribute "%s"', - self::ERROR_INVALID_WEBSITE => 'Invalid website code for super attribute', - self::ERROR_DUPLICATED_VARIATIONS => 'SKU %s contains duplicated variations', + self::ERROR_ATTRIBUTE_CODE_IS_NOT_SUPER => + 'Attribute with code "%s" is not super', + self::ERROR_INVALID_OPTION_VALUE => + 'Invalid option value for attribute "%s"', + self::ERROR_INVALID_WEBSITE => + 'Invalid website code for super attribute', + self::ERROR_DUPLICATED_VARIATIONS => + 'SKU %s contains duplicated variations', + self::ERROR_UNIDENTIFIABLE_VARIATION => + 'Configurable variation "%s" is unidentifiable', ]; /** @@ -471,6 +480,7 @@ protected function _processSuperData() * @param array $rowData * * @return array + * @throws LocalizedException * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ @@ -489,8 +499,10 @@ protected function _parseVariations($rowData) foreach ($fieldAndValuePairsText as $nameAndValue) { $nameAndValue = explode(ImportProduct::PAIR_NAME_VALUE_SEPARATOR, $nameAndValue); if (!empty($nameAndValue)) { - $value = isset($nameAndValue[1]) ? trim($nameAndValue[1]) : ''; - $fieldName = trim($nameAndValue[0]); + $value = isset($nameAndValue[1]) ? + trim($nameAndValue[1]) : ''; + //Ignoring field names' case. + $fieldName = mb_strtolower(trim($nameAndValue[0])); if ($fieldName) { $fieldAndValuePairs[$fieldName] = $value; } @@ -511,8 +523,19 @@ protected function _parseVariations($rowData) $additionalRow = []; $position += 1; } + } else { + $errorCode = self::ERROR_UNIDENTIFIABLE_VARIATION; + throw new LocalizedException( + __( + sprintf( + $this->_messageTemplates[$errorCode], + $variation + ) + ) + ); } } + return $additionalRows; } @@ -823,7 +846,14 @@ protected function configurableInBunch($bunch) public function isRowValid(array $rowData, $rowNum, $isNewProduct = true) { $error = false; - $dataWithExtraVirtualRows = $this->_parseVariations($rowData); + try { + $dataWithExtraVirtualRows = $this->_parseVariations($rowData); + } catch (LocalizedException $exception) { + $this->_entityModel->addRowError($exception->getMessage(), $rowNum); + + return false; + } + $skus = []; $rowData['price'] = isset($rowData['price']) && $rowData['price'] ? $rowData['price'] : '0.00'; if (!empty($dataWithExtraVirtualRows)) { @@ -841,6 +871,7 @@ public function isRowValid(array $rowData, $rowNum, $isNewProduct = true) } $error |= !parent::isRowValid($option, $rowNum, $isNewProduct); } + return !$error; } diff --git a/app/code/Magento/ConfigurableImportExport/Test/Unit/Model/Import/Product/Type/ConfigurableTest.php b/app/code/Magento/ConfigurableImportExport/Test/Unit/Model/Import/Product/Type/ConfigurableTest.php index f6912fe8b6d6c..54552364de13b 100644 --- a/app/code/Magento/ConfigurableImportExport/Test/Unit/Model/Import/Product/Type/ConfigurableTest.php +++ b/app/code/Magento/ConfigurableImportExport/Test/Unit/Model/Import/Product/Type/ConfigurableTest.php @@ -560,15 +560,56 @@ public function testIsRowValid() '_type' => 'configurable', '_product_websites' => 'website_1', ]; + //Checking that variations' field names are case-insensitive with this + //product. + $caseInsensitiveSKU = 'configurableskuI22CaseInsensitive'; + $caseInsensitiveProduct = [ + 'sku' => $caseInsensitiveSKU, + 'store_view_code' => null, + 'attribute_set_code' => 'Default', + 'product_type' => 'configurable', + 'name' => 'Configurable Product 21', + 'product_websites' => 'website_1', + 'configurable_variation_labels' => 'testattr2=Select Color, testattr3=Select Size', + 'configurable_variations' => 'SKU=testconf2-attr2val1-testattr3v1,' + . 'testattr2=attr2val1,' + . 'testattr3=testattr3v1,' + . 'display=1|sku=testconf2-attr2val1-testattr3v2,' + . 'testattr2=attr2val1,' + . 'testattr3=testattr3v2,' + . 'display=0', + '_store' => null, + '_attribute_set' => 'Default', + '_type' => 'configurable', + '_product_websites' => 'website_1', + ]; $bunch[] = $badProduct; + $bunch[] = $caseInsensitiveProduct; // Set _attributes to avoid error in Magento\CatalogImportExport\Model\Import\Product\Type\AbstractType. $this->setPropertyValue($this->configurable, '_attributes', [ $badProduct[\Magento\CatalogImportExport\Model\Import\Product::COL_ATTR_SET] => [], ]); + //Avoiding errors about attributes not being super + $this->setPropertyValue( + $this->configurable, + '_superAttributes', + [ + 'testattr2' => ['options' => ['attr2val1' => 1]], + 'testattr3' => [ + 'options' => [ + 'testattr3v2' => 1, + 'testattr3v1' => 1, + ], + ], + ] + ); foreach ($bunch as $rowData) { $result = $this->configurable->isRowValid($rowData, 0, !isset($this->_oldSku[$rowData['sku']])); $this->assertNotNull($result); + if ($rowData['sku'] === $caseInsensitiveSKU) { + $this->assertTrue($result); + } } } From 799199e149b749890a8ed15b27d751cc7c57dade Mon Sep 17 00:00:00 2001 From: Vova Yatsyuk <vova.yatsyuk@gmail.com> Date: Thu, 16 Nov 2017 12:16:29 +0200 Subject: [PATCH 247/653] Fix errors when DOB field is visible. #12146 - Fix customer create page rendering - Fix customer save in backend and frontend --- lib/internal/Magento/Framework/Data/Form/Filter/Date.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/internal/Magento/Framework/Data/Form/Filter/Date.php b/lib/internal/Magento/Framework/Data/Form/Filter/Date.php index 8765e136e2897..864c0f3e27e69 100644 --- a/lib/internal/Magento/Framework/Data/Form/Filter/Date.php +++ b/lib/internal/Magento/Framework/Data/Form/Filter/Date.php @@ -54,6 +54,10 @@ public function __construct( */ public function inputFilter($value) { + if (!$value) { + return $value; + } + $filterInput = new \Zend_Filter_LocalizedToNormalized( ['date_format' => $this->_dateFormat, 'locale' => $this->localeResolver->getLocale()] ); @@ -74,6 +78,10 @@ public function inputFilter($value) */ public function outputFilter($value) { + if (!$value) { + return $value; + } + $filterInput = new \Zend_Filter_LocalizedToNormalized( ['date_format' => DateTime::DATE_INTERNAL_FORMAT, 'locale' => $this->localeResolver->getLocale()] ); From a796fe6e73ab03eedad571916ff128471fcf1eaa Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Thu, 16 Nov 2017 12:50:00 +0200 Subject: [PATCH 248/653] MAGETWO-75217: SKU parameter in capital letters on CSV ignored by database in Import but OK'd by validator --- .../Model/Import/Product/Type/Configurable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php b/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php index 2e37c7dfd615d..0e7a026c526c9 100644 --- a/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php +++ b/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php @@ -487,7 +487,7 @@ protected function _processSuperData() protected function _parseVariations($rowData) { $additionalRows = []; - if (!isset($rowData['configurable_variations'])) { + if (empty($rowData['configurable_variations'])) { return $additionalRows; } $variations = explode(ImportProduct::PSEUDO_MULTI_LINE_SEPARATOR, $rowData['configurable_variations']); From 470c257f7a02e23956a9a82245f02d4d0f22fa20 Mon Sep 17 00:00:00 2001 From: Freek Vandeursen <freek@athleteshop.com> Date: Thu, 16 Nov 2017 11:56:29 +0100 Subject: [PATCH 249/653] Handle empty or incorrect lines in a language CSV --- lib/internal/Magento/Framework/App/Language/Dictionary.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/App/Language/Dictionary.php b/lib/internal/Magento/Framework/App/Language/Dictionary.php index a8dc20d9465a3..02ee6ca2c9579 100644 --- a/lib/internal/Magento/Framework/App/Language/Dictionary.php +++ b/lib/internal/Magento/Framework/App/Language/Dictionary.php @@ -193,7 +193,9 @@ private function readPackCsv($vendor, $package) foreach ($foundCsvFiles as $foundCsvFile) { $file = $directoryRead->openFile($foundCsvFile); while (($row = $file->readCsv()) !== false) { - $result[$row[0]] = $row[1]; + if (is_array($row) && count($row) > 1) { + $result[$row[0]] = $row[1]; + } } } } From 24eee6414605d1b2ec0640fbfd9e8c660fbd960d Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Thu, 16 Nov 2017 15:57:56 +0200 Subject: [PATCH 250/653] 12261: Order confirmation email contains non functioning links #12261 --- .../Magento/luma/Magento_Email/email/footer.html | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/design/frontend/Magento/luma/Magento_Email/email/footer.html b/app/design/frontend/Magento/luma/Magento_Email/email/footer.html index 994f9e6bffed8..ba67e5ef08bbd 100644 --- a/app/design/frontend/Magento/luma/Magento_Email/email/footer.html +++ b/app/design/frontend/Magento/luma/Magento_Email/email/footer.html @@ -17,8 +17,16 @@ <table> <tr> <td> - <p><a href="#">{{trans "About Us"}}</a></p> - <p><a href="#">{{trans "Customer Service"}}</a></p> + {{depend url_about_us}} + <p> + {{trans '<a href=%url_about>About Us</a>' url_about_us=$url_about_us |raw}} + </p> + {{/depend}} + {{depend url_customer_service}} + <p> + {{trans '<a href=url_customer_service>Customer Service</a>' url_customer_service=$url_customer_service |raw}} + </p> + {{/depend}} </td> <td> {{depend store_phone}} From ec33cc50bbe9be7559b179f4a0d75b4ca062ecb8 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Thu, 16 Nov 2017 16:37:19 +0200 Subject: [PATCH 251/653] 12261: Order confirmation email contains non functioning links #12261 --- .../frontend/Magento/luma/Magento_Email/email/footer.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/design/frontend/Magento/luma/Magento_Email/email/footer.html b/app/design/frontend/Magento/luma/Magento_Email/email/footer.html index ba67e5ef08bbd..0fc8e36a82076 100644 --- a/app/design/frontend/Magento/luma/Magento_Email/email/footer.html +++ b/app/design/frontend/Magento/luma/Magento_Email/email/footer.html @@ -19,7 +19,7 @@ <td> {{depend url_about_us}} <p> - {{trans '<a href=%url_about>About Us</a>' url_about_us=$url_about_us |raw}} + {{trans '<a href=%url_about_us>About Us</a>' url_about_us=$url_about_us |raw}} </p> {{/depend}} {{depend url_customer_service}} From 6f70d065a415157a57716e8629b523de0ec6f291 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko <omiroshnichenko@magento.com> Date: Thu, 16 Nov 2017 16:45:38 +0200 Subject: [PATCH 252/653] MAGETWO-83993: Fixed a js bug where ui_component labels have the wrong sort order. #11846 --- .../js/components/dynamic-rows-tier-price.js | 4 ++ .../base/web/js/dynamic-rows/dynamic-rows.js | 31 ++------------- .../base/js/dynamic-rows/dynamic-rows.test.js | 38 +++++++++++++++++++ 3 files changed, 46 insertions(+), 27 deletions(-) diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/components/dynamic-rows-tier-price.js b/app/code/Magento/Catalog/view/adminhtml/web/js/components/dynamic-rows-tier-price.js index 9201c1c8e0fb4..b5c0e7a95d401 100644 --- a/app/code/Magento/Catalog/view/adminhtml/web/js/components/dynamic-rows-tier-price.js +++ b/app/code/Magento/Catalog/view/adminhtml/web/js/components/dynamic-rows-tier-price.js @@ -9,6 +9,10 @@ define([ ], function (_, DynamicRows) { 'use strict'; + /** + * @deprecated Parent method contains labels sorting. + * @see Magento_Ui/js/dynamic-rows/dynamic-rows + */ return DynamicRows.extend({ /** diff --git a/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js b/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js index bcd15880a81d3..01fa03d1b4b67 100644 --- a/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js +++ b/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js @@ -533,7 +533,8 @@ define([ * Init header elements */ initHeader: function () { - var data; + var labels = [], + data; if (!this.labels().length) { _.each(this.childTemplate.children, function (cell) { @@ -547,15 +548,9 @@ define([ sortOrder: cell.config.sortOrder }); - this.labels.push(data); - - /** - * Sort the array after an element was added to fix an bug where - * additional added field labels in ui_components haven't the right - * sort order. - */ - this.labels.sort(this._compare); + labels.push(data); }, this); + this.labels(_.sortBy(labels, 'sortOrder')); } }, @@ -921,24 +916,6 @@ define([ })); }, - /** - * Compare two objects by the sortOrder property. - * - * @param {Object} $object1 - * @param {Object} $object2 - * @returns {Number} - * @private - */ - _compare: function ($object1, $object2) { - if ($object1.sortOrder > $object2.sortOrder) { - return 1; - } else if ($object1.sortOrder < $object2.sortOrder) { - return -1; - } - - return 0; - }, - /** * Set new data to dataSource, * delete element diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/dynamic-rows/dynamic-rows.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/dynamic-rows/dynamic-rows.test.js index 2eacea247d051..2e238eb993029 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/dynamic-rows/dynamic-rows.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/dynamic-rows/dynamic-rows.test.js @@ -131,5 +131,43 @@ define([ model.deleteRecord(1, 1); expect(model.recordData()).toEqual([]); }); + + it('"initHeader" sortOrder', function () { + var labels = [{ + name: 'Name 1', + config: { + label: 'Label 1', + validation: false, + columnsHeaderClasses: '', + sortOrder: 10 + } + }, { + name: 'Name 2', + config: { + label: 'Label 2', + validation: false, + columnsHeaderClasses: '', + sortOrder: 5 + } + }], + result = [{ + label: 'Label 2', + name: 'Name 2', + required: false, + columnsHeaderClasses: '', + sortOrder: 5 + }, { + label: 'Label 1', + name: 'Name 1', + required: false, + columnsHeaderClasses: '', + sortOrder: 10 + }]; + + model.childTemplate = { + children: labels + }; + expect(JSON.stringify(model.labels())).toEqual(JSON.stringify(result)); + }); }); }); From 5c024025593a701df675842fe7136dbe23df59fb Mon Sep 17 00:00:00 2001 From: Milan Osztromok <tufa@polisys.hu> Date: Thu, 16 Nov 2017 16:18:53 +0100 Subject: [PATCH 253/653] change robots.txt response content type to 'text/plain' --- app/code/Magento/Robots/Controller/Index/Index.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Robots/Controller/Index/Index.php b/app/code/Magento/Robots/Controller/Index/Index.php index b94626e93432d..679066d723dce 100644 --- a/app/code/Magento/Robots/Controller/Index/Index.php +++ b/app/code/Magento/Robots/Controller/Index/Index.php @@ -43,6 +43,7 @@ public function execute() /** @var Page $resultPage */ $resultPage = $this->resultPageFactory->create(true); $resultPage->addHandle('robots_index_index'); + $resultPage->setHeader('Content-Type', 'text/plain'); return $resultPage; } } From 666b4f3766efd99a17a8852e5ae9817680539fa9 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko <vgoncharenko@magento.com> Date: Fri, 17 Nov 2017 13:00:31 +0200 Subject: [PATCH 254/653] MAGETWO-83834: Update static test for check composer versions --- .../Magento/Test/Integrity/ComposerTest.php | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php index 1bb42aa564911..33b2056af0456 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php @@ -5,6 +5,7 @@ */ namespace Magento\Test\Integrity; +use Composer\Semver\VersionParser; use Magento\Framework\App\Bootstrap; use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\Composer\MagentoComponent; @@ -293,6 +294,23 @@ private function assertRequireInSync(\StdClass $json) if (!isset(self::$rootJson['require-dev'][$depName]) && !isset(self::$rootJson['require'][$depName]) && !isset(self::$rootJson['replace'][$depName])) { $errors[] = "'$name' depends on '$depName'"; + } else { + if (isset(self::$rootJson['require-dev'][$depName]) + && $this->checkDiscrepancy($json, $depName, 'require-dev')) { + $errors[] = "root composer.json has dependency '" + . $depName . ":" . self::$rootJson['require-dev'][$depName] . " BUT " + . "'$name' composer.json has dependency '$depName:{$json->require->$depName}'"; + } elseif (isset(self::$rootJson['require'][$depName]) + && $this->checkDiscrepancy($json, $depName, 'require')) { + $errors[] = "root composer.json has dependency '" + . $depName . ":" . self::$rootJson['require'][$depName] . " BUT " + . "'$name' composer.json has dependency '$depName:{$json->require->$depName}'"; + } elseif (isset(self::$rootJson['replace'][$depName]) + && $this->checkDiscrepancy($json, $depName, 'replace')) { + $errors[] = "root composer.json has dependency '" + . $depName . ":" . self::$rootJson['replace'][$depName] . " BUT " + . "'$name' composer.json has dependency '$depName:{$json->require->$depName}'"; + } } } if (!empty($errors)) { @@ -308,6 +326,20 @@ private function assertRequireInSync(\StdClass $json) } } + /** + * @param $componentConfig + * @param $packageName + * @param $section + * @return bool + */ + private function checkDiscrepancy($componentConfig, $packageName, $section) + { + $rootConstraint = (new VersionParser())->parseConstraints(self::$rootJson[$section][$packageName]); + $componentConstraint = (new VersionParser())->parseConstraints($componentConfig->require->$packageName); + + return !$rootConstraint->matches($componentConstraint); + } + /** * Convert a fully qualified module name to a composer package name according to conventions * From 38735ac4b3200e81c5e7f28beb4ec7f4b76916b8 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Fri, 10 Nov 2017 13:08:36 +0200 Subject: [PATCH 255/653] 8003: Using System Value for Base Currency Results in Config Error. --- app/code/Magento/Directory/Model/Currency.php | 21 ++- .../Directory/Model/CurrencySystemConfig.php | 123 +++++++++++++++++ .../Test/Unit/Model/CurrencyConfigTest.php | 116 ++++++++++++++++ .../Model/CurrencySystemConfigTest.php | 130 ++++++++++++++++++ 4 files changed, 386 insertions(+), 4 deletions(-) create mode 100644 app/code/Magento/Directory/Model/CurrencySystemConfig.php create mode 100644 app/code/Magento/Directory/Test/Unit/Model/CurrencyConfigTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Directory/Model/CurrencySystemConfigTest.php diff --git a/app/code/Magento/Directory/Model/Currency.php b/app/code/Magento/Directory/Model/Currency.php index a8df4936b8fae..700f6b24f8674 100644 --- a/app/code/Magento/Directory/Model/Currency.php +++ b/app/code/Magento/Directory/Model/Currency.php @@ -6,6 +6,7 @@ namespace Magento\Directory\Model; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Exception\InputException; use Magento\Directory\Model\Currency\Filter; @@ -65,6 +66,11 @@ class Currency extends \Magento\Framework\Model\AbstractModel */ protected $_localeCurrency; + /** + * @var CurrencySystemConfig + */ + private $currencyConfig; + /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry @@ -76,6 +82,7 @@ class Currency extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data + * @param CurrencySystemConfig|null $currencyConfig * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -88,7 +95,8 @@ public function __construct( \Magento\Framework\Locale\CurrencyInterface $localeCurrency, \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, - array $data = [] + array $data = [], + CurrencySystemConfig $currencyConfig = null ) { parent::__construct( $context, @@ -102,6 +110,7 @@ public function __construct( $this->_directoryHelper = $directoryHelper; $this->_currencyFilterFactory = $currencyFilterFactory; $this->_localeCurrency = $localeCurrency; + $this->currencyConfig = $currencyConfig ?: ObjectManager::getInstance()->get(CurrencySystemConfig::class); } /** @@ -347,7 +356,8 @@ public function getOutputFormat() */ public function getConfigAllowCurrencies() { - $allowedCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_ALLOW); + $allowedCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_ALLOW) ?: + $this->currencyConfig->getConfigCurrencies(self::XML_PATH_CURRENCY_ALLOW); $appBaseCurrencyCode = $this->_directoryHelper->getBaseCurrencyCode(); if (!in_array($appBaseCurrencyCode, $allowedCurrencies)) { $allowedCurrencies[] = $appBaseCurrencyCode; @@ -369,7 +379,9 @@ public function getConfigAllowCurrencies() */ public function getConfigDefaultCurrencies() { - $defaultCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_DEFAULT); + $defaultCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_DEFAULT) ?: + $this->currencyConfig->getConfigCurrencies(self::XML_PATH_CURRENCY_DEFAULT); + return $defaultCurrencies; } @@ -378,7 +390,8 @@ public function getConfigDefaultCurrencies() */ public function getConfigBaseCurrencies() { - $defaultCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_BASE); + $defaultCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_BASE) ?: + $this->currencyConfig->getConfigCurrencies(self::XML_PATH_CURRENCY_BASE); return $defaultCurrencies; } diff --git a/app/code/Magento/Directory/Model/CurrencySystemConfig.php b/app/code/Magento/Directory/Model/CurrencySystemConfig.php new file mode 100644 index 0000000000000..ce2829a489b4b --- /dev/null +++ b/app/code/Magento/Directory/Model/CurrencySystemConfig.php @@ -0,0 +1,123 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Directory\Model; + +use Magento\Config\App\Config\Type\System; +use Magento\Framework\App\ResourceConnection; +use Magento\Store\Model\StoreManagerInterface; + +/** + * Provide system config values for allowed, base and default currencies. + */ +class CurrencySystemConfig +{ + /** + * @var System + */ + private $systemConfig; + + /** + * @var StoreManagerInterface + */ + private $storeManager; + + /** + * @var string + */ + private $path; + + /** + * Currency constructor. + * + * @param System $systemConfig + * @param StoreManagerInterface $storeManager + */ + public function __construct( + System $systemConfig, + StoreManagerInterface $storeManager, + ResourceConnection $resources + ) { + $this->systemConfig = $systemConfig; + $this->storeManager = $storeManager; + } + + /** + * Retrieve config currency data by config path. + * + * @param string $path + * @return array + */ + public function getConfigCurrencies(string $path) + { + $this->path = $path; + $result = array_merge( + $this->getDefaultConfigCurrencies(), + $this->getWebsiteConfigCurrencies(), + $this->getStoreConfigCurrencies() + ); + sort($result); + + return array_unique($result); + } + + /** + * Get system config values as array for default scope. + * + * @return array + */ + private function getDefaultConfigCurrencies() + { + return $this->getConfig($this->path, 'default'); + } + + /** + * Get system config values as array for website scope. + * + * @return array + */ + private function getWebsiteConfigCurrencies() + { + $websiteResult = [[]]; + foreach ($this->storeManager->getWebsites() as $website) { + $websiteResult[] = $this->getConfig($this->path, 'websites', $website->getId()); + } + $websiteResult = array_merge(...$websiteResult); + + return $websiteResult; + } + + /** + * Get system config values as array for store scope. + * + * @return array + */ + private function getStoreConfigCurrencies() + { + $storeResult = [[]]; + foreach ($this->storeManager->getStores() as $store) { + $storeResult[] = $this->getConfig($this->path, 'stores', $store->getId()); + } + $storeResult = array_merge(...$storeResult); + + return $storeResult; + } + + /** + * Get system config values as array for specified scope. + * + * @param string $scope + * @param string $scopeId + * @param string $path + * @return array + */ + private function getConfig(string $path, string $scope, string $scopeId = null) + { + $configPath = $scopeId ? sprintf('%s/%s/%s', $scope, $scopeId, $path) : sprintf('%s/%s', $scope, $path); + + return explode(',', $this->systemConfig->get($configPath)); + } +} diff --git a/app/code/Magento/Directory/Test/Unit/Model/CurrencyConfigTest.php b/app/code/Magento/Directory/Test/Unit/Model/CurrencyConfigTest.php new file mode 100644 index 0000000000000..2a81cc23b7a15 --- /dev/null +++ b/app/code/Magento/Directory/Test/Unit/Model/CurrencyConfigTest.php @@ -0,0 +1,116 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Directory\Test\Unit\Model; + +use Magento\Config\App\Config\Type\System; +use Magento\Directory\Model\CurrencySystemConfig; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\Store\Api\Data\StoreInterface; +use Magento\Store\Api\Data\WebsiteInterface; +use Magento\Store\Model\StoreManagerInterface; +use PHPUnit\Framework\TestCase; + +/** + * Provide tests for CurrencySystemConfig model. + */ +class CurrencyConfigTest extends TestCase +{ + /** + * @var CurrencySystemConfig + */ + private $testSubject; + + /** + * @var System|\PHPUnit_Framework_MockObject_MockObject + */ + private $systemConfig; + + /** + * @var StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $storeManager; + + /** + * @inheritdoc + */ + protected function setUp() + { + $this->systemConfig = $this->getMockBuilder(System::class) + ->disableOriginalConstructor() + ->getMock(); + $this->storeManager = $this->getMockBuilder(StoreManagerInterface::class) + ->setMethods(['getStores', 'getWebsites']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $objectManager = new ObjectManager($this); + $this->testSubject = $objectManager->getObject( + CurrencySystemConfig::class, + [ + 'systemConfig' => $this->systemConfig, + 'storeManager' => $this->storeManager, + ] + ); + } + + /** + * @return void + */ + public function testGetConfigCurrencies() + { + $path = 'test/path'; + $expected = [ + 0 => 'ARS', + 1 => 'AUD', + 3 => 'BZD', + 4 => 'CAD', + 5 => 'CLP', + 6 => 'EUR', + 7 => 'USD', + ]; + + /** @var StoreInterface|\PHPUnit_Framework_MockObject_MockObject $store */ + $store = $this->getMockBuilder(StoreInterface::class) + ->setMethods(['getId']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $store->expects(self::once()) + ->method('getId') + ->willReturn(1); + + /** @var WebsiteInterface|\PHPUnit_Framework_MockObject_MockObject $website */ + $website = $this->getMockBuilder(WebsiteInterface::class) + ->setMethods(['getId']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $website->expects(self::once()) + ->method('getId') + ->willReturn(1); + + $this->systemConfig->expects(self::exactly(3)) + ->method('get') + ->withConsecutive( + self::identicalTo('default/test/path'), + self::identicalTo('websites/1/test/path'), + self::identicalTo('stores/1/test/path') + )->willReturnOnConsecutiveCalls( + 'USD,EUR', + 'AUD,ARS', + 'BZD,CAD,AUD,CLP' + ); + + $this->storeManager->expects(self::once()) + ->method('getStores') + ->willReturn([$store]); + $this->storeManager->expects(self::once()) + ->method('getWebsites') + ->willReturn([$website]); + + $result = $this->testSubject->getConfigCurrencies($path); + + self::assertEquals($expected, $result); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Directory/Model/CurrencySystemConfigTest.php b/dev/tests/integration/testsuite/Magento/Directory/Model/CurrencySystemConfigTest.php new file mode 100644 index 0000000000000..e01fd1f5deff9 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Directory/Model/CurrencySystemConfigTest.php @@ -0,0 +1,130 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Directory\Model; + +use Magento\Directory\Model\Currency as CurrencyModel; +use Magento\Framework\App\Config\ConfigResource\ConfigInterface; +use Magento\Store\Model\ScopeInterface; +use Magento\TestFramework\Helper\Bootstrap; +use PHPUnit\Framework\TestCase; + +/** + * Provide tests for CurrencySystemConfig model. + */ +class CurrencySystemConfigTest extends TestCase +{ + /** + * @var string + */ + private $baseCurrencyPath = 'currency/options/base'; + + /** + * @var string + */ + private $defaultCurrencyPath = 'currency/options/default'; + + /** + * @var string + */ + private $allowedCurrenciesPath = 'currency/options/allow'; + + /** + * @var ConfigInterface + */ + private $configResource; + + /** + * @var CurrencyModel + */ + private $currency; + + /** + * @inheritdoc + */ + protected function setUp() + { + $this->currency = Bootstrap::getObjectManager()->get(CurrencyModel::class); + $this->configResource = Bootstrap::getObjectManager()->get(ConfigInterface::class); + } + + /** + * Test CurrencySystemConfig won't read system config, if values present in DB. + */ + public function testGetConfigCurrenciesWithDbValues() + { + $this->clearCurrencyConfig(); + $allowedCurrencies = 'BDT,BNS,BTD,USD'; + $baseCurrency = 'BDT'; + $this->configResource->saveConfig( + $this->baseCurrencyPath, + $baseCurrency, + ScopeInterface::SCOPE_STORE, + 0 + ); + $this->configResource->saveConfig( + $this->defaultCurrencyPath, + $baseCurrency, + ScopeInterface::SCOPE_STORE, + 0 + ); + $this->configResource->saveConfig( + $this->allowedCurrenciesPath, + $allowedCurrencies, + ScopeInterface::SCOPE_STORE, + 0 + ); + + $expected = [ + 'allowed' => explode(',', $allowedCurrencies), + 'base' => [$baseCurrency], + 'default' => [$baseCurrency], + ]; + self::assertEquals($expected['allowed'], $this->currency->getConfigAllowCurrencies()); + self::assertEquals($expected['base'], $this->currency->getConfigBaseCurrencies()); + self::assertEquals($expected['default'], $this->currency->getConfigDefaultCurrencies()); + } + + /** + * Test CurrencySystemConfig will read system config, if values don't present in DB. + */ + public function testGetConfigCurrenciesWithNoDbValues() + { + $this->clearCurrencyConfig(); + $expected = [ + 'allowed' => [0 => 'EUR',3 => 'USD'], + 'base' => ['USD'], + 'default' => ['USD'], + ]; + self::assertEquals($expected['allowed'], $this->currency->getConfigAllowCurrencies()); + self::assertEquals($expected['base'], $this->currency->getConfigBaseCurrencies()); + self::assertEquals($expected['default'], $this->currency->getConfigDefaultCurrencies()); + } + + /** + * Remove currency config form Db. + * + * @return void + */ + private function clearCurrencyConfig() + { + $this->configResource->deleteConfig( + $this->allowedCurrenciesPath, + ScopeInterface::SCOPE_STORE, + 0 + ); + $this->configResource->deleteConfig( + $this->baseCurrencyPath, + ScopeInterface::SCOPE_STORE, + 0 + ); + $this->configResource->deleteConfig( + $this->defaultCurrencyPath, + ScopeInterface::SCOPE_STORE, + 0 + ); + } +} From b63ceb99d650e23d62c6a03230f01ff7f85b6920 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Mon, 13 Nov 2017 16:06:20 +0200 Subject: [PATCH 256/653] 8003: Using System Value for Base Currency Results in Config Error. --- app/code/Magento/Directory/Model/Currency.php | 20 +- .../Directory/Model/CurrencyConfig.php | 99 +++++++++ .../Directory/Model/CurrencySystemConfig.php | 123 ----------- .../Model/ResourceModel/Currency.php | 2 + .../Test/Unit/Model/CurrencyConfigTest.php | 105 +++++---- .../Directory/Model/CurrencyConfigTest.php | 202 ++++++++++++++++++ .../Model/CurrencySystemConfigTest.php | 130 ----------- 7 files changed, 368 insertions(+), 313 deletions(-) create mode 100644 app/code/Magento/Directory/Model/CurrencyConfig.php delete mode 100644 app/code/Magento/Directory/Model/CurrencySystemConfig.php create mode 100644 dev/tests/integration/testsuite/Magento/Directory/Model/CurrencyConfigTest.php delete mode 100644 dev/tests/integration/testsuite/Magento/Directory/Model/CurrencySystemConfigTest.php diff --git a/app/code/Magento/Directory/Model/Currency.php b/app/code/Magento/Directory/Model/Currency.php index 700f6b24f8674..356b3db639b74 100644 --- a/app/code/Magento/Directory/Model/Currency.php +++ b/app/code/Magento/Directory/Model/Currency.php @@ -67,7 +67,7 @@ class Currency extends \Magento\Framework\Model\AbstractModel protected $_localeCurrency; /** - * @var CurrencySystemConfig + * @var CurrencyConfig */ private $currencyConfig; @@ -82,7 +82,7 @@ class Currency extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data - * @param CurrencySystemConfig|null $currencyConfig + * @param CurrencyConfig|null $currencyConfig * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -96,7 +96,7 @@ public function __construct( \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [], - CurrencySystemConfig $currencyConfig = null + CurrencyConfig $currencyConfig = null ) { parent::__construct( $context, @@ -110,7 +110,7 @@ public function __construct( $this->_directoryHelper = $directoryHelper; $this->_currencyFilterFactory = $currencyFilterFactory; $this->_localeCurrency = $localeCurrency; - $this->currencyConfig = $currencyConfig ?: ObjectManager::getInstance()->get(CurrencySystemConfig::class); + $this->currencyConfig = $currencyConfig ?: ObjectManager::getInstance()->get(CurrencyConfig::class); } /** @@ -356,8 +356,7 @@ public function getOutputFormat() */ public function getConfigAllowCurrencies() { - $allowedCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_ALLOW) ?: - $this->currencyConfig->getConfigCurrencies(self::XML_PATH_CURRENCY_ALLOW); + $allowedCurrencies = $this->currencyConfig->getConfigCurrencies(self::XML_PATH_CURRENCY_ALLOW); $appBaseCurrencyCode = $this->_directoryHelper->getBaseCurrencyCode(); if (!in_array($appBaseCurrencyCode, $allowedCurrencies)) { $allowedCurrencies[] = $appBaseCurrencyCode; @@ -379,10 +378,7 @@ public function getConfigAllowCurrencies() */ public function getConfigDefaultCurrencies() { - $defaultCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_DEFAULT) ?: - $this->currencyConfig->getConfigCurrencies(self::XML_PATH_CURRENCY_DEFAULT); - - return $defaultCurrencies; + return $this->currencyConfig->getConfigCurrencies(self::XML_PATH_CURRENCY_DEFAULT); } /** @@ -390,9 +386,7 @@ public function getConfigDefaultCurrencies() */ public function getConfigBaseCurrencies() { - $defaultCurrencies = $this->_getResource()->getConfigCurrencies($this, self::XML_PATH_CURRENCY_BASE) ?: - $this->currencyConfig->getConfigCurrencies(self::XML_PATH_CURRENCY_BASE); - return $defaultCurrencies; + return $this->currencyConfig->getConfigCurrencies(self::XML_PATH_CURRENCY_BASE); } /** diff --git a/app/code/Magento/Directory/Model/CurrencyConfig.php b/app/code/Magento/Directory/Model/CurrencyConfig.php new file mode 100644 index 0000000000000..fdb561c224170 --- /dev/null +++ b/app/code/Magento/Directory/Model/CurrencyConfig.php @@ -0,0 +1,99 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Directory\Model; + +use Magento\Framework\App\Area; +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\App\State; +use Magento\Store\Model\ScopeInterface; +use Magento\Store\Model\StoreManagerInterface; + +/** + * Provide config values for allowed, base and default currencies. + */ +class CurrencyConfig +{ + /** + * @var State + */ + private $appState; + + /** + * @var ScopeConfigInterface + */ + private $config; + + /** + * @var StoreManagerInterface + */ + private $storeManager; + + /** + * CurrencyConfig constructor. + * + * @param State $appState + * @param ScopeConfigInterface $config + * @param StoreManagerInterface $storeManager + */ + public function __construct( + State $appState, + ScopeConfigInterface $config, + StoreManagerInterface $storeManager + ) { + $this->appState = $appState; + $this->config = $config; + $this->storeManager = $storeManager; + } + + /** + * Retrieve config currency data by config path. + * + * @param string $path + * @return array + */ + public function getConfigCurrencies(string $path) + { + $result = $this->appState->getAreaCode() === Area::AREA_ADMINHTML + ? $this->getConfigForAllStores($path) + : $this->getConfigForCurrentStore($path); + sort($result); + + return array_unique($result); + } + + /** + * Get allowed, base and default currency codes for all stores. + * + * @param string $path + * @return array + */ + private function getConfigForAllStores(string $path) + { + $storesResult = [[]]; + foreach ($this->storeManager->getStores() as $store) { + $storesResult[] = explode( + ',', + $this->config->getValue($path, ScopeInterface::SCOPE_STORE, $store->getCode()) + ); + } + + return array_merge(...$storesResult); + } + + /** + * Get allowed, base and default currency codes for current store. + * + * @param string $path + * @return mixed + */ + private function getConfigForCurrentStore(string $path) + { + $store = $this->storeManager->getStore(); + + return explode(',', $this->config->getValue($path, ScopeInterface::SCOPE_STORE, $store->getCode())); + } +} diff --git a/app/code/Magento/Directory/Model/CurrencySystemConfig.php b/app/code/Magento/Directory/Model/CurrencySystemConfig.php deleted file mode 100644 index ce2829a489b4b..0000000000000 --- a/app/code/Magento/Directory/Model/CurrencySystemConfig.php +++ /dev/null @@ -1,123 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -namespace Magento\Directory\Model; - -use Magento\Config\App\Config\Type\System; -use Magento\Framework\App\ResourceConnection; -use Magento\Store\Model\StoreManagerInterface; - -/** - * Provide system config values for allowed, base and default currencies. - */ -class CurrencySystemConfig -{ - /** - * @var System - */ - private $systemConfig; - - /** - * @var StoreManagerInterface - */ - private $storeManager; - - /** - * @var string - */ - private $path; - - /** - * Currency constructor. - * - * @param System $systemConfig - * @param StoreManagerInterface $storeManager - */ - public function __construct( - System $systemConfig, - StoreManagerInterface $storeManager, - ResourceConnection $resources - ) { - $this->systemConfig = $systemConfig; - $this->storeManager = $storeManager; - } - - /** - * Retrieve config currency data by config path. - * - * @param string $path - * @return array - */ - public function getConfigCurrencies(string $path) - { - $this->path = $path; - $result = array_merge( - $this->getDefaultConfigCurrencies(), - $this->getWebsiteConfigCurrencies(), - $this->getStoreConfigCurrencies() - ); - sort($result); - - return array_unique($result); - } - - /** - * Get system config values as array for default scope. - * - * @return array - */ - private function getDefaultConfigCurrencies() - { - return $this->getConfig($this->path, 'default'); - } - - /** - * Get system config values as array for website scope. - * - * @return array - */ - private function getWebsiteConfigCurrencies() - { - $websiteResult = [[]]; - foreach ($this->storeManager->getWebsites() as $website) { - $websiteResult[] = $this->getConfig($this->path, 'websites', $website->getId()); - } - $websiteResult = array_merge(...$websiteResult); - - return $websiteResult; - } - - /** - * Get system config values as array for store scope. - * - * @return array - */ - private function getStoreConfigCurrencies() - { - $storeResult = [[]]; - foreach ($this->storeManager->getStores() as $store) { - $storeResult[] = $this->getConfig($this->path, 'stores', $store->getId()); - } - $storeResult = array_merge(...$storeResult); - - return $storeResult; - } - - /** - * Get system config values as array for specified scope. - * - * @param string $scope - * @param string $scopeId - * @param string $path - * @return array - */ - private function getConfig(string $path, string $scope, string $scopeId = null) - { - $configPath = $scopeId ? sprintf('%s/%s/%s', $scope, $scopeId, $path) : sprintf('%s/%s', $scope, $path); - - return explode(',', $this->systemConfig->get($configPath)); - } -} diff --git a/app/code/Magento/Directory/Model/ResourceModel/Currency.php b/app/code/Magento/Directory/Model/ResourceModel/Currency.php index ac0716fc4e67e..ffbcce11cb4f6 100644 --- a/app/code/Magento/Directory/Model/ResourceModel/Currency.php +++ b/app/code/Magento/Directory/Model/ResourceModel/Currency.php @@ -165,6 +165,8 @@ public function saveRates($rates) * @param string $path * @return array * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @deprecated because doesn't take into consideration scopes and system config values. + * @see \Magento\Directory\Model\CurrencyConfig::getConfigCurrencies() */ public function getConfigCurrencies($model, $path) { diff --git a/app/code/Magento/Directory/Test/Unit/Model/CurrencyConfigTest.php b/app/code/Magento/Directory/Test/Unit/Model/CurrencyConfigTest.php index 2a81cc23b7a15..9b52bae26f90f 100644 --- a/app/code/Magento/Directory/Test/Unit/Model/CurrencyConfigTest.php +++ b/app/code/Magento/Directory/Test/Unit/Model/CurrencyConfigTest.php @@ -7,110 +7,121 @@ namespace Magento\Directory\Test\Unit\Model; use Magento\Config\App\Config\Type\System; -use Magento\Directory\Model\CurrencySystemConfig; +use Magento\Directory\Model\CurrencyConfig; +use Magento\Framework\App\Area; +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\App\State; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Store\Api\Data\StoreInterface; -use Magento\Store\Api\Data\WebsiteInterface; use Magento\Store\Model\StoreManagerInterface; use PHPUnit\Framework\TestCase; /** - * Provide tests for CurrencySystemConfig model. + * Provide tests for CurrencyConfig model. */ class CurrencyConfigTest extends TestCase { /** - * @var CurrencySystemConfig + * @var CurrencyConfig */ private $testSubject; /** * @var System|\PHPUnit_Framework_MockObject_MockObject */ - private $systemConfig; + private $config; /** * @var StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ private $storeManager; + /** + * @var State|\PHPUnit_Framework_MockObject_MockObject + */ + private $appState; + /** * @inheritdoc */ protected function setUp() { - $this->systemConfig = $this->getMockBuilder(System::class) + $this->config = $this->getMockBuilder(ScopeConfigInterface::class) ->disableOriginalConstructor() ->getMock(); $this->storeManager = $this->getMockBuilder(StoreManagerInterface::class) ->setMethods(['getStores', 'getWebsites']) ->disableOriginalConstructor() ->getMockForAbstractClass(); + $this->appState = $this->getMockBuilder(State::class) + ->disableOriginalConstructor() + ->getMock(); $objectManager = new ObjectManager($this); $this->testSubject = $objectManager->getObject( - CurrencySystemConfig::class, + CurrencyConfig::class, [ - 'systemConfig' => $this->systemConfig, 'storeManager' => $this->storeManager, + 'appState' => $this->appState, + 'config' => $this->config, ] ); } /** + * Test get currency config for admin and storefront areas. + * + * @dataProvider getConfigCurrenciesDataProvider * @return void */ - public function testGetConfigCurrencies() + public function testGetConfigCurrencies(string $areCode) { $path = 'test/path'; - $expected = [ - 0 => 'ARS', - 1 => 'AUD', - 3 => 'BZD', - 4 => 'CAD', - 5 => 'CLP', - 6 => 'EUR', - 7 => 'USD', - ]; + $expected = ['ARS', 'AUD', 'BZD']; + + $this->appState->expects(self::once()) + ->method('getAreaCode') + ->willReturn($areCode); /** @var StoreInterface|\PHPUnit_Framework_MockObject_MockObject $store */ $store = $this->getMockBuilder(StoreInterface::class) - ->setMethods(['getId']) + ->setMethods(['getCode']) ->disableOriginalConstructor() ->getMockForAbstractClass(); $store->expects(self::once()) - ->method('getId') - ->willReturn(1); - - /** @var WebsiteInterface|\PHPUnit_Framework_MockObject_MockObject $website */ - $website = $this->getMockBuilder(WebsiteInterface::class) - ->setMethods(['getId']) - ->disableOriginalConstructor() - ->getMockForAbstractClass(); - $website->expects(self::once()) - ->method('getId') - ->willReturn(1); + ->method('getCode') + ->willReturn('testCode'); - $this->systemConfig->expects(self::exactly(3)) - ->method('get') - ->withConsecutive( - self::identicalTo('default/test/path'), - self::identicalTo('websites/1/test/path'), - self::identicalTo('stores/1/test/path') - )->willReturnOnConsecutiveCalls( - 'USD,EUR', - 'AUD,ARS', - 'BZD,CAD,AUD,CLP' - ); + if ($areCode === Area::AREA_ADMINHTML) { + $this->storeManager->expects(self::once()) + ->method('getStores') + ->willReturn([$store]); + } else { + $this->storeManager->expects(self::once()) + ->method('getStore') + ->willReturn($store); + } - $this->storeManager->expects(self::once()) - ->method('getStores') - ->willReturn([$store]); - $this->storeManager->expects(self::once()) - ->method('getWebsites') - ->willReturn([$website]); + $this->config->expects(self::once()) + ->method('getValue') + ->with( + self::identicalTo($path) + )->willReturn('ARS,AUD,BZD'); $result = $this->testSubject->getConfigCurrencies($path); self::assertEquals($expected, $result); } + + /** + * Provide test data for getConfigCurrencies test. + * + * @return array + */ + public function getConfigCurrenciesDataProvider() + { + return [ + ['areaCode' => Area::AREA_ADMINHTML], + ['areaCode' => Area::AREA_FRONTEND], + ]; + } } diff --git a/dev/tests/integration/testsuite/Magento/Directory/Model/CurrencyConfigTest.php b/dev/tests/integration/testsuite/Magento/Directory/Model/CurrencyConfigTest.php new file mode 100644 index 0000000000000..b620d9097b4be --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Directory/Model/CurrencyConfigTest.php @@ -0,0 +1,202 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Directory\Model; + +use Magento\Directory\Model\Currency as CurrencyModel; +use Magento\Framework\App\Area; +use Magento\Framework\App\Config\ConfigResource\ConfigInterface; +use Magento\Framework\App\Config\ReinitableConfigInterface; +use Magento\Store\Model\Store; +use Magento\Store\Model\StoreManagerInterface; +use Magento\TestFramework\App\State; +use Magento\TestFramework\Helper\Bootstrap; +use PHPUnit\Framework\TestCase; + +/** + * Provide tests for CurrencyConfig model. + */ +class CurrencyConfigTest extends TestCase +{ + /** + * @var string + */ + private $baseCurrencyPath = 'currency/options/base'; + + /** + * @var string + */ + private $defaultCurrencyPath = 'currency/options/default'; + + /** + * @var string + */ + private $allowedCurrenciesPath = 'currency/options/allow'; + + /** + * @var ConfigInterface + */ + private $config; + + /** + * @var CurrencyModel + */ + private $currency; + + /** + * @inheritdoc + */ + protected function setUp() + { + $this->currency = Bootstrap::getObjectManager()->get(CurrencyModel::class); + $this->config = Bootstrap::getObjectManager()->get(ConfigInterface::class); + } + + /** + * Test get currency config for admin and storefront areas. + * + * @dataProvider getConfigCurrenciesDataProvider + * @magentoDataFixture Magento/Store/_files/store.php + * @magentoDbIsolation disabled + * @param string $areaCode + * @param array $expected + * @return void + */ + public function testGetConfigCurrencies(string $areaCode, array $expected) + { + /** @var State $appState */ + $appState = Bootstrap::getObjectManager()->get(State::class); + $appState->setAreaCode($areaCode); + $store = Bootstrap::getObjectManager()->get(Store::class); + $store->load('test', 'code'); + $this->clearCurrencyConfig(); + $this->setStoreConfig($store->getId()); + $storeManager = Bootstrap::getObjectManager()->get(StoreManagerInterface::class); + $storeManager->setCurrentStore($store->getId()); + + if ($areaCode === Area::AREA_ADMINHTML) { + self::assertEquals($expected['allowed'], $this->currency->getConfigAllowCurrencies()); + self::assertEquals($expected['base'], $this->currency->getConfigBaseCurrencies()); + self::assertEquals($expected['default'], $this->currency->getConfigDefaultCurrencies()); + } else { + /** @var StoreManagerInterface $storeManager */ + $storeManager = Bootstrap::getObjectManager()->get(StoreManagerInterface::class); + foreach ($storeManager->getStores() as $store) { + $storeManager->setCurrentStore($store->getId()); + self::assertEquals( + $expected[$store->getCode()]['allowed'], + $this->currency->getConfigAllowCurrencies() + ); + self::assertEquals( + $expected[$store->getCode()]['base'], + $this->currency->getConfigBaseCurrencies() + ); + self::assertEquals( + $expected[$store->getCode()]['default'], + $this->currency->getConfigDefaultCurrencies() + ); + } + } + } + + /** + * Provide test data for getConfigCurrencies test. + * + * @return array + */ + public function getConfigCurrenciesDataProvider() + { + return [ + [ + 'areaCode' => Area::AREA_ADMINHTML, + 'expected' => [ + 'allowed' => ['BDT', 'BNS', 'BTD', 'EUR', 'USD'], + 'base' => ['BDT', 'USD'], + 'default' => ['BDT', 'USD'], + ], + ], + [ + 'areaCode' => Area::AREA_FRONTEND, + 'expected' => [ + 'default' => [ + 'allowed' => ['EUR', 'USD'], + 'base' => ['USD'], + 'default' => ['USD'], + ], + 'test' => [ + 'allowed' => ['BDT', 'BNS', 'BTD', 'USD'], + 'base' => ['BDT'], + 'default' => ['BDT'], + ], + ], + ], + ]; + } + + /** + * Remove currency config form Db. + * + * @return void + */ + private function clearCurrencyConfig() + { + $storeManager = Bootstrap::getObjectManager()->get(StoreManagerInterface::class); + foreach ($storeManager->getStores() as $store) { + $this->config->deleteConfig( + $this->allowedCurrenciesPath, + 'stores', + $store->getId() + ); + $this->config->deleteConfig( + $this->baseCurrencyPath, + 'stores', + $store->getId() + ); + $this->config->deleteConfig( + $this->defaultCurrencyPath, + 'stores', + $store->getId() + ); + } + } + + /** + * Set allowed, base and default currency config values for given store. + * + * @param string $storeId + * @return void + */ + private function setStoreConfig(string $storeId) + { + $allowedCurrencies = 'BDT,BNS,BTD'; + $baseCurrency = 'BDT'; + $this->config->saveConfig( + $this->baseCurrencyPath, + $baseCurrency, + 'stores', + $storeId + ); + $this->config->saveConfig( + $this->defaultCurrencyPath, + $baseCurrency, + 'stores', + $storeId + ); + $this->config->saveConfig( + $this->allowedCurrenciesPath, + $allowedCurrencies, + 'stores', + $storeId + ); + Bootstrap::getObjectManager()->get(ReinitableConfigInterface::class)->reinit(); + Bootstrap::getObjectManager()->create(StoreManagerInterface::class)->reinitStores(); + } + + protected function tearDown() + { + $this->clearCurrencyConfig(); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Directory/Model/CurrencySystemConfigTest.php b/dev/tests/integration/testsuite/Magento/Directory/Model/CurrencySystemConfigTest.php deleted file mode 100644 index e01fd1f5deff9..0000000000000 --- a/dev/tests/integration/testsuite/Magento/Directory/Model/CurrencySystemConfigTest.php +++ /dev/null @@ -1,130 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -namespace Magento\Directory\Model; - -use Magento\Directory\Model\Currency as CurrencyModel; -use Magento\Framework\App\Config\ConfigResource\ConfigInterface; -use Magento\Store\Model\ScopeInterface; -use Magento\TestFramework\Helper\Bootstrap; -use PHPUnit\Framework\TestCase; - -/** - * Provide tests for CurrencySystemConfig model. - */ -class CurrencySystemConfigTest extends TestCase -{ - /** - * @var string - */ - private $baseCurrencyPath = 'currency/options/base'; - - /** - * @var string - */ - private $defaultCurrencyPath = 'currency/options/default'; - - /** - * @var string - */ - private $allowedCurrenciesPath = 'currency/options/allow'; - - /** - * @var ConfigInterface - */ - private $configResource; - - /** - * @var CurrencyModel - */ - private $currency; - - /** - * @inheritdoc - */ - protected function setUp() - { - $this->currency = Bootstrap::getObjectManager()->get(CurrencyModel::class); - $this->configResource = Bootstrap::getObjectManager()->get(ConfigInterface::class); - } - - /** - * Test CurrencySystemConfig won't read system config, if values present in DB. - */ - public function testGetConfigCurrenciesWithDbValues() - { - $this->clearCurrencyConfig(); - $allowedCurrencies = 'BDT,BNS,BTD,USD'; - $baseCurrency = 'BDT'; - $this->configResource->saveConfig( - $this->baseCurrencyPath, - $baseCurrency, - ScopeInterface::SCOPE_STORE, - 0 - ); - $this->configResource->saveConfig( - $this->defaultCurrencyPath, - $baseCurrency, - ScopeInterface::SCOPE_STORE, - 0 - ); - $this->configResource->saveConfig( - $this->allowedCurrenciesPath, - $allowedCurrencies, - ScopeInterface::SCOPE_STORE, - 0 - ); - - $expected = [ - 'allowed' => explode(',', $allowedCurrencies), - 'base' => [$baseCurrency], - 'default' => [$baseCurrency], - ]; - self::assertEquals($expected['allowed'], $this->currency->getConfigAllowCurrencies()); - self::assertEquals($expected['base'], $this->currency->getConfigBaseCurrencies()); - self::assertEquals($expected['default'], $this->currency->getConfigDefaultCurrencies()); - } - - /** - * Test CurrencySystemConfig will read system config, if values don't present in DB. - */ - public function testGetConfigCurrenciesWithNoDbValues() - { - $this->clearCurrencyConfig(); - $expected = [ - 'allowed' => [0 => 'EUR',3 => 'USD'], - 'base' => ['USD'], - 'default' => ['USD'], - ]; - self::assertEquals($expected['allowed'], $this->currency->getConfigAllowCurrencies()); - self::assertEquals($expected['base'], $this->currency->getConfigBaseCurrencies()); - self::assertEquals($expected['default'], $this->currency->getConfigDefaultCurrencies()); - } - - /** - * Remove currency config form Db. - * - * @return void - */ - private function clearCurrencyConfig() - { - $this->configResource->deleteConfig( - $this->allowedCurrenciesPath, - ScopeInterface::SCOPE_STORE, - 0 - ); - $this->configResource->deleteConfig( - $this->baseCurrencyPath, - ScopeInterface::SCOPE_STORE, - 0 - ); - $this->configResource->deleteConfig( - $this->defaultCurrencyPath, - ScopeInterface::SCOPE_STORE, - 0 - ); - } -} From 3e0c785820acd4bcae6f0b2c3ff1bc706bc10499 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Tue, 14 Nov 2017 10:23:34 +0200 Subject: [PATCH 257/653] 8003: Using System Value for Base Currency Results in Config Error. --- app/code/Magento/Directory/Model/Currency.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Directory/Model/Currency.php b/app/code/Magento/Directory/Model/Currency.php index 356b3db639b74..0b5b836b4ac93 100644 --- a/app/code/Magento/Directory/Model/Currency.php +++ b/app/code/Magento/Directory/Model/Currency.php @@ -82,7 +82,7 @@ class Currency extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection * @param array $data - * @param CurrencyConfig|null $currencyConfig + * @param CurrencyConfig $currencyConfig * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( From ff422002cd2d977c3b10ac512c557f58e1cba5c6 Mon Sep 17 00:00:00 2001 From: bartlubbersen <bartlubbersen@users.noreply.github.com> Date: Fri, 17 Nov 2017 13:06:25 +0100 Subject: [PATCH 258/653] [BUGFIX] All option values were deleted if one was deleted earlier The problem occurs if you delete one custom option value was deleted. This occurred because the same value object is used for saving all values, and if one value is deleted the _isDeleted flag is set tot true on that object. So all values after that value will also be deleted. --- app/code/Magento/Catalog/Model/Product/Option/Value.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Model/Product/Option/Value.php b/app/code/Magento/Catalog/Model/Product/Option/Value.php index 0e86510ebcee7..f1700f380fd0c 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Value.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Value.php @@ -189,7 +189,8 @@ public function getProduct() */ public function saveValues() { - foreach ($this->getValues() as $value) { + foreach ($this->getValues() as $value) + $this->isDeleted(false); $this->setData( $value )->setData( From 6cda42ab29932513b3609af9b2b511208c8bd132 Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Fri, 17 Nov 2017 15:28:13 +0200 Subject: [PATCH 259/653] MAGETWO-83152: [github] Pages are cached in browser and not updated --- app/code/Magento/PageCache/etc/varnish4.vcl | 12 +++++++----- app/code/Magento/PageCache/etc/varnish5.vcl | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/PageCache/etc/varnish4.vcl b/app/code/Magento/PageCache/etc/varnish4.vcl index c0b72acfe26db..ba72ecc0652e2 100644 --- a/app/code/Magento/PageCache/etc/varnish4.vcl +++ b/app/code/Magento/PageCache/etc/varnish4.vcl @@ -160,11 +160,6 @@ sub vcl_backend_response { # images, css and js are cacheable by default so we have to remove cookie also if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) { unset beresp.http.set-cookie; - if (bereq.url !~ "\.(7z|avi|bmp|bz2|css|csv|doc|docx|eot|flac|flv|gif|gz|ico|jpeg|jpg|js|less|mka|mkv|mov|mp3|mp4|mpeg|mpg|odt|otf|ogg|ogm|opus|pdf|png|ppt|pptx|rar|rtf|svg|svgz|swf|tar|tbz|tgz|tiff|ttf|txt|txz|wav|webm|webp|woff|woff2|xls|xlsx|xml|xz|zip)(\?|$)") { - set beresp.http.Pragma = "no-cache"; - set beresp.http.Expires = "-1"; - set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0"; - } } # If page is not cacheable then bypass varnish for 2 minutes as Hit-For-Pass @@ -193,6 +188,13 @@ sub vcl_deliver { unset resp.http.Age; } + # Not letting browser to cache non-static files. + if (req.url !~ "^/(pub/)?(media|static)/") { + set resp.http.Pragma = "no-cache"; + set resp.http.Expires = "-1"; + set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0"; + } + unset resp.http.X-Magento-Debug; unset resp.http.X-Magento-Tags; unset resp.http.X-Powered-By; diff --git a/app/code/Magento/PageCache/etc/varnish5.vcl b/app/code/Magento/PageCache/etc/varnish5.vcl index b314bd5dfd5e1..426a776a6c123 100644 --- a/app/code/Magento/PageCache/etc/varnish5.vcl +++ b/app/code/Magento/PageCache/etc/varnish5.vcl @@ -161,11 +161,6 @@ sub vcl_backend_response { # images, css and js are cacheable by default so we have to remove cookie also if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) { unset beresp.http.set-cookie; - if (bereq.url !~ "\.(7z|avi|bmp|bz2|css|csv|doc|docx|eot|flac|flv|gif|gz|ico|jpeg|jpg|js|less|mka|mkv|mov|mp3|mp4|mpeg|mpg|odt|otf|ogg|ogm|opus|pdf|png|ppt|pptx|rar|rtf|svg|svgz|swf|tar|tbz|tgz|tiff|ttf|txt|txz|wav|webm|webp|woff|woff2|xls|xlsx|xml|xz|zip)(\?|$)") { - set beresp.http.Pragma = "no-cache"; - set beresp.http.Expires = "-1"; - set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0"; - } } # If page is not cacheable then bypass varnish for 2 minutes as Hit-For-Pass @@ -194,6 +189,13 @@ sub vcl_deliver { unset resp.http.Age; } + # Not letting browser to cache non-static files. + if (req.url !~ "^/(pub/)?(media|static)/") { + set resp.http.Pragma = "no-cache"; + set resp.http.Expires = "-1"; + set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0"; + } + unset resp.http.X-Magento-Debug; unset resp.http.X-Magento-Tags; unset resp.http.X-Powered-By; From ffb781737a927db44a925fd89dcf97101b7eb67b Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Fri, 17 Nov 2017 15:39:01 +0200 Subject: [PATCH 260/653] 9684: No ACL set for integrations --- app/code/Magento/Integration/etc/acl.xml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 app/code/Magento/Integration/etc/acl.xml diff --git a/app/code/Magento/Integration/etc/acl.xml b/app/code/Magento/Integration/etc/acl.xml new file mode 100644 index 0000000000000..51eb078bd1df7 --- /dev/null +++ b/app/code/Magento/Integration/etc/acl.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd"> + <acl> + <resources> + <resource id="Magento_Backend::admin"> + <resource id="Magento_Backend::system"> + <resource id="Magento_Integration::extensions" title="System Extensions" translate="title" sortOrder="30"> + <resource id="Magento_Integration::integrations" title="System Integrations" translate="title" sortOrder="40" /> + </resource> + </resource> + </resource> + </resources> + </acl> +</config> From 21d31537c14a63d91cb3ad53b1f40a43c32a6bff Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Fri, 17 Nov 2017 15:57:13 +0200 Subject: [PATCH 261/653] MAGETWO-75217: SKU parameter in capital letters on CSV ignored by database in Import but OK'd by validator --- .../Model/Import/Product/Type/Configurable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php b/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php index 0e7a026c526c9..4ca21d554ccd9 100644 --- a/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php +++ b/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php @@ -502,7 +502,7 @@ protected function _parseVariations($rowData) $value = isset($nameAndValue[1]) ? trim($nameAndValue[1]) : ''; //Ignoring field names' case. - $fieldName = mb_strtolower(trim($nameAndValue[0])); + $fieldName = strtolower(trim($nameAndValue[0])); if ($fieldName) { $fieldAndValuePairs[$fieldName] = $value; } From 723452c71eb6da31f6ac8f221f4c587ce855a309 Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov <ishakhsuvarov@magento.com> Date: Fri, 17 Nov 2017 19:11:45 +0100 Subject: [PATCH 262/653] magento/magento2#12304: Handle empty or incorrect lines in language CSV - Updated test data to cover this case --- .../Magento/Framework/App/Language/_files/bar/en_gb/1.csv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/1.csv b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/1.csv index 0c13b51b55287..235d18468b739 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/1.csv +++ b/dev/tests/integration/testsuite/Magento/Framework/App/Language/_files/bar/en_gb/1.csv @@ -1,2 +1,3 @@ four and 75/100,4.75 -four and 5/10,4.50 \ No newline at end of file +four and 5/10,4.50 + From e9986c5ac7abdca30c20b416913c9458d974e5ad Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov <ishakhsuvarov@magento.com> Date: Fri, 17 Nov 2017 19:18:38 +0100 Subject: [PATCH 263/653] magento/magento2#12310: Fix robots.txt content type to 'text/plain' --- .../Magento/Robots/Test/Unit/Controller/Index/IndexTest.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/code/Magento/Robots/Test/Unit/Controller/Index/IndexTest.php b/app/code/Magento/Robots/Test/Unit/Controller/Index/IndexTest.php index 22a69cc13bd52..d3a7a97c7ea80 100644 --- a/app/code/Magento/Robots/Test/Unit/Controller/Index/IndexTest.php +++ b/app/code/Magento/Robots/Test/Unit/Controller/Index/IndexTest.php @@ -51,6 +51,9 @@ public function testExecute() $resultPageMock->expects($this->once()) ->method('addHandle') ->with('robots_index_index'); + $resultPageMock->expects($this->once()) + ->method('setHeader') + ->with('Content-Type', 'text/plain'); $this->resultPageFactory->expects($this->any()) ->method('create') From aa7da3084d17f27b4f44c8b816a1ffa4c3666682 Mon Sep 17 00:00:00 2001 From: Volodymyr Kublytskyi <vkublytskyi@magento.com> Date: Fri, 17 Nov 2017 20:52:00 +0200 Subject: [PATCH 264/653] Stabilization magento-partners/magento2ce#83 --- app/code/Magento/Catalog/Model/Product/Option/Value.php | 2 +- app/code/Magento/Customer/Controller/Ajax/Login.php | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Option/Value.php b/app/code/Magento/Catalog/Model/Product/Option/Value.php index f1700f380fd0c..d4c78772e7c0b 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Value.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Value.php @@ -189,7 +189,7 @@ public function getProduct() */ public function saveValues() { - foreach ($this->getValues() as $value) + foreach ($this->getValues() as $value) { $this->isDeleted(false); $this->setData( $value diff --git a/app/code/Magento/Customer/Controller/Ajax/Login.php b/app/code/Magento/Customer/Controller/Ajax/Login.php index d275b563553ca..8664e0cbf87ea 100644 --- a/app/code/Magento/Customer/Controller/Ajax/Login.php +++ b/app/code/Magento/Customer/Controller/Ajax/Login.php @@ -98,8 +98,12 @@ public function __construct( $this->customerAccountManagement = $customerAccountManagement; $this->resultJsonFactory = $resultJsonFactory; $this->resultRawFactory = $resultRawFactory; - $this->cookieManager = $cookieManager ?: ObjectManager::getInstance()->get(CookieManagerInterface::class); - $this->cookieMetadataFactory = $cookieMetadataFactory ?: ObjectManager::getInstance()->get(CookieMetadataFactory::class); + $this->cookieManager = $cookieManager ?: ObjectManager::getInstance()->get( + CookieManagerInterface::class + ); + $this->cookieMetadataFactory = $cookieMetadataFactory ?: ObjectManager::getInstance()->get( + CookieMetadataFactory::class + ); } /** From 2f0898a6fb8f619640b4dbc84fd5ab2a376dc0fa Mon Sep 17 00:00:00 2001 From: Ievgen Sentiabov <isentiabov@magento.com> Date: Thu, 26 Oct 2017 17:27:58 +0300 Subject: [PATCH 265/653] Potential error on order edit page when address has extension attributes - Changed shipping and billing address comparision - Refactored related tests --- .../Magento/Sales/Model/AdminOrder/Create.php | 40 +- .../Test/Unit/Model/AdminOrder/CreateTest.php | 324 +++++------- .../Sales/Model/AdminOrder/CreateTest.php | 465 +++++++++--------- 3 files changed, 383 insertions(+), 446 deletions(-) diff --git a/app/code/Magento/Sales/Model/AdminOrder/Create.php b/app/code/Magento/Sales/Model/AdminOrder/Create.php index c2f03ff5d9ac4..69f4d19e4dd63 100644 --- a/app/code/Magento/Sales/Model/AdminOrder/Create.php +++ b/app/code/Magento/Sales/Model/AdminOrder/Create.php @@ -10,9 +10,12 @@ use Magento\Customer\Api\AddressMetadataInterface; use Magento\Customer\Model\Metadata\Form as CustomerForm; +use Magento\Framework\Api\ExtensibleDataObjectConverter; use Magento\Framework\App\ObjectManager; use Magento\Quote\Model\Quote\Address; use Magento\Quote\Model\Quote\Item; +use Magento\Sales\Api\Data\OrderAddressInterface; +use Magento\Sales\Model\Order; /** * Order create model @@ -235,6 +238,11 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\ */ private $serializer; + /** + * @var ExtensibleDataObjectConverter + */ + private $dataObjectConverter; + /** * @param \Magento\Framework\ObjectManagerInterface $objectManager * @param \Magento\Framework\Event\ManagerInterface $eventManager @@ -265,6 +273,7 @@ class Create extends \Magento\Framework\DataObject implements \Magento\Checkout\ * @param \Magento\Quote\Model\QuoteFactory $quoteFactory * @param array $data * @param \Magento\Framework\Serialize\Serializer\Json|null $serializer + * @param ExtensibleDataObjectConverter|null $dataObjectConverter * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -296,7 +305,8 @@ public function __construct( \Magento\Sales\Api\OrderManagementInterface $orderManagement, \Magento\Quote\Model\QuoteFactory $quoteFactory, array $data = [], - \Magento\Framework\Serialize\Serializer\Json $serializer = null + \Magento\Framework\Serialize\Serializer\Json $serializer = null, + ExtensibleDataObjectConverter $dataObjectConverter = null ) { $this->_objectManager = $objectManager; $this->_eventManager = $eventManager; @@ -328,6 +338,8 @@ public function __construct( $this->serializer = $serializer ?: ObjectManager::getInstance() ->get(\Magento\Framework\Serialize\Serializer\Json::class); parent::__construct($data); + $this->dataObjectConverter = $dataObjectConverter ?: ObjectManager::getInstance() + ->get(ExtensibleDataObjectConverter::class); } /** @@ -514,9 +526,7 @@ public function initFromOrder(\Magento\Sales\Model\Order $order) $shippingAddress = $order->getShippingAddress(); if ($shippingAddress) { - $addressDiff = array_diff_assoc($shippingAddress->getData(), $order->getBillingAddress()->getData()); - unset($addressDiff['address_type'], $addressDiff['entity_id']); - $shippingAddress->setSameAsBilling(empty($addressDiff)); + $shippingAddress->setSameAsBilling($this->isAddressesAreEqual($order)); } $this->_initBillingAddressFromOrder($order); @@ -2010,4 +2020,26 @@ protected function _getNewCustomerEmail() return $email; } + + /** + * Checks id shipping and billing addresses are equal. + * + * @param Order $order + * @return bool + */ + private function isAddressesAreEqual(Order $order) + { + $shippingAddress = $order->getShippingAddress(); + $billingAddress = $order->getBillingAddress(); + $shippingData = $this->dataObjectConverter->toFlatArray($shippingAddress, [], OrderAddressInterface::class); + $billingData = $this->dataObjectConverter->toFlatArray($billingAddress, [], OrderAddressInterface::class); + unset( + $shippingData['address_type'], + $shippingData['entity_id'], + $billingData['address_type'], + $billingData['entity_id'] + ); + + return $shippingData == $billingData; + } } diff --git a/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/CreateTest.php b/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/CreateTest.php index a265d39bafd93..b284a529d2a15 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/CreateTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/AdminOrder/CreateTest.php @@ -8,8 +8,25 @@ namespace Magento\Sales\Test\Unit\Model\AdminOrder; +use Magento\Backend\Model\Session\Quote as SessionQuote; +use Magento\Customer\Api\Data\AttributeMetadataInterface; +use Magento\Customer\Api\Data\CustomerInterface; +use Magento\Customer\Api\Data\CustomerInterfaceFactory; +use Magento\Customer\Api\Data\GroupInterface; +use Magento\Customer\Api\GroupRepositoryInterface; +use Magento\Customer\Model\Customer\Mapper; +use Magento\Customer\Model\Metadata\Form; +use Magento\Customer\Model\Metadata\FormFactory; +use Magento\Framework\Api\DataObjectHelper; +use Magento\Framework\App\RequestInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; +use Magento\Quote\Model\Quote; +use Magento\Quote\Model\Quote\Address; +use Magento\Quote\Model\Quote\Item; +use Magento\Quote\Model\Quote\Item\Updater; +use Magento\Sales\Model\AdminOrder\Create; use Magento\Sales\Model\AdminOrder\Product; +use PHPUnit_Framework_MockObject_MockObject as MockObject; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) @@ -19,161 +36,74 @@ class CreateTest extends \PHPUnit\Framework\TestCase { const CUSTOMER_ID = 1; - /** @var \Magento\Sales\Model\AdminOrder\Create */ - protected $adminOrderCreate; - - /** @var \Magento\Backend\Model\Session\Quote|\PHPUnit_Framework_MockObject_MockObject */ - protected $sessionQuoteMock; - - /** @var \Magento\Customer\Model\Metadata\FormFactory|\PHPUnit_Framework_MockObject_MockObject */ - protected $formFactoryMock; - - /** @var \Magento\Customer\Api\Data\CustomerInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject */ - protected $customerFactoryMock; - - /** @var \Magento\Quote\Model\Quote\Item\Updater|\PHPUnit_Framework_MockObject_MockObject */ - protected $itemUpdater; - - /** @var \Magento\Customer\Model\Customer\Mapper|\PHPUnit_Framework_MockObject_MockObject */ - protected $customerMapper; - /** - * @var Product\Quote\Initializer|\PHPUnit_Framework_MockObject_MockObject + * @var Create */ - protected $quoteInitializerMock; + private $adminOrderCreate; /** - * @var \Magento\Customer\Api\CustomerRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject + * @var SessionQuote|MockObject */ - protected $customerRepositoryMock; + private $sessionQuote; /** - * @var \Magento\Customer\Api\AddressRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject + * @var FormFactory|MockObject */ - protected $addressRepositoryMock; + private $formFactory; /** - * @var \Magento\Customer\Api\Data\AddressInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject + * @var CustomerInterfaceFactory|MockObject */ - protected $addressFactoryMock; + private $customerFactory; /** - * @var \Magento\Customer\Api\GroupRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject + * @var Updater|MockObject */ - protected $groupRepositoryMock; + private $itemUpdater; /** - * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject + * @var Mapper|MockObject */ - protected $scopeConfigMock; + private $customerMapper; /** - * @var \Magento\Sales\Model\AdminOrder\EmailSender|\PHPUnit_Framework_MockObject_MockObject + * @var GroupRepositoryInterface|MockObject */ - protected $emailSenderMock; + private $groupRepository; /** - * @var \Magento\Customer\Api\AccountManagementInterface|\PHPUnit_Framework_MockObject_MockObject + * @var DataObjectHelper|MockObject */ - protected $accountManagementMock; + private $dataObjectHelper; - /** - * @var \Magento\Framework\Api\DataObjectHelper|\PHPUnit_Framework_MockObject_MockObject - */ - protected $dataObjectHelper; - - /** - * @var \PHPUnit_Framework_MockObject_MockObject - */ - protected $objectFactory; - - /** - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) - */ protected function setUp() { - $objectManagerMock = $this->createMock(\Magento\Framework\ObjectManagerInterface::class); - $eventManagerMock = $this->createMock(\Magento\Framework\Event\ManagerInterface::class); - $registryMock = $this->createMock(\Magento\Framework\Registry::class); - $configMock = $this->createMock(\Magento\Sales\Model\Config::class); - $this->sessionQuoteMock = $this->createMock(\Magento\Backend\Model\Session\Quote::class); - $loggerMock = $this->createMock(\Psr\Log\LoggerInterface::class); - $copyMock = $this->createMock(\Magento\Framework\DataObject\Copy::class); - $messageManagerMock = $this->createMock(\Magento\Framework\Message\ManagerInterface::class); - $this->formFactoryMock = $this->createPartialMock(\Magento\Customer\Model\Metadata\FormFactory::class, ['create']); - $this->customerFactoryMock = $this->createPartialMock(\Magento\Customer\Api\Data\CustomerInterfaceFactory::class, ['create']); - - $this->itemUpdater = $this->createMock(\Magento\Quote\Model\Quote\Item\Updater::class); - - $this->objectFactory = $this->getMockBuilder(\Magento\Framework\DataObject\Factory::class) + $this->sessionQuote = $this->createMock(SessionQuote::class); + $this->formFactory = $this->createPartialMock(FormFactory::class, ['create']); + $this->customerFactory = $this->createPartialMock(CustomerInterfaceFactory::class, ['create']); + + $this->itemUpdater = $this->createMock(Updater::class); + + $this->customerMapper = $this->getMockBuilder(Mapper::class) + ->setMethods(['toFlatArray']) ->disableOriginalConstructor() - ->setMethods(['create']) ->getMock(); - $this->customerMapper = $this->getMockBuilder( - \Magento\Customer\Model\Customer\Mapper::class - )->setMethods(['toFlatArray'])->disableOriginalConstructor()->getMock(); - - $this->quoteInitializerMock = $this->createMock(\Magento\Sales\Model\AdminOrder\Product\Quote\Initializer::class); - $this->customerRepositoryMock = $this->getMockForAbstractClass( - \Magento\Customer\Api\CustomerRepositoryInterface::class, - [], - '', - false - ); - $this->addressRepositoryMock = $this->getMockForAbstractClass( - \Magento\Customer\Api\AddressRepositoryInterface::class, - [], - '', - false - ); - $this->addressFactoryMock = $this->createMock(\Magento\Customer\Api\Data\AddressInterfaceFactory::class); - $this->groupRepositoryMock = $this->getMockForAbstractClass( - \Magento\Customer\Api\GroupRepositoryInterface::class, - [], - '', - false - ); - $this->scopeConfigMock = $this->getMockForAbstractClass( - \Magento\Framework\App\Config\ScopeConfigInterface::class, - [], - '', - false - ); - $this->emailSenderMock = $this->createMock(\Magento\Sales\Model\AdminOrder\EmailSender::class); - $this->accountManagementMock = $this->getMockForAbstractClass( - \Magento\Customer\Api\AccountManagementInterface::class, - [], - '', - false - ); - $this->dataObjectHelper = $this->getMockBuilder(\Magento\Framework\Api\DataObjectHelper::class) + $this->groupRepository = $this->getMockForAbstractClass(GroupRepositoryInterface::class); + $this->dataObjectHelper = $this->getMockBuilder(DataObjectHelper::class) ->disableOriginalConstructor() ->getMock(); $objectManagerHelper = new ObjectManagerHelper($this); $this->adminOrderCreate = $objectManagerHelper->getObject( - \Magento\Sales\Model\AdminOrder\Create::class, + Create::class, [ - 'objectManager' => $objectManagerMock, - 'eventManager' => $eventManagerMock, - 'coreRegistry' => $registryMock, - 'salesConfig' => $configMock, - 'quoteSession' => $this->sessionQuoteMock, - 'logger' => $loggerMock, - 'objectCopyService' => $copyMock, - 'messageManager' => $messageManagerMock, - 'quoteInitializer' => $this->quoteInitializerMock, - 'customerRepository' => $this->customerRepositoryMock, - 'addressRepository' => $this->addressRepositoryMock, - 'addressFactory' => $this->addressFactoryMock, - 'metadataFormFactory' => $this->formFactoryMock, - 'customerFactory' => $this->customerFactoryMock, - 'groupRepository' => $this->groupRepositoryMock, + 'quoteSession' => $this->sessionQuote, + 'metadataFormFactory' => $this->formFactory, + 'customerFactory' => $this->customerFactory, + 'groupRepository' => $this->groupRepository, 'quoteItemUpdater' => $this->itemUpdater, 'customerMapper' => $this->customerMapper, - 'objectFactory' => $this->objectFactory, - 'accountManagement' => $this->accountManagementMock, 'dataObjectHelper' => $this->dataObjectHelper, ] ); @@ -188,64 +118,60 @@ public function testSetAccountData() ]; $attributeMocks = []; - foreach ($attributes as $attribute) { - $attributeMock = $this->createMock(\Magento\Customer\Api\Data\AttributeMetadataInterface::class); + foreach ($attributes as $value) { + $attribute = $this->createMock(AttributeMetadataInterface::class); + $attribute->method('getAttributeCode') + ->willReturn($value[0]); - $attributeMock->expects($this->any())->method('getAttributeCode')->will($this->returnValue($attribute[0])); - - $attributeMocks[] = $attributeMock; + $attributeMocks[] = $attribute; } - $customerGroupMock = $this->getMockForAbstractClass( - \Magento\Customer\Api\Data\GroupInterface::class, - [], - '', - false, - true, - true, - ['getTaxClassId'] - ); - $customerGroupMock->expects($this->once())->method('getTaxClassId')->will($this->returnValue($taxClassId)); - $customerFormMock = $this->createMock(\Magento\Customer\Model\Metadata\Form::class); - $customerFormMock->expects($this->any()) - ->method('getAttributes') - ->will($this->returnValue([$attributeMocks[1]])); - $customerFormMock->expects($this->any())->method('extractData')->will($this->returnValue([])); - $customerFormMock->expects($this->any())->method('restoreData')->will($this->returnValue(['group_id' => 1])); - - $customerFormMock->expects($this->any()) - ->method('prepareRequest') - ->will($this->returnValue($this->createMock(\Magento\Framework\App\RequestInterface::class))); - - $customerMock = $this->createMock(\Magento\Customer\Api\Data\CustomerInterface::class); - $this->customerMapper->expects($this->atLeastOnce()) + $customerGroup = $this->getMockForAbstractClass(GroupInterface::class); + $customerGroup->method('getTaxClassId') + ->willReturn($taxClassId); + $customerForm = $this->createMock(Form::class); + $customerForm->method('getAttributes') + ->willReturn([$attributeMocks[1]]); + $customerForm + ->method('extractData') + ->willReturn([]); + $customerForm + ->method('restoreData') + ->willReturn(['group_id' => 1]); + + $customerForm->method('prepareRequest') + ->willReturn($this->createMock(RequestInterface::class)); + + $customer = $this->createMock(CustomerInterface::class); + $this->customerMapper->expects(self::atLeastOnce()) ->method('toFlatArray') ->willReturn(['group_id' => 1]); - $quoteMock = $this->createMock(\Magento\Quote\Model\Quote::class); - $quoteMock->expects($this->any())->method('getCustomer')->will($this->returnValue($customerMock)); - $quoteMock->expects($this->once()) - ->method('addData') + $quote = $this->createMock(Quote::class); + $quote->method('getCustomer')->willReturn($customer); + $quote->method('addData') ->with( [ 'customer_group_id' => $attributes[1][1], 'customer_tax_class_id' => $taxClassId ] ); - $this->dataObjectHelper->expects($this->once()) - ->method('populateWithArray') + $this->dataObjectHelper->method('populateWithArray') ->with( - $customerMock, - ['group_id' => 1], \Magento\Customer\Api\Data\CustomerInterface::class + $customer, + ['group_id' => 1], CustomerInterface::class ); - $this->formFactoryMock->expects($this->any())->method('create')->will($this->returnValue($customerFormMock)); - $this->sessionQuoteMock->expects($this->any())->method('getQuote')->will($this->returnValue($quoteMock)); - $this->customerFactoryMock->expects($this->any())->method('create')->will($this->returnValue($customerMock)); + $this->formFactory->method('create') + ->willReturn($customerForm); + $this->sessionQuote + ->method('getQuote') + ->willReturn($quote); + $this->customerFactory->method('create') + ->willReturn($customer); - $this->groupRepositoryMock->expects($this->once()) - ->method('getById') - ->will($this->returnValue($customerGroupMock)); + $this->groupRepository->method('getById') + ->willReturn($customerGroup); $this->adminOrderCreate->setAccountData(['group_id' => 1]); } @@ -253,7 +179,7 @@ public function testSetAccountData() public function testUpdateQuoteItemsNotArray() { $object = $this->adminOrderCreate->updateQuoteItems('string'); - $this->assertEquals($this->adminOrderCreate, $object); + self::assertEquals($this->adminOrderCreate, $object); } public function testUpdateQuoteItemsEmptyConfiguredOption() @@ -266,22 +192,21 @@ public function testUpdateQuoteItemsEmptyConfiguredOption() ] ]; - $itemMock = $this->createMock(\Magento\Quote\Model\Quote\Item::class); + $item = $this->createMock(Item::class); - $quoteMock = $this->createMock(\Magento\Quote\Model\Quote::class); - $quoteMock->expects($this->once()) - ->method('getItemById') - ->will($this->returnValue($itemMock)); + $quote = $this->createMock(Quote::class); + $quote->method('getItemById') + ->willReturn($item); - $this->sessionQuoteMock->expects($this->any())->method('getQuote')->will($this->returnValue($quoteMock)); - $this->itemUpdater->expects($this->once()) - ->method('update') - ->with($this->equalTo($itemMock), $this->equalTo($items[1])) - ->will($this->returnSelf()); + $this->sessionQuote->method('getQuote') + ->willReturn($quote); + $this->itemUpdater->method('update') + ->with(self::equalTo($item), self::equalTo($items[1])) + ->willReturnSelf(); $this->adminOrderCreate->setRecollect(false); $object = $this->adminOrderCreate->updateQuoteItems($items); - $this->assertEquals($this->adminOrderCreate, $object); + self::assertEquals($this->adminOrderCreate, $object); } public function testUpdateQuoteItemsWithConfiguredOption() @@ -295,43 +220,50 @@ public function testUpdateQuoteItemsWithConfiguredOption() ] ]; - $itemMock = $this->createMock(\Magento\Quote\Model\Quote\Item::class); - $itemMock->expects($this->once()) - ->method('getQty') - ->will($this->returnValue($qty)); + $item = $this->createMock(Item::class); + $item->method('getQty') + ->willReturn($qty); - $quoteMock = $this->createMock(\Magento\Quote\Model\Quote::class); - $quoteMock->expects($this->once()) - ->method('updateItem') - ->will($this->returnValue($itemMock)); + $quote = $this->createMock(Quote::class); + $quote->method('updateItem') + ->willReturn($item); - $this->sessionQuoteMock->expects($this->any())->method('getQuote')->will($this->returnValue($quoteMock)); + $this->sessionQuote + ->method('getQuote') + ->willReturn($quote); $expectedInfo = $items[1]; $expectedInfo['qty'] = $qty; - $this->itemUpdater->expects($this->once()) - ->method('update') - ->with($this->equalTo($itemMock), $this->equalTo($expectedInfo)); + $this->itemUpdater->method('update') + ->with(self::equalTo($item), self::equalTo($expectedInfo)); $this->adminOrderCreate->setRecollect(false); $object = $this->adminOrderCreate->updateQuoteItems($items); - $this->assertEquals($this->adminOrderCreate, $object); + self::assertEquals($this->adminOrderCreate, $object); } public function testApplyCoupon() { - $couponCode = ''; - $quoteMock = $this->createPartialMock(\Magento\Quote\Model\Quote::class, ['getShippingAddress', 'setCouponCode']); - $this->sessionQuoteMock->expects($this->once())->method('getQuote')->willReturn($quoteMock); - - $addressMock = $this->createPartialMock(\Magento\Quote\Model\Quote\Address::class, ['setCollectShippingRates', 'setFreeShipping']); - $quoteMock->expects($this->exactly(2))->method('getShippingAddress')->willReturn($addressMock); - $quoteMock->expects($this->once())->method('setCouponCode')->with($couponCode)->willReturnSelf(); - - $addressMock->expects($this->once())->method('setCollectShippingRates')->with(true)->willReturnSelf(); - $addressMock->expects($this->once())->method('setFreeShipping')->with(0)->willReturnSelf(); + $couponCode = '123'; + $quote = $this->createPartialMock(Quote::class, ['getShippingAddress', 'setCouponCode']); + $this->sessionQuote->method('getQuote') + ->willReturn($quote); + + $address = $this->createPartialMock(Address::class, ['setCollectShippingRates', 'setFreeShipping']); + $quote->method('getShippingAddress') + ->willReturn($address); + $quote->method('setCouponCode') + ->with($couponCode) + ->willReturnSelf(); + + $address->method('setCollectShippingRates') + ->with(true) + ->willReturnSelf(); + $address->method('setFreeShipping') + ->with(0) + ->willReturnSelf(); $object = $this->adminOrderCreate->applyCoupon($couponCode); - $this->assertEquals($this->adminOrderCreate, $object); + self::assertEquals($this->adminOrderCreate, $object); } } diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php index ee7ddc1ba1aba..408cc8d192e37 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Model/AdminOrder/CreateTest.php @@ -5,10 +5,20 @@ */ namespace Magento\Sales\Model\AdminOrder; +use Magento\Backend\Model\Session\Quote as SessionQuote; +use Magento\Customer\Api\AddressRepositoryInterface; +use Magento\Customer\Api\CustomerRepositoryInterface; +use Magento\Customer\Model\Customer; +use Magento\Customer\Model\CustomerRegistry; +use Magento\Framework\Message\ManagerInterface; +use Magento\Framework\Registry; +use Magento\Quote\Model\Quote; +use Magento\Sales\Api\Data\OrderAddressExtensionInterface; +use Magento\Sales\Api\Data\OrderAddressExtensionInterfaceFactory; use Magento\Sales\Api\OrderManagementInterface; -use Magento\TestFramework\Helper\Bootstrap; use Magento\Sales\Model\Order; -use Magento\Framework\Registry; +use Magento\TestFramework\Helper\Bootstrap; +use Magento\TestFramework\ObjectManager; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) @@ -18,21 +28,25 @@ class CreateTest extends \PHPUnit\Framework\TestCase { /** - * @var \Magento\Sales\Model\AdminOrder\Create + * @var Create */ - protected $_model; + private $model; - /** @var \Magento\Framework\Message\ManagerInterface */ - protected $_messageManager; + /** + * @var ManagerInterface + */ + private $messageManager; + + /** + * @var ObjectManager + */ + private $objectManager; protected function setUp() { - parent::setUp(); - $this->_messageManager = Bootstrap::getObjectManager()->get(\Magento\Framework\Message\ManagerInterface::class); - $this->_model = Bootstrap::getObjectManager()->create( - \Magento\Sales\Model\AdminOrder\Create::class, - ['messageManager' => $this->_messageManager] - ); + $this->objectManager = Bootstrap::getObjectManager(); + $this->messageManager = $this->objectManager->get(ManagerInterface::class); + $this->model =$this->objectManager->create(Create::class, ['messageManager' => $this->messageManager]); } /** @@ -41,17 +55,15 @@ protected function setUp() */ public function testInitFromOrderShippingAddressSameAsBillingWhenEmpty() { - /** @var $order \Magento\Sales\Model\Order */ - $order = Bootstrap::getObjectManager()->create(\Magento\Sales\Model\Order::class); + /** @var $order Order */ + $order = $this->objectManager->create(Order::class); $order->loadByIncrementId('100000001'); - $this->assertNull($order->getShippingAddress()); + self::assertNull($order->getShippingAddress()); - /** @var $objectManager \Magento\TestFramework\ObjectManager */ - $objectManager = Bootstrap::getObjectManager(); - $objectManager->get(\Magento\Framework\Registry::class)->unregister('rule_data'); - $this->_model->initFromOrder($order); + $this->objectManager->get(Registry::class)->unregister('rule_data'); + $this->model->initFromOrder($order); - $this->assertNull($order->getShippingAddress()); + self::assertNull($order->getShippingAddress()); } /** @@ -64,45 +76,45 @@ public function testInitFromOrderShippingAddressSameAsBillingWhenEmpty() public function testInitFromOrderAndCreateOrderFromQuoteWithAdditionalOptions() { /** @var $serializer \Magento\Framework\Serialize\Serializer\Json */ - $serializer = Bootstrap::getObjectManager()->create(\Magento\Framework\Serialize\Serializer\Json::class); + $serializer = $this->objectManager->create(\Magento\Framework\Serialize\Serializer\Json::class); - /** @var $order \Magento\Sales\Model\Order */ - $order = Bootstrap::getObjectManager()->create(\Magento\Sales\Model\Order::class); + /** @var $order Order */ + $order = $this->objectManager->create(Order::class); $order->loadByIncrementId('100000001'); /** @var $orderCreate \Magento\Sales\Model\AdminOrder\Create */ - $orderCreate = $this->_model->initFromOrder($order); + $orderCreate = $this->model->initFromOrder($order); $quoteItems = $orderCreate->getQuote()->getItemsCollection(); - $this->assertEquals(1, $quoteItems->count()); + self::assertEquals(1, $quoteItems->count()); $quoteItem = $quoteItems->getFirstItem(); $quoteItemOptions = $quoteItem->getOptionsByCode(); - $this->assertEquals( + self::assertEquals( $serializer->serialize(['additional_option_key' => 'additional_option_value']), $quoteItemOptions['additional_options']->getValue() ); - $session = Bootstrap::getObjectManager()->get(\Magento\Backend\Model\Session\Quote::class); + $session = $this->objectManager->get(SessionQuote::class); $session->setCustomerId(1); - $customer = Bootstrap::getObjectManager()->create(\Magento\Customer\Model\Customer::class); + $customer = $this->objectManager->create(Customer::class); $customer->load(1)->setDefaultBilling(null)->setDefaultShipping(null)->save(); - $rate = Bootstrap::getObjectManager()->create(\Magento\Quote\Model\Quote\Address\Rate::class); + $rate = $this->objectManager->create(Quote\Address\Rate::class); $rate->setCode('freeshipping_freeshipping'); - $this->_model->getQuote()->getShippingAddress()->addShippingRate($rate); - $this->_model->getQuote()->getShippingAddress()->setCountryId('EE'); - $this->_model->setShippingAsBilling(0); - $this->_model->setPaymentData(['method' => 'checkmo']); + $this->model->getQuote()->getShippingAddress()->addShippingRate($rate); + $this->model->getQuote()->getShippingAddress()->setCountryId('EE'); + $this->model->setShippingAsBilling(0); + $this->model->setPaymentData(['method' => 'checkmo']); - $newOrder = $this->_model->createOrder(); + $newOrder = $this->model->createOrder(); $newOrderItems = $newOrder->getItemsCollection(); - $this->assertEquals(1, $newOrderItems->count()); + self::assertEquals(1, $newOrderItems->count()); $order->loadByIncrementId('100000001'); $this->assertEquals($newOrder->getRealOrderId(), $order->getRelationChildRealId()); @@ -110,7 +122,7 @@ public function testInitFromOrderAndCreateOrderFromQuoteWithAdditionalOptions() $newOrderItem = $newOrderItems->getFirstItem(); - $this->assertEquals( + self::assertEquals( ['additional_option_key' => 'additional_option_value'], $newOrderItem->getProductOptionByCode('additional_options') ); @@ -123,18 +135,28 @@ public function testInitFromOrderAndCreateOrderFromQuoteWithAdditionalOptions() */ public function testInitFromOrderShippingAddressSameAsBillingWhenSame() { - /** @var $order \Magento\Sales\Model\Order */ - $order = Bootstrap::getObjectManager()->create(\Magento\Sales\Model\Order::class); + /** @var $order Order */ + $order = $this->objectManager->create(Order::class); $order->loadByIncrementId('100000001'); - $this->assertNull($order->getShippingAddress()->getSameAsBilling()); + self::assertNull($order->getShippingAddress()->getSameAsBilling()); + + /** @var OrderAddressExtensionInterface $shippingExtAttributes */ + $shippingExtAttributes = $this->objectManager->get(OrderAddressExtensionInterfaceFactory::class) + ->create(); - /** @var $objectManager \Magento\TestFramework\ObjectManager */ - $objectManager = Bootstrap::getObjectManager(); - $objectManager->get(\Magento\Framework\Registry::class)->unregister('rule_data'); - $this->_model->initFromOrder($order); + $billingExtAttributes = clone $shippingExtAttributes; - $this->assertTrue($order->getShippingAddress()->getSameAsBilling()); + $shippingExtAttributes->setData('tmp', false); + $billingExtAttributes->setData('tmp', true); + + $order->getShippingAddress()->setExtensionAttributes($shippingExtAttributes); + $order->getBillingAddress()->setExtensionAttributes($billingExtAttributes); + + $this->objectManager->get(Registry::class)->unregister('rule_data'); + $this->model->initFromOrder($order); + + self::assertTrue($order->getShippingAddress()->getSameAsBilling()); } /** @@ -144,19 +166,16 @@ public function testInitFromOrderShippingAddressSameAsBillingWhenSame() */ public function testInitFromOrderShippingAddressSameAsBillingWhenDifferent() { - /** @var $objectManager \Magento\TestFramework\ObjectManager */ - $objectManager = Bootstrap::getObjectManager(); - - /** @var $order \Magento\Sales\Model\Order */ - $order = $objectManager->create(\Magento\Sales\Model\Order::class); + /** @var $order Order */ + $order = $this->objectManager->create(Order::class); $order->loadByIncrementId('100000002'); - $this->assertNull($order->getShippingAddress()->getSameAsBilling()); + self::assertNull($order->getShippingAddress()->getSameAsBilling()); - $objectManager->get(\Magento\Framework\Registry::class)->unregister('rule_data'); - $this->_model->initFromOrder($order); + $this->objectManager->get(Registry::class)->unregister('rule_data'); + $this->model->initFromOrder($order); - $this->assertFalse($order->getShippingAddress()->getSameAsBilling()); + self::assertFalse($order->getShippingAddress()->getSameAsBilling()); } /** @@ -164,26 +183,23 @@ public function testInitFromOrderShippingAddressSameAsBillingWhenDifferent() */ public function testInitFromOrderCcInformationDeleted() { - /** @var $objectManager \Magento\TestFramework\ObjectManager */ - $objectManager = Bootstrap::getObjectManager(); - - /** @var $order \Magento\Sales\Model\Order */ - $order = $objectManager->create(\Magento\Sales\Model\Order::class); + /** @var $order Order */ + $order = $this->objectManager->create(Order::class); $order->loadByIncrementId('100000001'); $payment = $order->getPayment(); - $this->assertEquals('5', $payment->getCcExpMonth()); - $this->assertEquals('2016', $payment->getCcExpYear()); - $this->assertEquals('AE', $payment->getCcType()); - $this->assertEquals('0005', $payment->getCcLast4()); - - $objectManager->get(\Magento\Framework\Registry::class)->unregister('rule_data'); - $payment = $this->_model->initFromOrder($order)->getQuote()->getPayment(); - - $this->assertNull($payment->getCcExpMonth()); - $this->assertNull($payment->getCcExpYear()); - $this->assertNull($payment->getCcType()); - $this->assertNull($payment->getCcLast4()); + self::assertEquals('5', $payment->getCcExpMonth()); + self::assertEquals('2016', $payment->getCcExpYear()); + self::assertEquals('AE', $payment->getCcType()); + self::assertEquals('0005', $payment->getCcLast4()); + + $this->objectManager->get(Registry::class)->unregister('rule_data'); + $payment = $this->model->initFromOrder($order)->getQuote()->getPayment(); + + self::assertNull($payment->getCcExpMonth()); + self::assertNull($payment->getCcExpYear()); + self::assertNull($payment->getCcType()); + self::assertNull($payment->getCcLast4()); } /** @@ -191,25 +207,23 @@ public function testInitFromOrderCcInformationDeleted() */ public function testInitFromOrderWithEmptyPaymentDetails() { - /** @var $objectManager \Magento\TestFramework\ObjectManager */ - $objectManager = Bootstrap::getObjectManager(); - /** @var $order \Magento\Sales\Model\Order */ - $order = $objectManager->create(Order::class); + /** @var $order Order */ + $order = $this->objectManager->create(Order::class); $order->loadByIncrementId('100000001'); - $objectManager->get(Registry::class) + $this->objectManager->get(Registry::class) ->unregister('rule_data'); - $initOrder = $this->_model->initFromOrder($order); + $initOrder = $this->model->initFromOrder($order); $payment = $initOrder->getQuote()->getPayment(); - static::assertEquals($initOrder->getQuote()->getId(), $payment->getData('quote_id')); + self::assertEquals($initOrder->getQuote()->getId(), $payment->getData('quote_id')); $payment->unsetData('quote_id'); - static::assertEmpty($payment->getMethod()); - static::assertEmpty($payment->getAdditionalInformation()); - static::assertEmpty($payment->getAdditionalData()); - static::assertEmpty($payment->getData()); + self::assertEmpty($payment->getMethod()); + self::assertEmpty($payment->getAdditionalInformation()); + self::assertEmpty($payment->getAdditionalData()); + self::assertEmpty($payment->getData()); } /** @@ -217,11 +231,11 @@ public function testInitFromOrderWithEmptyPaymentDetails() */ public function testGetCustomerWishlistNoCustomerId() { - /** @var \Magento\Backend\Model\Session\Quote $session */ - $session = Bootstrap::getObjectManager()->create(\Magento\Backend\Model\Session\Quote::class); + /** @var SessionQuote $session */ + $session = $this->objectManager->create(SessionQuote::class); $session->setCustomerId(null); - $this->assertFalse( - $this->_model->getCustomerWishlist(true), + self::assertFalse( + $this->model->getCustomerWishlist(true), 'If customer ID is not set to session, false is expected to be returned.' ); } @@ -236,24 +250,24 @@ public function testGetCustomerWishlist() { $customerIdFromFixture = 1; $productIdFromFixture = 1; - /** @var \Magento\Backend\Model\Session\Quote $session */ - $session = Bootstrap::getObjectManager()->create(\Magento\Backend\Model\Session\Quote::class); + /** @var SessionQuote $session */ + $session = $this->objectManager->create(SessionQuote::class); $session->setCustomerId($customerIdFromFixture); /** Test new wishlist creation for the customer specified above */ /** @var \Magento\Wishlist\Model\Wishlist $wishlist */ - $wishlist = $this->_model->getCustomerWishlist(true); - $this->assertInstanceOf( + $wishlist = $this->model->getCustomerWishlist(true); + self::assertInstanceOf( \Magento\Wishlist\Model\Wishlist::class, $wishlist, 'New Wish List is expected to be created if existing Customer does not have one yet.' ); - $this->assertEquals(0, $wishlist->getItemsCount(), 'New Wish List must be empty just after creation.'); + self::assertEquals(0, $wishlist->getItemsCount(), 'New Wish List must be empty just after creation.'); /** Add new item to wishlist and try to get it using getCustomerWishlist once again */ $wishlist->addNewItem($productIdFromFixture)->save(); - $updatedWishlist = $this->_model->getCustomerWishlist(true); - $this->assertEquals( + $updatedWishlist = $this->model->getCustomerWishlist(true); + self::assertEquals( 1, $updatedWishlist->getItemsCount(), 'Wish List must contain a Product which was added to it earlier.' @@ -261,14 +275,14 @@ public function testGetCustomerWishlist() /** Try to load wishlist from cache in the class after it is deleted from DB */ $wishlist->delete(); - $this->assertSame( + self::assertSame( $updatedWishlist, - $this->_model->getCustomerWishlist(false), + $this->model->getCustomerWishlist(false), 'Wish List cached in class variable is expected to be returned.' ); - $this->assertNotSame( + self::assertNotSame( $updatedWishlist, - $this->_model->getCustomerWishlist(true), + $this->model->getCustomerWishlist(true), 'New Wish List is expected to be created when cache is forced to be refreshed.' ); } @@ -278,12 +292,12 @@ public function testGetCustomerWishlist() */ public function testSetBillingAddress() { - $addressData = $this->_getValidAddressData(); + $addressData = $this->getValidAddressData(); /** Validate data before creating address object */ - $this->_model->setIsValidate(true)->setBillingAddress($addressData); - $this->assertInstanceOf( - \Magento\Quote\Model\Quote\Address::class, - $this->_model->getBillingAddress(), + $this->model->setIsValidate(true)->setBillingAddress($addressData); + self::assertInstanceOf( + Quote\Address::class, + $this->model->getBillingAddress(), 'Billing address object was not created.' ); @@ -291,7 +305,7 @@ public function testSetBillingAddress() $addressData, [ 'address_type' => 'billing', - 'quote_id' => $this->_model->getQuote()->getId(), + 'quote_id' => $this->model->getQuote()->getId(), 'street' => "Line1\nLine2", 'save_in_address_book' => 0, 'region' => '', @@ -299,10 +313,10 @@ public function testSetBillingAddress() ] ); - $result = $this->_model->getBillingAddress()->getData(); + $result = $this->model->getBillingAddress()->getData(); foreach ($expectedAddressData as $key => $value) { - $this->assertArrayHasKey($key, $result); - $this->assertEquals($value, $result[$key]); + self::assertArrayHasKey($key, $result); + self::assertEquals($value, $result[$key]); } } @@ -314,32 +328,32 @@ public function testSetBillingAddress() public function testSetBillingAddressValidationErrors() { $customerIdFromFixture = 1; - /** @var \Magento\Backend\Model\Session\Quote $session */ - $session = Bootstrap::getObjectManager()->create(\Magento\Backend\Model\Session\Quote::class); + /** @var SessionQuote $session */ + $session = $this->objectManager->create(SessionQuote::class); $session->setCustomerId($customerIdFromFixture); - $invalidAddressData = array_merge($this->_getValidAddressData(), ['firstname' => '', 'lastname' => '']); + $invalidAddressData = array_merge($this->getValidAddressData(), ['firstname' => '', 'lastname' => '']); /** * Note that validation errors are collected during setBillingAddress() call in the internal class variable, * but they are not set to message manager at this step. * They are set to message manager only during createOrder() call. */ - $this->_model->setIsValidate(true)->setBillingAddress($invalidAddressData); + $this->model->setIsValidate(true)->setBillingAddress($invalidAddressData); try { - $this->_model->createOrder(); + $this->model->createOrder(); $this->fail('Validation errors are expected to lead to exception during createOrder() call.'); } catch (\Magento\Framework\Exception\LocalizedException $e) { /** createOrder is expected to throw exception with empty message when validation error occurs */ } $errorMessages = []; /** @var $validationError \Magento\Framework\Message\Error */ - foreach ($this->_messageManager->getMessages()->getItems() as $validationError) { + foreach ($this->messageManager->getMessages()->getItems() as $validationError) { $errorMessages[] = $validationError->getText(); } - $this->assertTrue( + self::assertTrue( in_array('Billing Address: "First Name" is a required value.', $errorMessages), 'Expected validation message is absent.' ); - $this->assertTrue( + self::assertTrue( in_array('Billing Address: "Last Name" is a required value.', $errorMessages), 'Expected validation message is absent.' ); @@ -361,9 +375,9 @@ public function testCreateOrderNewCustomerDifferentAddresses() $orderData = [ 'currency' => 'USD', 'account' => ['group_id' => '1', 'email' => $customerEmail], - 'billing_address' => array_merge($this->_getValidAddressData(), ['save_in_address_book' => '1']), + 'billing_address' => array_merge($this->getValidAddressData(), ['save_in_address_book' => '1']), 'shipping_address' => array_merge( - $this->_getValidAddressData(), + $this->getValidAddressData(), ['save_in_address_book' => '1', 'firstname' => $firstNameForShippingAddress] ), 'shipping_method' => $shippingMethod, @@ -372,7 +386,7 @@ public function testCreateOrderNewCustomerDifferentAddresses() ]; $paymentData = ['method' => $paymentMethod]; - $this->_preparePreconditionsForCreateOrder( + $this->preparePreconditionsForCreateOrder( $productIdFromFixture, $customerEmail, $shippingMethod, @@ -381,12 +395,12 @@ public function testCreateOrderNewCustomerDifferentAddresses() $orderData, $paymentMethod ); - $order = $this->_model->createOrder(); - $this->_verifyCreatedOrder($order, $shippingMethod); - /** @var \Magento\Customer\Model\Customer $customer */ - $customer = Bootstrap::getObjectManager()->create(\Magento\Customer\Model\Customer::class); + $order = $this->model->createOrder(); + $this->verifyCreatedOrder($order, $shippingMethod); + /** @var Customer $customer */ + $customer = $this->objectManager->create(Customer::class); $customer->load($order->getCustomerId()); - $this->assertEquals( + self::assertEquals( $firstNameForShippingAddress, $customer->getPrimaryShippingAddress()->getFirstname(), 'Shipping address is saved incorrectly.' @@ -408,14 +422,14 @@ public function testCreateOrderNewCustomer() $orderData = [ 'currency' => 'USD', 'account' => ['group_id' => '1', 'email' => $customerEmail], - 'billing_address' => array_merge($this->_getValidAddressData(), ['save_in_address_book' => '1']), + 'billing_address' => array_merge($this->getValidAddressData(), ['save_in_address_book' => '1']), 'shipping_method' => $shippingMethod, 'comment' => ['customer_note' => ''], 'send_confirmation' => false, ]; $paymentData = ['method' => $paymentMethod]; - $this->_preparePreconditionsForCreateOrder( + $this->preparePreconditionsForCreateOrder( $productIdFromFixture, $customerEmail, $shippingMethod, @@ -424,12 +438,12 @@ public function testCreateOrderNewCustomer() $orderData, $paymentMethod ); - $order = $this->_model->createOrder(); + $order = $this->model->createOrder(); //Check, order considering decimal qty in product. foreach ($order->getItems() as $orderItem) { self::assertTrue($orderItem->getIsQtyDecimal()); } - $this->_verifyCreatedOrder($order, $shippingMethod); + $this->verifyCreatedOrder($order, $shippingMethod); } /** @@ -454,14 +468,14 @@ public function testCreateOrderNewCustomerWithFailedFirstPlaceOrderAction( $orderData = [ 'currency' => 'USD', 'account' => ['group_id' => '1', 'email' => $customerEmail], - 'billing_address' => array_merge($this->_getValidAddressData(), ['save_in_address_book' => '1']), + 'billing_address' => array_merge($this->getValidAddressData(), ['save_in_address_book' => '1']), 'shipping_method' => $shippingMethod, 'comment' => ['customer_note' => ''], 'send_confirmation' => false, ]; $paymentData = ['method' => $paymentMethod]; - $this->_preparePreconditionsForCreateOrder( + $this->preparePreconditionsForCreateOrder( $productIdFromFixture, $customerEmail, $shippingMethod, @@ -475,17 +489,17 @@ public function testCreateOrderNewCustomerWithFailedFirstPlaceOrderAction( $orderManagement = $this->getMockForAbstractClass(OrderManagementInterface::class); $orderManagement->method('place') ->willThrowException(new \Exception('Can\'t place order')); - Bootstrap::getObjectManager()->addSharedInstance($orderManagement, OrderManagementInterface::class); + $this->objectManager->addSharedInstance($orderManagement, OrderManagementInterface::class); try { - $this->_model->createOrder(); + $this->model->createOrder(); } catch (\Exception $e) { - Bootstrap::getObjectManager()->removeSharedInstance(OrderManagementInterface::class); + $this->objectManager->removeSharedInstance(OrderManagementInterface::class); } - $customerEmail = $customerEmailSecondAttempt ? :$this->_model->getQuote()->getCustomer()->getEmail(); + $customerEmail = $customerEmailSecondAttempt ? :$this->model->getQuote()->getCustomer()->getEmail(); $orderData['account']['email'] = $customerEmailSecondAttempt; - $this->_preparePreconditionsForCreateOrder( + $this->preparePreconditionsForCreateOrder( $productIdFromFixture, $customerEmail, $shippingMethod, @@ -495,8 +509,8 @@ public function testCreateOrderNewCustomerWithFailedFirstPlaceOrderAction( $paymentMethod ); - $order = $this->_model->createOrder(); - $this->_verifyCreatedOrder($order, $shippingMethod); + $order = $this->model->createOrder(); + $this->verifyCreatedOrder($order, $shippingMethod); } /** @@ -537,9 +551,9 @@ public function testCreateOrderExistingCustomerDifferentAddresses() $firstNameForShippingAddress = 'FirstNameForShipping'; $orderData = [ 'currency' => 'USD', - 'billing_address' => array_merge($this->_getValidAddressData(), ['save_in_address_book' => '1']), + 'billing_address' => array_merge($this->getValidAddressData(), ['save_in_address_book' => '1']), 'shipping_address' => array_merge( - $this->_getValidAddressData(), + $this->getValidAddressData(), ['save_in_address_book' => '1', 'firstname' => $firstNameForShippingAddress] ), 'shipping_method' => $shippingMethod, @@ -548,7 +562,7 @@ public function testCreateOrderExistingCustomerDifferentAddresses() ]; $paymentData = ['method' => $paymentMethod]; - $this->_preparePreconditionsForCreateOrder( + $this->preparePreconditionsForCreateOrder( $productIdFromFixture, $customerEmailFromFixture, $shippingMethod, @@ -558,12 +572,15 @@ public function testCreateOrderExistingCustomerDifferentAddresses() $paymentMethod, $customerIdFromFixture ); - $order = $this->_model->createOrder(); - $this->_verifyCreatedOrder($order, $shippingMethod); - $this->getCustomerRegistry()->remove($order->getCustomerId()); - $customer = $this->getCustomerById($order->getCustomerId()); - $address = $this->getAddressById($customer->getDefaultShipping()); - $this->assertEquals( + $order = $this->model->createOrder(); + $this->verifyCreatedOrder($order, $shippingMethod); + $this->objectManager->get(CustomerRegistry::class) + ->remove($order->getCustomerId()); + $customer = $this->objectManager->get(CustomerRepositoryInterface::class) + ->getById($order->getCustomerId()); + $address = $this->objectManager->get(AddressRepositoryInterface::class) + ->getById($customer->getDefaultShipping()); + self::assertEquals( $firstNameForShippingAddress, $address->getFirstname(), 'Shipping address is saved incorrectly.' @@ -586,14 +603,14 @@ public function testCreateOrderExistingCustomer() $shippingAddressAsBilling = 1; $orderData = [ 'currency' => 'USD', - 'billing_address' => array_merge($this->_getValidAddressData(), ['save_in_address_book' => '1']), + 'billing_address' => array_merge($this->getValidAddressData(), ['save_in_address_book' => '1']), 'shipping_method' => $shippingMethod, 'comment' => ['customer_note' => ''], 'send_confirmation' => false, ]; $paymentData = ['method' => $paymentMethod]; - $this->_preparePreconditionsForCreateOrder( + $this->preparePreconditionsForCreateOrder( $productIdFromFixture, $customerEmailFromFixture, $shippingMethod, @@ -603,8 +620,8 @@ public function testCreateOrderExistingCustomer() $paymentMethod, $customerIdFromFixture ); - $order = $this->_model->createOrder(); - $this->_verifyCreatedOrder($order, $shippingMethod); + $order = $this->model->createOrder(); + $this->verifyCreatedOrder($order, $shippingMethod); } /** @@ -617,21 +634,21 @@ public function testGetCustomerCartExistingCart() $fixtureCustomerId = 1; /** Preconditions */ - /** @var \Magento\Backend\Model\Session\Quote $session */ - $session = Bootstrap::getObjectManager()->create(\Magento\Backend\Model\Session\Quote::class); + /** @var SessionQuote $session */ + $session = $this->objectManager->create(SessionQuote::class); $session->setCustomerId($fixtureCustomerId); - /** @var $quoteFixture \Magento\Quote\Model\Quote */ - $quoteFixture = Bootstrap::getObjectManager()->create(\Magento\Quote\Model\Quote::class); + /** @var $quoteFixture Quote */ + $quoteFixture = $this->objectManager->create(Quote::class); $quoteFixture->load('test01', 'reserved_order_id'); $quoteFixture->setCustomerIsGuest(false)->setCustomerId($fixtureCustomerId)->save(); /** SUT execution */ - $customerQuote = $this->_model->getCustomerCart(); - $this->assertEquals($quoteFixture->getId(), $customerQuote->getId(), 'Quote ID is invalid.'); + $customerQuote = $this->model->getCustomerCart(); + self::assertEquals($quoteFixture->getId(), $customerQuote->getId(), 'Quote ID is invalid.'); /** Try to load quote once again to ensure that caching works correctly */ - $customerQuoteFromCache = $this->_model->getCustomerCart(); - $this->assertSame($customerQuote, $customerQuoteFromCache, 'Customer quote caching does not work correctly.'); + $customerQuoteFromCache = $this->model->getCustomerCart(); + self::assertSame($customerQuote, $customerQuoteFromCache, 'Customer quote caching does not work correctly.'); } /** @@ -644,20 +661,20 @@ public function testMoveQuoteItemToCart() $fixtureCustomerId = 1; /** Preconditions */ - /** @var \Magento\Backend\Model\Session\Quote $session */ - $session = Bootstrap::getObjectManager()->create(\Magento\Backend\Model\Session\Quote::class); + /** @var SessionQuote $session */ + $session = $this->objectManager->create(SessionQuote::class); $session->setCustomerId($fixtureCustomerId); - /** @var $quoteFixture \Magento\Quote\Model\Quote */ - $quoteFixture = Bootstrap::getObjectManager()->create(\Magento\Quote\Model\Quote::class); + /** @var $quoteFixture Quote */ + $quoteFixture = $this->objectManager->create(Quote::class); $quoteFixture->load('test01', 'reserved_order_id'); $quoteFixture->setCustomerIsGuest(false)->setCustomerId($fixtureCustomerId)->save(); - $customerQuote = $this->_model->getCustomerCart(); + $customerQuote = $this->model->getCustomerCart(); $item = $customerQuote->getAllVisibleItems()[0]; - $this->_model->moveQuoteItem($item, 'cart', 3); - $this->assertEquals(4, $item->getQty(), 'Number of Qty isn\'t correct for Quote item.'); - $this->assertEquals(3, $item->getQtyToAdd(), 'Number of added qty isn\'t correct for Quote item.'); + $this->model->moveQuoteItem($item, 'cart', 3); + self::assertEquals(4, $item->getQty(), 'Number of Qty isn\'t correct for Quote item.'); + self::assertEquals(3, $item->getQtyToAdd(), 'Number of added qty isn\'t correct for Quote item.'); } /** @@ -671,14 +688,14 @@ public function testGetCustomerCartNewCart() $customerEmailFromFixture = 'customer@example.com'; /** Preconditions */ - /** @var \Magento\Backend\Model\Session\Quote $session */ - $session = Bootstrap::getObjectManager()->create(\Magento\Backend\Model\Session\Quote::class); + /** @var SessionQuote $session */ + $session = $this->objectManager->create(SessionQuote::class); $session->setCustomerId($customerIdFromFixture); /** SUT execution */ - $customerQuote = $this->_model->getCustomerCart(); - $this->assertNotEmpty($customerQuote->getId(), 'Quote ID is invalid.'); - $this->assertEquals( + $customerQuote = $this->model->getCustomerCart(); + self::assertNotEmpty($customerQuote->getId(), 'Quote ID is invalid.'); + self::assertEquals( $customerEmailFromFixture, $customerQuote->getCustomerEmail(), 'Customer data is preserved incorrectly in a newly quote.' @@ -697,7 +714,7 @@ public function testGetCustomerCartNewCart() * @param string $paymentMethod * @param int|null $customerIdFromFixture */ - protected function _preparePreconditionsForCreateOrder( + private function preparePreconditionsForCreateOrder( $productIdFromFixture, $customerEmail, $shippingMethod, @@ -709,18 +726,18 @@ protected function _preparePreconditionsForCreateOrder( ) { /** Disable product options */ /** @var \Magento\Catalog\Model\Product $product */ - $product = Bootstrap::getObjectManager()->create(\Magento\Catalog\Model\Product::class); + $product = $this->objectManager->create(\Magento\Catalog\Model\Product::class); $product->load($productIdFromFixture)->setHasOptions(false)->save(); /** Set current customer */ - /** @var \Magento\Backend\Model\Session\Quote $session */ - $session = Bootstrap::getObjectManager()->get(\Magento\Backend\Model\Session\Quote::class); + /** @var SessionQuote $session */ + $session = $this->objectManager->get(SessionQuote::class); if ($customerIdFromFixture !== null) { $session->setCustomerId($customerIdFromFixture); /** Unset fake IDs for default billing and shipping customer addresses */ - /** @var \Magento\Customer\Model\Customer $customer */ - $customer = Bootstrap::getObjectManager()->create(\Magento\Customer\Model\Customer::class); + /** @var Customer $customer */ + $customer = $this->objectManager->create(Customer::class); $customer->load($customerIdFromFixture)->setDefaultBilling(null)->setDefaultShipping(null)->save(); } else { /** @@ -731,48 +748,48 @@ protected function _preparePreconditionsForCreateOrder( } /** Emulate availability of shipping method (all are disabled by default) */ - /** @var $rate \Magento\Quote\Model\Quote\Address\Rate */ - $rate = Bootstrap::getObjectManager()->create(\Magento\Quote\Model\Quote\Address\Rate::class); + /** @var $rate Quote\Address\Rate */ + $rate = $this->objectManager->create(Quote\Address\Rate::class); $rate->setCode($shippingMethod); - $this->_model->getQuote()->getShippingAddress()->addShippingRate($rate); + $this->model->getQuote()->getShippingAddress()->addShippingRate($rate); - $this->_model->setShippingAsBilling($shippingAddressAsBilling); - $this->_model->addProduct($productIdFromFixture, ['qty' => 1]); - $this->_model->setPaymentData($paymentData); - $this->_model->setIsValidate(true)->importPostData($orderData); + $this->model->setShippingAsBilling($shippingAddressAsBilling); + $this->model->addProduct($productIdFromFixture, ['qty' => 1]); + $this->model->setPaymentData($paymentData); + $this->model->setIsValidate(true)->importPostData($orderData); /** Check preconditions */ - $this->assertEquals( + self::assertEquals( 0, - $this->_messageManager->getMessages()->getCount(), + $this->messageManager->getMessages()->getCount(), "Precondition failed: Errors occurred before SUT execution." ); /** Selectively check quote data */ - $createOrderData = $this->_model->getData(); - $this->assertEquals( + $createOrderData = $this->model->getData(); + self::assertEquals( $shippingMethod, $createOrderData['shipping_method'], 'Precondition failed: Shipping method specified in create order model is invalid' ); - $this->assertEquals( + self::assertEquals( 'FirstName', $createOrderData['billing_address']['firstname'], 'Precondition failed: Address data is invalid in create order model' ); - $this->assertEquals( + self::assertEquals( 'Simple Product', - $this->_model->getQuote()->getItemByProduct($product)->getData('name'), + $this->model->getQuote()->getItemByProduct($product)->getData('name'), 'Precondition failed: Quote items data is invalid in create order model' ); - $this->assertEquals( + self::assertEquals( $customerEmail, - $this->_model->getQuote()->getCustomer()->getEmail(), + $this->model->getQuote()->getCustomer()->getEmail(), 'Precondition failed: Customer data is invalid in create order model' ); - $this->assertEquals( + self::assertEquals( $paymentMethod, - $this->_model->getQuote()->getPayment()->getData('method'), + $this->model->getQuote()->getPayment()->getData('method'), 'Precondition failed: Payment method data is invalid in create order model' ); } @@ -780,26 +797,26 @@ protected function _preparePreconditionsForCreateOrder( /** * Ensure that order is created correctly via createOrder(). * - * @param \Magento\Sales\Model\Order $order + * @param Order $order * @param string $shippingMethod */ - protected function _verifyCreatedOrder($order, $shippingMethod) + private function verifyCreatedOrder($order, $shippingMethod) { /** Selectively check order data */ $orderData = $order->getData(); - $this->assertNotEmpty($orderData['increment_id'], 'Order increment ID is empty.'); - $this->assertEquals($this->_model->getQuote()->getId(), $orderData['quote_id'], 'Quote ID is invalid.'); - $this->assertEquals( - $this->_model->getQuote()->getCustomer()->getEmail(), + self::assertNotEmpty($orderData['increment_id'], 'Order increment ID is empty.'); + self::assertEquals($this->model->getQuote()->getId(), $orderData['quote_id'], 'Quote ID is invalid.'); + self::assertEquals( + $this->model->getQuote()->getCustomer()->getEmail(), $orderData['customer_email'], 'Customer email is invalid.' ); - $this->assertEquals( - $this->_model->getQuote()->getCustomer()->getFirstname(), + self::assertEquals( + $this->model->getQuote()->getCustomer()->getFirstname(), $orderData['customer_firstname'], 'Customer first name is invalid.' ); - $this->assertEquals($shippingMethod, $orderData['shipping_method'], 'Shipping method is invalid.'); + self::assertEquals($shippingMethod, $orderData['shipping_method'], 'Shipping method is invalid.'); } /** @@ -807,7 +824,7 @@ protected function _verifyCreatedOrder($order, $shippingMethod) * * @return array */ - protected function _getValidAddressData() + private function getValidAddressData() { return [ 'prefix' => 'prefix', @@ -829,48 +846,4 @@ protected function _getValidAddressData() 'vat_id' => '' ]; } - - /** - * @param int $id - * @return \Magento\Customer\Api\Data\CustomerInterface - */ - private function getCustomerById($id) - { - return $this->getCustomerRepository()->getById($id); - } - - /** - * @return \Magento\Customer\Api\CustomerRepositoryInterface - */ - private function getCustomerRepository() - { - return Bootstrap::getObjectManager()->create(\Magento\Customer\Api\CustomerRepositoryInterface::class); - } - - /** - * @param int $id - * @return \Magento\Customer\Api\Data\AddressInterface - */ - private function getAddressById($id) - { - return $this->getAddressRepository()->getById($id); - } - - /** - * @return \Magento\Customer\Api\AddressRepositoryInterface - */ - private function getAddressRepository() - { - /** @var \Magento\Customer\Api\AddressRepositoryInterface $addressRepository */ - return Bootstrap::getObjectManager()->create(\Magento\Customer\Api\AddressRepositoryInterface::class); - } - - /** - * @return \Magento\Customer\Model\CustomerRegistry - */ - private function getCustomerRegistry() - { - /** @var \Magento\Customer\Model\CustomerRegistry $addressRepository */ - return Bootstrap::getObjectManager()->get(\Magento\Customer\Model\CustomerRegistry::class); - } } From bd9054a4891bf9e78fdeac54e3136e28df4758a0 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Mon, 20 Nov 2017 11:00:20 +0200 Subject: [PATCH 266/653] magento/magento2#11691: Wrong return type for getAttributeText($attributeCode) --- app/code/Magento/Catalog/Model/Product.php | 2 +- .../Catalog/Model/ProductGettersTest.php | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Model/Product.php b/app/code/Magento/Catalog/Model/Product.php index cf1392a7e9e8c..cb5669a4bb42e 100644 --- a/app/code/Magento/Catalog/Model/Product.php +++ b/app/code/Magento/Catalog/Model/Product.php @@ -1712,7 +1712,7 @@ public function isInStock() * Get attribute text by its code * * @param string $attributeCode Code of the attribute - * @return string + * @return string|array|null */ public function getAttributeText($attributeCode) { diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductGettersTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductGettersTest.php index 74f640a021284..1ed0057ca2486 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductGettersTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductGettersTest.php @@ -5,6 +5,7 @@ */ namespace Magento\Catalog\Model; +use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Framework\App\Filesystem\DirectoryList; /** @@ -25,11 +26,19 @@ class ProductGettersTest extends \PHPUnit\Framework\TestCase */ protected $_model; + /** + * @var ProductRepositoryInterface + */ + private $productRepository; + protected function setUp() { $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( \Magento\Catalog\Model\Product::class ); + $this->productRepository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + ProductRepositoryInterface::class + ); } public function testGetResourceCollection() @@ -198,6 +207,24 @@ public function testGetAttributeText() $this->assertEquals('Enabled', $this->_model->getAttributeText('status')); } + /** + * @magentoDataFixture Magento/Catalog/_files/products_with_multiselect_attribute.php + */ + public function testGetAttributeTextArray() + { + $product = $this->productRepository->get('simple_ms_2'); + $product->getAttributeText('multiselect_attribute'); + $expected = [ + 'Option 2', + 'Option 3', + 'Option 4 "!@#$%^&*' + ]; + self::assertEquals( + $expected, + $product->getAttributeText('multiselect_attribute') + ); + } + public function testGetCustomDesignDate() { $this->assertEquals(['from' => null, 'to' => null], $this->_model->getCustomDesignDate()); From 758373068064b519ce9be3103ede232fc7b2e056 Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov <slopukhov@magento.com> Date: Mon, 20 Nov 2017 11:31:52 +0200 Subject: [PATCH 267/653] MAGETWO-83328: Run Nightly PAT on 2.2 --- setup/performance-toolkit/benchmark.jmx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx index d228bf2cfef35..655b19760b958 100644 --- a/setup/performance-toolkit/benchmark.jmx +++ b/setup/performance-toolkit/benchmark.jmx @@ -8006,14 +8006,15 @@ try { //Number of products for one thread productClusterLength = productCount / threadsNumber; - //Index of the current product from the cluster - i = productClusterLength * currentThreadNum + iterator; if (iterator >= productClusterLength) { vars.put("threadIterator_" + currentThreadNum.toString(), "0"); iterator = 0; } + //Index of the current product from the cluster + i = productClusterLength * currentThreadNum + iterator; + //ids of simple and configurable products to edit vars.put("simple_product_id", props.get("simple_products_list").get(i).get("id")); vars.put("configurable_product_id", props.get("configurable_products_list").get(i).get("id")); From 87537c54d845a965b5f9da7124dedd71d8999ea2 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko <vgoncharenko@magento.com> Date: Fri, 17 Nov 2017 12:52:10 +0200 Subject: [PATCH 268/653] MAGETWO-82420: Fix UpgradeSystemTest - changes after CR --- dev/tests/functional/etc/events.xml | 33 +++++++++++++++ .../Magento/Setup/Test/Block/Readiness.php | 8 ++++ .../Setup/Test/Block/SelectVersion.php | 31 ++++++++++++-- .../SelectVersion/OtherComponentsGrid.php | 41 +++++++++++++++++++ .../OtherComponentsGrid/Item.php | 27 ++++++++++++ .../AssertSuccessfulReadinessCheck.php | 13 +++--- .../AssertVersionAndEditionCheck.php | 19 ++++++--- .../Setup/Test/TestCase/UpgradeSystemTest.php | 18 ++++---- .../Setup/Test/TestCase/UpgradeSystemTest.xml | 1 + 9 files changed, 165 insertions(+), 26 deletions(-) create mode 100644 dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion/OtherComponentsGrid.php create mode 100644 dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion/OtherComponentsGrid/Item.php diff --git a/dev/tests/functional/etc/events.xml b/dev/tests/functional/etc/events.xml index 5be0f8e7d4e9c..7d38326ad16bb 100644 --- a/dev/tests/functional/etc/events.xml +++ b/dev/tests/functional/etc/events.xml @@ -43,4 +43,37 @@ <tag name="webapi_failed" /> </observer> </preset> + <preset name="debug" extends="base"> + <observer class="Magento\Mtf\System\Observer\Screenshot"> + <tag name="exception"/> + <tag name="failure"/> + <tag name="click_after"/> + <tag name="accept_alert_after"/> + <tag name="dismiss_alert_after"/> + <tag name="open_after"/> + <tag name="forward"/> + <tag name="back"/> + </observer> + <observer class="Magento\Mtf\System\Observer\SourceCode"> + <tag name="exception"/> + <tag name="failure"/> + <tag name="click_after"/> + <tag name="accept_alert_after"/> + <tag name="dismiss_alert_after"/> + <tag name="open_after"/> + <tag name="forward"/> + <tag name="back"/> + </observer> + <observer class="Magento\Mtf\System\Observer\Log"> + <tag name="exception"/> + <tag name="failure"/> + <tag name="click_before"/> + <tag name="click_after"/> + <tag name="accept_alert_after"/> + <tag name="dismiss_alert_after"/> + <tag name="open_after"/> + <tag name="forward"/> + <tag name="back"/> + </observer> + </preset> </config> diff --git a/dev/tests/functional/tests/app/Magento/Setup/Test/Block/Readiness.php b/dev/tests/functional/tests/app/Magento/Setup/Test/Block/Readiness.php index 453a7b5940e1d..d48c5f474f26a 100644 --- a/dev/tests/functional/tests/app/Magento/Setup/Test/Block/Readiness.php +++ b/dev/tests/functional/tests/app/Magento/Setup/Test/Block/Readiness.php @@ -192,6 +192,14 @@ public function getDependencyCheck() return $this->_rootElement->find($this->dependencyCheck, Locator::SELECTOR_CSS)->getText(); } + /** + * @return bool + */ + public function isPhpVersionCheckVisible() + { + return $this->_rootElement->find($this->phpVersionCheck)->isVisible(); + } + /** * Get PHP Version check result. * diff --git a/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion.php b/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion.php index ea6355d574549..586df2f90d9f7 100644 --- a/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion.php +++ b/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion.php @@ -10,6 +10,7 @@ use Magento\Mtf\Client\Element\SimpleElement; use Magento\Mtf\Client\Locator; use Magento\Mtf\Fixture\FixtureInterface; +use Magento\Setup\Test\Block\SelectVersion\OtherComponentsGrid; /** * Select version block. @@ -37,6 +38,13 @@ class SelectVersion extends Form */ private $showAllVersions = '#showUnstable'; + /** + * CSS selector for Other Components Grid Block. + * + * @var string + */ + private $otherComponentsGrid = '.admin__data-grid-wrap[ng-show="componentsProcessed"]'; + /** * Click on 'Next' button. * @@ -76,13 +84,28 @@ private function chooseShowAllVersions() } /** - * Choose 'yes' for upgrade option called 'Other components' + * Choose 'yes' for upgrade option called 'Other components'. * + * @param array $packages * @return void */ - public function chooseUpgradeOtherComponents() + public function chooseUpgradeOtherComponents(array $packages) + { + $this->_rootElement->find("[for=yesUpdateComponents]")->click(); + $this->waitForElementNotVisible("[ng-show=\"!componentsProcessed\""); + $this->getOtherComponentsGrid()->setVersions($packages); + } + + /** + * Get grid block for other components. + * + * @return OtherComponentsGrid + */ + private function getOtherComponentsGrid() { - $this->_rootElement->find("[for=yesUpdateComponents]", Locator::SELECTOR_CSS)->click(); - $this->waitForElementVisible("[ng-show='componentsProcessed']"); + return $this->blockFactory->create( + OtherComponentsGrid::class, + ['element' => $this->_rootElement->find($this->otherComponentsGrid)] + ); } } diff --git a/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion/OtherComponentsGrid.php b/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion/OtherComponentsGrid.php new file mode 100644 index 0000000000000..5ed619696f17d --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion/OtherComponentsGrid.php @@ -0,0 +1,41 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Setup\Test\Block\SelectVersion; + +use Magento\Mtf\Block\Block; +use Magento\Mtf\Client\Locator; +use Magento\Setup\Test\Block\SelectVersion\OtherComponentsGrid\Item; + +class OtherComponentsGrid extends Block +{ + /** + * @var string + */ + private $itemComponent = '//tr[contains(@ng-repeat,"component") and //td[contains(.,"%s")]]'; + + /** + * @param $packages + */ + public function setVersions(array $packages) + { + foreach ($packages as $package) { + $this->getComponentRow($package['name'])->setVersion($package['version']); + } + } + + /** + * @param string $componentName + * @return Item + */ + private function getComponentRow($componentName) + { + $selector = sprintf($this->itemComponent, $componentName); + return $this->blockFactory->create( + Item::class, + ['element' => $this->_rootElement->find($selector, Locator::SELECTOR_XPATH)] + ); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion/OtherComponentsGrid/Item.php b/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion/OtherComponentsGrid/Item.php new file mode 100644 index 0000000000000..090cab828b295 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion/OtherComponentsGrid/Item.php @@ -0,0 +1,27 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Setup\Test\Block\SelectVersion\OtherComponentsGrid; + +use Magento\Mtf\Block\Block; +use Magento\Mtf\Client\Locator; + +class Item extends Block +{ + /** + * @var string + */ + private $version = '[ng-change*="setComponentVersion"]'; + + /** + * Set version for particular component. + * + * @param string $version + */ + public function setVersion($version) + { + $this->_rootElement->find($this->version, Locator::SELECTOR_CSS, 'select')->setValue($version); + } +} diff --git a/dev/tests/functional/tests/app/Magento/Setup/Test/Constraint/AssertSuccessfulReadinessCheck.php b/dev/tests/functional/tests/app/Magento/Setup/Test/Constraint/AssertSuccessfulReadinessCheck.php index 5425af367ca3b..329320e93c797 100644 --- a/dev/tests/functional/tests/app/Magento/Setup/Test/Constraint/AssertSuccessfulReadinessCheck.php +++ b/dev/tests/functional/tests/app/Magento/Setup/Test/Constraint/AssertSuccessfulReadinessCheck.php @@ -67,11 +67,14 @@ public function processAssert(SetupWizard $setupWizard) $setupWizard->getReadiness()->getDependencyCheck(), 'Dependency check is incorrect.' ); - \PHPUnit_Framework_Assert::assertContains( - self::PHP_VERSION_MESSAGE, - $setupWizard->getReadiness()->getPhpVersionCheck(), - 'PHP version is incorrect.' - ); + if ($setupWizard->getReadiness()->isPhpVersionCheckVisible()) { + \PHPUnit_Framework_Assert::assertContains( + self::PHP_VERSION_MESSAGE, + $setupWizard->getReadiness()->getPhpVersionCheck(), + 'PHP version is incorrect.' + ); + } + \PHPUnit_Framework_Assert::assertContains( self::PHP_SETTING_REGEXP, $setupWizard->getReadiness()->getSettingsCheck(), diff --git a/dev/tests/functional/tests/app/Magento/Setup/Test/Constraint/AssertVersionAndEditionCheck.php b/dev/tests/functional/tests/app/Magento/Setup/Test/Constraint/AssertVersionAndEditionCheck.php index 639bcb2c13e0f..6175f9f771ef6 100644 --- a/dev/tests/functional/tests/app/Magento/Setup/Test/Constraint/AssertVersionAndEditionCheck.php +++ b/dev/tests/functional/tests/app/Magento/Setup/Test/Constraint/AssertVersionAndEditionCheck.php @@ -18,17 +18,24 @@ class AssertVersionAndEditionCheck extends AbstractConstraint * Assert that package and version is correct * * @param SetupWizard $setupWizard - * @param string $package - * @param string $version + * @param array $upgrade * @return void */ - public function processAssert(SetupWizard $setupWizard, $package, $version) + public function processAssert(SetupWizard $setupWizard, array $upgrade) { - $message = "We're ready to upgrade $package to $version"; + $message = "We're ready to upgrade {$upgrade['package']} to {$upgrade['version']}."; + if (isset($upgrade['otherComponentsList'])) { + foreach ($upgrade['otherComponentsList'] as $item) { + $message .= "\nWe're ready to upgrade {$item['name']} to {$item['version']}."; + } + } + $actualMessage = $setupWizard->getSystemUpgrade()->getUpgradeMessage(); \PHPUnit_Framework_Assert::assertContains( $message, - $setupWizard->getSystemUpgrade()->getUpgradeMessage(), - 'Updater application check is incorrect.' + $actualMessage, + "Updater application check is incorrect: \n" + . "Expected: '$message' \n" + . "Actual: '$actualMessage'" ); } diff --git a/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.php b/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.php index 53c36e0a1e1b0..d2e036f398cc5 100644 --- a/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.php +++ b/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.php @@ -31,23 +31,18 @@ class UpgradeSystemTest extends Injectable protected $adminDashboard; /** - * @var \Magento\Mtf\Util\Iterator\ApplicationState - */ - private $applicationStateIterator; - - /** + * Injection data. + * * @param Dashboard $adminDashboard * @param SetupWizard $setupWizard - * @param \Magento\Mtf\Util\Iterator\ApplicationState $applicationStateIterator + * @return void */ public function __inject( Dashboard $adminDashboard, - SetupWizard $setupWizard, - \Magento\Mtf\Util\Iterator\ApplicationState $applicationStateIterator + SetupWizard $setupWizard ) { $this->adminDashboard = $adminDashboard; $this->setupWizard = $setupWizard; - $this->applicationStateIterator = $applicationStateIterator; } /** @@ -114,7 +109,7 @@ public function test( $this->setupWizard->getSetupHome()->clickSystemUpgrade(); $this->setupWizard->getSelectVersion()->fill($upgradeFixture); if ($upgrade['otherComponents'] === 'Yes') { - $this->setupWizard->getSelectVersion()->chooseUpgradeOtherComponents(); + $this->setupWizard->getSelectVersion()->chooseUpgradeOtherComponents($upgrade['otherComponentsList']); } $this->setupWizard->getSelectVersion()->clickNext(); @@ -128,7 +123,8 @@ public function test( $this->setupWizard->getCreateBackup()->clickNext(); // Check info and press 'Upgrade' button - $assertVersionAndEdition->processAssert($this->setupWizard, $upgrade['package'], $version); + $upgrade['version'] = $version; + $assertVersionAndEdition->processAssert($this->setupWizard, $upgrade); $this->setupWizard->getSystemUpgrade()->clickSystemUpgrade(); $assertSuccessMessage->processAssert($this->setupWizard, $upgrade['package']); diff --git a/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml b/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml index b092fe1812201..17f8cae1ae6ac 100644 --- a/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml +++ b/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml @@ -18,6 +18,7 @@ <data name="upgrade/optionsMedia" xsi:type="string">No</data> <data name="upgrade/optionsDb" xsi:type="string">No</data> <data name="upgrade/otherComponents" xsi:type="string">{otherComponents}</data> + <data name="upgrade/otherComponentsList" xsi:type="array" /> </variation> </testCase> </config> From 9c88e661f5fd0c9422f658b8079b68a6418998c4 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko <vgoncharenko@magento.com> Date: Mon, 20 Nov 2017 13:14:59 +0200 Subject: [PATCH 269/653] MAGETWO-82420: Fix UpgradeSystemTest - changes after CR --- .../Test/Block/SelectVersion/OtherComponentsGrid/Item.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion/OtherComponentsGrid/Item.php b/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion/OtherComponentsGrid/Item.php index 090cab828b295..2d09e55843802 100644 --- a/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion/OtherComponentsGrid/Item.php +++ b/dev/tests/functional/tests/app/Magento/Setup/Test/Block/SelectVersion/OtherComponentsGrid/Item.php @@ -8,9 +8,14 @@ use Magento\Mtf\Block\Block; use Magento\Mtf\Client\Locator; +/** + * Block for each component. + */ class Item extends Block { /** + * CSS selector for version element. + * * @var string */ private $version = '[ng-change*="setComponentVersion"]'; From 6730e6927f30b3e75d3b5eb23be2588f704eba51 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Mon, 20 Nov 2017 13:45:28 +0200 Subject: [PATCH 270/653] 11882: It's not possible to enable "log to file" (debugging) in production mode. Psr logger debug method does not work by the default in developer mode. --- app/code/Magento/Backend/etc/adminhtml/di.xml | 16 ++----- .../ConcealInProductionConfigList.php | 45 +++++++++++++++++-- .../ConcealInProductionConfigListTest.php | 10 ++++- 3 files changed, 53 insertions(+), 18 deletions(-) diff --git a/app/code/Magento/Backend/etc/adminhtml/di.xml b/app/code/Magento/Backend/etc/adminhtml/di.xml index f3d2e9accc983..8b68cca4782c9 100644 --- a/app/code/Magento/Backend/etc/adminhtml/di.xml +++ b/app/code/Magento/Backend/etc/adminhtml/di.xml @@ -142,20 +142,12 @@ <type name="Magento\Config\Model\Config\Structure\ConcealInProductionConfigList"> <arguments> <argument name="configs" xsi:type="array"> - <item name="dev/restrict" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> - <item name="dev/front_end_development_workflow" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> - <item name="dev/template" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> - <item name="dev/translate_inline" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> - <item name="dev/js" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> - <item name="dev/css" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> - <item name="dev/image" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> - <item name="dev/static" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> - <item name="dev/grid" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> - <item name="dev/debug/template_hints_storefront" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> - <item name="dev/debug/template_hints_admin" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> - <item name="dev/debug/template_hints_blocks" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> + <item name="dev" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::HIDDEN</item> <item name="general/locale/code" xsi:type="const">Magento\Config\Model\Config\Structure\ElementVisibilityInterface::DISABLED</item> </argument> + <argument name="exemptions" xsi:type="array"> + <item name="dev/debug/debug_logging" xsi:type="string"/> + </argument> </arguments> </type> <type name="Magento\Framework\View\Layout\Generator\Block"> diff --git a/app/code/Magento/Config/Model/Config/Structure/ConcealInProductionConfigList.php b/app/code/Magento/Config/Model/Config/Structure/ConcealInProductionConfigList.php index 115a372e6150a..c5ee2158115bf 100644 --- a/app/code/Magento/Config/Model/Config/Structure/ConcealInProductionConfigList.php +++ b/app/code/Magento/Config/Model/Config/Structure/ConcealInProductionConfigList.php @@ -42,14 +42,36 @@ class ConcealInProductionConfigList implements ElementVisibilityInterface */ private $state; + /** + * + * The list of form element paths which ignore visibility status. + * + * E.g. + * + * ```php + * [ + * 'general/country/default' => '', + * ]; + * ``` + * + * It means that: + * - field 'default' in group Country Options (in section General) will be showed, even if all group(section) + * will be hidden. + * + * @var array + */ + private $exemptions = []; + /** * @param State $state The object that has information about the state of the system * @param array $configs The list of form element paths with concrete visibility status. + * @param array $exemptions The list of form element paths which ignore visibility status. */ - public function __construct(State $state, array $configs = []) + public function __construct(State $state, array $configs = [], array $exemptions = []) { $this->state = $state; $this->configs = $configs; + $this->exemptions = $exemptions; } /** @@ -58,10 +80,25 @@ public function __construct(State $state, array $configs = []) */ public function isHidden($path) { + $result = false; $path = $this->normalizePath($path); - return $this->state->getMode() === State::MODE_PRODUCTION - && !empty($this->configs[$path]) - && $this->configs[$path] === static::HIDDEN; + if ($this->state->getMode() === State::MODE_PRODUCTION + && preg_match('/.+?\/.+?\/.+?/', $path)) { + $exemptions = array_keys($this->exemptions); + foreach ($this->configs as $configPath => $value) { + if ($this->configs[$configPath] === static::HIDDEN && strpos($path, $configPath) !==false) { + $result = true; + foreach ($exemptions as $exemption) { + if (strpos($path, $exemption) !== false) { + $result = false; + } + } + } + } + + } + + return $result; } /** diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/ConcealInProductionConfigListTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/ConcealInProductionConfigListTest.php index 5cad923264e00..fa78d5dde652c 100644 --- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/ConcealInProductionConfigListTest.php +++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/ConcealInProductionConfigListTest.php @@ -33,9 +33,13 @@ protected function setUp() 'third/path' => 'no', 'third/path/field' => ConcealInProductionConfigList::DISABLED, 'first/path/field' => 'no', + 'fourth' => ConcealInProductionConfigList::HIDDEN, + ]; + $exemptions = [ + 'fourth/path/value' => '', ]; - $this->model = new ConcealInProductionConfigList($this->stateMock, $configs); + $this->model = new ConcealInProductionConfigList($this->stateMock, $configs, $exemptions); } /** @@ -96,8 +100,10 @@ public function hiddenDataProvider() ['first/path', State::MODE_PRODUCTION, false], ['first/path', State::MODE_DEFAULT, false], ['some/path', State::MODE_PRODUCTION, false], - ['second/path', State::MODE_PRODUCTION, true], + ['second/path/field', State::MODE_PRODUCTION, true], ['second/path', State::MODE_DEVELOPER, false], + ['fourth/path/value', State::MODE_PRODUCTION, false], + ['fourth/path/test', State::MODE_PRODUCTION, true], ]; } } From f3ed1221f18c3890b3b58e3fb4349bbf6669a192 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Mon, 20 Nov 2017 14:44:45 +0200 Subject: [PATCH 271/653] 11882: It's not possible to enable "log to file" (debugging) in production mode. Psr logger debug method does not work by the default in developer mode. --- .../Structure/ConcealInProductionConfigList.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/Config/Model/Config/Structure/ConcealInProductionConfigList.php b/app/code/Magento/Config/Model/Config/Structure/ConcealInProductionConfigList.php index c5ee2158115bf..a4049046e29ff 100644 --- a/app/code/Magento/Config/Model/Config/Structure/ConcealInProductionConfigList.php +++ b/app/code/Magento/Config/Model/Config/Structure/ConcealInProductionConfigList.php @@ -83,19 +83,15 @@ public function isHidden($path) $result = false; $path = $this->normalizePath($path); if ($this->state->getMode() === State::MODE_PRODUCTION - && preg_match('/.+?\/.+?\/.+?/', $path)) { + && preg_match('/(?<group>(?<section>.*?)\/.*?)\/.*?/', $path, $match)) { + $group = $match['group']; + $section = $match['section']; $exemptions = array_keys($this->exemptions); foreach ($this->configs as $configPath => $value) { if ($this->configs[$configPath] === static::HIDDEN && strpos($path, $configPath) !==false) { - $result = true; - foreach ($exemptions as $exemption) { - if (strpos($path, $exemption) !== false) { - $result = false; - } - } + $result = empty(array_intersect([$section, $group, $path], $exemptions)); } } - } return $result; From 48162769a3d140fa90b7951dd4d974f03ba40a26 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko <vgoncharenko@magento.com> Date: Mon, 20 Nov 2017 15:50:36 +0200 Subject: [PATCH 272/653] MAGETWO-83834: Update static test for check composer versions - changes after CR --- .../Magento/Test/Integrity/ComposerTest.php | 71 +++++++++++++------ 1 file changed, 49 insertions(+), 22 deletions(-) diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php index 33b2056af0456..dfe43224e7530 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php @@ -21,6 +21,11 @@ class ComposerTest extends \PHPUnit\Framework\TestCase */ private static $root; + /** + * @var array + */ + private static $mainComposerModules; + /** * @var \stdClass */ @@ -40,6 +45,11 @@ public static function setUpBeforeClass() { self::$root = BP; self::$rootJson = json_decode(file_get_contents(self::$root . '/composer.json'), true); + $availableSections = ['require', 'require-dev', 'replace']; + self::$mainComposerModules = []; + foreach ($availableSections as $availableSection) { + self::$mainComposerModules = array_merge(self::$mainComposerModules, self::$rootJson[$availableSection]); + } self::$dependencies = []; self::$objectManager = Bootstrap::create(BP, $_SERVER)->getObjectManager(); } @@ -175,6 +185,8 @@ private function assertMagentoConventions($dir, $packageType, \StdClass $json) default: throw new \InvalidArgumentException("Unknown package type {$packageType}"); } + + $this->assertPackageVersions($json); } /** @@ -291,28 +303,11 @@ private function assertRequireInSync(\StdClass $json) // Magento Composer Installer is not needed for already existing components continue; } - if (!isset(self::$rootJson['require-dev'][$depName]) && !isset(self::$rootJson['require'][$depName]) - && !isset(self::$rootJson['replace'][$depName])) { + if (!isset(self::$mainComposerModules[$depName])) { $errors[] = "'$name' depends on '$depName'"; - } else { - if (isset(self::$rootJson['require-dev'][$depName]) - && $this->checkDiscrepancy($json, $depName, 'require-dev')) { - $errors[] = "root composer.json has dependency '" - . $depName . ":" . self::$rootJson['require-dev'][$depName] . " BUT " - . "'$name' composer.json has dependency '$depName:{$json->require->$depName}'"; - } elseif (isset(self::$rootJson['require'][$depName]) - && $this->checkDiscrepancy($json, $depName, 'require')) { - $errors[] = "root composer.json has dependency '" - . $depName . ":" . self::$rootJson['require'][$depName] . " BUT " - . "'$name' composer.json has dependency '$depName:{$json->require->$depName}'"; - } elseif (isset(self::$rootJson['replace'][$depName]) - && $this->checkDiscrepancy($json, $depName, 'replace')) { - $errors[] = "root composer.json has dependency '" - . $depName . ":" . self::$rootJson['replace'][$depName] . " BUT " - . "'$name' composer.json has dependency '$depName:{$json->require->$depName}'"; - } } } + if (!empty($errors)) { $this->fail( "The following dependencies are missing in root 'composer.json'," @@ -326,15 +321,47 @@ private function assertRequireInSync(\StdClass $json) } } + /** + * + * + * @param \StdClass $json + */ + private function assertPackageVersions(\StdClass $json) + { + $name = $json->name; + if (preg_match('/magento\/project-*/', self::$rootJson['name']) == 1) { + return; + } + if (isset($json->require)) { + $errors = []; + $errorTemplate = "root composer.json has dependency '%s:%s' BUT '%s' composer.json has dependency '%s:%s'"; + foreach (array_keys((array)$json->require) as $depName) { + if ($this->checkDiscrepancy($json, $depName)) { + $errors[] = sprintf( + $errorTemplate, + $depName, + self::$mainComposerModules[$depName], + $name, + $depName, + $json->require->$depName + ); + } + } + + if (!empty($errors)) { + $this->fail(join("\n", $errors)); + } + } + } + /** * @param $componentConfig * @param $packageName - * @param $section * @return bool */ - private function checkDiscrepancy($componentConfig, $packageName, $section) + private function checkDiscrepancy($componentConfig, $packageName) { - $rootConstraint = (new VersionParser())->parseConstraints(self::$rootJson[$section][$packageName]); + $rootConstraint = (new VersionParser())->parseConstraints(self::$mainComposerModules[$packageName]); $componentConstraint = (new VersionParser())->parseConstraints($componentConfig->require->$packageName); return !$rootConstraint->matches($componentConstraint); From 76940bd235c2423d67e100a016b49230712b9329 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Mon, 20 Nov 2017 15:52:20 +0200 Subject: [PATCH 273/653] 11882: It's not possible to enable "log to file" (debugging) in production mode. Psr logger debug method does not work by the default in developer mode. --- .../Model/Config/Structure/ConcealInProductionConfigList.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Config/Model/Config/Structure/ConcealInProductionConfigList.php b/app/code/Magento/Config/Model/Config/Structure/ConcealInProductionConfigList.php index a4049046e29ff..92bc61b3d65e5 100644 --- a/app/code/Magento/Config/Model/Config/Structure/ConcealInProductionConfigList.php +++ b/app/code/Magento/Config/Model/Config/Structure/ConcealInProductionConfigList.php @@ -88,7 +88,7 @@ public function isHidden($path) $section = $match['section']; $exemptions = array_keys($this->exemptions); foreach ($this->configs as $configPath => $value) { - if ($this->configs[$configPath] === static::HIDDEN && strpos($path, $configPath) !==false) { + if ($value === static::HIDDEN && strpos($path, $configPath) !==false) { $result = empty(array_intersect([$section, $group, $path], $exemptions)); } } From 6eef1d043b1913f6157e54f13d7d2c0b7d056d47 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler <fs@integer-net.de> Date: Mon, 20 Nov 2017 11:32:17 +0100 Subject: [PATCH 274/653] Add --no-update option to sampledata:deploy and remove commands Unit test has been refactored to be reused for new cases --- .../Command/SampleDataDeployCommand.php | 12 ++ .../Command/SampleDataRemoveCommand.php | 12 ++ .../Command/AbstractSampleDataCommandTest.php | 130 +++++++++++ .../Command/SampleDataDeployCommandTest.php | 202 ++++++++---------- .../Command/SampleDataRemoveCommandTest.php | 109 ++++++++++ 5 files changed, 347 insertions(+), 118 deletions(-) create mode 100644 app/code/Magento/SampleData/Test/Unit/Console/Command/AbstractSampleDataCommandTest.php create mode 100644 app/code/Magento/SampleData/Test/Unit/Console/Command/SampleDataRemoveCommandTest.php diff --git a/app/code/Magento/SampleData/Console/Command/SampleDataDeployCommand.php b/app/code/Magento/SampleData/Console/Command/SampleDataDeployCommand.php index 158c588d11358..88df47283133a 100644 --- a/app/code/Magento/SampleData/Console/Command/SampleDataDeployCommand.php +++ b/app/code/Magento/SampleData/Console/Command/SampleDataDeployCommand.php @@ -12,6 +12,7 @@ use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** @@ -19,6 +20,8 @@ */ class SampleDataDeployCommand extends Command { + const OPTION_NO_UPDATE = 'no-update'; + /** * @var \Magento\Framework\Filesystem */ @@ -66,6 +69,12 @@ protected function configure() { $this->setName('sampledata:deploy') ->setDescription('Deploy sample data modules'); + $this->addOption( + self::OPTION_NO_UPDATE, + null, + InputOption::VALUE_NONE, + 'Update composer.json without executing composer update' + ); parent::configure(); } @@ -80,6 +89,9 @@ protected function execute(InputInterface $input, OutputInterface $output) if (!empty($sampleDataPackages)) { $baseDir = $this->filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath(); $commonArgs = ['--working-dir' => $baseDir, '--no-progress' => 1]; + if ($input->getOption(self::OPTION_NO_UPDATE)) { + $commonArgs['--no-update'] = 1; + } $packages = []; foreach ($sampleDataPackages as $name => $version) { $packages[] = "$name:$version"; diff --git a/app/code/Magento/SampleData/Console/Command/SampleDataRemoveCommand.php b/app/code/Magento/SampleData/Console/Command/SampleDataRemoveCommand.php index 36f5c591bedc3..5e10b6c6e5930 100644 --- a/app/code/Magento/SampleData/Console/Command/SampleDataRemoveCommand.php +++ b/app/code/Magento/SampleData/Console/Command/SampleDataRemoveCommand.php @@ -8,6 +8,7 @@ use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Magento\SampleData\Model\Dependency; use Symfony\Component\Console\Input\ArrayInput; @@ -22,6 +23,8 @@ */ class SampleDataRemoveCommand extends Command { + const OPTION_NO_UPDATE = 'no-update'; + /** * @var Filesystem */ @@ -69,6 +72,12 @@ protected function configure() { $this->setName('sampledata:remove') ->setDescription('Remove all sample data packages from composer.json'); + $this->addOption( + self::OPTION_NO_UPDATE, + null, + InputOption::VALUE_NONE, + 'Update composer.json without executing composer update' + ); parent::configure(); } @@ -81,6 +90,9 @@ protected function execute(InputInterface $input, OutputInterface $output) if (!empty($sampleDataPackages)) { $baseDir = $this->filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath(); $commonArgs = ['--working-dir' => $baseDir, '--no-interaction' => 1, '--no-progress' => 1]; + if ($input->getOption(self::OPTION_NO_UPDATE)) { + $commonArgs['--no-update'] = 1; + } $packages = array_keys($sampleDataPackages); $arguments = array_merge(['command' => 'remove', 'packages' => $packages], $commonArgs); $commandInput = new ArrayInput($arguments); diff --git a/app/code/Magento/SampleData/Test/Unit/Console/Command/AbstractSampleDataCommandTest.php b/app/code/Magento/SampleData/Test/Unit/Console/Command/AbstractSampleDataCommandTest.php new file mode 100644 index 0000000000000..090bb4256f807 --- /dev/null +++ b/app/code/Magento/SampleData/Test/Unit/Console/Command/AbstractSampleDataCommandTest.php @@ -0,0 +1,130 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\SampleData\Test\Unit\Console\Command; + +use Composer\Console\Application; +use Composer\Console\ApplicationFactory; +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\Directory\ReadInterface; +use Magento\Framework\Filesystem\Directory\WriteInterface; +use Magento\SampleData\Model\Dependency; +use PHPUnit\Framework\TestCase; +use Symfony\Component\Console\Input\ArrayInput; +use Symfony\Component\Console\Input\ArrayInputFactory; + +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +abstract class AbstractSampleDataCommandTest extends TestCase +{ + /** + * @var ReadInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $directoryReadMock; + + /** + * @var WriteInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $directoryWriteMock; + + /** + * @var Filesystem|\PHPUnit_Framework_MockObject_MockObject + */ + protected $filesystemMock; + + /** + * @var Dependency|\PHPUnit_Framework_MockObject_MockObject + */ + protected $sampleDataDependencyMock; + + /** + * @var ArrayInputFactory|\PHPUnit_Framework_MockObject_MockObject + */ + protected $arrayInputFactoryMock; + + /** + * @var Application|\PHPUnit_Framework_MockObject_MockObject + */ + protected $applicationMock; + + /** + * @var ApplicationFactory|\PHPUnit_Framework_MockObject_MockObject + */ + protected $applicationFactoryMock; + + /** + * @return void + */ + protected function setUp() + { + $this->directoryReadMock = $this->createMock(ReadInterface::class); + $this->directoryWriteMock = $this->createMock(WriteInterface::class); + $this->filesystemMock = $this->createMock(Filesystem::class); + $this->sampleDataDependencyMock = $this->createMock(Dependency::class); + $this->arrayInputFactoryMock = $this->createMock(ArrayInputFactory::class); + $this->applicationMock = $this->createMock(Application::class); + $this->applicationFactoryMock = $this->createPartialMock(ApplicationFactory::class, ['create']); + } + + /** + * @param array $sampleDataPackages Array in form [package_name => version_constraint] + * @param string $pathToComposerJson Fake path to composer.json + * @param int $appRunResult Composer exit code + * @param array $additionalComposerArgs Additional arguments that composer expects + */ + protected function setupMocks( + $sampleDataPackages, + $pathToComposerJson, + $appRunResult, + $additionalComposerArgs = [] + ) { + $this->directoryReadMock->expects($this->any())->method('getAbsolutePath')->willReturn($pathToComposerJson); + $this->filesystemMock->expects($this->any())->method('getDirectoryRead')->with(DirectoryList::ROOT)->willReturn( + $this->directoryReadMock + ); + $this->sampleDataDependencyMock->expects($this->any())->method('getSampleDataPackages')->willReturn( + $sampleDataPackages + ); + $this->arrayInputFactoryMock->expects($this->never())->method('create'); + + $this->applicationMock->expects($this->any()) + ->method('run') + ->with( + new ArrayInput( + array_merge( + $this->expectedComposerArguments( + $sampleDataPackages, + $pathToComposerJson + ), + $additionalComposerArgs + ) + ), + $this->anything() + ) + ->willReturn($appRunResult); + + if (($appRunResult !== 0) && !empty($sampleDataPackages)) { + $this->applicationMock->expects($this->once())->method('resetComposer')->willReturnSelf(); + } + + $this->applicationFactoryMock->expects($this->any()) + ->method('create') + ->willReturn($this->applicationMock); + } + + /** + * Expected arguments for composer based on sample data packages and composer.json path + * + * @param array $sampleDataPackages + * @param string $pathToComposerJson + * @return array + */ + abstract protected function expectedComposerArguments( + array $sampleDataPackages, + string $pathToComposerJson + ) : array; +} diff --git a/app/code/Magento/SampleData/Test/Unit/Console/Command/SampleDataDeployCommandTest.php b/app/code/Magento/SampleData/Test/Unit/Console/Command/SampleDataDeployCommandTest.php index 464a6c9ccd832..450b2d8798f52 100644 --- a/app/code/Magento/SampleData/Test/Unit/Console/Command/SampleDataDeployCommandTest.php +++ b/app/code/Magento/SampleData/Test/Unit/Console/Command/SampleDataDeployCommandTest.php @@ -9,66 +9,26 @@ use Magento\SampleData\Console\Command\SampleDataDeployCommand; use Magento\Setup\Model\PackagesAuth; use Symfony\Component\Console\Tester\CommandTester; -use Magento\Framework\Filesystem; -use Magento\Framework\Filesystem\Directory\ReadInterface; -use Magento\Framework\Filesystem\Directory\WriteInterface; -use Magento\SampleData\Model\Dependency; -use Symfony\Component\Console\Input\ArrayInputFactory; -use Composer\Console\ApplicationFactory; -use Composer\Console\Application; -/** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - */ -class SampleDataDeployCommandTest extends \PHPUnit\Framework\TestCase +class SampleDataDeployCommandTest extends AbstractSampleDataCommandTest { /** - * @var ReadInterface|\PHPUnit_Framework_MockObject_MockObject - */ - private $directoryReadMock; - - /** - * @var WriteInterface|\PHPUnit_Framework_MockObject_MockObject - */ - private $directoryWriteMock; - - /** - * @var Filesystem|\PHPUnit_Framework_MockObject_MockObject - */ - private $filesystemMock; - - /** - * @var Dependency|\PHPUnit_Framework_MockObject_MockObject - */ - private $sampleDataDependencyMock; - - /** - * @var ArrayInputFactory|\PHPUnit_Framework_MockObject_MockObject - */ - private $arrayInputFactoryMock; - - /** - * @var Application|\PHPUnit_Framework_MockObject_MockObject - */ - private $applicationMock; - - /** - * @var ApplicationFactory|\PHPUnit_Framework_MockObject_MockObject + * @param bool $authExist True to test with existing auth.json, false without */ - private $applicationFactoryMock; - - /** - * @return void - */ - protected function setUp() + protected function setupMocksForAuthFile($authExist) { - $this->directoryReadMock = $this->createMock(ReadInterface::class); - $this->directoryWriteMock = $this->createMock(WriteInterface::class); - $this->filesystemMock = $this->createMock(Filesystem::class); - $this->sampleDataDependencyMock = $this->createMock(Dependency::class); - $this->arrayInputFactoryMock = $this->createMock(ArrayInputFactory::class); - $this->applicationMock = $this->createMock(Application::class); - $this->applicationFactoryMock = $this->createPartialMock(ApplicationFactory::class, ['create']); + $this->directoryWriteMock->expects($this->once()) + ->method('isExist') + ->with(PackagesAuth::PATH_TO_AUTH_FILE) + ->willReturn($authExist); + $this->directoryWriteMock->expects($authExist ? $this->never() : $this->once())->method('writeFile')->with( + PackagesAuth::PATH_TO_AUTH_FILE, + '{}' + ); + $this->filesystemMock->expects($this->once()) + ->method('getDirectoryWrite') + ->with(DirectoryList::COMPOSER_HOME) + ->willReturn($this->directoryWriteMock); } /** @@ -82,68 +42,36 @@ protected function setUp() */ public function testExecute(array $sampleDataPackages, $appRunResult, $expectedMsg, $authExist) { - $pathToComposerJson = '/path/to/composer.json'; - - $this->directoryReadMock->expects($this->any()) - ->method('getAbsolutePath') - ->willReturn($pathToComposerJson); - $this->directoryWriteMock->expects($this->once()) - ->method('isExist') - ->with(PackagesAuth::PATH_TO_AUTH_FILE) - ->willReturn($authExist); - $this->directoryWriteMock->expects($authExist ? $this->never() : $this->once()) - ->method('writeFile') - ->with(PackagesAuth::PATH_TO_AUTH_FILE, '{}'); - $this->filesystemMock->expects($this->any()) - ->method('getDirectoryRead') - ->with(DirectoryList::ROOT) - ->willReturn($this->directoryReadMock); - $this->filesystemMock->expects($this->once()) - ->method('getDirectoryWrite') - ->with(DirectoryList::COMPOSER_HOME) - ->willReturn($this->directoryWriteMock); - $this->sampleDataDependencyMock->expects($this->any()) - ->method('getSampleDataPackages') - ->willReturn($sampleDataPackages); - $this->arrayInputFactoryMock->expects($this->never()) - ->method('create'); - - array_walk($sampleDataPackages, function (&$v, $k) { - $v = "$k:$v"; - }); - - $packages = array_values($sampleDataPackages); - - $requireArgs = [ - 'command' => 'require', - '--working-dir' => $pathToComposerJson, - '--no-progress' => 1, - 'packages' => $packages, - ]; - $commandInput = new \Symfony\Component\Console\Input\ArrayInput($requireArgs); - - $this->applicationMock->expects($this->any()) - ->method('run') - ->with($commandInput, $this->anything()) - ->willReturn($appRunResult); - - if (($appRunResult !== 0) && !empty($sampleDataPackages)) { - $this->applicationMock->expects($this->once())->method('resetComposer')->willReturnSelf(); - } + $this->setupMocks($sampleDataPackages, '/path/to/composer.json', $appRunResult); + $this->setupMocksForAuthFile($authExist); + $commandTester = $this->createCommandTester(); + $commandTester->execute([]); - $this->applicationFactoryMock->expects($this->any()) - ->method('create') - ->willReturn($this->applicationMock); + $this->assertEquals($expectedMsg, $commandTester->getDisplay()); + } - $commandTester = new CommandTester( - new SampleDataDeployCommand( - $this->filesystemMock, - $this->sampleDataDependencyMock, - $this->arrayInputFactoryMock, - $this->applicationFactoryMock - ) + /** + * @param array $sampleDataPackages + * @param int $appRunResult - int 0 if everything went fine, or an error code + * @param string $expectedMsg + * @param bool $authExist + * @return void + * + * @dataProvider processDataProvider + */ + public function testExecuteWithNoUpdate(array $sampleDataPackages, $appRunResult, $expectedMsg, $authExist) + { + $this->setupMocks( + $sampleDataPackages, + '/path/to/composer.json', + $appRunResult, + ['--no-update' => 1] ); - $commandTester->execute([]); + $this->setupMocksForAuthFile($authExist); + $commandInput = ['--no-update' => 1]; + + $commandTester = $this->createCommandTester(); + $commandTester->execute($commandInput); $this->assertEquals($expectedMsg, $commandTester->getDisplay()); } @@ -154,13 +82,13 @@ public function testExecute(array $sampleDataPackages, $appRunResult, $expectedM public function processDataProvider() { return [ - [ + 'No sample data found' => [ 'sampleDataPackages' => [], 'appRunResult' => 1, 'expectedMsg' => 'There is no sample data for current set of modules.' . PHP_EOL, 'authExist' => true, ], - [ + 'No auth.json found' => [ 'sampleDataPackages' => [ 'magento/module-cms-sample-data' => '1.0.0-beta', ], @@ -169,7 +97,7 @@ public function processDataProvider() . PHP_EOL, 'authExist' => false, ], - [ + 'Successful sample data installation' => [ 'sampleDataPackages' => [ 'magento/module-cms-sample-data' => '1.0.0-beta', ], @@ -204,6 +132,14 @@ public function testExecuteWithException() ->with(DirectoryList::COMPOSER_HOME) ->willReturn($this->directoryWriteMock); + $this->createCommandTester()->execute([]); + } + + /** + * @return CommandTester + */ + private function createCommandTester(): CommandTester + { $commandTester = new CommandTester( new SampleDataDeployCommand( $this->filesystemMock, @@ -212,6 +148,36 @@ public function testExecuteWithException() $this->applicationFactoryMock ) ); - $commandTester->execute([]); + return $commandTester; + } + + /** + * @param $sampleDataPackages + * @param $pathToComposerJson + * @return array + */ + protected function expectedComposerArguments( + array $sampleDataPackages, + string $pathToComposerJson + ) : array { + return [ + 'command' => 'require', + '--working-dir' => $pathToComposerJson, + '--no-progress' => 1, + 'packages' => $this->packageVersionStrings($sampleDataPackages), + ]; + } + + /** + * @param array $sampleDataPackages + * @return array + */ + private function packageVersionStrings(array $sampleDataPackages): array + { + array_walk($sampleDataPackages, function (&$v, $k) { + $v = "$k:$v"; + }); + + return array_values($sampleDataPackages); } } diff --git a/app/code/Magento/SampleData/Test/Unit/Console/Command/SampleDataRemoveCommandTest.php b/app/code/Magento/SampleData/Test/Unit/Console/Command/SampleDataRemoveCommandTest.php new file mode 100644 index 0000000000000..7fce70fd9c376 --- /dev/null +++ b/app/code/Magento/SampleData/Test/Unit/Console/Command/SampleDataRemoveCommandTest.php @@ -0,0 +1,109 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\SampleData\Test\Unit\Console\Command; + +use Magento\SampleData\Console\Command\SampleDataRemoveCommand; +use Symfony\Component\Console\Tester\CommandTester; + +class SampleDataRemoveCommandTest extends AbstractSampleDataCommandTest +{ + + /** + * @param array $sampleDataPackages + * @param int $appRunResult - int 0 if everything went fine, or an error code + * @param string $expectedMsg + * @return void + * + * @dataProvider processDataProvider + */ + public function testExecute(array $sampleDataPackages, $appRunResult, $expectedMsg) + { + $this->setupMocks($sampleDataPackages, '/path/to/composer.json', $appRunResult); + $commandTester = $this->createCommandTester(); + $commandTester->execute([]); + + $this->assertEquals($expectedMsg, $commandTester->getDisplay()); + } + + /** + * @param array $sampleDataPackages + * @param int $appRunResult - int 0 if everything went fine, or an error code + * @param string $expectedMsg + * @return void + * + * @dataProvider processDataProvider + */ + public function testExecuteWithNoUpdate(array $sampleDataPackages, $appRunResult, $expectedMsg) + { + $this->setupMocks( + $sampleDataPackages, + '/path/to/composer.json', + $appRunResult, + ['--no-update' => 1] + ); + $commandInput = ['--no-update' => 1]; + + $commandTester = $this->createCommandTester(); + $commandTester->execute($commandInput); + + $this->assertEquals($expectedMsg, $commandTester->getDisplay()); + } + + /** + * @return array + */ + public function processDataProvider() + { + return [ + 'No sample data found' => [ + 'sampleDataPackages' => [], + 'appRunResult' => 1, + 'expectedMsg' => 'There is no sample data for current set of modules.' . PHP_EOL, + ], + 'Successful sample data installation' => [ + 'sampleDataPackages' => [ + 'magento/module-cms-sample-data' => '1.0.0-beta', + ], + 'appRunResult' => 0, + 'expectedMsg' => '', + ], + ]; + } + + /** + * @return CommandTester + */ + private function createCommandTester(): CommandTester + { + $commandTester = new CommandTester( + new SampleDataRemoveCommand( + $this->filesystemMock, + $this->sampleDataDependencyMock, + $this->arrayInputFactoryMock, + $this->applicationFactoryMock + ) + ); + return $commandTester; + } + + /** + * @param $sampleDataPackages + * @param $pathToComposerJson + * @return array + */ + protected function expectedComposerArguments( + array $sampleDataPackages, + string $pathToComposerJson + ) : array { + return [ + 'command' => 'remove', + '--working-dir' => $pathToComposerJson, + '--no-interaction' => 1, + '--no-progress' => 1, + 'packages' => array_keys($sampleDataPackages), + ]; + } +} From 2158987fe15d22e76f0c0e7555e3d2c94d64bc4c Mon Sep 17 00:00:00 2001 From: Dmytro Voskoboinikov <dvoskoboinikov@magento.com> Date: Mon, 20 Nov 2017 16:25:54 +0200 Subject: [PATCH 275/653] MAGETWO-77840: [2.2.x] - Special/lowest price in child of a Configurable Product causes the entire product to show that price --- .../templates/product/price/final_price.phtml | 29 ++++++------ .../view/frontend/web/js/configurable.js | 35 ++++++++++++++- .../view/frontend/web/js/swatch-renderer.js | 21 ++++++++- .../Block/Product/Compare/ListCompare.php | 11 ++++- .../Catalog/Test/Block/Product/View.php | 15 ++++++- .../Constraint/AssertProductComparePage.php | 25 ++++++++--- .../Test/Constraint/AssertProductPage.php | 2 +- ...AssertProductSpecialPriceOnProductPage.php | 2 +- .../Product/AddCompareProductsTest.xml | 4 +- .../Test/Block/Product/Price.php | 45 +++++++++++++++++++ .../Test/Block/Product/View.php | 20 ++++++++- .../AssertConfigurableProductPage.php | 37 ++++++++++++++- .../Test/Repository/ConfigurableProduct.xml | 31 +++++++++++++ .../RenderingBasedOnIsProductListFlagTest.php | 8 ++-- 14 files changed, 246 insertions(+), 39 deletions(-) create mode 100644 dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/Price.php diff --git a/app/code/Magento/ConfigurableProduct/view/base/templates/product/price/final_price.phtml b/app/code/Magento/ConfigurableProduct/view/base/templates/product/price/final_price.phtml index 98abb906f69d6..df05fb22104a5 100644 --- a/app/code/Magento/ConfigurableProduct/view/base/templates/product/price/final_price.phtml +++ b/app/code/Magento/ConfigurableProduct/view/base/templates/product/price/final_price.phtml @@ -19,16 +19,22 @@ $finalPriceModel = $block->getPriceType('final_price'); $idSuffix = $block->getIdSuffix() ? $block->getIdSuffix() : ''; $schema = ($block->getZone() == 'item_view') ? true : false; ?> -<?php if (!$block->isProductList() && $block->hasSpecialPrice()): ?> - <span class="special-price"> - <?php /* @escapeNotVerified */ echo $block->renderAmount($finalPriceModel->getAmount(), [ - 'display_label' => __('Special Price'), - 'price_id' => $block->getPriceId('product-price-' . $idSuffix), - 'price_type' => 'finalPrice', + +<span class="normal-price"> + <?php + $arguments = [ + 'display_label' => __('As low as'), + 'price_id' => $block->getPriceId('product-price-' . $idSuffix), + 'price_type' => 'finalPrice', 'include_container' => true, 'schema' => $schema - ]); ?> - </span> + ]; + + /* @escapeNotVerified */ echo $block->renderAmount($finalPriceModel->getAmount(), $arguments); + ?> +</span> + +<?php if (!$block->isProductList() && $block->hasSpecialPrice()): ?> <span class="old-price sly-old-price no-display"> <?php /* @escapeNotVerified */ echo $block->renderAmount($priceModel->getAmount(), [ 'display_label' => __('Regular Price'), @@ -38,13 +44,6 @@ $schema = ($block->getZone() == 'item_view') ? true : false; 'skip_adjustments' => true ]); ?> </span> -<?php else: ?> - <?php /* @escapeNotVerified */ echo $block->renderAmount($finalPriceModel->getAmount(), [ - 'price_id' => $block->getPriceId('product-price-' . $idSuffix), - 'price_type' => 'finalPrice', - 'include_container' => true, - 'schema' => $schema - ]); ?> <?php endif; ?> <?php if ($block->showMinimalPrice()): ?> diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js index 545887d04c965..8cabe71c17504 100644 --- a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js +++ b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js @@ -32,6 +32,7 @@ define([ mediaGallerySelector: '[data-gallery-role=gallery-placeholder]', mediaGalleryInitial: null, slyOldPriceSelector: '.sly-old-price', + normalPriceLabelSelector: '.normal-price .price-label', /** * Defines the mechanism of how images of a gallery should be @@ -269,6 +270,7 @@ define([ this._reloadPrice(); this._displayRegularPriceBlock(this.simpleProduct); this._displayTierPriceBlock(this.simpleProduct); + this._displayNormalPriceLabel(); this._changeProductImage(); }, @@ -527,8 +529,16 @@ define([ * @private */ _displayRegularPriceBlock: function (optionId) { - if (typeof optionId != 'undefined' && - this.options.spConfig.optionPrices[optionId].oldPrice.amount != //eslint-disable-line eqeqeq + var shouldBeShown = true; + + _.each(this.options.settings, function (element) { + if (element.value === '') { + shouldBeShown = false; + } + }); + + if (shouldBeShown && + this.options.spConfig.optionPrices[optionId].oldPrice.amount !== this.options.spConfig.optionPrices[optionId].finalPrice.amount ) { $(this.options.slyOldPriceSelector).show(); @@ -537,6 +547,27 @@ define([ } }, + /** + * Show or hide normal price label + * + * @private + */ + _displayNormalPriceLabel: function () { + var shouldBeShown = false; + + _.each(this.options.settings, function (element) { + if (element.value === '') { + shouldBeShown = true; + } + }); + + if (shouldBeShown) { + $(this.options.normalPriceLabelSelector).show(); + } else { + $(this.options.normalPriceLabelSelector).hide(); + } + }, + /** * Callback which fired after gallery gets initialized. * diff --git a/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js b/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js index c09c17f0ad6ba..df2345b741ea1 100644 --- a/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js +++ b/app/code/Magento/Swatches/view/frontend/web/js/swatch-renderer.js @@ -268,8 +268,11 @@ define([ // tier prise selectors start tierPriceTemplateSelector: '#tier-prices-template', tierPriceBlockSelector: '[data-role="tier-price-block"]', - tierPriceTemplate: '' + tierPriceTemplate: '', // tier prise selectors end + + // A price label selector + normalPriceLabelSelector: '.normal-price .price-label' }, /** @@ -930,6 +933,22 @@ define([ } else { $(this.options.tierPriceBlockSelector).hide(); } + + $(this.options.normalPriceLabelSelector).hide(); + + _.each($('.' + this.options.classes.attributeOptionsWrapper), function (attribute) { + if ($(attribute).find('.' + this.options.classes.optionClass + '.selected').length === 0) { + if ($(attribute).find('.' + this.options.classes.selectClass).length > 0) { + _.each($(attribute).find('.' + this.options.classes.selectClass), function (dropdown) { + if ($(dropdown).val() === '0') { + $(this.options.normalPriceLabelSelector).show(); + } + }.bind(this)); + } else { + $(this.options.normalPriceLabelSelector).show(); + } + } + }.bind(this)); }, /** diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/ListCompare.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/ListCompare.php index 0a19fb73c3101..7082eb5ffaec4 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/ListCompare.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/ListCompare.php @@ -16,6 +16,13 @@ */ class ListCompare extends Block { + /** + * Price displaying format. + * + * @var int + */ + protected $priceFormat = 2; + /** * Selector by product info. * @@ -94,12 +101,12 @@ class ListCompare extends Block protected $confirmModal = '.confirm._show[data-role=modal]'; /** - * Get product info. + * Get Product info. * * @param int $index * @param string $attributeKey * @param string $currency - * @return string + * @return string|array */ public function getProductInfo($index, $attributeKey, $currency = ' $') { diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php index 92f3a2102e85e..955731e8209b3 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View.php @@ -243,10 +243,23 @@ public function getThresholdMessage() /** * Get block price. * + * @param FixtureInterface|null $product + * * @return Price */ - public function getPriceBlock() + public function getPriceBlock(FixtureInterface $product = null) { + $typeId = null; + + if ($product) { + $dataConfig = $product->getDataConfig(); + $typeId = isset($dataConfig['type_id']) ? $dataConfig['type_id'] : null; + } + + if ($this->hasRender($typeId)) { + return $this->callRender($typeId, 'getPriceBlock'); + } + return $this->blockFactory->create( \Magento\Catalog\Test\Block\Product\Price::class, ['element' => $this->_rootElement->find($this->priceBlock, Locator::SELECTOR_XPATH)] diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductComparePage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductComparePage.php index d7dd6fbdaafd4..9831328fffbfe 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductComparePage.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductComparePage.php @@ -16,6 +16,13 @@ */ class AssertProductComparePage extends AbstractConstraint { + /** + * Price displaying format. + * + * @var int + */ + protected $priceFormat = 2; + /** * Product attribute on compare product page * @@ -30,8 +37,8 @@ class AssertProductComparePage extends AbstractConstraint ]; /** - * Assert that "Compare Product" page contains product(s) that was added - * - Product name + * Assert that "Compare Product" Storefront page contains added Products with expected Attribute values: + * - Name * - Price * - SKU * - Description (if exists, else text "No") @@ -56,19 +63,23 @@ public function processAssert( $value = $attribute; $attribute = is_numeric($attributeKey) ? $attribute : $attributeKey; - $attributeValue = $attribute != 'price' + $expectedAttributeValue = $attribute != 'price' ? ($product->hasData($attribute) ? $product->getData($attribute) : 'N/A') : ($product->getDataFieldConfig('price')['source']->getPriceData() !== null ? $product->getDataFieldConfig('price')['source']->getPriceData()['compare_price'] - : number_format($product->getPrice(), 2)); + : number_format($product->getPrice(), $this->priceFormat)); $attribute = is_numeric($attributeKey) ? 'info' : 'attribute'; + $attribute = ucfirst($attribute); + $actualAttributeValue = + $comparePage->getCompareProductsBlock()->{'getProduct' . $attribute}($key + 1, $value); + \PHPUnit_Framework_Assert::assertEquals( - $attributeValue, - $comparePage->getCompareProductsBlock()->{'getProduct' . ucfirst($attribute)}($key + 1, $value), - 'Product "' . $product->getName() . '" is\'n equals with data from fixture.' + $expectedAttributeValue, + $actualAttributeValue, + 'Product "' . $product->getName() . '" has "' . $attribute . '" value different from fixture one.' ); } } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductPage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductPage.php index 049ecaf053eea..cf9f608b9353e 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductPage.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductPage.php @@ -145,7 +145,7 @@ protected function verifySpecialPrice() } $expectedSpecialPrice = $this->product->getSpecialPrice(); $expectedSpecialPrice = number_format($expectedSpecialPrice, 2); - $priceBlock = $this->productView->getPriceBlock(); + $priceBlock = $this->productView->getPriceBlock($this->product); if (!$priceBlock->isVisible()) { return "Price block for '{$this->product->getName()}' product' is not visible."; } diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductSpecialPriceOnProductPage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductSpecialPriceOnProductPage.php index 0d8ebd5ac337a..17607ffad5912 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductSpecialPriceOnProductPage.php +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductSpecialPriceOnProductPage.php @@ -64,7 +64,7 @@ public function setErrorMessage($errorMessage) public function assertPrice(FixtureInterface $product, View $productViewBlock) { $fields = $product->getData(); - $specialPrice = $productViewBlock->getPriceBlock()->getSpecialPrice(); + $specialPrice = $productViewBlock->getPriceBlock($product)->getSpecialPrice(); if (isset($fields['special_price'])) { \PHPUnit_Framework_Assert::assertEquals( number_format($fields['special_price'], 2), diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.xml index 2ff67cdeb4d2a..1827292303174 100644 --- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.xml +++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.xml @@ -21,14 +21,14 @@ <constraint name="Magento\Catalog\Test\Constraint\AssertProductComparePage" /> </variation> <variation name="AddCompareProductsTestVariation3"> - <data name="products" xsi:type="string">configurableProduct::configurable_with_qty_1</data> + <data name="products" xsi:type="string">configurableProduct::configurable_as_low_as</data> <data name="isCustomerLoggedIn" xsi:type="string">Yes</data> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareItemsLink" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductComparePage" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareBlockOnCmsPage" /> </variation> <variation name="AddCompareProductsTestVariation4"> - <data name="products" xsi:type="string">catalogProductSimple::simple_for_composite_products,catalogProductVirtual::default,downloadableProduct::default,groupedProduct::grouped_product_with_price,configurableProduct::configurable_with_qty_1,bundleProduct::bundle_dynamic_product,bundleProduct::bundle_fixed_product</data> + <data name="products" xsi:type="string">catalogProductSimple::simple_for_composite_products,catalogProductVirtual::default,downloadableProduct::default,groupedProduct::grouped_product_with_price,configurableProduct::configurable_as_low_as,bundleProduct::bundle_dynamic_product,bundleProduct::bundle_fixed_product</data> <data name="isCustomerLoggedIn" xsi:type="string">Yes</data> <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareItemsLink" /> <constraint name="Magento\Catalog\Test\Constraint\AssertProductComparePage" /> diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/Price.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/Price.php new file mode 100644 index 0000000000000..2facfafbb83b0 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/Price.php @@ -0,0 +1,45 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\ConfigurableProduct\Test\Block\Product; + +use Magento\Mtf\Client\Locator; +use Magento\Mtf\Client\Element\SimpleElement; + +/** + * This class is used to access the price related information + * of a configurable product from the storefront. + */ +class Price extends \Magento\Catalog\Test\Block\Product\Price +{ + /** + * A CSS selector for a Price label. + * + * @var string + */ + protected $priceLabel = '.normal-price .price-label'; + + /** + * Mapping for different types of Price. + * + * @var array + */ + protected $mapTypePrices = [ + 'special_price' => [ + 'selector' => '.normal-price .price' + ] + ]; + + /** + * This method returns the price represented by the block. + * + * @return SimpleElement + */ + public function getPriceLabel() + { + return $this->_rootElement->find($this->priceLabel); + } +} diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View.php index a1f64822a6ea6..6092983c7e86d 100644 --- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View.php +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Product/View.php @@ -3,11 +3,10 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ - namespace Magento\ConfigurableProduct\Test\Block\Product; use Magento\ConfigurableProduct\Test\Block\Product\View\ConfigurableOptions; -use Magento\ConfigurableProduct\Test\Fixture\ConfigurableProduct; +use Magento\Mtf\Client\Locator; use Magento\Mtf\Fixture\FixtureInterface; use Magento\Mtf\Fixture\InjectableFixture; @@ -17,6 +16,23 @@ */ class View extends \Magento\Catalog\Test\Block\Product\View { + /** + * Gets a configurable product price block. + * + * @param FixtureInterface|null $product + * + * @return Price + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function getPriceBlock(FixtureInterface $product = null) + { + return $this->blockFactory->create( + 'Magento\ConfigurableProduct\Test\Block\Product\Price', + ['element' => $this->_rootElement->find($this->priceBlock, Locator::SELECTOR_XPATH)] + ); + } + /** * Get configurable options block * diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertConfigurableProductPage.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertConfigurableProductPage.php index 580aff912104b..e582be6337920 100644 --- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertConfigurableProductPage.php +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertConfigurableProductPage.php @@ -14,6 +14,14 @@ */ class AssertConfigurableProductPage extends AssertProductPage { + + /** + * Price format. + * + * @var int + */ + protected $priceFormat = 2; + /** * Verify displayed product data on product page(front-end) equals passed from fixture: * 1. Product Name @@ -28,6 +36,7 @@ class AssertConfigurableProductPage extends AssertProductPage protected function verify() { $errors = parent::verify(); + $errors[] = $this->verifyPriceLabel(); $errors[] = $this->verifyAttributes(); return array_filter($errors); @@ -47,7 +56,7 @@ protected function verifyPrice() $formPrice = $priceBlock->isOldPriceVisible() ? $priceBlock->getOldPrice() : $priceBlock->getPrice(); $fixturePrice = $this->getLowestConfigurablePrice(); - if ($fixturePrice != $formPrice) { + if ($fixturePrice != number_format($formPrice, $this->priceFormat)) { return "Displayed product price on product page(front-end) not equals passed from fixture. " . "Actual: {$formPrice}, expected: {$fixturePrice}."; } @@ -144,4 +153,30 @@ protected function getLowestConfigurablePrice() } return $price; } + + /** + * Verifies displayed product price label on a product page (front-end) + * equals passed from the fixture. + * + * @return string|null + */ + protected function verifyPriceLabel() + { + /** @var \Magento\ConfigurableProduct\Test\Block\Product\Price $priceBlock */ + $priceBlock = $this->productView->getPriceBlock($this->product); + + if (!$priceBlock->getPriceLabel()->isVisible()) { + return "Product price label should be displayed."; + } else { + $expectedPriceLabel = 'As low as'; + $actualPriceLabel = $priceBlock->getPriceLabel()->getText(); + + if ($expectedPriceLabel !== $actualPriceLabel) { + return "Displayed product price label on product page (front-end) not equals passed from fixture. " + . "Actual: {$actualPriceLabel}, expected: {$expectedPriceLabel}."; + } + } + + return null; + } } diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml index a524139d3f3ad..61ae2a4dfadd1 100644 --- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml +++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Repository/ConfigurableProduct.xml @@ -176,6 +176,37 @@ </field> </dataset> + <dataset name="configurable_as_low_as"> + <field name="name" xsi:type="string">Test configurable product %isolation%</field> + <field name="sku" xsi:type="string">sku_test_configurable_product_%isolation%</field> + <field name="price" xsi:type="array"> + <item name="dataset" xsi:type="string">price_as-40.00</item> + </field> + <field name="product_has_weight" xsi:type="string">This item has weight</field> + <field name="weight" xsi:type="string">30</field> + <field name="status" xsi:type="string">Yes</field> + <field name="visibility" xsi:type="string">Catalog, Search</field> + <field name="tax_class_id" xsi:type="array"> + <item name="dataset" xsi:type="string">taxable_goods</item> + </field> + <field name="url_key" xsi:type="string">configurable-product-%isolation%</field> + <field name="configurable_attributes_data" xsi:type="array"> + <item name="dataset" xsi:type="string">default</item> + </field> + <field name="quantity_and_stock_status" xsi:type="array"> + <item name="is_in_stock" xsi:type="string">In Stock</item> + </field> + <field name="website_ids" xsi:type="array"> + <item name="0" xsi:type="string">Main Website</item> + </field> + <field name="attribute_set_id" xsi:type="array"> + <item name="dataset" xsi:type="string">default</item> + </field> + <field name="checkout_data" xsi:type="array"> + <item name="dataset" xsi:type="string">configurable_options_with_qty_1</item> + </field> + </dataset> + <dataset name="product_with_special_price"> <field name="name" xsi:type="string">Test configurable product %isolation%</field> <field name="sku" xsi:type="string">sku_test_configurable_product_%isolation%</field> diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Pricing/Render/FinalPriceBox/RenderingBasedOnIsProductListFlagTest.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Pricing/Render/FinalPriceBox/RenderingBasedOnIsProductListFlagTest.php index 379e61e64c788..076ed34262711 100644 --- a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Pricing/Render/FinalPriceBox/RenderingBasedOnIsProductListFlagTest.php +++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Pricing/Render/FinalPriceBox/RenderingBasedOnIsProductListFlagTest.php @@ -83,7 +83,7 @@ public function testRenderingByDefault() $this->assertGreaterThanOrEqual( 1, \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath( - '//*[contains(@class,"special-price")]', + '//*[contains(@class,"normal-price")]', $html ) ); @@ -116,9 +116,9 @@ public function testRenderingAccordingToIsProductListFlag($flag, $count) $html = $this->finalPriceBox->toHtml(); self::assertContains('5.99', $html); $this->assertEquals( - $count, + 1, \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath( - '//*[contains(@class,"special-price")]', + '//*[contains(@class,"normal-price")]', $html ) ); @@ -137,7 +137,7 @@ public function testRenderingAccordingToIsProductListFlag($flag, $count) public function isProductListDataProvider() { return [ - 'is_not_product_list' => [false, true], + 'is_not_product_list' => [false, 1], 'is_product_list' => [true, 0], ]; } From edce646ada6889d8e210b3261401aaca40953478 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko <vgoncharenko@magento.com> Date: Mon, 20 Nov 2017 17:21:14 +0200 Subject: [PATCH 276/653] MAGETWO-82420: Fix UpgradeSystemTest - changes after CR --- .../tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml b/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml index 17f8cae1ae6ac..6272eb4996d37 100644 --- a/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml +++ b/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml @@ -18,7 +18,7 @@ <data name="upgrade/optionsMedia" xsi:type="string">No</data> <data name="upgrade/optionsDb" xsi:type="string">No</data> <data name="upgrade/otherComponents" xsi:type="string">{otherComponents}</data> - <data name="upgrade/otherComponentsList" xsi:type="array" /> + <data name="upgrade/otherComponentsList" xsi:type="null" /> </variation> </testCase> </config> From 4f3625b40c1e20c93391afb003ad82dd98cd7fb0 Mon Sep 17 00:00:00 2001 From: Dmytro Vilchynskyi <dvilchynskyi@magento.com> Date: Mon, 20 Nov 2017 19:36:10 +0200 Subject: [PATCH 277/653] MAGETWO-70725: Admin token does not expire after 'Admin Token Lifetime (hours)' - fix --- .../Model/Authorization/TokenUserContext.php | 56 +++- .../Authorization/TokenUserContextTest.php | 269 +++++++++++++++++- 2 files changed, 312 insertions(+), 13 deletions(-) diff --git a/app/code/Magento/Webapi/Model/Authorization/TokenUserContext.php b/app/code/Magento/Webapi/Model/Authorization/TokenUserContext.php index eaf39549b2c2a..afa5889fe55e8 100644 --- a/app/code/Magento/Webapi/Model/Authorization/TokenUserContext.php +++ b/app/code/Magento/Webapi/Model/Authorization/TokenUserContext.php @@ -7,6 +7,8 @@ namespace Magento\Webapi\Model\Authorization; use Magento\Authorization\Model\UserContextInterface; +use Magento\Framework\App\ObjectManager; +use Magento\Framework\Oauth\Exception; use Magento\Integration\Model\Oauth\Token; use Magento\Integration\Model\Oauth\TokenFactory; use Magento\Integration\Api\IntegrationServiceInterface; @@ -47,6 +49,21 @@ class TokenUserContext implements UserContextInterface */ protected $integrationService; + /** + * @var \Magento\Framework\Stdlib\DateTime + */ + private $dateTime; + + /** + * @var \Magento\Framework\Stdlib\DateTime\DateTime + */ + private $date; + + /** + * @var \Magento\Integration\Helper\Oauth\Data + */ + private $oauthHelper; + /** * Initialize dependencies. * @@ -57,11 +74,23 @@ class TokenUserContext implements UserContextInterface public function __construct( Request $request, TokenFactory $tokenFactory, - IntegrationServiceInterface $integrationService + IntegrationServiceInterface $integrationService, + \Magento\Framework\Stdlib\DateTime $dateTime = null, + \Magento\Framework\Stdlib\DateTime\DateTime $date = null, + \Magento\Integration\Helper\Oauth\Data $oauthHelper = null ) { $this->request = $request; $this->tokenFactory = $tokenFactory; $this->integrationService = $integrationService; + $this->dateTime = $dateTime ?: ObjectManager::getInstance()->get( + \Magento\Framework\Stdlib\DateTime::class + ); + $this->date = $date ?: ObjectManager::getInstance()->get( + \Magento\Framework\Stdlib\DateTime\DateTime::class + ); + $this->oauthHelper = $oauthHelper ?: ObjectManager::getInstance()->get( + \Magento\Integration\Helper\Oauth\Data::class + ); } /** @@ -82,6 +111,29 @@ public function getUserType() return $this->userType; } + /** + * Check if token is expired. + * + * @param Token $token + * + * @return bool + */ + private function isTokenExpired(Token $token) + { + if ($token->getUserType() == \Magento\Authorization\Model\UserContextInterface::USER_TYPE_ADMIN) { + $tokenTtl = $this->oauthHelper->getAdminTokenLifetime(); + } elseif ($token->getUserType() == \Magento\Authorization\Model\UserContextInterface::USER_TYPE_CUSTOMER) { + $tokenTtl = $this->oauthHelper->getCustomerTokenLifetime(); + } else { + // other user-type tokens are considered always valid + return false; + } + if ($this->dateTime->strToTime($token->getCreatedAt()) < ($this->date->gmtTimestamp() - $tokenTtl * 3600)) { + return true; + } + return false; + } + /** * Finds the bearer token and looks up the value. * @@ -114,7 +166,7 @@ protected function processRequest() $bearerToken = $headerPieces[1]; $token = $this->tokenFactory->create()->loadByToken($bearerToken); - if (!$token->getId() || $token->getRevoked()) { + if (!$token->getId() || $token->getRevoked() || $this->isTokenExpired($token)) { $this->isRequestProcessed = true; return; } diff --git a/app/code/Magento/Webapi/Test/Unit/Model/Authorization/TokenUserContextTest.php b/app/code/Magento/Webapi/Test/Unit/Model/Authorization/TokenUserContextTest.php index 45ea678bdf859..f7ab848083dcc 100644 --- a/app/code/Magento/Webapi/Test/Unit/Model/Authorization/TokenUserContextTest.php +++ b/app/code/Magento/Webapi/Test/Unit/Model/Authorization/TokenUserContextTest.php @@ -24,20 +24,35 @@ class TokenUserContextTest extends \PHPUnit\Framework\TestCase protected $tokenUserContext; /** - * @var \Magento\Integration\Model\Oauth\TokenFactory + * @var \Magento\Integration\Model\Oauth\TokenFactory|\PHPUnit_Framework_MockObject_MockObject */ protected $tokenFactory; /** - * @var \Magento\Integration\Api\IntegrationServiceInterface + * @var \Magento\Integration\Api\IntegrationServiceInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $integrationService; /** - * @var \Magento\Framework\Webapi\Request + * @var \Magento\Framework\Webapi\Request|\PHPUnit_Framework_MockObject_MockObject */ protected $request; + /** + * @var \Magento\Integration\Helper\Oauth\Data|\PHPUnit_Framework_MockObject_MockObject + */ + private $oauthHelperMock; + + /** + * @var \Magento\Framework\Stdlib\DateTime\DateTime|\PHPUnit_Framework_MockObject_MockObject + */ + private $dateMock; + + /** + * @var \Magento\Framework\Stdlib\DateTime|\PHPUnit_Framework_MockObject_MockObject + */ + private $dateTimeMock; + protected function setUp() { $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); @@ -68,12 +83,39 @@ protected function setUp() ) ->getMock(); + $this->oauthHelperMock = $this->getMockBuilder(\Magento\Integration\Helper\Oauth\Data::class) + ->disableOriginalConstructor() + ->setMethods(['getAdminTokenLifetime', 'getCustomerTokenLifetime']) + ->getMock(); + + $this->dateMock = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime\DateTime::class) + ->disableOriginalConstructor() + ->setMethods(['gmtTimestamp']) + ->getMock(); + + $this->dateTimeMock = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime::class) + ->disableOriginalConstructor() + ->setMethods(['strToTime']) + ->getMock(); + + $this->dateTimeMock->expects($this->any()) + ->method('strToTime') + ->will($this->returnCallback( + function ($str) { + return strtotime($str); + } + ) + ); + $this->tokenUserContext = $this->objectManager->getObject( \Magento\Webapi\Model\Authorization\TokenUserContext::class, [ 'request' => $this->request, 'tokenFactory' => $this->tokenFactory, - 'integrationService' => $this->integrationService + 'integrationService' => $this->integrationService, + 'oauthHelper' => $this->oauthHelperMock, + 'date' => $this->dateMock, + 'dateTime' => $this->dateTimeMock, ] ); } @@ -181,8 +223,17 @@ public function testValidToken($userType, $userId, $expectedUserType, $expectedU $token = $this->getMockBuilder(\Magento\Integration\Model\Oauth\Token::class) ->disableOriginalConstructor() - ->setMethods(['loadByToken', 'getId', 'getUserType', 'getCustomerId', 'getAdminId', '__wakeup']) - ->getMock(); + ->setMethods( + [ + 'loadByToken', + 'getId', + 'getUserType', + 'getCustomerId', + 'getAdminId', + '__wakeup', + 'getCreatedAt' + ] + )->getMock(); $this->tokenFactory->expects($this->once()) ->method('create') ->will($this->returnValue($token)); @@ -193,17 +244,21 @@ public function testValidToken($userType, $userId, $expectedUserType, $expectedU $token->expects($this->once()) ->method('getId') ->will($this->returnValue(1)); - $token->expects($this->once()) + $token->expects($this->any()) ->method('getUserType') ->will($this->returnValue($userType)); - $integration = $this->getMockBuilder(\Magento\Integration\Model\Integration::class) - ->disableOriginalConstructor() - ->setMethods(['getId', '__wakeup']) - ->getMock(); + $token->expects($this->any()) + ->method('getCreatedAt') + ->willReturn(date('Y-m-d H:i:s', time())); switch ($userType) { case UserContextInterface::USER_TYPE_INTEGRATION: + $integration = $this->getMockBuilder(\Magento\Integration\Model\Integration::class) + ->disableOriginalConstructor() + ->setMethods(['getId', '__wakeup']) + ->getMock(); + $integration->expects($this->once()) ->method('getId') ->will($this->returnValue($userId)); @@ -260,4 +315,196 @@ public function getValidTokenData() ] ]; } + + /** + * @dataProvider getExpiredTestTokenData + */ + public function testExpiredToken($tokenData, $tokenTtl, $currentTime, $expectedUserType, $expectedUserId) + { + $bearerToken = 'bearer1234'; + + $this->dateMock->expects($this->any()) + ->method('gmtTimestamp') + ->willReturn($currentTime); + + $this->request->expects($this->once()) + ->method('getHeader') + ->with('Authorization') + ->will($this->returnValue("Bearer {$bearerToken}")); + + $token = $this->getMockBuilder(\Magento\Integration\Model\Oauth\Token::class) + ->disableOriginalConstructor() + ->setMethods( + [ + 'loadByToken', + 'getCreatedAt', + 'getId', + 'getUserType', + 'getCustomerId', + 'getAdminId', + '__wakeup', + ] + )->getMock(); + + $token->expects($this->once()) + ->method('loadByToken') + ->with($bearerToken) + ->will($this->returnSelf()); + + $token->expects($this->any()) + ->method('getId') + ->will($this->returnValue(1)); + + $token->expects($this->any()) + ->method('getUserType') + ->will($this->returnValue($tokenData['user_type'])); + + $token->expects($this->any()) + ->method('getCreatedAt') + ->willReturn($tokenData['created_at']); + + $this->tokenFactory->expects($this->once()) + ->method('create') + ->will($this->returnValue($token)); + + $this->oauthHelperMock->expects($this->any()) + ->method('getAdminTokenLifetime') + ->willReturn($tokenTtl); + + $this->oauthHelperMock->expects($this->any()) + ->method('getCustomerTokenLifetime') + ->willReturn($tokenTtl); + + switch ($tokenData['user_type']) { + case UserContextInterface::USER_TYPE_INTEGRATION: + $integration = $this->getMockBuilder(\Magento\Integration\Model\Integration::class) + ->disableOriginalConstructor() + ->setMethods(['getId', '__wakeup']) + ->getMock(); + $integration->expects($this->any()) + ->method('getId') + ->will($this->returnValue($tokenData['user_id'])); + + $this->integrationService->expects($this->any()) + ->method('findByConsumerId') + ->will($this->returnValue($integration)); + break; + case UserContextInterface::USER_TYPE_ADMIN: + $token->expects($this->any()) + ->method('getAdminId') + ->will($this->returnValue($tokenData['user_id'])); + break; + case UserContextInterface::USER_TYPE_CUSTOMER: + $token->expects($this->any()) + ->method('getCustomerId') + ->will($this->returnValue($tokenData['user_id'])); + break; + } + + $this->assertEquals($expectedUserType, $this->tokenUserContext->getUserType()); + $this->assertEquals($expectedUserId, $this->tokenUserContext->getUserId()); + + /* check again to make sure that the above method loadByToken in only called once */ + $this->assertEquals($expectedUserType, $this->tokenUserContext->getUserType()); + $this->assertEquals($expectedUserId, $this->tokenUserContext->getUserId()); + } + + /** + * Data provider for expired token test + * @return array + */ + public function getExpiredTestTokenData() + { + $time = time(); + return [ + 'token_expired_admin' => [ + 'tokenData' => [ + 'user_type' => UserContextInterface::USER_TYPE_ADMIN, + 'user_id' => 1234, + 'created_at' => date('Y-m-d H:i:s', $time - 3600 - 400), + ], + 'tokenTtl' => 1, + 'currentTime' => $time, + 'expedtedUserType' => null, + 'expectedUserId' => null, + ], + 'token_vigent_admin' => [ + 'tokenData' => [ + 'user_type' => UserContextInterface::USER_TYPE_ADMIN, + 'user_id' => 1234, + 'created_at' => date('Y-m-d H:i:s', $time - 400), + ], + 'tokenTtl' => 1, + 'currentTime' => $time, + 'expedtedUserType' => UserContextInterface::USER_TYPE_ADMIN, + 'expectedUserId' => 1234, + ], + 'token_expired_customer' => [ + 'tokenData' => [ + 'user_type' => UserContextInterface::USER_TYPE_CUSTOMER, + 'user_id' => 1234, + 'created_at' => date('Y-m-d H:i:s', $time - 3600 - 400), + ], + 'tokenTtl' => 1, + 'currentTime' => $time, + 'expedtedUserType' => null, + 'expectedUserId' => null, + ], + 'token_vigent_customer' => [ + 'tokenData' => [ + 'user_type' => UserContextInterface::USER_TYPE_CUSTOMER, + 'user_id' => 1234, + 'created_at' => date('Y-m-d H:i:s', $time - 400), + ], + 'tokenTtl' => 1, + 'currentTime' => $time, + 'expedtedUserType' => UserContextInterface::USER_TYPE_CUSTOMER, + 'expectedUserId' => 1234, + ], + 'token_expired_integration' => [ + 'tokenData' => [ + 'user_type' => UserContextInterface::USER_TYPE_INTEGRATION, + 'user_id' => 1234, + 'created_at' => date('Y-m-d H:i:s', $time - 3600 - 400), + ], + 'tokenTtl' => 1, + 'currentTime' => $time, + 'expectedUserType' => UserContextInterface::USER_TYPE_INTEGRATION, + 'expectedUserId' => 1234, + ], + 'token_vigent_integration' => [ + 'tokenData' => [ + 'user_type' => UserContextInterface::USER_TYPE_INTEGRATION, + 'user_id' => 1234, + 'created_at' => date('Y-m-d H:i:s', $time - 400), + ], + 'tokenTtl' => 1, + 'currentTime' => $time, + 'expedtedUserType' => UserContextInterface::USER_TYPE_INTEGRATION, + 'expectedUserId' => 1234, + ], + 'token_expired_guest' => [ + 'tokenData' => [ + 'user_type' => UserContextInterface::USER_TYPE_GUEST, + 'user_id' => 1234, + 'created_at' => date('Y-m-d H:i:s', $time - 3600 - 400), + ], + 'tokenTtl' => 1, + 'currentTime' => $time, + 'expedtedUserType' => null, + 'expectedUserId' => null, + ], + 'token_vigent_guest' => [ + 'tokenData' => [ + 'user_type' => UserContextInterface::USER_TYPE_GUEST, + 'user_id' => 1234, + 'created_at' => date('Y-m-d H:i:s', $time - 400), + ], + 'tokenTtl' => 1, + 'currentTime' => $time, + 'expedtedUserType' => null, + 'expectedUserId' => null, + ], + ]; + } } From 992b3a10abfa7ad39a4f263f61d1b47f36113ae0 Mon Sep 17 00:00:00 2001 From: Marius Grad <marius.grad@evozon.com> Date: Tue, 21 Nov 2017 09:25:43 +0200 Subject: [PATCH 278/653] use FQCN throughout the class --- .../Catalog/Block/Product/ListProduct.php | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php index 5bb0b772f90de..df91488cf5f61 100644 --- a/app/code/Magento/Catalog/Block/Product/ListProduct.php +++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php @@ -7,16 +7,19 @@ namespace Magento\Catalog\Block\Product; use Magento\Catalog\Api\CategoryRepositoryInterface; -use Magento\Catalog\Block\Product\Context; use Magento\Catalog\Block\Product\ProductList\Toolbar; use Magento\Catalog\Model\Category; +use Magento\Catalog\Model\Layer; use Magento\Catalog\Model\Layer\Resolver; use Magento\Catalog\Model\Product; use Magento\Catalog\Model\ResourceModel\Product\Collection; +use Magento\Catalog\Pricing\Price\FinalPrice; use Magento\Eav\Model\Entity\Collection\AbstractCollection; +use Magento\Framework\App\ActionInterface; use Magento\Framework\Data\Helper\PostHelper; use Magento\Framework\DataObject\IdentityInterface; use Magento\Framework\Exception\NoSuchEntityException; +use Magento\Framework\Pricing\Render; use Magento\Framework\Url\Helper\Data; /** @@ -64,11 +67,11 @@ class ListProduct extends AbstractProduct implements IdentityInterface protected $categoryRepository; /** - * @param \Magento\Catalog\Block\Product\Context $context - * @param \Magento\Framework\Data\Helper\PostHelper $postDataHelper - * @param \Magento\Catalog\Model\Layer\Resolver $layerResolver - * @param \Magento\Catalog\Api\CategoryRepositoryInterface $categoryRepository - * @param \Magento\Framework\Url\Helper\Data $urlHelper + * @param Context $context + * @param PostHelper $postDataHelper + * @param Resolver $layerResolver + * @param CategoryRepositoryInterface $categoryRepository + * @param Data $urlHelper * @param array $data */ public function __construct( @@ -117,7 +120,7 @@ protected function _getProductCollection() /** * Get catalog layer model * - * @return \Magento\Catalog\Model\Layer + * @return Layer */ public function getLayer() { @@ -191,7 +194,7 @@ protected function _beforeToHtml() /** * Add toolbar block from product listing layout * - * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection + * @param Collection $collection */ private function addToolbarBlock(Collection $collection) { @@ -267,7 +270,7 @@ public function setCollection($collection) } /** - * @param array|string|integer|\Magento\Framework\App\Config\Element $code + * @param array|string|integer|Element $code * @return $this */ public function addAttribute($code) @@ -287,7 +290,7 @@ public function getPriceBlockTemplate() /** * Retrieve Catalog Config object * - * @return \Magento\Catalog\Model\Config + * @return Config */ protected function _getConfig() { @@ -297,10 +300,10 @@ protected function _getConfig() /** * Prepare Sort By fields from Category Data * - * @param \Magento\Catalog\Model\Category $category - * @return \Magento\Catalog\Block\Product\ListProduct + * @param Category $category + * @return $this */ - public function prepareSortableFieldsByCategory($category) + public function prepareSortableFieldsByCategory(Category $category) { if (!$this->getAvailableOrders()) { $this->setAvailableOrders($category->getAvailableSortByOptions()); @@ -342,38 +345,38 @@ public function getIdentities() /** * Get post parameters * - * @param \Magento\Catalog\Model\Product $product + * @param Product $product * @return string */ - public function getAddToCartPostParams(\Magento\Catalog\Model\Product $product) + public function getAddToCartPostParams(Product $product) { $url = $this->getAddToCartUrl($product); return [ 'action' => $url, 'data' => [ 'product' => $product->getEntityId(), - \Magento\Framework\App\ActionInterface::PARAM_NAME_URL_ENCODED => $this->urlHelper->getEncodedUrl($url), + ActionInterface::PARAM_NAME_URL_ENCODED => $this->urlHelper->getEncodedUrl($url), ] ]; } /** - * @param \Magento\Catalog\Model\Product $product + * @param Product $product * @return string */ - public function getProductPrice(\Magento\Catalog\Model\Product $product) + public function getProductPrice(Product $product) { $priceRender = $this->getPriceRender(); $price = ''; if ($priceRender) { $price = $priceRender->render( - \Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE, + FinalPrice::PRICE_CODE, $product, [ 'include_container' => true, 'display_minimal_price' => true, - 'zone' => \Magento\Framework\Pricing\Render::ZONE_ITEM_LIST, + 'zone' => Render::ZONE_ITEM_LIST, 'list_category_page' => true ] ); @@ -386,7 +389,7 @@ public function getProductPrice(\Magento\Catalog\Model\Product $product) * Specifies that price rendering should be done for the list of products * i.e. rendering happens in the scope of product list, but not single product * - * @return \Magento\Framework\Pricing\Render + * @return Render */ protected function getPriceRender() { From 4e937a39fa59a7cc0cefcd19691bc095accc1c9e Mon Sep 17 00:00:00 2001 From: Marius Grad <grad_marius@yahoo.com> Date: Tue, 21 Nov 2017 09:57:30 +0200 Subject: [PATCH 279/653] use FQCN, revert doc parameter namespace --- app/code/Magento/Catalog/Block/Product/ListProduct.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php index df91488cf5f61..5c51429ce83d4 100644 --- a/app/code/Magento/Catalog/Block/Product/ListProduct.php +++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php @@ -270,7 +270,7 @@ public function setCollection($collection) } /** - * @param array|string|integer|Element $code + * @param array|string|integer|\Magento\Framework\App\Config\Element $code * @return $this */ public function addAttribute($code) @@ -415,7 +415,7 @@ protected function getPriceRender() private function initializeProductCollection() { $layer = $this->getLayer(); - /* @var $layer \Magento\Catalog\Model\Layer */ + /* @var $layer Layer */ if ($this->getShowRootCategory()) { $this->setCategoryId($this->_storeManager->getStore()->getRootCategoryId()); } From c303e4dcbc0501a125e844d521d5fc57624b6b8b Mon Sep 17 00:00:00 2001 From: Marius Grad <grad_marius@yahoo.com> Date: Tue, 21 Nov 2017 10:43:01 +0200 Subject: [PATCH 280/653] import Config class --- app/code/Magento/Catalog/Block/Product/ListProduct.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php index 5c51429ce83d4..0d9a19ce6ae80 100644 --- a/app/code/Magento/Catalog/Block/Product/ListProduct.php +++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php @@ -9,6 +9,7 @@ use Magento\Catalog\Api\CategoryRepositoryInterface; use Magento\Catalog\Block\Product\ProductList\Toolbar; use Magento\Catalog\Model\Category; +use Magento\Catalog\Model\Config; use Magento\Catalog\Model\Layer; use Magento\Catalog\Model\Layer\Resolver; use Magento\Catalog\Model\Product; @@ -16,6 +17,7 @@ use Magento\Catalog\Pricing\Price\FinalPrice; use Magento\Eav\Model\Entity\Collection\AbstractCollection; use Magento\Framework\App\ActionInterface; +use Magento\Framework\App\Config\Element; use Magento\Framework\Data\Helper\PostHelper; use Magento\Framework\DataObject\IdentityInterface; use Magento\Framework\Exception\NoSuchEntityException; @@ -270,7 +272,7 @@ public function setCollection($collection) } /** - * @param array|string|integer|\Magento\Framework\App\Config\Element $code + * @param array|string|integer| Element $code * @return $this */ public function addAttribute($code) From 9a99e822b7321f78ae5757bfc935a4d360f09fd6 Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko <vgoncharenko@magento.com> Date: Tue, 21 Nov 2017 11:13:58 +0200 Subject: [PATCH 281/653] MAGETWO-82420: Fix UpgradeSystemTest - fixed bamboo builds --- .../app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml b/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml index 6272eb4996d37..a63ad0f4ec3cb 100644 --- a/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml +++ b/dev/tests/functional/tests/app/Magento/Setup/Test/TestCase/UpgradeSystemTest.xml @@ -18,7 +18,12 @@ <data name="upgrade/optionsMedia" xsi:type="string">No</data> <data name="upgrade/optionsDb" xsi:type="string">No</data> <data name="upgrade/otherComponents" xsi:type="string">{otherComponents}</data> - <data name="upgrade/otherComponentsList" xsi:type="null" /> + <data name="upgrade/otherComponentsList" xsi:type="array"> + <item name="0" xsi:type="array"> + <item name="name" xsi:type="string">{package_0_name}</item> + <item name="version" xsi:type="string">{package_0_version}</item> + </item> + </data> </variation> </testCase> </config> From 813ff0a2994f298952846a732ddd986747cdba3a Mon Sep 17 00:00:00 2001 From: Dmytro Voskoboinikov <dvoskoboinikov@magento.com> Date: Tue, 21 Nov 2017 12:35:48 +0200 Subject: [PATCH 282/653] MAGETWO-77840: [2.2.x] - Special/lowest price in child of a Configurable Product causes the entire product to show that price --- .../view/base/templates/product/price/final_price.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/ConfigurableProduct/view/base/templates/product/price/final_price.phtml b/app/code/Magento/ConfigurableProduct/view/base/templates/product/price/final_price.phtml index df05fb22104a5..97238d0813b09 100644 --- a/app/code/Magento/ConfigurableProduct/view/base/templates/product/price/final_price.phtml +++ b/app/code/Magento/ConfigurableProduct/view/base/templates/product/price/final_price.phtml @@ -30,7 +30,7 @@ $schema = ($block->getZone() == 'item_view') ? true : false; 'schema' => $schema ]; - /* @escapeNotVerified */ echo $block->renderAmount($finalPriceModel->getAmount(), $arguments); + /* @noEscape */ echo $block->renderAmount($finalPriceModel->getAmount(), $arguments); ?> </span> From 1053d6c0b43ae8453b14ad678de19d8f02e9b76d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20M=C3=A9ndez=20Calzada?= <gonzalo.mendez@interactiv4.com> Date: Tue, 21 Nov 2017 11:54:35 +0100 Subject: [PATCH 283/653] add static and api-funcional tests for swatches --- ...AttributeOptionManagementInterfaceTest.php | 85 +++++++++++++++++++ .../Attribute/_files/swatch_attribute.php | 48 +++++++++++ .../Model/SwatchAttributeOptionAddTest.php | 72 ++++++++++++++++ 3 files changed, 205 insertions(+) create mode 100644 dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductSwatchAttributeOptionManagementInterfaceTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/swatch_attribute.php create mode 100644 dev/tests/integration/testsuite/Magento/Swatches/Model/SwatchAttributeOptionAddTest.php diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductSwatchAttributeOptionManagementInterfaceTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductSwatchAttributeOptionManagementInterfaceTest.php new file mode 100644 index 0000000000000..11dc3c9484a61 --- /dev/null +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductSwatchAttributeOptionManagementInterfaceTest.php @@ -0,0 +1,85 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Catalog\Api; + +use Magento\Eav\Api\Data\AttributeOptionInterface; +use Magento\Eav\Api\Data\AttributeOptionLabelInterface; +use Magento\TestFramework\TestCase\WebapiAbstract; + +class ProductSwatchAttributeOptionManagementInterfaceTest extends WebapiAbstract +{ + const SERVICE_NAME = 'catalogProductAttributeOptionManagementV1'; + const SERVICE_VERSION = 'V1'; + const RESOURCE_PATH = '/V1/products/attributes'; + + /** + * @magentoApiDataFixture Magento/Catalog/Model/Product/Attribute/_files/swatch_attribute.php + * @dataProvider addDataProvider + */ + public function testAdd($optionData) + { + $testAttributeCode = 'swatch_attribute'; + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . '/' . $testAttributeCode . '/options', + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'add', + ], + ]; + + $response = $this->_webApiCall( + $serviceInfo, + [ + 'attributeCode' => $testAttributeCode, + 'option' => $optionData, + ] + ); + + $this->assertTrue($response); + $updatedData = $this->getAttributeOptions($testAttributeCode); + $lastOption = array_pop($updatedData); + $this->assertEquals( + $optionData[AttributeOptionInterface::STORE_LABELS][0][AttributeOptionLabelInterface::LABEL], + $lastOption['label'] + ); + } + + /** + * @return array + */ + public function addDataProvider() + { + $optionPayload = [ + AttributeOptionInterface::LABEL => 'new color', + AttributeOptionInterface::SORT_ORDER => 100, + AttributeOptionInterface::IS_DEFAULT => true, + AttributeOptionInterface::STORE_LABELS => [ + [ + AttributeOptionLabelInterface::LABEL => 'DE label', + AttributeOptionLabelInterface::STORE_ID => 1, + ], + ], + AttributeOptionInterface::VALUE => '' + ]; + + return [ + 'option_without_value_node' => [ + $optionPayload + ], + 'option_with_value_node_that_starts_with_text' => [ + array_merge($optionPayload, [AttributeOptionInterface::VALUE => 'some_text']) + ], + 'option_with_value_node_that_starts_with_a_number' => [ + array_merge($optionPayload, [AttributeOptionInterface::VALUE => '123_some_text']) + ], + + ]; + } +} diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/swatch_attribute.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/swatch_attribute.php new file mode 100644 index 0000000000000..4e51d4e16ee50 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/swatch_attribute.php @@ -0,0 +1,48 @@ +<?php +/** + * "dropdown" fixture of product EAV attribute. + * + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/** @var \Magento\Eav\Model\Entity\Type $entityType */ +$entityType = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + \Magento\Eav\Model\Entity\Type::class +); +$entityType->loadByCode('catalog_product'); +$defaultSetId = $entityType->getDefaultAttributeSetId(); +/** @var \Magento\Eav\Model\Entity\Attribute\Set $defaultSet */ +$defaultSet = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + \Magento\Eav\Model\Entity\Attribute\Set::class +); +$defaultSet->load($defaultSetId); +$defaultGroupId = $defaultSet->getDefaultGroupId(); +$optionData = ['value' => ['option_1' => [0 => 'Fixture Option']], 'order' => ['option_1' => 1]]; + +/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */ +$attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + \Magento\Catalog\Model\ResourceModel\Eav\Attribute::class +); + +$attribute->setAttributeCode( + 'swatch_attribute' +)->setEntityTypeId( + $entityType->getEntityTypeId() +)->setAttributeGroupId( + $defaultGroupId +)->setAttributeSetId( + $defaultSetId +)->setFrontendInput( + 'media_image' +)->setFrontendLabel( + 'Swatch Attribute' +)->setBackendType( + 'varchar' +)->setFrontendModel( + \Magento\Catalog\Model\Product\Attribute\Frontend\Image::class +)->setIsUserDefined( + 1 +)->setOption( + $optionData +)->save(); diff --git a/dev/tests/integration/testsuite/Magento/Swatches/Model/SwatchAttributeOptionAddTest.php b/dev/tests/integration/testsuite/Magento/Swatches/Model/SwatchAttributeOptionAddTest.php new file mode 100644 index 0000000000000..4505cbd64c27b --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Swatches/Model/SwatchAttributeOptionAddTest.php @@ -0,0 +1,72 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Swatches\Model; + +use Magento\Catalog\Api\ProductAttributeOptionManagementInterface; +use Magento\Eav\Api\Data\AttributeOptionInterface; +use Magento\Eav\Api\Data\AttributeOptionInterfaceFactory; + +/** + * Test add option of swatch attribute + * + */ +class SwatchAttributeOptionAddTest extends \PHPUnit\Framework\TestCase +{ + /** + * @magentoAppArea adminhtml + * @magentoDbIsolation enabled + * @magentoDataFixture Magento/Swatches/_files/swatch_attribute.php + */ + public function testSwatchOptionAdd() + { + $om = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + + /** @var \Magento\Catalog\Api\Data\ProductAttributeInterface $attribute */ + $attribute = $om + ->create(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::class) + ->load('color_swatch', 'attribute_code'); + $optionsPerAttribute = 3; + + $data['options']['option'] = array_reduce( + range(10, $optionsPerAttribute), + function ($values, $index) use ($optionsPerAttribute) { + $values[] = [ + 'label' => 'option ' . $index, + 'value' => 'option_' . $index + ]; + return $values; + }, + [] + ); + + /** @var AttributeOptionInterface[] $options */ + $options = []; + foreach ($data['options']['option'] as $optionData) { + $options[] = $om->get(AttributeOptionInterfaceFactory::class)->create(['data' => $optionData]); + } + + /** @var ProductAttributeOptionManagementInterface $optionManagement */ + $optionManagement = $om->get(ProductAttributeOptionManagementInterface::class); + foreach ($options as $option) { + $optionManagement->add( + $attribute->getAttributeCode(), + $option + ); + } + + $items = $optionManagement->getItems($attribute->getAttributeCode()); + array_walk( + $items, + function (&$item) { + /** @var AttributeOptionInterface $item */ + $item = $item->getLabel(); + } + ); + foreach ($options as $option) { + $this->assertTrue(in_array($option->getLabel(), $items)); + } + } +} From bc727b159a4593e693e89dac7360f7da5c50962a Mon Sep 17 00:00:00 2001 From: Dmytro Vilchynskyi <dvilchynskyi@magento.com> Date: Tue, 21 Nov 2017 13:26:34 +0200 Subject: [PATCH 284/653] MAGETWO-70725: Admin token does not expire after 'Admin Token Lifetime (hours)' - fix static tests --- .../Unit/Model/Authorization/TokenUserContextTest.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Webapi/Test/Unit/Model/Authorization/TokenUserContextTest.php b/app/code/Magento/Webapi/Test/Unit/Model/Authorization/TokenUserContextTest.php index f7ab848083dcc..3fca984725757 100644 --- a/app/code/Magento/Webapi/Test/Unit/Model/Authorization/TokenUserContextTest.php +++ b/app/code/Magento/Webapi/Test/Unit/Model/Authorization/TokenUserContextTest.php @@ -100,11 +100,12 @@ protected function setUp() $this->dateTimeMock->expects($this->any()) ->method('strToTime') - ->will($this->returnCallback( - function ($str) { - return strtotime($str); - } - ) + ->will( + $this->returnCallback( + function ($str) { + return strtotime($str); + } + ) ); $this->tokenUserContext = $this->objectManager->getObject( From cd7dc5652b56b62713808233b0220cc7c8741078 Mon Sep 17 00:00:00 2001 From: Marius Grad <grad_marius@yahoo.com> Date: Tue, 21 Nov 2017 13:33:44 +0200 Subject: [PATCH 285/653] revert type parameter on method prepareSortableFieldsByCategory --- app/code/Magento/Catalog/Block/Product/ListProduct.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php index 0d9a19ce6ae80..db592353da44a 100644 --- a/app/code/Magento/Catalog/Block/Product/ListProduct.php +++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php @@ -305,7 +305,7 @@ protected function _getConfig() * @param Category $category * @return $this */ - public function prepareSortableFieldsByCategory(Category $category) + public function prepareSortableFieldsByCategory($category) { if (!$this->getAvailableOrders()) { $this->setAvailableOrders($category->getAvailableSortByOptions()); From 6fc27357f240786b1a3bb0319fb8438bc6a18f40 Mon Sep 17 00:00:00 2001 From: Dmytro Vilchynskyi <dvilchynskyi@magento.com> Date: Tue, 21 Nov 2017 13:58:19 +0200 Subject: [PATCH 286/653] MAGETWO-70725: Admin token does not expire after 'Admin Token Lifetime (hours)' - fix static tests --- .../Model/Authorization/TokenUserContext.php | 33 +++++---- .../Authorization/TokenUserContextTest.php | 73 +++++++++++-------- 2 files changed, 61 insertions(+), 45 deletions(-) diff --git a/app/code/Magento/Webapi/Model/Authorization/TokenUserContext.php b/app/code/Magento/Webapi/Model/Authorization/TokenUserContext.php index afa5889fe55e8..110191360acfd 100644 --- a/app/code/Magento/Webapi/Model/Authorization/TokenUserContext.php +++ b/app/code/Magento/Webapi/Model/Authorization/TokenUserContext.php @@ -8,11 +8,13 @@ use Magento\Authorization\Model\UserContextInterface; use Magento\Framework\App\ObjectManager; -use Magento\Framework\Oauth\Exception; use Magento\Integration\Model\Oauth\Token; use Magento\Integration\Model\Oauth\TokenFactory; use Magento\Integration\Api\IntegrationServiceInterface; use Magento\Framework\Webapi\Request; +use Magento\Framework\Stdlib\DateTime\DateTime as Date; +use Magento\Framework\Stdlib\DateTime; +use Magento\Integration\Helper\Oauth\Data as OauthHelper; /** * A user context determined by tokens in a HTTP request Authorization header. @@ -50,46 +52,50 @@ class TokenUserContext implements UserContextInterface protected $integrationService; /** - * @var \Magento\Framework\Stdlib\DateTime + * @var DateTime */ private $dateTime; /** - * @var \Magento\Framework\Stdlib\DateTime\DateTime + * @var Date */ private $date; /** - * @var \Magento\Integration\Helper\Oauth\Data + * @var OauthHelper */ private $oauthHelper; /** * Initialize dependencies. * + * TokenUserContext constructor. * @param Request $request * @param TokenFactory $tokenFactory * @param IntegrationServiceInterface $integrationService + * @param DateTime|null $dateTime + * @param Date|null $date + * @param OauthHelper|null $oauthHelper */ public function __construct( Request $request, TokenFactory $tokenFactory, IntegrationServiceInterface $integrationService, - \Magento\Framework\Stdlib\DateTime $dateTime = null, - \Magento\Framework\Stdlib\DateTime\DateTime $date = null, - \Magento\Integration\Helper\Oauth\Data $oauthHelper = null + DateTime $dateTime = null, + Date $date = null, + OauthHelper $oauthHelper = null ) { $this->request = $request; $this->tokenFactory = $tokenFactory; $this->integrationService = $integrationService; $this->dateTime = $dateTime ?: ObjectManager::getInstance()->get( - \Magento\Framework\Stdlib\DateTime::class + DateTime::class ); $this->date = $date ?: ObjectManager::getInstance()->get( - \Magento\Framework\Stdlib\DateTime\DateTime::class + Date::class ); $this->oauthHelper = $oauthHelper ?: ObjectManager::getInstance()->get( - \Magento\Integration\Helper\Oauth\Data::class + OauthHelper::class ); } @@ -115,14 +121,13 @@ public function getUserType() * Check if token is expired. * * @param Token $token - * * @return bool */ - private function isTokenExpired(Token $token) + private function isTokenExpired(Token $token): bool { - if ($token->getUserType() == \Magento\Authorization\Model\UserContextInterface::USER_TYPE_ADMIN) { + if ($token->getUserType() == UserContextInterface::USER_TYPE_ADMIN) { $tokenTtl = $this->oauthHelper->getAdminTokenLifetime(); - } elseif ($token->getUserType() == \Magento\Authorization\Model\UserContextInterface::USER_TYPE_CUSTOMER) { + } elseif ($token->getUserType() == UserContextInterface::USER_TYPE_CUSTOMER) { $tokenTtl = $this->oauthHelper->getCustomerTokenLifetime(); } else { // other user-type tokens are considered always valid diff --git a/app/code/Magento/Webapi/Test/Unit/Model/Authorization/TokenUserContextTest.php b/app/code/Magento/Webapi/Test/Unit/Model/Authorization/TokenUserContextTest.php index 3fca984725757..c7272e3e5a2b2 100644 --- a/app/code/Magento/Webapi/Test/Unit/Model/Authorization/TokenUserContextTest.php +++ b/app/code/Magento/Webapi/Test/Unit/Model/Authorization/TokenUserContextTest.php @@ -6,68 +6,78 @@ namespace Magento\Webapi\Test\Unit\Model\Authorization; +use Magento\Webapi\Model\Authorization\TokenUserContext; +use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Authorization\Model\UserContextInterface; +use Magento\Integration\Model\Oauth\TokenFactory; +use Magento\Integration\Model\Oauth\Token; +use Magento\Integration\Api\IntegrationServiceInterface; +use Magento\Framework\Webapi\Request; +use Magento\Integration\Helper\Oauth\Data as OauthHelper; +use Magento\Framework\Stdlib\DateTime\DateTime as Date; +use Magento\Framework\Stdlib\DateTime; +use Magento\Integration\Model\Integration; /** - * Tests \Magento\Webapi\Model\Authorization\TokenUserContext + * Tests TokenUserContext */ class TokenUserContextTest extends \PHPUnit\Framework\TestCase { /** - * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager + * @var ObjectManager */ protected $objectManager; /** - * @var \Magento\Webapi\Model\Authorization\TokenUserContext + * @var TokenUserContext */ protected $tokenUserContext; /** - * @var \Magento\Integration\Model\Oauth\TokenFactory|\PHPUnit_Framework_MockObject_MockObject + * @var TokenFactory|\PHPUnit_Framework_MockObject_MockObject */ protected $tokenFactory; /** - * @var \Magento\Integration\Api\IntegrationServiceInterface|\PHPUnit_Framework_MockObject_MockObject + * @var IntegrationServiceInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $integrationService; /** - * @var \Magento\Framework\Webapi\Request|\PHPUnit_Framework_MockObject_MockObject + * @var Request|\PHPUnit_Framework_MockObject_MockObject */ protected $request; /** - * @var \Magento\Integration\Helper\Oauth\Data|\PHPUnit_Framework_MockObject_MockObject + * @var OauthHelper|\PHPUnit_Framework_MockObject_MockObject */ private $oauthHelperMock; /** - * @var \Magento\Framework\Stdlib\DateTime\DateTime|\PHPUnit_Framework_MockObject_MockObject + * @var Date|\PHPUnit_Framework_MockObject_MockObject */ private $dateMock; /** - * @var \Magento\Framework\Stdlib\DateTime|\PHPUnit_Framework_MockObject_MockObject + * @var DateTime|\PHPUnit_Framework_MockObject_MockObject */ private $dateTimeMock; protected function setUp() { - $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $this->objectManager = new ObjectManager($this); - $this->request = $this->getMockBuilder(\Magento\Framework\Webapi\Request::class) + $this->request = $this->getMockBuilder(Request::class) ->disableOriginalConstructor() ->setMethods(['getHeader']) ->getMock(); - $this->tokenFactory = $this->getMockBuilder(\Magento\Integration\Model\Oauth\TokenFactory::class) + $this->tokenFactory = $this->getMockBuilder(TokenFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); - $this->integrationService = $this->getMockBuilder(\Magento\Integration\Api\IntegrationServiceInterface::class) + $this->integrationService = $this->getMockBuilder(IntegrationServiceInterface::class) ->disableOriginalConstructor() ->setMethods( [ @@ -83,17 +93,17 @@ protected function setUp() ) ->getMock(); - $this->oauthHelperMock = $this->getMockBuilder(\Magento\Integration\Helper\Oauth\Data::class) + $this->oauthHelperMock = $this->getMockBuilder(OauthHelper::class) ->disableOriginalConstructor() ->setMethods(['getAdminTokenLifetime', 'getCustomerTokenLifetime']) ->getMock(); - $this->dateMock = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime\DateTime::class) + $this->dateMock = $this->getMockBuilder(Date::class) ->disableOriginalConstructor() ->setMethods(['gmtTimestamp']) ->getMock(); - $this->dateTimeMock = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime::class) + $this->dateTimeMock = $this->getMockBuilder(DateTime::class) ->disableOriginalConstructor() ->setMethods(['strToTime']) ->getMock(); @@ -109,7 +119,7 @@ function ($str) { ); $this->tokenUserContext = $this->objectManager->getObject( - \Magento\Webapi\Model\Authorization\TokenUserContext::class, + TokenUserContext::class, [ 'request' => $this->request, 'tokenFactory' => $this->tokenFactory, @@ -160,7 +170,7 @@ public function testNoTokenInDatabase() ->with('Authorization') ->will($this->returnValue("Bearer {$bearerToken}")); - $token = $this->getMockBuilder(\Magento\Integration\Model\Oauth\Token::class) + $token = $this->getMockBuilder(Token::class) ->disableOriginalConstructor() ->setMethods(['loadByToken', 'getId', '__wakeup']) ->getMock(); @@ -188,7 +198,7 @@ public function testRevokedToken() ->with('Authorization') ->will($this->returnValue("Bearer {$bearerToken}")); - $token = $this->getMockBuilder(\Magento\Integration\Model\Oauth\Token::class) + $token = $this->getMockBuilder(Token::class) ->disableOriginalConstructor() ->setMethods(['loadByToken', 'getId', 'getRevoked', '__wakeup']) ->getMock(); @@ -222,7 +232,7 @@ public function testValidToken($userType, $userId, $expectedUserType, $expectedU ->with('Authorization') ->will($this->returnValue("Bearer {$bearerToken}")); - $token = $this->getMockBuilder(\Magento\Integration\Model\Oauth\Token::class) + $token = $this->getMockBuilder(Token::class) ->disableOriginalConstructor() ->setMethods( [ @@ -255,7 +265,7 @@ public function testValidToken($userType, $userId, $expectedUserType, $expectedU switch ($userType) { case UserContextInterface::USER_TYPE_INTEGRATION: - $integration = $this->getMockBuilder(\Magento\Integration\Model\Integration::class) + $integration = $this->getMockBuilder(Integration::class) ->disableOriginalConstructor() ->setMethods(['getId', '__wakeup']) ->getMock(); @@ -333,7 +343,7 @@ public function testExpiredToken($tokenData, $tokenTtl, $currentTime, $expectedU ->with('Authorization') ->will($this->returnValue("Bearer {$bearerToken}")); - $token = $this->getMockBuilder(\Magento\Integration\Model\Oauth\Token::class) + $token = $this->getMockBuilder(Token::class) ->disableOriginalConstructor() ->setMethods( [ @@ -378,7 +388,7 @@ public function testExpiredToken($tokenData, $tokenTtl, $currentTime, $expectedU switch ($tokenData['user_type']) { case UserContextInterface::USER_TYPE_INTEGRATION: - $integration = $this->getMockBuilder(\Magento\Integration\Model\Integration::class) + $integration = $this->getMockBuilder(Integration::class) ->disableOriginalConstructor() ->setMethods(['getId', '__wakeup']) ->getMock(); @@ -411,7 +421,8 @@ public function testExpiredToken($tokenData, $tokenTtl, $currentTime, $expectedU } /** - * Data provider for expired token test + * Data provider for expired token test. + * * @return array */ public function getExpiredTestTokenData() @@ -426,7 +437,7 @@ public function getExpiredTestTokenData() ], 'tokenTtl' => 1, 'currentTime' => $time, - 'expedtedUserType' => null, + 'expectedUserType' => null, 'expectedUserId' => null, ], 'token_vigent_admin' => [ @@ -437,7 +448,7 @@ public function getExpiredTestTokenData() ], 'tokenTtl' => 1, 'currentTime' => $time, - 'expedtedUserType' => UserContextInterface::USER_TYPE_ADMIN, + 'expectedUserType' => UserContextInterface::USER_TYPE_ADMIN, 'expectedUserId' => 1234, ], 'token_expired_customer' => [ @@ -448,7 +459,7 @@ public function getExpiredTestTokenData() ], 'tokenTtl' => 1, 'currentTime' => $time, - 'expedtedUserType' => null, + 'expectedUserType' => null, 'expectedUserId' => null, ], 'token_vigent_customer' => [ @@ -459,7 +470,7 @@ public function getExpiredTestTokenData() ], 'tokenTtl' => 1, 'currentTime' => $time, - 'expedtedUserType' => UserContextInterface::USER_TYPE_CUSTOMER, + 'expectedUserType' => UserContextInterface::USER_TYPE_CUSTOMER, 'expectedUserId' => 1234, ], 'token_expired_integration' => [ @@ -481,7 +492,7 @@ public function getExpiredTestTokenData() ], 'tokenTtl' => 1, 'currentTime' => $time, - 'expedtedUserType' => UserContextInterface::USER_TYPE_INTEGRATION, + 'expectedUserType' => UserContextInterface::USER_TYPE_INTEGRATION, 'expectedUserId' => 1234, ], 'token_expired_guest' => [ @@ -492,7 +503,7 @@ public function getExpiredTestTokenData() ], 'tokenTtl' => 1, 'currentTime' => $time, - 'expedtedUserType' => null, + 'expectedUserType' => null, 'expectedUserId' => null, ], 'token_vigent_guest' => [ @@ -503,7 +514,7 @@ public function getExpiredTestTokenData() ], 'tokenTtl' => 1, 'currentTime' => $time, - 'expedtedUserType' => null, + 'expectedUserType' => null, 'expectedUserId' => null, ], ]; From 0031a1c56b5277149e3cdc567251c19dbcf8df12 Mon Sep 17 00:00:00 2001 From: Javier Villanueva <javier@medialounge.co.uk> Date: Wed, 18 Oct 2017 14:36:49 +0100 Subject: [PATCH 287/653] Fix depends field not working for radio elements Fixes #9360 --- lib/web/mage/adminhtml/form.js | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/web/mage/adminhtml/form.js b/lib/web/mage/adminhtml/form.js index 0053dce8207dd..2bd3ef86e8f90 100644 --- a/lib/web/mage/adminhtml/form.js +++ b/lib/web/mage/adminhtml/form.js @@ -386,7 +386,7 @@ define([ * @param {Object} config */ initialize: function (elementsMap, config) { - var idTo, idFrom; + var idTo, idFrom, values, fromId, radioFrom; if (config) { this._config = config; @@ -400,10 +400,21 @@ define([ 'change', this.trackChange.bindAsEventListener(this, idTo, elementsMap[idTo]) ); - this.trackChange(null, idTo, elementsMap[idTo]); } else { - this.trackChange(null, idTo, elementsMap[idTo]); + // Check if radio button + values = elementsMap[idTo][idFrom].values; + fromId = $(idFrom + values[0]); + radioFrom = fromId ? $$('[name="' + fromId.name + '"]') : false; + + if (radioFrom) { + radioFrom.invoke( + 'on', + 'change', + this.trackChange.bindAsEventListener(this, idTo, elementsMap[idTo]) + ); + } } + this.trackChange(null, idTo, elementsMap[idTo]); } } }, @@ -428,7 +439,7 @@ define([ // define whether the target should show up var shouldShowUp = true, idFrom, from, values, isInArray, isNegative, headElement, isInheritCheckboxChecked, target, inputs, - isAnInputOrSelect, currentConfig,rowElement; + isAnInputOrSelect, currentConfig, rowElement, fromId, radioFrom; for (idFrom in valuesFrom) { //eslint-disable-line guard-for-in from = $(idFrom); @@ -441,6 +452,17 @@ define([ if (!from || isInArray && isNegative || !isInArray && !isNegative) { shouldShowUp = false; } + // Check if radio button + } else { + values = valuesFrom[idFrom].values; + fromId = $(idFrom + values[0]); + radioFrom = fromId ? $$('[name="' + fromId.name + '"]:checked') : []; + isInArray = radioFrom.length > 0 && values.indexOf(radioFrom[0].value) !== -1; + isNegative = valuesFrom[idFrom].negative; + + if (!radioFrom || isInArray && isNegative || !isInArray && !isNegative) { + shouldShowUp = false; + } } } From 3788f82e4ddc7a86d88f2c1251f2efb33530af7a Mon Sep 17 00:00:00 2001 From: Kostyantyn Alexeyev <kalexeyev@magento.com> Date: Tue, 21 Nov 2017 19:47:00 +0200 Subject: [PATCH 288/653] MAGETWO-83152: [github] Pages are cached in browser and not updated --- app/code/Magento/PageCache/etc/varnish4.vcl | 8 ++++++++ app/code/Magento/PageCache/etc/varnish5.vcl | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/app/code/Magento/PageCache/etc/varnish4.vcl b/app/code/Magento/PageCache/etc/varnish4.vcl index 9e57f1e362320..ba72ecc0652e2 100644 --- a/app/code/Magento/PageCache/etc/varnish4.vcl +++ b/app/code/Magento/PageCache/etc/varnish4.vcl @@ -157,6 +157,7 @@ sub vcl_backend_response { } # validate if we need to cache it and prevent from setting cookie + # images, css and js are cacheable by default so we have to remove cookie also if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) { unset beresp.http.set-cookie; } @@ -187,6 +188,13 @@ sub vcl_deliver { unset resp.http.Age; } + # Not letting browser to cache non-static files. + if (req.url !~ "^/(pub/)?(media|static)/") { + set resp.http.Pragma = "no-cache"; + set resp.http.Expires = "-1"; + set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0"; + } + unset resp.http.X-Magento-Debug; unset resp.http.X-Magento-Tags; unset resp.http.X-Powered-By; diff --git a/app/code/Magento/PageCache/etc/varnish5.vcl b/app/code/Magento/PageCache/etc/varnish5.vcl index cfc2192688748..426a776a6c123 100644 --- a/app/code/Magento/PageCache/etc/varnish5.vcl +++ b/app/code/Magento/PageCache/etc/varnish5.vcl @@ -158,6 +158,7 @@ sub vcl_backend_response { } # validate if we need to cache it and prevent from setting cookie + # images, css and js are cacheable by default so we have to remove cookie also if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) { unset beresp.http.set-cookie; } @@ -188,6 +189,13 @@ sub vcl_deliver { unset resp.http.Age; } + # Not letting browser to cache non-static files. + if (req.url !~ "^/(pub/)?(media|static)/") { + set resp.http.Pragma = "no-cache"; + set resp.http.Expires = "-1"; + set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0"; + } + unset resp.http.X-Magento-Debug; unset resp.http.X-Magento-Tags; unset resp.http.X-Powered-By; From ae6839a42cf8e011b4f96db8df53093ac0f8d18a Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko <okorshenko@magento.com> Date: Tue, 21 Nov 2017 17:08:01 -0600 Subject: [PATCH 289/653] MAGETWO-84267: #11528 can't save customizable options #12048 - fixed code style --- .../Product/Form/Modifier/AdvancedPricing.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/AdvancedPricing.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/AdvancedPricing.php index d66c8db01b4f2..c8ee83ee36f97 100644 --- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/AdvancedPricing.php +++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/AdvancedPricing.php @@ -396,7 +396,8 @@ private function addAdvancedPriceLink() 'additionalForGroup' => true, 'provider' => false, 'source' => 'product_details', - 'sortOrder' => $this->arrayManager->get($pricePath . '/arguments/data/config/sortOrder', $this->meta) + 1, + 'sortOrder' => + $this->arrayManager->get($pricePath . '/arguments/data/config/sortOrder', $this->meta) + 1, ]; $this->meta = $this->arrayManager->set( @@ -433,7 +434,8 @@ private function getTierPriceStructure($tierPricePath) ], 'disabled' => false, 'required' => false, - 'sortOrder' => $this->arrayManager->get($tierPricePath . '/arguments/data/config/sortOrder', $this->meta), + 'sortOrder' => + $this->arrayManager->get($tierPricePath . '/arguments/data/config/sortOrder', $this->meta), ], ], ], @@ -567,7 +569,8 @@ private function specialPriceDataToInline() 'additionalClasses' => 'admin__control-grouped-date', 'breakLine' => false, 'component' => 'Magento_Ui/js/form/components/group', - 'scopeLabel' => $this->arrayManager->get($pathFrom . '/arguments/data/config/scopeLabel', $this->meta), + 'scopeLabel' => + $this->arrayManager->get($pathFrom . '/arguments/data/config/scopeLabel', $this->meta), ] ); $this->meta = $this->arrayManager->merge( From ff734598c86942dd98f55bbd9e0a30b361da26e6 Mon Sep 17 00:00:00 2001 From: Rhodri Davies <rhodri.davies@temando.com> Date: Wed, 22 Nov 2017 11:04:37 +1100 Subject: [PATCH 290/653] CAPTCHA LABEL : Update the captcha labels and help text to refer to the contents of the captcha image --- app/code/Magento/Captcha/i18n/en_US.csv | 4 ++-- .../Magento/Captcha/view/adminhtml/templates/default.phtml | 2 +- .../Magento/Captcha/view/frontend/templates/default.phtml | 4 ++-- .../Captcha/view/frontend/web/template/checkout/captcha.html | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Captcha/i18n/en_US.csv b/app/code/Magento/Captcha/i18n/en_US.csv index 2de4ab5345c88..3c56d3f0d393d 100644 --- a/app/code/Magento/Captcha/i18n/en_US.csv +++ b/app/code/Magento/Captcha/i18n/en_US.csv @@ -4,10 +4,10 @@ Always,Always "Incorrect CAPTCHA","Incorrect CAPTCHA" "Incorrect CAPTCHA.","Incorrect CAPTCHA." "The account is locked. Please wait and try again or contact %1.","The account is locked. Please wait and try again or contact %1." -"Please enter the letters from the image","Please enter the letters from the image" +"Please enter the letters and numbers from the image","Please enter the letters and numbers from the image" "<strong>Attention</strong>: Captcha is case sensitive.","<strong>Attention</strong>: Captcha is case sensitive." "Reload captcha","Reload captcha" -"Please type the letters below","Please type the letters below" +"Please type the letters and numbers below","Please type the letters and numbers below" "Attention: Captcha is case sensitive.","Attention: Captcha is case sensitive." CAPTCHA,CAPTCHA "Enable CAPTCHA in Admin","Enable CAPTCHA in Admin" diff --git a/app/code/Magento/Captcha/view/adminhtml/templates/default.phtml b/app/code/Magento/Captcha/view/adminhtml/templates/default.phtml index b8dcd6c654c8e..1be4bd19cd4ba 100644 --- a/app/code/Magento/Captcha/view/adminhtml/templates/default.phtml +++ b/app/code/Magento/Captcha/view/adminhtml/templates/default.phtml @@ -13,7 +13,7 @@ $captcha = $block->getCaptchaModel(); ?> <div class="admin__field _required"> <label for="captcha" class="admin__field-label"> - <span><?= $block->escapeHtml(__('Please enter the letters from the image')) ?></span> + <span><?= $block->escapeHtml(__('Please enter the letters and numbers from the image')) ?></span> </label> <div class="admin__field-control"> <input diff --git a/app/code/Magento/Captcha/view/frontend/templates/default.phtml b/app/code/Magento/Captcha/view/frontend/templates/default.phtml index 9851b1cd8bd7d..980a78ff0f7c5 100644 --- a/app/code/Magento/Captcha/view/frontend/templates/default.phtml +++ b/app/code/Magento/Captcha/view/frontend/templates/default.phtml @@ -12,7 +12,7 @@ $captcha = $block->getCaptchaModel(); ?> <div class="field captcha required" role="<?= $block->escapeHtmlAttr($block->getFormId()) ?>"> - <label for="captcha_<?= $block->escapeHtmlAttr($block->getFormId()) ?>" class="label"><span><?= $block->escapeHtml(__('Please type the letters below')) ?></span></label> + <label for="captcha_<?= $block->escapeHtmlAttr($block->getFormId()) ?>" class="label"><span><?= $block->escapeHtml(__('Please type the letters and numbers below')) ?></span></label> <div class="control captcha"> <input name="<?= $block->escapeHtmlAttr(\Magento\Captcha\Helper\Data::INPUT_NAME_FIELD_VALUE) ?>[<?= $block->escapeHtmlAttr($block->getFormId()) ?>]" type="text" class="input-text required-entry" data-validate="{required:true}" id="captcha_<?= $block->escapeHtmlAttr($block->getFormId()) ?>" /> <div class="nested"> @@ -23,7 +23,7 @@ $captcha = $block->getCaptchaModel(); "imageLoader": "<?= $block->escapeUrl($block->getViewFileUrl('images/loader-2.gif')) ?>", "type": "<?= $block->escapeHtmlAttr($block->getFormId()) ?>"}}'> <div class="control captcha-image"> - <img alt="<?= $block->escapeHtmlAttr(__('Please type the letters below')) ?>" class="captcha-img" height="<?= /* @noEscape */ (float) $block->getImgHeight() ?>" src="<?= $block->escapeUrl($captcha->getImgSrc()) ?>"/> + <img alt="<?= $block->escapeHtmlAttr(__('Please type the letters and numbers below')) ?>" class="captcha-img" height="<?= /* @noEscape */ (float) $block->getImgHeight() ?>" src="<?= $block->escapeUrl($captcha->getImgSrc()) ?>"/> <button type="button" class="action reload captcha-reload" title="<?= $block->escapeHtmlAttr(__('Reload captcha')) ?>"><span><?= $block->escapeHtml(__('Reload captcha')) ?></span></button> </div> </div> diff --git a/app/code/Magento/Captcha/view/frontend/web/template/checkout/captcha.html b/app/code/Magento/Captcha/view/frontend/web/template/checkout/captcha.html index 6767a121d849d..1e2f595a0087f 100644 --- a/app/code/Magento/Captcha/view/frontend/web/template/checkout/captcha.html +++ b/app/code/Magento/Captcha/view/frontend/web/template/checkout/captcha.html @@ -6,7 +6,7 @@ --> <!-- ko if: (isRequired() && getIsVisible())--> <div class="field captcha required" data-bind="blockLoader: getIsLoading()"> - <label data-bind="attr: {for: 'captcha_' + formId}" class="label"><span data-bind="i18n: 'Please type the letters below'"></span></label> + <label data-bind="attr: {for: 'captcha_' + formId}" class="label"><span data-bind="i18n: 'Please type the letters and numbers below'"></span></label> <div class="control captcha"> <input name="captcha_string" type="text" class="input-text required-entry" data-bind="value: captchaValue(), attr: {id: 'captcha_' + formId, 'data-scope': dataScope}" /> <input name="captcha_form_id" type="hidden" data-bind="value: formId, attr: {'data-scope': dataScope}" /> @@ -14,7 +14,7 @@ <div class="field captcha no-label"> <div class="control captcha-image"> <img data-bind="attr: { - alt: $t('Please type the letters below'), + alt: $t('Please type the letters and numbers below'), height: imageHeight(), src: getImageSource(), }" From 9165dd9e16235c723283a2beddd905049c23c818 Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko <okorshenko@magento.com> Date: Tue, 21 Nov 2017 18:41:13 -0600 Subject: [PATCH 291/653] MAGETWO-84272: Update AbstractBackend.php #12120 - fixed failed tests --- .../Eav/Model/Entity/Attribute/Backend/AbstractBackend.php | 5 +++-- .../testsuite/Magento/Customer/Api/AccountManagementTest.php | 4 ++-- .../Magento/Catalog/Controller/Adminhtml/CategoryTest.php | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Backend/AbstractBackend.php b/app/code/Magento/Eav/Model/Entity/Attribute/Backend/AbstractBackend.php index 206bff163f201..38e7b883f4ea5 100644 --- a/app/code/Magento/Eav/Model/Entity/Attribute/Backend/AbstractBackend.php +++ b/app/code/Magento/Eav/Model/Entity/Attribute/Backend/AbstractBackend.php @@ -231,13 +231,13 @@ public function validate($object) $attribute = $this->getAttribute(); $attrCode = $attribute->getAttributeCode(); $value = $object->getData($attrCode); - $label = $attribute->getFrontend()->getLabel(); if ($attribute->getIsVisible() && $attribute->getIsRequired() && $attribute->isValueEmpty($value) && $attribute->isValueEmpty($attribute->getDefaultValue()) ) { + $label = $attribute->getFrontend()->getLabel(); throw new LocalizedException(__('The value of attribute "%1" must be set', $label)); } @@ -249,7 +249,8 @@ public function validate($object) } if ($attribute->getIsUnique()) { - if (!$attribute->getEntity()->checkAttributeUniqueValue($attribute, $object)) { + if (!$attribute->getEntity()->checkAttributeUniqueValue($attribute, $object)) { + $label = $attribute->getFrontend()->getLabel(); throw new LocalizedException(__('The value of attribute "%1" must be unique', $label)); } } diff --git a/dev/tests/api-functional/testsuite/Magento/Customer/Api/AccountManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Customer/Api/AccountManagementTest.php index dec9711cda70f..48cc8b8384d74 100644 --- a/dev/tests/api-functional/testsuite/Magento/Customer/Api/AccountManagementTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Customer/Api/AccountManagementTest.php @@ -579,8 +579,8 @@ public function testValidateCustomerData() $validationResponse = $this->_webApiCall($serviceInfo, $requestData); $this->assertFalse($validationResponse['valid']); - $this->assertEquals('The value of attribute "firstname" must be set', $validationResponse['messages'][0]); - $this->assertEquals('The value of attribute "lastname" must be set', $validationResponse['messages'][1]); + $this->assertEquals('The value of attribute "First Name" must be set', $validationResponse['messages'][0]); + $this->assertEquals('The value of attribute "Last Name" must be set', $validationResponse['messages'][1]); } public function testIsReadonly() diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/CategoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/CategoryTest.php index fd7e23e507c5f..bfc7e33d5f771 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/CategoryTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/CategoryTest.php @@ -339,7 +339,7 @@ public function testSaveActionCategoryWithDangerRequest() ); $this->dispatch('backend/catalog/category/save'); $this->assertSessionMessages( - $this->equalTo(['The value of attribute "name" must be set']), + $this->equalTo(['The value of attribute "Name" must be set']), \Magento\Framework\Message\MessageInterface::TYPE_ERROR ); } From 97d449ce3b90a18a6292c2c739cb325519769985 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Wed, 22 Nov 2017 11:22:57 +0200 Subject: [PATCH 292/653] 9515: South Korea Zip Code Validation incorrect --- app/code/Magento/Directory/etc/zip_codes.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Directory/etc/zip_codes.xml b/app/code/Magento/Directory/etc/zip_codes.xml index d70dee8abc15b..229089337110a 100644 --- a/app/code/Magento/Directory/etc/zip_codes.xml +++ b/app/code/Magento/Directory/etc/zip_codes.xml @@ -226,7 +226,7 @@ </zip> <zip countryCode="KR"> <codes> - <code id="pattern_1" active="true" example="123-456">^[0-9]{3}-[0-9]{3}$</code> + <code id="pattern_1" active="true" example="12345">^[0-9]{5}$</code> </codes> </zip> <zip countryCode="KG"> From 1f7618a7e71233acbc0d93e0159c93da74766645 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Wed, 22 Nov 2017 12:50:38 +0200 Subject: [PATCH 293/653] 11882: It's not possible to enable "log to file" (debugging) in production mode. Psr logger debug method does not work by the default in developer mode. --- app/code/Magento/Deploy/etc/di.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Deploy/etc/di.xml b/app/code/Magento/Deploy/etc/di.xml index e59ad7e39fc43..5f031842536cc 100644 --- a/app/code/Magento/Deploy/etc/di.xml +++ b/app/code/Magento/Deploy/etc/di.xml @@ -80,6 +80,8 @@ <item name="lock" xsi:type="boolean">false</item> </item> </item> + </item> + <item name="production" xsi:type="array"> <item name="developer" xsi:type="array"> <item name="dev/debug/debug_logging" xsi:type="array"> <item name="value" xsi:type="string">1</item> @@ -87,7 +89,13 @@ </item> </item> </item> - <item name="production" xsi:type="array"> + <item name="default" xsi:type="array"> + <item name="production" xsi:type="array"> + <item name="dev/debug/debug_logging" xsi:type="array"> + <item name="value" xsi:type="string">0</item> + <item name="lock" xsi:type="boolean">false</item> + </item> + </item> <item name="developer" xsi:type="array"> <item name="dev/debug/debug_logging" xsi:type="array"> <item name="value" xsi:type="string">1</item> From adf18dc485f8eeaea266cc79c28193d354e79399 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Wed, 22 Nov 2017 13:36:08 +0200 Subject: [PATCH 294/653] 9468: REST API bundle-products/:sku/options/all always return is not authorized --- app/code/Magento/WebapiSecurity/etc/di.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/code/Magento/WebapiSecurity/etc/di.xml b/app/code/Magento/WebapiSecurity/etc/di.xml index 0ffdfd5574d5e..7065ec3f91b27 100644 --- a/app/code/Magento/WebapiSecurity/etc/di.xml +++ b/app/code/Magento/WebapiSecurity/etc/di.xml @@ -41,6 +41,10 @@ <item name="/V1/configurable-products/:sku/children::GET" xsi:type="string"/> <item name="/V1/configurable-products/:sku/options/:id::GET" xsi:type="string"/> <item name="/V1/configurable-products/:sku/options/all::GET" xsi:type="string"/> + <item name="/V1/bundle-products/:productSku/children::GET" xsi:type="string"/> + <item name="/V1/bundle-products/:sku/options/all::GET" xsi:type="string"/> + <item name="/V1/bundle-products/options/types::GET" xsi:type="string"/> + <item name="/V1/bundle-products/:sku/options/:optionId::GET" xsi:type="string"/> <item name="/V1/cmsPage/:pageId::GET" xsi:type="string"/> <item name="/V1/cmsBlock/:blockId::GET" xsi:type="string"/> <item name="/V1/store/storeViews::GET" xsi:type="string"/> From 5c3d29503b89d7b5f2623e33d1798c7c25dd6dcd Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Wed, 22 Nov 2017 18:10:32 +0200 Subject: [PATCH 295/653] 9515: South Korea Zip Code Validation incorrect --- .../Magento/Directory/Model/Country/Postcode/ValidatorTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/integration/testsuite/Magento/Directory/Model/Country/Postcode/ValidatorTest.php b/dev/tests/integration/testsuite/Magento/Directory/Model/Country/Postcode/ValidatorTest.php index 45a5473176e3c..cdc26079c4d36 100644 --- a/dev/tests/integration/testsuite/Magento/Directory/Model/Country/Postcode/ValidatorTest.php +++ b/dev/tests/integration/testsuite/Magento/Directory/Model/Country/Postcode/ValidatorTest.php @@ -95,7 +95,7 @@ public function getPostcodesDataProvider() ['countryId' => 'JE', 'postcode' => 'TY8 9PL'], ['countryId' => 'KZ', 'postcode' => '123456'], ['countryId' => 'KE', 'postcode' => '12345'], - ['countryId' => 'KR', 'postcode' => '123-456'], + ['countryId' => 'KR', 'postcode' => '12345'], ['countryId' => 'KG', 'postcode' => '123456'], ['countryId' => 'LV', 'postcode' => '1234'], ['countryId' => 'LI', 'postcode' => '1234'], From 5d1c79628c2e1249703da4ad5c1935bfb851ef94 Mon Sep 17 00:00:00 2001 From: Oleksandr Gorkun <ogorkun@magento.com> Date: Wed, 22 Nov 2017 19:11:20 +0200 Subject: [PATCH 296/653] MAGETWO-83152: [github] Pages are cached in browser and not updated --- app/code/Magento/PageCache/etc/varnish4.vcl | 2 +- app/code/Magento/PageCache/etc/varnish5.vcl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/PageCache/etc/varnish4.vcl b/app/code/Magento/PageCache/etc/varnish4.vcl index ba72ecc0652e2..793f8f81a03f9 100644 --- a/app/code/Magento/PageCache/etc/varnish4.vcl +++ b/app/code/Magento/PageCache/etc/varnish4.vcl @@ -189,7 +189,7 @@ sub vcl_deliver { } # Not letting browser to cache non-static files. - if (req.url !~ "^/(pub/)?(media|static)/") { + if (resp.http.Cache-Control !~ "private" && req.url !~ "^/(pub/)?(media|static)/") { set resp.http.Pragma = "no-cache"; set resp.http.Expires = "-1"; set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0"; diff --git a/app/code/Magento/PageCache/etc/varnish5.vcl b/app/code/Magento/PageCache/etc/varnish5.vcl index 426a776a6c123..4dce6356d1e73 100644 --- a/app/code/Magento/PageCache/etc/varnish5.vcl +++ b/app/code/Magento/PageCache/etc/varnish5.vcl @@ -190,7 +190,7 @@ sub vcl_deliver { } # Not letting browser to cache non-static files. - if (req.url !~ "^/(pub/)?(media|static)/") { + if (resp.http.Cache-Control !~ "private" && req.url !~ "^/(pub/)?(media|static)/") { set resp.http.Pragma = "no-cache"; set resp.http.Expires = "-1"; set resp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0"; From cbd8b28f34f164f06764f74652f8b46314c7c8f9 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Thu, 23 Nov 2017 17:06:31 +0200 Subject: [PATCH 297/653] 8255: Export Products action doesn't consider hide_for_product_page value. --- .../Import/Product/MediaGalleryProcessor.php | 164 ++++++++---------- 1 file changed, 73 insertions(+), 91 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php index bced070ae5609..55d908f2190dd 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php @@ -109,42 +109,73 @@ public function __construct( public function saveMediaGallery(array $mediaGalleryData) { $this->initMediaGalleryResources(); + $mediaGalleryDataGlobal = $this->processMediaGallery($mediaGalleryData); $imageNames = []; $multiInsertData = []; $valueToProductId = []; - $mediaGalleryData = $this->restoreDisableImage($mediaGalleryData); - foreach (array_keys($mediaGalleryData) as $storeId) { - foreach ($mediaGalleryData[$storeId] as $productSku => $mediaGalleryRows) { - $productId = $this->skuProcessor->getNewSku($productSku)[$this->getProductEntityLinkField()]; - - $insertedGalleryImgs = []; - foreach ($mediaGalleryRows as $insertValue) { - if (!in_array($insertValue['value'], $insertedGalleryImgs)) { - $valueArr = [ - 'attribute_id' => $insertValue['attribute_id'], - 'value' => $insertValue['value'], - ]; - $valueToProductId[$insertValue['value']][] = $productId; - $imageNames[] = $insertValue['value']; - $multiInsertData[] = $valueArr; - $insertedGalleryImgs[] = $insertValue['value']; - } + foreach ($mediaGalleryDataGlobal as $productSku => $mediaGalleryRows) { + $productId = $this->skuProcessor->getNewSku($productSku)[$this->getProductEntityLinkField()]; + $insertedGalleryImgs = []; + foreach ($mediaGalleryRows as $insertValue) { + if (!in_array($insertValue['value'], $insertedGalleryImgs)) { + $valueArr = [ + 'attribute_id' => $insertValue['attribute_id'], + 'value' => $insertValue['value'], + ]; + $valueToProductId[$insertValue['value']][] = $productId; + $imageNames[] = $insertValue['value']; + $multiInsertData[] = $valueArr; + $insertedGalleryImgs[] = $insertValue['value']; } } } - $multiInsertData = $this->filterImageInsertData($multiInsertData, $imageNames); - if ($multiInsertData) { + $oldMediaValues = $this->connection->fetchAssoc( + $this->connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value']) + ->where('value IN (?)', $imageNames) + ); + if (!empty($multiInsertData)) { $this->connection->insertOnDuplicate($this->mediaGalleryTableName, $multiInsertData); } + $multiInsertData = []; $newMediaSelect = $this->connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value']) ->where('value IN (?)', $imageNames); + if (array_keys($oldMediaValues)) { + $newMediaSelect->where('value_id NOT IN (?)', array_keys($oldMediaValues)); + } + $dataForSkinnyTable = []; $newMediaValues = $this->connection->fetchAssoc($newMediaSelect); - list($multiInsertData, $dataForSkinnyTable) = $this->prepareInsertData( - $mediaGalleryData, - $newMediaValues, - $valueToProductId - ); + $this->restoreDisableImage($mediaGalleryData); + foreach ($mediaGalleryData as $storeId => $mediaGalleryDataPerStore) { + foreach ($mediaGalleryDataPerStore as $productSku => $mediaGalleryRows) { + foreach ($mediaGalleryRows as $insertValue) { + foreach ($newMediaValues as $value_id => $values) { + if ($values['value'] == $insertValue['value']) { + $insertValue['value_id'] = $value_id; + $insertValue[$this->getProductEntityLinkField()] + = array_shift($valueToProductId[$values['value']]); + unset($newMediaValues[$value_id]); + break; + } + } + if (isset($insertValue['value_id'])) { + $valueArr = [ + 'value_id' => $insertValue['value_id'], + 'store_id' => $storeId, + $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], + 'label' => $insertValue['label'], + 'position' => $insertValue['position'], + 'disabled' => $insertValue['disabled'], + ]; + $multiInsertData[] = $valueArr; + $dataForSkinnyTable[] = [ + 'value_id' => $insertValue['value_id'], + $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], + ]; + } + } + } + } try { $this->connection->insertOnDuplicate( $this->mediaGalleryValueTableName, @@ -279,30 +310,6 @@ private function initMediaGalleryResources() } } - /** - * Remove existed images from insert data. - * - * @param array $multiInsertData - * @param array $imageNames - * @return array - */ - private function filterImageInsertData(array $multiInsertData, array $imageNames) - { - $oldMediaValues = $this->connection->fetchAssoc( - $this->connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value', 'attribute_id']) - ->where('value IN (?)', $imageNames) - ); - foreach ($multiInsertData as $key => $data) { - foreach ($oldMediaValues as $mediaValue) { - if ($data['value'] === $mediaValue['value'] && $data['attribute_id'] === $mediaValue['attribute_id']) { - unset($multiInsertData[$key]); - } - } - } - - return $multiInsertData; - } - /** * Set product images 'disable' = 0 for specified store. * @@ -336,6 +343,24 @@ private function restoreDisableImage(array $mediaGalleryData) return $mediaGalleryData; } + /** + * Remove store specific information for inserting images. + * + * @param array $mediaGalleryData + * @return array + */ + private function processMediaGallery(array $mediaGalleryData) + { + $mediaGalleryDataGlobal = array_merge(...$mediaGalleryData); + foreach ($mediaGalleryDataGlobal as $sku => $row) { + if (isset($mediaGalleryDataGlobal[$sku]['all']['restore'])) { + unset($mediaGalleryDataGlobal[$sku]); + } + } + + return $mediaGalleryDataGlobal; + } + /** * Get product entity link field. * @@ -361,47 +386,4 @@ private function getResource() return $this->resourceModel; } - - /** - * @param array $mediaGalleryData - * @param array $newMediaValues - * @param array $valueToProductId - * @return array - */ - private function prepareInsertData(array $mediaGalleryData, array $newMediaValues, array $valueToProductId) - { - $dataForSkinnyTable = []; - $multiInsertData = []; - foreach (array_keys($mediaGalleryData) as $storeId) { - foreach ($mediaGalleryData[$storeId] as $mediaGalleryRows) { - foreach ($mediaGalleryRows as $insertValue) { - foreach ($newMediaValues as $value_id => $values) { - if ($values['value'] == $insertValue['value']) { - $insertValue['value_id'] = $value_id; - $insertValue[$this->getProductEntityLinkField()] - = array_shift($valueToProductId[$values['value']]); - break; - } - } - if (isset($insertValue['value_id'])) { - $valueArr = [ - 'value_id' => $insertValue['value_id'], - 'store_id' => $storeId, - $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], - 'label' => $insertValue['label'], - 'position' => $insertValue['position'], - 'disabled' => $insertValue['disabled'], - ]; - $multiInsertData[] = $valueArr; - $dataForSkinnyTable[] = [ - 'value_id' => $insertValue['value_id'], - $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], - ]; - } - } - } - } - - return [$multiInsertData, $dataForSkinnyTable]; - } } From 5e6f1cb064ab1b0181d4cbe1f09addda25a5f3b6 Mon Sep 17 00:00:00 2001 From: Dmytro Vilchynskyi <dvilchynskyi@magento.com> Date: Thu, 23 Nov 2017 18:07:47 +0200 Subject: [PATCH 298/653] MAGETWO-77840: [2.2.x] - Special/lowest price in child of a Configurable Product causes the entire product to show that price - fixing FAT --- .../AssertCatalogPriceRuleAppliedProductPage.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedProductPage.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedProductPage.php index ce0f7a73006af..b2cc7e1297ec2 100644 --- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedProductPage.php +++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleAppliedProductPage.php @@ -11,6 +11,8 @@ use Magento\Mtf\Constraint\AbstractConstraint; use Magento\Catalog\Test\Page\Product\CatalogProductView; use Magento\Catalog\Test\Page\Category\CatalogCategoryView; +use Magento\Customer\Test\TestStep\LoginCustomerOnFrontendStep; +use Magento\Customer\Test\TestStep\LogoutCustomerOnFrontendStep; /** * Assert that Catalog Price Rule is applied on Product page. @@ -38,11 +40,11 @@ public function processAssert( ) { if ($customer !== null) { $this->objectManager->create( - \Magento\Customer\Test\TestStep\LoginCustomerOnFrontendStep::class, + LoginCustomerOnFrontendStep::class, ['customer' => $customer] )->run(); } else { - $this->objectManager->create(\Magento\Customer\Test\TestStep\LogoutCustomerOnFrontendStep::class)->run(); + $this->objectManager->create(LogoutCustomerOnFrontendStep::class)->run(); } $cmsIndexPage->open(); @@ -52,7 +54,7 @@ public function processAssert( $catalogCategoryViewPage->getListProductBlock()->getProductItem($product)->open(); $catalogProductViewPage->getViewBlock()->waitLoader(); - $productPriceBlock = $catalogProductViewPage->getViewBlock()->getPriceBlock(); + $productPriceBlock = $catalogProductViewPage->getViewBlock()->getPriceBlock($product); $actualPrice['special'] = $productPriceBlock->getSpecialPrice(); if ($productPrice[$key]['regular'] !== 'No') { $actualPrice['regular'] = $productPriceBlock->getOldPrice(); From 51fa4bc17c9a31e30e01fa3ae8fabe2c4b3583fd Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Thu, 23 Nov 2017 18:37:51 +0200 Subject: [PATCH 299/653] 8255: Export Products action doesn't consider hide_for_product_page value. --- .../Import/Product/MediaGalleryProcessor.php | 66 +++++++------------ 1 file changed, 23 insertions(+), 43 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php index 55d908f2190dd..857f8f99d212e 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php @@ -109,7 +109,8 @@ public function __construct( public function saveMediaGallery(array $mediaGalleryData) { $this->initMediaGalleryResources(); - $mediaGalleryDataGlobal = $this->processMediaGallery($mediaGalleryData); + $mediaGalleryData = $this->restoreDisableImage($mediaGalleryData); + $mediaGalleryDataGlobal = array_merge(...$mediaGalleryData); $imageNames = []; $multiInsertData = []; $valueToProductId = []; @@ -136,25 +137,22 @@ public function saveMediaGallery(array $mediaGalleryData) if (!empty($multiInsertData)) { $this->connection->insertOnDuplicate($this->mediaGalleryTableName, $multiInsertData); } - $multiInsertData = []; $newMediaSelect = $this->connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value']) ->where('value IN (?)', $imageNames); if (array_keys($oldMediaValues)) { $newMediaSelect->where('value_id NOT IN (?)', array_keys($oldMediaValues)); } - - $dataForSkinnyTable = []; $newMediaValues = $this->connection->fetchAssoc($newMediaSelect); - $this->restoreDisableImage($mediaGalleryData); foreach ($mediaGalleryData as $storeId => $mediaGalleryDataPerStore) { + $dataForSkinnyTable = []; + $multiInsertData = []; foreach ($mediaGalleryDataPerStore as $productSku => $mediaGalleryRows) { foreach ($mediaGalleryRows as $insertValue) { foreach ($newMediaValues as $value_id => $values) { if ($values['value'] == $insertValue['value']) { $insertValue['value_id'] = $value_id; - $insertValue[$this->getProductEntityLinkField()] - = array_shift($valueToProductId[$values['value']]); - unset($newMediaValues[$value_id]); + $ids = array_values($valueToProductId[$values['value']]); + $insertValue[$this->getProductEntityLinkField()] = array_shift($ids); break; } } @@ -175,23 +173,23 @@ public function saveMediaGallery(array $mediaGalleryData) } } } - } - try { - $this->connection->insertOnDuplicate( - $this->mediaGalleryValueTableName, - $multiInsertData, - ['value_id', 'store_id', $this->getProductEntityLinkField(), 'label', 'position', 'disabled'] - ); - $this->connection->insertOnDuplicate( - $this->mediaGalleryEntityToValueTableName, - $dataForSkinnyTable, - ['value_id'] - ); - } catch (\Exception $e) { - $this->connection->delete( - $this->mediaGalleryTableName, - $this->connection->quoteInto('value_id IN (?)', $newMediaValues) - ); + try { + $this->connection->insertOnDuplicate( + $this->mediaGalleryValueTableName, + $multiInsertData, + ['value_id', 'store_id', $this->getProductEntityLinkField(), 'label', 'position', 'disabled'] + ); + $this->connection->insertOnDuplicate( + $this->mediaGalleryEntityToValueTableName, + $dataForSkinnyTable, + ['value_id'] + ); + } catch (\Exception $e) { + $this->connection->delete( + $this->mediaGalleryTableName, + $this->connection->quoteInto('value_id IN (?)', $newMediaValues) + ); + } } } @@ -343,24 +341,6 @@ private function restoreDisableImage(array $mediaGalleryData) return $mediaGalleryData; } - /** - * Remove store specific information for inserting images. - * - * @param array $mediaGalleryData - * @return array - */ - private function processMediaGallery(array $mediaGalleryData) - { - $mediaGalleryDataGlobal = array_merge(...$mediaGalleryData); - foreach ($mediaGalleryDataGlobal as $sku => $row) { - if (isset($mediaGalleryDataGlobal[$sku]['all']['restore'])) { - unset($mediaGalleryDataGlobal[$sku]); - } - } - - return $mediaGalleryDataGlobal; - } - /** * Get product entity link field. * From 2955bd73efae7c2eb209ff5bd73ef3d3c7122312 Mon Sep 17 00:00:00 2001 From: Andrii Dimov <adimov@magento.com> Date: Thu, 23 Nov 2017 19:05:26 +0200 Subject: [PATCH 300/653] MAGETWO-83826: Fix path for infrastructure unit tests --- dev/tests/unit/phpunit.xml.dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/unit/phpunit.xml.dist b/dev/tests/unit/phpunit.xml.dist index 8b07d1fc39754..a9fa9787c07dc 100644 --- a/dev/tests/unit/phpunit.xml.dist +++ b/dev/tests/unit/phpunit.xml.dist @@ -19,7 +19,7 @@ <directory suffix="Test.php">../../../vendor/*/module-*/Test/Unit</directory> <directory suffix="Test.php">../../../vendor/*/framework/Test/Unit</directory> <directory suffix="Test.php">../../../vendor/*/framework/*/Test/Unit</directory> - <directory suffix="Test.php">../../tests/unit/*/Test/Unit</directory> + <directory suffix="Test.php">../../tests/unit/*/*/Test/Unit</directory> </testsuite> <php> <ini name="date.timezone" value="America/Los_Angeles"/> From c21229cb8e91ebd30a28ad63aa87405faeafeee6 Mon Sep 17 00:00:00 2001 From: Carlos Lizaga <carlos.lizaga@pronovias.com> Date: Tue, 14 Nov 2017 20:07:31 +0100 Subject: [PATCH 301/653] New validation: validate-no-utf8mb4-characters. --- .../product/view/options/type/text.phtml | 2 + .../jasmine/tests/lib/mage/validation.test.js | 72 +++++++++++++++++++ lib/web/i18n/en_US.csv | 1 + lib/web/mage/validation.js | 18 +++++ 4 files changed, 93 insertions(+) diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/options/type/text.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/options/type/text.phtml index 79dc8591fd724..11aedc33c2d42 100644 --- a/app/code/Magento/Catalog/view/frontend/templates/product/view/options/type/text.phtml +++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/options/type/text.phtml @@ -29,6 +29,7 @@ $class = ($_option->getIsRequire()) ? ' required' : ''; if ($_option->getMaxCharacters()) { $_textValidate['maxlength'] = $_option->getMaxCharacters(); } + $_textValidate['validate-no-utf8mb4-characters'] = true; ?> <input type="text" id="options_<?= /* @escapeNotVerified */ $_option->getId() ?>_text" @@ -47,6 +48,7 @@ $class = ($_option->getIsRequire()) ? ' required' : ''; if ($_option->getMaxCharacters()) { $_textAreaValidate['maxlength'] = $_option->getMaxCharacters(); } + $_textAreaValidate['validate-no-utf8mb4-characters'] = true; ?> <textarea id="options_<?= /* @escapeNotVerified */ $_option->getId() ?>_text" class="product-custom-option" diff --git a/dev/tests/js/jasmine/tests/lib/mage/validation.test.js b/dev/tests/js/jasmine/tests/lib/mage/validation.test.js index 50931f940c689..12138e5939a7b 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/validation.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/validation.test.js @@ -183,4 +183,76 @@ define([ )).toEqual(true); }); }); + + describe('Testing 3 bytes characters only policy (UTF-8)', function () { + it('rejects data, if any of the characters cannot be stored using UTF-8 collation', function () { + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, '😅😂', null + )).toEqual(false); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, '😅 test 😂', null + )).toEqual(false); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, '💩 👻 💀', null + )).toEqual(false); + }); + + it('approves data, if all the characters can be stored using UTF-8 collation', function () { + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, '', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, '!$-_%ç&#?!', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, '1234567890', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, ' ', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, 'test', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, 'испытание', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, 'тест', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, 'փորձարկում', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, 'परीक्षण', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, 'テスト', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, '테스트', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, '测试', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, '測試', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, 'ทดสอบ', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, 'δοκιμή', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, 'اختبار', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, 'تست', null + )).toEqual(true); + expect($.validator.methods['validate-no-utf8mb4-characters'].call( + $.validator.prototype, 'מִבְחָן', null + )).toEqual(true); + }); + }); + }); diff --git a/lib/web/i18n/en_US.csv b/lib/web/i18n/en_US.csv index 21cfb51d5e3c9..5c63a191420a4 100644 --- a/lib/web/i18n/en_US.csv +++ b/lib/web/i18n/en_US.csv @@ -99,6 +99,7 @@ Submit,Submit "Password cannot be the same as email address.","Password cannot be the same as email address." "Please fix this field.","Please fix this field." "Please enter a valid email address.","Please enter a valid email address." +"Please remove invalid characters: {0}.", "Please remove invalid characters: {0}." "Please enter a valid URL.","Please enter a valid URL." "Please enter a valid date (ISO).","Please enter a valid date (ISO)." "Please enter only digits.","Please enter only digits." diff --git a/lib/web/mage/validation.js b/lib/web/mage/validation.js index 85158c581aec1..fee88826be7eb 100644 --- a/lib/web/mage/validation.js +++ b/lib/web/mage/validation.js @@ -396,6 +396,24 @@ $.mage.__('Please enter at least {0} characters') ], + /* detect chars that would require more than 3 bytes */ + 'validate-no-utf8mb4-characters': [ + function (value) { + var validator = this, + message = $.mage.__('Please remove invalid characters: {0}.'), + matches = value.match(/(?:[\uD800-\uDBFF][\uDC00-\uDFFF])/g), + result = matches === null; + + if (!result) { + validator.charErrorMessage = message.replace('{0}', matches.join()); + } + + return result; + }, function () { + return this.charErrorMessage; + } + ], + /* eslint-disable max-len */ 'email2': [ function (value, element) { From 0599c8eb227536517ca3acbb4349695cb4f023b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20M=C3=A9ndez=20Calzada?= <gonzalo.mendez@interactiv4.com> Date: Thu, 23 Nov 2017 20:21:15 +0100 Subject: [PATCH 302/653] drop useless fixture, fix tests --- ...AttributeOptionManagementInterfaceTest.php | 24 +++++++++- .../Attribute/_files/swatch_attribute.php | 48 ------------------- .../Model/SwatchAttributeOptionAddTest.php | 18 +++++-- 3 files changed, 35 insertions(+), 55 deletions(-) delete mode 100644 dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/swatch_attribute.php diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductSwatchAttributeOptionManagementInterfaceTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductSwatchAttributeOptionManagementInterfaceTest.php index 11dc3c9484a61..63e5282c22104 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductSwatchAttributeOptionManagementInterfaceTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductSwatchAttributeOptionManagementInterfaceTest.php @@ -16,12 +16,12 @@ class ProductSwatchAttributeOptionManagementInterfaceTest extends WebapiAbstract const RESOURCE_PATH = '/V1/products/attributes'; /** - * @magentoApiDataFixture Magento/Catalog/Model/Product/Attribute/_files/swatch_attribute.php + * @magentoApiDataFixture Magento/Swatches/_files/swatch_attribute.php * @dataProvider addDataProvider */ public function testAdd($optionData) { - $testAttributeCode = 'swatch_attribute'; + $testAttributeCode = 'color_swatch'; $serviceInfo = [ 'rest' => [ 'resourcePath' => self::RESOURCE_PATH . '/' . $testAttributeCode . '/options', @@ -82,4 +82,24 @@ public function addDataProvider() ]; } + + /** + * @param $testAttributeCode + * @return array|bool|float|int|string + */ + private function getAttributeOptions($testAttributeCode) + { + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . '/' . $testAttributeCode . '/options', + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'getItems', + ], + ]; + return $this->_webApiCall($serviceInfo, ['attributeCode' => $testAttributeCode]); + } } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/swatch_attribute.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/swatch_attribute.php deleted file mode 100644 index 4e51d4e16ee50..0000000000000 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/swatch_attribute.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * "dropdown" fixture of product EAV attribute. - * - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -/** @var \Magento\Eav\Model\Entity\Type $entityType */ -$entityType = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( - \Magento\Eav\Model\Entity\Type::class -); -$entityType->loadByCode('catalog_product'); -$defaultSetId = $entityType->getDefaultAttributeSetId(); -/** @var \Magento\Eav\Model\Entity\Attribute\Set $defaultSet */ -$defaultSet = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( - \Magento\Eav\Model\Entity\Attribute\Set::class -); -$defaultSet->load($defaultSetId); -$defaultGroupId = $defaultSet->getDefaultGroupId(); -$optionData = ['value' => ['option_1' => [0 => 'Fixture Option']], 'order' => ['option_1' => 1]]; - -/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */ -$attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( - \Magento\Catalog\Model\ResourceModel\Eav\Attribute::class -); - -$attribute->setAttributeCode( - 'swatch_attribute' -)->setEntityTypeId( - $entityType->getEntityTypeId() -)->setAttributeGroupId( - $defaultGroupId -)->setAttributeSetId( - $defaultSetId -)->setFrontendInput( - 'media_image' -)->setFrontendLabel( - 'Swatch Attribute' -)->setBackendType( - 'varchar' -)->setFrontendModel( - \Magento\Catalog\Model\Product\Attribute\Frontend\Image::class -)->setIsUserDefined( - 1 -)->setOption( - $optionData -)->save(); diff --git a/dev/tests/integration/testsuite/Magento/Swatches/Model/SwatchAttributeOptionAddTest.php b/dev/tests/integration/testsuite/Magento/Swatches/Model/SwatchAttributeOptionAddTest.php index 4505cbd64c27b..5cfbc8e580e95 100644 --- a/dev/tests/integration/testsuite/Magento/Swatches/Model/SwatchAttributeOptionAddTest.php +++ b/dev/tests/integration/testsuite/Magento/Swatches/Model/SwatchAttributeOptionAddTest.php @@ -15,6 +15,16 @@ */ class SwatchAttributeOptionAddTest extends \PHPUnit\Framework\TestCase { + /** + * @var \Magento\Framework\ObjectManagerInterface + */ + private $objectManager; + + protected function setUp() + { + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + } + /** * @magentoAppArea adminhtml * @magentoDbIsolation enabled @@ -22,10 +32,8 @@ class SwatchAttributeOptionAddTest extends \PHPUnit\Framework\TestCase */ public function testSwatchOptionAdd() { - $om = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - /** @var \Magento\Catalog\Api\Data\ProductAttributeInterface $attribute */ - $attribute = $om + $attribute = $this->objectManager ->create(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::class) ->load('color_swatch', 'attribute_code'); $optionsPerAttribute = 3; @@ -45,11 +53,11 @@ function ($values, $index) use ($optionsPerAttribute) { /** @var AttributeOptionInterface[] $options */ $options = []; foreach ($data['options']['option'] as $optionData) { - $options[] = $om->get(AttributeOptionInterfaceFactory::class)->create(['data' => $optionData]); + $options[] = $this->objectManager->get(AttributeOptionInterfaceFactory::class)->create(['data' => $optionData]); } /** @var ProductAttributeOptionManagementInterface $optionManagement */ - $optionManagement = $om->get(ProductAttributeOptionManagementInterface::class); + $optionManagement = $this->objectManager->get(ProductAttributeOptionManagementInterface::class); foreach ($options as $option) { $optionManagement->add( $attribute->getAttributeCode(), From ddf07f27309260c7d0b32843513c282a852b95dc Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Fri, 24 Nov 2017 09:15:23 +0100 Subject: [PATCH 303/653] 12178 Refactor config:set command to use --lock-config instead of --share option We are using Virtual Classes now as we have almost the same Processor twice and we can avoid having duplicate code this way. --- .../ConfigSet/ConfigSetProcessorFactory.php | 4 +- .../Command/ConfigSet/DefaultProcessor.php | 2 +- .../Command/ConfigSet/LockProcessor.php | 11 +- .../Command/ConfigSet/ProcessorFacade.php | 33 +++--- .../Command/ConfigSet/ShareProcessor.php | 109 ------------------ .../Console/Command/ConfigSetCommand.php | 32 +++-- app/code/Magento/Config/etc/di.xml | 14 ++- 7 files changed, 65 insertions(+), 140 deletions(-) delete mode 100644 app/code/Magento/Config/Console/Command/ConfigSet/ShareProcessor.php diff --git a/app/code/Magento/Config/Console/Command/ConfigSet/ConfigSetProcessorFactory.php b/app/code/Magento/Config/Console/Command/ConfigSet/ConfigSetProcessorFactory.php index 2fc3374859ba6..a9618f93afc73 100644 --- a/app/code/Magento/Config/Console/Command/ConfigSet/ConfigSetProcessorFactory.php +++ b/app/code/Magento/Config/Console/Command/ConfigSet/ConfigSetProcessorFactory.php @@ -27,8 +27,8 @@ class ConfigSetProcessorFactory * lock - save and lock configuration */ const TYPE_DEFAULT = 'default'; - const TYPE_LOCK = 'lock'; - const TYPE_SHARE = 'share'; + const TYPE_LOCK_ENV = 'lock-env'; + const TYPE_LOCK_CONFIG = 'lock-config'; /**#@-*/ /**#@-*/ diff --git a/app/code/Magento/Config/Console/Command/ConfigSet/DefaultProcessor.php b/app/code/Magento/Config/Console/Command/ConfigSet/DefaultProcessor.php index 2f5c10037ef06..d7d513bfad423 100644 --- a/app/code/Magento/Config/Console/Command/ConfigSet/DefaultProcessor.php +++ b/app/code/Magento/Config/Console/Command/ConfigSet/DefaultProcessor.php @@ -72,7 +72,7 @@ public function process($path, $value, $scope, $scopeCode) throw new CouldNotSaveException( __( 'The value you set has already been locked. To change the value, use the --%1 option.', - ConfigSetCommand::OPTION_LOCK + ConfigSetCommand::OPTION_LOCK_ENV ) ); } diff --git a/app/code/Magento/Config/Console/Command/ConfigSet/LockProcessor.php b/app/code/Magento/Config/Console/Command/ConfigSet/LockProcessor.php index 9e39b7bf7bf40..6fe2adde3c41e 100644 --- a/app/code/Magento/Config/Console/Command/ConfigSet/LockProcessor.php +++ b/app/code/Magento/Config/Console/Command/ConfigSet/LockProcessor.php @@ -50,23 +50,30 @@ class LockProcessor implements ConfigSetProcessorInterface * @var ConfigPathResolver */ private $configPathResolver; + /** + * @var string + */ + private $target; /** * @param PreparedValueFactory $preparedValueFactory The factory for prepared value * @param DeploymentConfig\Writer $writer The deployment configuration writer * @param ArrayManager $arrayManager An array manager for different manipulations with arrays * @param ConfigPathResolver $configPathResolver The resolver for configuration paths according to source type + * @param string $target */ public function __construct( PreparedValueFactory $preparedValueFactory, DeploymentConfig\Writer $writer, ArrayManager $arrayManager, - ConfigPathResolver $configPathResolver + ConfigPathResolver $configPathResolver, + $target = ConfigFilePool::APP_ENV ) { $this->preparedValueFactory = $preparedValueFactory; $this->deploymentConfigWriter = $writer; $this->arrayManager = $arrayManager; $this->configPathResolver = $configPathResolver; + $this->target = $target; } /** @@ -98,7 +105,7 @@ public function process($path, $value, $scope, $scopeCode) * we'll write value just after all validations are triggered. */ $this->deploymentConfigWriter->saveConfig( - [ConfigFilePool::APP_ENV => $this->arrayManager->set($configPath, [], $value)], + [$this->target => $this->arrayManager->set($configPath, [], $value)], false ); } diff --git a/app/code/Magento/Config/Console/Command/ConfigSet/ProcessorFacade.php b/app/code/Magento/Config/Console/Command/ConfigSet/ProcessorFacade.php index 4b202538b3701..b2076396d7487 100644 --- a/app/code/Magento/Config/Console/Command/ConfigSet/ProcessorFacade.php +++ b/app/code/Magento/Config/Console/Command/ConfigSet/ProcessorFacade.php @@ -9,6 +9,7 @@ use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Scope\ValidatorInterface; use Magento\Config\Model\Config\PathValidator; +use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Exception\ConfigurationMismatchException; use Magento\Framework\Exception\CouldNotSaveException; @@ -96,14 +97,13 @@ public function __construct( * @param string $scope The configuration scope (default, website, or store) * @param string $scopeCode The scope code * @param boolean $lock The lock flag - * @param boolean $share The share flag + * @param string $lockTarget * @return string Processor response message * @throws ValidatorException If some validation is wrong - * @throws CouldNotSaveException If cannot save config value - * @throws ConfigurationMismatchException If processor can not be instantiated + * @internal param bool $share The share flag * @since 100.2.0 */ - public function process($path, $value, $scope, $scopeCode, $lock, $share = false) + public function process($path, $value, $scope, $scopeCode, $lock, $lockTarget = ConfigFilePool::APP_ENV) { try { $this->scopeValidator->isValid($scope, $scopeCode); @@ -113,22 +113,21 @@ public function process($path, $value, $scope, $scopeCode, $lock, $share = false } $processor = - $share - ? $this->configSetProcessorFactory->create(ConfigSetProcessorFactory::TYPE_SHARE) - : ( - $lock - ? $this->configSetProcessorFactory->create(ConfigSetProcessorFactory::TYPE_LOCK) + $lock + ? ( $lockTarget == ConfigFilePool::APP_ENV + ? $this->configSetProcessorFactory->create(ConfigSetProcessorFactory::TYPE_LOCK_ENV) + : $this->configSetProcessorFactory->create(ConfigSetProcessorFactory::TYPE_LOCK_CONFIG) + ) : $this->configSetProcessorFactory->create(ConfigSetProcessorFactory::TYPE_DEFAULT) - ); + ; $message = - $share - ? 'Value was saved in app/etc/config.php and locked.' - : ( - $lock - ? 'Value was saved in app/etc/env.php and locked.' - : 'Value was saved.' - ); + $lock + ? ( $lockTarget == ConfigFilePool::APP_ENV + ? 'Value was saved in app/etc/env.php and locked.' + : 'Value was saved in app/etc/config.php and locked.' + ) + : 'Value was saved.'; // The processing flow depends on --lock and --share options. $processor->process($path, $value, $scope, $scopeCode); diff --git a/app/code/Magento/Config/Console/Command/ConfigSet/ShareProcessor.php b/app/code/Magento/Config/Console/Command/ConfigSet/ShareProcessor.php deleted file mode 100644 index c1b004a62a730..0000000000000 --- a/app/code/Magento/Config/Console/Command/ConfigSet/ShareProcessor.php +++ /dev/null @@ -1,109 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Config\Console\Command\ConfigSet; - -use Magento\Config\App\Config\Type\System; -use Magento\Config\Model\PreparedValueFactory; -use Magento\Framework\App\Config\ConfigPathResolver; -use Magento\Framework\App\Config\Value; -use Magento\Framework\App\DeploymentConfig; -use Magento\Framework\Config\File\ConfigFilePool; -use Magento\Framework\Exception\CouldNotSaveException; -use Magento\Framework\Stdlib\ArrayManager; - -/** - * Processes file share flow of config:set command. - * This processor saves the value of configuration into app/etc/config.php - * and locks it for editing in Admin interface. - * - * {@inheritdoc} - */ -class ShareProcessor implements ConfigSetProcessorInterface -{ - /** - * The factory for prepared value - * - * @var PreparedValueFactory - */ - private $preparedValueFactory; - - /** - * The deployment configuration writer - * - * @var DeploymentConfig\Writer - */ - private $deploymentConfigWriter; - - /** - * An array manager for different manipulations with arrays - * - * @var ArrayManager - */ - private $arrayManager; - - /** - * The resolver for configuration paths according to source type - * - * @var ConfigPathResolver - */ - private $configPathResolver; - - /** - * @param PreparedValueFactory $preparedValueFactory The factory for prepared value - * @param DeploymentConfig\Writer $writer The deployment configuration writer - * @param ArrayManager $arrayManager An array manager for different manipulations with arrays - * @param ConfigPathResolver $configPathResolver The resolver for configuration paths according to source type - */ - public function __construct( - PreparedValueFactory $preparedValueFactory, - DeploymentConfig\Writer $writer, - ArrayManager $arrayManager, - ConfigPathResolver $configPathResolver - ) { - $this->preparedValueFactory = $preparedValueFactory; - $this->deploymentConfigWriter = $writer; - $this->arrayManager = $arrayManager; - $this->configPathResolver = $configPathResolver; - } - - /** - * Processes lock flow of config:set command. - * Requires read access to filesystem. - * - * {@inheritdoc} - */ - public function process($path, $value, $scope, $scopeCode) - { - try { - $configPath = $this->configPathResolver->resolve($path, $scope, $scopeCode, System::CONFIG_TYPE); - $backendModel = $this->preparedValueFactory->create($path, $value, $scope, $scopeCode); - - if ($backendModel instanceof Value) { - /** - * Temporary solution until Magento introduce unified interface - * for storing system configuration into database and configuration files. - */ - $backendModel->validateBeforeSave(); - $backendModel->beforeSave(); - - $value = $backendModel->getValue(); - - $backendModel->afterSave(); - - /** - * Because FS does not support transactions, - * we'll write value just after all validations are triggered. - */ - $this->deploymentConfigWriter->saveConfig( - [ConfigFilePool::APP_CONFIG => $this->arrayManager->set($configPath, [], $value)], - false - ); - } - } catch (\Exception $exception) { - throw new CouldNotSaveException(__('%1', $exception->getMessage()), $exception); - } - } -} diff --git a/app/code/Magento/Config/Console/Command/ConfigSetCommand.php b/app/code/Magento/Config/Console/Command/ConfigSetCommand.php index 2b96164b1a766..b257041ac8259 100644 --- a/app/code/Magento/Config/Console/Command/ConfigSetCommand.php +++ b/app/code/Magento/Config/Console/Command/ConfigSetCommand.php @@ -10,6 +10,7 @@ use Magento\Deploy\Model\DeploymentConfig\ChangeDetector; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\Console\Cli; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; @@ -34,7 +35,8 @@ class ConfigSetCommand extends Command const OPTION_SCOPE = 'scope'; const OPTION_SCOPE_CODE = 'scope-code'; const OPTION_LOCK = 'lock'; - const OPTION_SHARE = 'share'; + const OPTION_LOCK_ENV = 'lock-env'; + const OPTION_LOCK_CONFIG = 'lock-config'; /**#@-*/ /**#@-*/ @@ -110,17 +112,23 @@ protected function configure() 'Scope code (required only if scope is not \'default\')' ), new InputOption( - static::OPTION_LOCK, - 'l', + static::OPTION_LOCK_ENV, + 'le', InputOption::VALUE_NONE, 'Lock value which prevents modification in the Admin (will be saved in app/etc/env.php)' ), new InputOption( - static::OPTION_SHARE, - 's', + static::OPTION_LOCK_CONFIG, + 'lc', InputOption::VALUE_NONE, 'Lock and share value with other installations, prevents modification in the Admin (will be saved in app/etc/config.php)' ), + new InputOption( + static::OPTION_LOCK, + 'l', + InputOption::VALUE_NONE, + 'Deprecated, use the --' . static::OPTION_LOCK_ENV . ' option instead.' + ), ]); parent::configure(); @@ -153,13 +161,23 @@ protected function execute(InputInterface $input, OutputInterface $output) try { $message = $this->emulatedAreaProcessor->process(function () use ($input) { + + $lock = $input->getOption(static::OPTION_LOCK_ENV) + || $input->getOption(static::OPTION_LOCK_CONFIG) + || $input->getOption(static::OPTION_LOCK); + + $lockTargetPath = ConfigFilePool::APP_ENV; + if ($input->getOption(static::OPTION_LOCK_CONFIG)) { + $lockTargetPath = ConfigFilePool::APP_CONFIG; + } + return $this->processorFacadeFactory->create()->process( $input->getArgument(static::ARG_PATH), $input->getArgument(static::ARG_VALUE), $input->getOption(static::OPTION_SCOPE), $input->getOption(static::OPTION_SCOPE_CODE), - $input->getOption(static::OPTION_LOCK), - $input->getOption(static::OPTION_SHARE) + $lock, + $lockTargetPath ); }); diff --git a/app/code/Magento/Config/etc/di.xml b/app/code/Magento/Config/etc/di.xml index dcd2b255ba338..a5dd18097fb47 100644 --- a/app/code/Magento/Config/etc/di.xml +++ b/app/code/Magento/Config/etc/di.xml @@ -296,11 +296,21 @@ <arguments> <argument name="processors" xsi:type="array"> <item name="default" xsi:type="string">Magento\Config\Console\Command\ConfigSet\DefaultProcessor</item> - <item name="lock" xsi:type="string">Magento\Config\Console\Command\ConfigSet\LockProcessor</item> - <item name="share" xsi:type="string">Magento\Config\Console\Command\ConfigSet\ShareProcessor</item> + <item name="lock-env" xsi:type="string">Magento\Config\Console\Command\ConfigSet\VirtualLockEnvProcessor</item> + <item name="lock-config" xsi:type="string">Magento\Config\Console\Command\ConfigSet\VirtualLockConfigProcessor</item> </argument> </arguments> </type> + <virtualType name="Magento\Config\Console\Command\ConfigSet\VirtualLockEnvProcessor" type="Magento\Config\Console\Command\ConfigSet\LockProcessor"> + <arguments> + <argument name="target" xsi:type="string">app_env</argument> + </arguments> + </virtualType> + <virtualType name="Magento\Config\Console\Command\ConfigSet\VirtualLockConfigProcessor" type="Magento\Config\Console\Command\ConfigSet\LockProcessor"> + <arguments> + <argument name="target" xsi:type="string">app_config</argument> + </arguments> + </virtualType> <type name="Magento\Deploy\Model\DeploymentConfig\ImporterPool"> <arguments> <argument name="importers" xsi:type="array"> From 243dccba6ecde194f56c052ff91f2bdd641def09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20M=C3=A9ndez=20Calzada?= <gonzalo.mendez@interactiv4.com> Date: Fri, 24 Nov 2017 09:24:20 +0100 Subject: [PATCH 304/653] codestyle fix --- .../Magento/Swatches/Model/SwatchAttributeOptionAddTest.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dev/tests/integration/testsuite/Magento/Swatches/Model/SwatchAttributeOptionAddTest.php b/dev/tests/integration/testsuite/Magento/Swatches/Model/SwatchAttributeOptionAddTest.php index 5cfbc8e580e95..84ba587f5e784 100644 --- a/dev/tests/integration/testsuite/Magento/Swatches/Model/SwatchAttributeOptionAddTest.php +++ b/dev/tests/integration/testsuite/Magento/Swatches/Model/SwatchAttributeOptionAddTest.php @@ -53,7 +53,9 @@ function ($values, $index) use ($optionsPerAttribute) { /** @var AttributeOptionInterface[] $options */ $options = []; foreach ($data['options']['option'] as $optionData) { - $options[] = $this->objectManager->get(AttributeOptionInterfaceFactory::class)->create(['data' => $optionData]); + $options[] = $this->objectManager + ->get(AttributeOptionInterfaceFactory::class) + ->create(['data' => $optionData]); } /** @var ProductAttributeOptionManagementInterface $optionManagement */ From f583c875ae2a3e26e0654d780629749e35b04a7c Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Fri, 24 Nov 2017 09:31:18 +0100 Subject: [PATCH 305/653] 12178 Adjust unit tests --- .../ConfigSet/ConfigSetProcessorFactoryTest.php | 4 ++-- .../Command/ConfigSet/DefaultProcessorTest.php | 2 +- ...eProcessorTest.php => LockConfigProcessorTest.php} | 11 ++++++----- ...LockProcessorTest.php => LockEnvProcessorTest.php} | 5 +++-- .../Console/Command/ConfigSet/ProcessorFacadeTest.php | 11 ++++++----- 5 files changed, 18 insertions(+), 15 deletions(-) rename app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/{ShareProcessorTest.php => LockConfigProcessorTest.php} (96%) rename app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/{LockProcessorTest.php => LockEnvProcessorTest.php} (98%) diff --git a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ConfigSetProcessorFactoryTest.php b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ConfigSetProcessorFactoryTest.php index 1fa0310ca62eb..a8f40106eb564 100644 --- a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ConfigSetProcessorFactoryTest.php +++ b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ConfigSetProcessorFactoryTest.php @@ -40,7 +40,7 @@ protected function setUp() $this->model = new ConfigSetProcessorFactory( $this->objectManagerMock, [ - ConfigSetProcessorFactory::TYPE_LOCK => LockProcessor::class, + ConfigSetProcessorFactory::TYPE_LOCK_ENV => LockProcessor::class, ConfigSetProcessorFactory::TYPE_DEFAULT => DefaultProcessor::class, 'wrongType' => \stdClass::class, ] @@ -58,7 +58,7 @@ public function testCreate() $this->assertInstanceOf( ConfigSetProcessorInterface::class, - $this->model->create(ConfigSetProcessorFactory::TYPE_LOCK) + $this->model->create(ConfigSetProcessorFactory::TYPE_LOCK_ENV) ); } diff --git a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/DefaultProcessorTest.php b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/DefaultProcessorTest.php index 066b0fbe84b50..c4550a4e5ad3c 100644 --- a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/DefaultProcessorTest.php +++ b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/DefaultProcessorTest.php @@ -166,7 +166,7 @@ private function configMockForProcessTest($path, $scope, $scopeCode) /** * @expectedException \Magento\Framework\Exception\LocalizedException - * @expectedExceptionMessage The value you set has already been locked. To change the value, use the --lock option. + * @expectedExceptionMessage The value you set has already been locked. To change the value, use the --lock-env option. */ public function testProcessLockedValue() { diff --git a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ShareProcessorTest.php b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/LockConfigProcessorTest.php similarity index 96% rename from app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ShareProcessorTest.php rename to app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/LockConfigProcessorTest.php index 8a93ce5cf4940..c727184efb4fc 100644 --- a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ShareProcessorTest.php +++ b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/LockConfigProcessorTest.php @@ -5,7 +5,7 @@ */ namespace Magento\Config\Test\Unit\Console\Command\ConfigSet; -use Magento\Config\Console\Command\ConfigSet\ShareProcessor; +use Magento\Config\Console\Command\ConfigSet\LockProcessor; use Magento\Config\Model\PreparedValueFactory; use Magento\Framework\App\Config\ConfigPathResolver; use Magento\Framework\App\Config\ScopeConfigInterface; @@ -23,10 +23,10 @@ * @see ShareProcessor * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class ShareProcessorTest extends \PHPUnit\Framework\TestCase +class LockConfigProcessorTest extends \PHPUnit\Framework\TestCase { /** - * @var ShareProcessor + * @var LockProcessor */ private $model; @@ -77,11 +77,12 @@ protected function setUp() ->disableOriginalConstructor() ->getMock(); - $this->model = new ShareProcessor( + $this->model = new LockProcessor( $this->preparedValueFactory, $this->deploymentConfigWriterMock, $this->arrayManagerMock, - $this->configPathResolver + $this->configPathResolver, + ConfigFilePool::APP_CONFIG ); } diff --git a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/LockProcessorTest.php b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/LockEnvProcessorTest.php similarity index 98% rename from app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/LockProcessorTest.php rename to app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/LockEnvProcessorTest.php index 4535e9ad888c2..4e0248f886028 100644 --- a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/LockProcessorTest.php +++ b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/LockEnvProcessorTest.php @@ -23,7 +23,7 @@ * @see LockProcessor * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class LockProcessorTest extends \PHPUnit\Framework\TestCase +class LockEnvProcessorTest extends \PHPUnit\Framework\TestCase { /** * @var LockProcessor @@ -81,7 +81,8 @@ protected function setUp() $this->preparedValueFactory, $this->deploymentConfigWriterMock, $this->arrayManagerMock, - $this->configPathResolver + $this->configPathResolver, + ConfigFilePool::APP_ENV ); } diff --git a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php index 51318a8e303ca..6f7cbbef2ce18 100644 --- a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php +++ b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php @@ -11,6 +11,7 @@ use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Scope\ValidatorInterface; use Magento\Config\Model\Config\PathValidator; +use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Exception\ValidatorException; use Magento\Framework\Exception\CouldNotSaveException; @@ -201,14 +202,14 @@ public function testProcessWithCouldNotSaveException() $this->model->process('test/test/test', 'test', ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null, false); } - public function testExecuteLock() + public function testExecuteLockEnv() { $this->scopeValidatorMock->expects($this->once()) ->method('isValid') ->willReturn(true); $this->configSetProcessorFactoryMock->expects($this->once()) ->method('create') - ->with(ConfigSetProcessorFactory::TYPE_LOCK) + ->with(ConfigSetProcessorFactory::TYPE_LOCK_ENV) ->willReturn($this->processorMock); $this->processorMock->expects($this->once()) ->method('process') @@ -222,14 +223,14 @@ public function testExecuteLock() ); } - public function testExecuteShare() + public function testExecuteLockConfig() { $this->scopeValidatorMock->expects($this->once()) ->method('isValid') ->willReturn(true); $this->configSetProcessorFactoryMock->expects($this->once()) ->method('create') - ->with(ConfigSetProcessorFactory::TYPE_SHARE) + ->with(ConfigSetProcessorFactory::TYPE_LOCK_CONFIG) ->willReturn($this->processorMock); $this->processorMock->expects($this->once()) ->method('process') @@ -239,7 +240,7 @@ public function testExecuteShare() $this->assertSame( 'Value was saved in app/etc/config.php and locked.', - $this->model->process('test/test/test', 'test', ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null, false, true) + $this->model->process('test/test/test', 'test', ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null, true, ConfigFilePool::APP_CONFIG) ); } } From 2fabcaf397fdf250d9f9bfd530117225ce81c8c9 Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Fri, 24 Nov 2017 09:42:41 +0100 Subject: [PATCH 306/653] 12178 Adjust integration tests --- .../Console/Command/ConfigSetCommandTest.php | 14 +++++++------- .../Developer/Model/Logger/Handler/DebugTest.php | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Config/Console/Command/ConfigSetCommandTest.php b/dev/tests/integration/testsuite/Magento/Config/Console/Command/ConfigSetCommandTest.php index 91e8cbe1cad73..3f333a36c9c93 100644 --- a/dev/tests/integration/testsuite/Magento/Config/Console/Command/ConfigSetCommandTest.php +++ b/dev/tests/integration/testsuite/Magento/Config/Console/Command/ConfigSetCommandTest.php @@ -141,7 +141,7 @@ private function loadConfig() * @magentoDbIsolation enabled * @dataProvider runLockDataProvider */ - public function testRunLock($path, $value, $scope = ScopeConfigInterface::SCOPE_TYPE_DEFAULT, $scopeCode = null) + public function testRunLockEnv($path, $value, $scope = ScopeConfigInterface::SCOPE_TYPE_DEFAULT, $scopeCode = null) { $this->inputMock->expects($this->any()) ->method('getArgument') @@ -152,15 +152,15 @@ public function testRunLock($path, $value, $scope = ScopeConfigInterface::SCOPE_ $this->inputMock->expects($this->any()) ->method('getOption') ->willReturnMap([ - [ConfigSetCommand::OPTION_LOCK, true], + [ConfigSetCommand::OPTION_LOCK_ENV, true], [ConfigSetCommand::OPTION_SCOPE, $scope], [ConfigSetCommand::OPTION_SCOPE_CODE, $scopeCode] ]); $this->outputMock->expects($this->exactly(2)) ->method('writeln') ->withConsecutive( - ['<info>Value was saved and locked.</info>'], - ['<info>Value was saved and locked.</info>'] + ['<info>Value was saved in app/etc/env.php and locked.</info>'], + ['<info>Value was saved in app/etc/env.php and locked.</info>'] ); /** @var ConfigSetCommand $command */ @@ -217,7 +217,7 @@ public function testRunExtended( [ConfigSetCommand::OPTION_SCOPE, $scope], [ConfigSetCommand::OPTION_SCOPE_CODE, $scopeCode] ]; - $optionsLock = array_merge($options, [[ConfigSetCommand::OPTION_LOCK, true]]); + $optionsLock = array_merge($options, [[ConfigSetCommand::OPTION_LOCK_ENV, true]]); /** @var ConfigPathResolver $resolver */ $resolver = $this->objectManager->get(ConfigPathResolver::class); @@ -233,8 +233,8 @@ public function testRunExtended( ); $this->assertSame(null, $this->arrayManager->get($configPath, $this->loadConfig())); - $this->runCommand($arguments, $optionsLock, '<info>Value was saved and locked.</info>'); - $this->runCommand($arguments, $optionsLock, '<info>Value was saved and locked.</info>'); + $this->runCommand($arguments, $optionsLock, '<info>Value was saved in app/etc/env.php and locked.</info>'); + $this->runCommand($arguments, $optionsLock, '<info>Value was saved in app/etc/env.php and locked.</info>'); $this->assertSame($value, $this->arrayManager->get($configPath, $this->loadConfig())); } diff --git a/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php b/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php index 71e61162d29c9..ab893d583dfa3 100644 --- a/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php +++ b/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php @@ -122,7 +122,7 @@ private function enableDebugging() ->withConsecutive( [ConfigSetCommand::OPTION_SCOPE], [ConfigSetCommand::OPTION_SCOPE_CODE], - [ConfigSetCommand::OPTION_LOCK] + [ConfigSetCommand::OPTION_LOCK_ENV] ) ->willReturnOnConsecutiveCalls( ScopeConfigInterface::SCOPE_TYPE_DEFAULT, From c117468554b0667ef04244460966f8f2e2ffb9b4 Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Fri, 24 Nov 2017 12:50:20 +0100 Subject: [PATCH 307/653] 12178 Fix integration tests --- .../Magento/Developer/Model/Logger/Handler/DebugTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php b/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php index ab893d583dfa3..4291ac18e1b10 100644 --- a/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php +++ b/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php @@ -131,7 +131,7 @@ private function enableDebugging() ); $this->outputMock->expects($this->once()) ->method('writeln') - ->with('<info>Value was saved and locked.</info>'); + ->with('<info>Value was saved in app/etc/env.php and locked.</info>'); $this->assertFalse((bool)$this->configSetCommand->run($this->inputMock, $this->outputMock)); } From 5dc5acdbae841d04118408fb6d73b85f33529e60 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Fri, 24 Nov 2017 16:03:06 +0200 Subject: [PATCH 308/653] 8255: Export Products action doesn't consider hide_for_product_page value. --- .../Import/Product/MediaGalleryProcessor.php | 117 ++++++++++-------- 1 file changed, 68 insertions(+), 49 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php index 857f8f99d212e..045f0942021bc 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php @@ -109,7 +109,7 @@ public function __construct( public function saveMediaGallery(array $mediaGalleryData) { $this->initMediaGalleryResources(); - $mediaGalleryData = $this->restoreDisableImage($mediaGalleryData); + $mediaGalleryData = $this->restoreDisabledImage($mediaGalleryData); $mediaGalleryDataGlobal = array_merge(...$mediaGalleryData); $imageNames = []; $multiInsertData = []; @@ -143,53 +143,8 @@ public function saveMediaGallery(array $mediaGalleryData) $newMediaSelect->where('value_id NOT IN (?)', array_keys($oldMediaValues)); } $newMediaValues = $this->connection->fetchAssoc($newMediaSelect); - foreach ($mediaGalleryData as $storeId => $mediaGalleryDataPerStore) { - $dataForSkinnyTable = []; - $multiInsertData = []; - foreach ($mediaGalleryDataPerStore as $productSku => $mediaGalleryRows) { - foreach ($mediaGalleryRows as $insertValue) { - foreach ($newMediaValues as $value_id => $values) { - if ($values['value'] == $insertValue['value']) { - $insertValue['value_id'] = $value_id; - $ids = array_values($valueToProductId[$values['value']]); - $insertValue[$this->getProductEntityLinkField()] = array_shift($ids); - break; - } - } - if (isset($insertValue['value_id'])) { - $valueArr = [ - 'value_id' => $insertValue['value_id'], - 'store_id' => $storeId, - $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], - 'label' => $insertValue['label'], - 'position' => $insertValue['position'], - 'disabled' => $insertValue['disabled'], - ]; - $multiInsertData[] = $valueArr; - $dataForSkinnyTable[] = [ - 'value_id' => $insertValue['value_id'], - $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], - ]; - } - } - } - try { - $this->connection->insertOnDuplicate( - $this->mediaGalleryValueTableName, - $multiInsertData, - ['value_id', 'store_id', $this->getProductEntityLinkField(), 'label', 'position', 'disabled'] - ); - $this->connection->insertOnDuplicate( - $this->mediaGalleryEntityToValueTableName, - $dataForSkinnyTable, - ['value_id'] - ); - } catch (\Exception $e) { - $this->connection->delete( - $this->mediaGalleryTableName, - $this->connection->quoteInto('value_id IN (?)', $newMediaValues) - ); - } + foreach ($mediaGalleryData as $storeId => $storeMediaGalleryData) { + $this->processMediaPerStore((int)$storeId, $storeMediaGalleryData, $newMediaValues, $valueToProductId); } } @@ -314,7 +269,7 @@ private function initMediaGalleryResources() * @param array $mediaGalleryData * @return array */ - private function restoreDisableImage(array $mediaGalleryData) + private function restoreDisabledImage(array $mediaGalleryData) { $restoreData = []; foreach (array_keys($mediaGalleryData) as $storeId) { @@ -341,6 +296,70 @@ private function restoreDisableImage(array $mediaGalleryData) return $mediaGalleryData; } + /** + * Save media gallery data per store. + * + * @param $storeId + * @param array $mediaGalleryData + * @param array $newMediaValues + * @param array $valueToProductId + * @return void + */ + private function processMediaPerStore( + int $storeId, + array $mediaGalleryData, + array $newMediaValues, + array $valueToProductId + ) { + $multiInsertData = []; + $dataForSkinnyTable = []; + foreach ($mediaGalleryData as $mediaGalleryRows) { + foreach ($mediaGalleryRows as $insertValue) { + foreach ($newMediaValues as $value_id => $values) { + if ($values['value'] == $insertValue['value']) { + $insertValue['value_id'] = $value_id; + $insertValue[$this->getProductEntityLinkField()] + = array_shift($valueToProductId[$values['value']]); + unset($newMediaValues[$value_id]); + break; + } + } + if (isset($insertValue['value_id'])) { + $valueArr = [ + 'value_id' => $insertValue['value_id'], + 'store_id' => $storeId, + $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], + 'label' => $insertValue['label'], + 'position' => $insertValue['position'], + 'disabled' => $insertValue['disabled'], + ]; + $multiInsertData[] = $valueArr; + $dataForSkinnyTable[] = [ + 'value_id' => $insertValue['value_id'], + $this->getProductEntityLinkField() => $insertValue[$this->getProductEntityLinkField()], + ]; + } + } + } + try { + $this->connection->insertOnDuplicate( + $this->mediaGalleryValueTableName, + $multiInsertData, + ['value_id', 'store_id', $this->getProductEntityLinkField(), 'label', 'position', 'disabled'] + ); + $this->connection->insertOnDuplicate( + $this->mediaGalleryEntityToValueTableName, + $dataForSkinnyTable, + ['value_id'] + ); + } catch (\Exception $e) { + $this->connection->delete( + $this->mediaGalleryTableName, + $this->connection->quoteInto('value_id IN (?)', $newMediaValues) + ); + } + } + /** * Get product entity link field. * From 476036db8419a5208a1cbaae65f4393c91eaacef Mon Sep 17 00:00:00 2001 From: Sergey Shvets <sshvets@magento.com> Date: Fri, 24 Nov 2017 16:35:09 +0200 Subject: [PATCH 309/653] MAGETWO-84464: [2.2.x] Encrypted scope-specific config values fail to decrypt on PHP7 #8591 --- .../App/Config/Source/RuntimeConfigSource.php | 9 ++++--- .../Framework/App/Config/Scope/Converter.php | 27 +++++++++++-------- .../Test/Unit/Config/Scope/ConverterTest.php | 26 ++++++++++++++++-- 3 files changed, 45 insertions(+), 17 deletions(-) diff --git a/app/code/Magento/Config/App/Config/Source/RuntimeConfigSource.php b/app/code/Magento/Config/App/Config/Source/RuntimeConfigSource.php index b33c944c73477..7f2f771a8d0a6 100644 --- a/app/code/Magento/Config/App/Config/Source/RuntimeConfigSource.php +++ b/app/code/Magento/Config/App/Config/Source/RuntimeConfigSource.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Config\App\Config\Source; use Magento\Framework\App\Config\ConfigSourceInterface; @@ -88,12 +89,12 @@ private function loadConfig() } } - foreach ($config as $scope => &$item) { + foreach ($config as $scope => $item) { if ($scope === ScopeConfigInterface::SCOPE_TYPE_DEFAULT) { - $item = $this->converter->convert($item); + $config[$scope] = $this->converter->convert($item); } else { - foreach ($item as &$scopeItems) { - $scopeItems = $this->converter->convert($scopeItems); + foreach ($item as $scopeCode => $scopeItems) { + $config[$scope][$scopeCode] = $this->converter->convert($scopeItems); } } } diff --git a/lib/internal/Magento/Framework/App/Config/Scope/Converter.php b/lib/internal/Magento/Framework/App/Config/Scope/Converter.php index 7f4a3aead36f5..d8e9469ac3980 100644 --- a/lib/internal/Magento/Framework/App/Config/Scope/Converter.php +++ b/lib/internal/Magento/Framework/App/Config/Scope/Converter.php @@ -5,6 +5,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Framework\App\Config\Scope; class Converter implements \Magento\Framework\Config\ConverterInterface @@ -19,7 +20,7 @@ public function convert($source) { $output = []; foreach ($source as $key => $value) { - $this->_setArrayValue($output, $key, $value); + $output = $this->_setArrayValue($output, $key, $value); } return $output; } @@ -27,21 +28,25 @@ public function convert($source) /** * Set array value by path * - * @param array &$container + * @param array $container * @param string $path * @param string $value - * @return void + * @return array */ - protected function _setArrayValue(array &$container, $path, $value) + protected function _setArrayValue(array $container, $path, $value) { - $segments = explode('/', $path); - $currentPointer = & $container; - foreach ($segments as $segment) { - if (!isset($currentPointer[$segment])) { - $currentPointer[$segment] = []; + $parts = explode('/', $path); + if (count($parts) > 0) { + $parts = array_reverse($parts); + $result = $value; + foreach ($parts as $part) { + $part = trim($part); + if ($part !== '') { + $result = [$part => $result]; + } } - $currentPointer = & $currentPointer[$segment]; + $container = array_merge_recursive($container, $result); } - $currentPointer = $value; + return $container; } } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Config/Scope/ConverterTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Config/Scope/ConverterTest.php index ad449c5852fbb..283b56fccde2a 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/Config/Scope/ConverterTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/Config/Scope/ConverterTest.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Framework\App\Test\Unit\Config\Scope; class ConverterTest extends \PHPUnit\Framework\TestCase @@ -19,8 +20,29 @@ protected function setUp() public function testConvert() { - $data = ['some/config/path1' => 'value1', 'some/config/path2' => 'value2']; - $expectedResult = ['some' => ['config' => ['path1' => 'value1', 'path2' => 'value2']]]; + $data = [ + 'some/config/path1' => 'value1', + 'some/config/path2' => 'value2', + 'some/config/path2' => 'value3', + 'some2/config/path2' => 'value4', + 'some/bad/path////' => 'value5', + ]; + $expectedResult = [ + 'some' => [ + 'config' => [ + 'path1' => 'value1', + 'path2' => 'value3', + ], + 'bad' => [ + 'path' => 'value5', + ], + ], + 'some2' => [ + 'config' => [ + 'path2' => 'value4', + ] + ] + ]; $this->assertEquals($expectedResult, $this->_model->convert($data)); } } From 9fc1f346065a7ecc29dcff6d9a1064ca667cd6ac Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko <omiroshnichenko@magento.com> Date: Fri, 24 Nov 2017 21:46:36 +0200 Subject: [PATCH 310/653] MAGETWO-84321: Instant Purchase button displays only for one store view --- .../frontend/web/js/view/instant-purchase.js | 206 +++++++++--------- .../frontend/web/template/confirmation.html | 15 ++ .../web/template/instant-purchase.html | 63 +++--- .../web/js/view/instant-purchase.test.js | 102 +++++++++ 4 files changed, 256 insertions(+), 130 deletions(-) create mode 100644 app/code/Magento/InstantPurchase/view/frontend/web/template/confirmation.html create mode 100644 dev/tests/js/jasmine/tests/app/code/Magento/InstantPurchase/frontend/web/js/view/instant-purchase.test.js diff --git a/app/code/Magento/InstantPurchase/view/frontend/web/js/view/instant-purchase.js b/app/code/Magento/InstantPurchase/view/frontend/web/js/view/instant-purchase.js index b5c5b1f0a0853..7c5397c1f8e5b 100644 --- a/app/code/Magento/InstantPurchase/view/frontend/web/js/view/instant-purchase.js +++ b/app/code/Magento/InstantPurchase/view/frontend/web/js/view/instant-purchase.js @@ -1,111 +1,115 @@ -/*jshint browser:true*/ -/*global define*/ -define( - [ - 'uiComponent', - 'ko', - 'Magento_Ui/js/modal/confirm', - 'jquery', - 'Magento_Customer/js/customer-data', - 'mage/url', - 'mage/template', - 'jquery/ui', - 'mage/translate' - ], function ( - Component, - ko, - confirm, - $, - customerData, - urlBuilder, - mageTemplate - ) { - 'use strict'; +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'ko', + 'jquery', + 'underscore', + 'uiComponent', + 'Magento_Ui/js/modal/confirm', + 'Magento_Customer/js/customer-data', + 'mage/url', + 'mage/template', + 'mage/translate', + 'text!Magento_InstantPurchase/template/confirmation.html', + 'mage/validation' +], function (ko, $, _, Component, confirm, customerData, urlBuilder, mageTemplate, $t, confirmationTemplate) { + 'use strict'; - return Component.extend({ - showButton: ko.observable(false), - paymentToken: ko.observable(null), - shippingAddress: ko.observable(null), - billingAddress: ko.observable(null), - shippingMethod: ko.observable(null), - defaults: { - template: 'Magento_InstantPurchase/instant-purchase', - buttonText: $.mage.__('Instant Purchase'), - purchaseUrl: urlBuilder.build('instantpurchase/button/placeOrder') - }, - options: { - message: $.mage.__('Are you sure you want to place order and pay?'), - formSelector: '#product_addtocart_form', - confirmTemplate: '<p class="message"><%- data.message %></p>' + - '<strong>' + $.mage.__('Shipping Address') + ':</strong>' + - '<p><%- data.shippingAddress().summary %></p>' + - '<strong>' + $.mage.__('Billing Address') + ':</strong>' + - '<p><%- data.billingAddress().summary %></p>' + - '<strong>' + $.mage.__('Payment Method') + ':</strong>\n' + - '<p><%- data.paymentToken().summary %></p>' + - '<strong>' + $.mage.__('Shipping Method') + ':</strong>\n' + - '<p><%- data.shippingMethod().summary %></p>' - }, + return Component.extend({ + defaults: { + template: 'Magento_InstantPurchase/instant-purchase', + buttonText: $t('Instant Purchase'), + purchaseUrl: urlBuilder.build('instantpurchase/button/placeOrder'), + showButton: false, + paymentToken: null, + shippingAddress: null, + billingAddress: null, + shippingMethod: null, + productFormSelector: '#product_addtocart_form', + confirmationTitle: $t('Instant Purchase Confirmation'), + confirmationData: { + message: $t('Are you sure you want to place order and pay?'), + shippingAddressTitle: $t('Shipping Address'), + billingAddressTitle: $t('Billing Address'), + paymentMethodTitle: $t('Payment Method'), + shippingMethodTitle: $t('Shipping Address') + } + }, - /** @inheritdoc */ - initialize: function () { - var self = this, - data = customerData.get('instant-purchase')(); + /** @inheritdoc */ + initialize: function () { + var instantPurchase = customerData.get('instant-purchase'); - this._super(); + this._super(); - self.showButton(data.available); - self.paymentToken(data.paymentToken); - self.shippingAddress(data.shippingAddress); - self.billingAddress(data.billingAddress); - self.shippingMethod(data.shippingMethod); - }, + this.setPurchaseData(instantPurchase()); + instantPurchase.subscribe(this.setPurchaseData, this); + }, - /** - * Confirmation method - */ - instantPurchase: function () { - var self = this, - form = $(self.options.formSelector), - confirmTemplate = mageTemplate(this.options.confirmTemplate); + /** @inheritdoc */ + initObservable: function () { + this._super() + .observe('showButton paymentToken shippingAddress billingAddress shippingMethod'); - if (!(form.validation() && form.validation('isValid'))) { - return; - } + return this; + }, - confirm({ - title: $.mage.__('Instant Purchase Confirmation'), - content: confirmTemplate( - { - data: { - message: self.options.message, - paymentToken: self.paymentToken, - shippingAddress: self.shippingAddress, - billingAddress: self.billingAddress, - shippingMethod: self.shippingMethod - } - } - ), - actions: { - /** @inheritdoc */ - confirm: function () { - $.ajax({ - url: self.purchaseUrl, - data: form.serialize(), - type: 'post', - dataType: 'json', + /** + * Set data from customerData. + * + * @param {Object} data + */ + setPurchaseData: function (data) { + this.showButton(data.available); + this.paymentToken(data.paymentToken); + this.shippingAddress(data.shippingAddress); + this.billingAddress(data.billingAddress); + this.shippingMethod(data.shippingMethod); + }, - /** Show loader before send */ - beforeSend: function () { - $('body').trigger('processStart'); - } - }).always(function () { - $('body').trigger('processStop'); - }); - } - } + /** + * Confirmation method + */ + instantPurchase: function () { + var form = $(this.productFormSelector), + confirmTemplate = mageTemplate(confirmationTemplate), + confirmData = _.extend({}, this.confirmationData, { + paymentToken: this.paymentToken().summary, + shippingAddress: this.shippingAddress().summary, + billingAddress: this.billingAddress().summary, + shippingMethod: this.shippingMethod().summary }); + + if (!(form.validation() && form.validation('isValid'))) { + return; } - }); - } -); + + confirm({ + title: this.confirmationTitle, + content: confirmTemplate({ + data: confirmData + }), + actions: { + /** @inheritdoc */ + confirm: function () { + $.ajax({ + url: this.purchaseUrl, + data: form.serialize(), + type: 'post', + dataType: 'json', + + /** Show loader before send */ + beforeSend: function () { + $('body').trigger('processStart'); + } + }).always(function () { + $('body').trigger('processStop'); + }); + }.bind(this) + } + }); + } + }); +}); diff --git a/app/code/Magento/InstantPurchase/view/frontend/web/template/confirmation.html b/app/code/Magento/InstantPurchase/view/frontend/web/template/confirmation.html new file mode 100644 index 0000000000000..883cf1c2fd8f9 --- /dev/null +++ b/app/code/Magento/InstantPurchase/view/frontend/web/template/confirmation.html @@ -0,0 +1,15 @@ +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<p class="message"><%- data.message %></p> +<strong><%- data.shippingAddressTitle %>:</strong> +<p><%- data.shippingAddress %></p> +<strong><%- data.billingAddressTitle %>:</strong> +<p><%- data.billingAddress %></p> +<strong><%- data.paymentMethodTitle %>:</strong> +<p><%- data.paymentToken %></p> +<strong><%- data.shippingMethodTitle %>:</strong> +<p><%- data.shippingMethod %></p> \ No newline at end of file diff --git a/app/code/Magento/InstantPurchase/view/frontend/web/template/instant-purchase.html b/app/code/Magento/InstantPurchase/view/frontend/web/template/instant-purchase.html index 058b09e16a687..0373b25c9c523 100644 --- a/app/code/Magento/InstantPurchase/view/frontend/web/template/instant-purchase.html +++ b/app/code/Magento/InstantPurchase/view/frontend/web/template/instant-purchase.html @@ -1,29 +1,34 @@ -<!-- ko if: showButton --> -<button type="button" - class="action primary instant-purchase" - data-bind="click: instantPurchase, attr:{title: buttonText}"> - <span data-bind="text: buttonText"></span> -</button> -<!-- ko if: paymentToken --> -<input type="hidden" - name="instant_purchase_payment_token" - data-bind="value: paymentToken().publicHash"> -<!-- /ko --> -<!-- ko if: shippingAddress --> -<input type="hidden" - name="instant_purchase_shipping_address" - data-bind="value: shippingAddress().id"> -<!-- /ko --> -<!-- ko if: billingAddress --> -<input type="hidden" - name="instant_purchase_billing_address" - data-bind="value: billingAddress().id"> -<!-- ko if: shippingMethod --> -<input type="hidden" - name="instant_purchase_carrier" - data-bind="value: shippingMethod().carrier"> -<input type="hidden" - name="instant_purchase_shipping" - data-bind="value: shippingMethod().method"> -<!-- /ko --> -<!-- /ko --> +<!-- +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<if args="showButton()"> + <button type="button" + class="action primary instant-purchase" + click="instantPurchase" + attr="title: $t(buttonText)"> + <span translate="buttonText" /> + </button> + <input if="paymentToken()" + type="hidden" + name="instant_purchase_payment_token" + ko-value="paymentToken().publicHash" /> + <input if="shippingAddress()" + type="hidden" + name="instant_purchase_shipping_address" + ko-value="shippingAddress().id" /> + <input if="billingAddress()" + type="hidden" + name="instant_purchase_billing_address" + ko-value="billingAddress().id" /> + <if args="shippingMethod()"> + <input type="hidden" + name="instant_purchase_carrier" + ko-value="shippingMethod().carrier" /> + <input type="hidden" + name="instant_purchase_shipping" + ko-value="shippingMethod().method" /> + </if> +</if> diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/InstantPurchase/frontend/web/js/view/instant-purchase.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/InstantPurchase/frontend/web/js/view/instant-purchase.test.js new file mode 100644 index 0000000000000..979e0dd351ee6 --- /dev/null +++ b/dev/tests/js/jasmine/tests/app/code/Magento/InstantPurchase/frontend/web/js/view/instant-purchase.test.js @@ -0,0 +1,102 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +define([ + 'squire', + 'ko', + 'jquery', + 'mage/validation' +], function (Squire, ko, $) { + 'use strict'; + + var injector = new Squire(), + customerDataMock = ko.observable({}), + mocks = { + 'Magento_Customer/js/customer-data': { + /** + * Return customer data mock. + * @return {*} + */ + get: function () { + return customerDataMock; + } + }, + 'Magento_Ui/js/modal/confirm': jasmine.createSpy() + }, + obj; + + describe('Magento_InstantPurchase/js/view/instant-purchase', function () { + beforeEach(function (done) { + injector.mock(mocks); + injector.require(['Magento_InstantPurchase/js/view/instant-purchase'], function (Constr) { + obj = Constr({ + index: 'purchase' + }); + done(); + }); + $('body').append('<div id="product_addtocart_form"></div>'); + }); + + afterEach(function () { + $('#product_addtocart_form').remove(); + }); + + it('Check initialized data.', function () { + expect(obj.showButton()).toBeFalsy(); + expect(obj.paymentToken()).toBeFalsy(); + expect(obj.shippingAddress()).toBeFalsy(); + expect(obj.billingAddress()).toBeFalsy(); + expect(obj.shippingMethod()).toBeFalsy(); + }); + + it('Check when customer data exists.', function () { + var dataStub = { + available: true, + paymentToken: 'paymentToken', + shippingAddress: 'shippingAddress', + billingAddress: 'billingAddress', + shippingMethod: 'shippingMethod' + }; + + customerDataMock(dataStub); + + expect(obj.showButton()).toBe(dataStub.available); + expect(obj.paymentToken()).toBe(dataStub.paymentToken); + expect(obj.shippingAddress()).toBe(dataStub.shippingAddress); + expect(obj.billingAddress()).toBe(dataStub.billingAddress); + expect(obj.shippingMethod()).toBe(dataStub.shippingMethod); + }); + + it('Check "setPurchaseData".', function () { + var dataStub = { + available: true, + paymentToken: 'paymentToken', + shippingAddress: 'shippingAddress', + billingAddress: 'billingAddress', + shippingMethod: 'shippingMethod' + }; + + obj.setPurchaseData(dataStub); + + expect(obj.showButton()).toBe(dataStub.available); + expect(obj.paymentToken()).toBe(dataStub.paymentToken); + expect(obj.shippingAddress()).toBe(dataStub.shippingAddress); + expect(obj.billingAddress()).toBe(dataStub.billingAddress); + expect(obj.shippingMethod()).toBe(dataStub.shippingMethod); + }); + + it('Check "instantPurchase" with failed validation.', function () { + spyOn(jQuery.fn, 'valid').and.returnValue(false); + expect(obj.instantPurchase()).toBeUndefined(); + expect(mocks['Magento_Ui/js/modal/confirm']).not.toHaveBeenCalled(); + }); + + it('Check "instantPurchase" with success validation.', function () { + spyOn(jQuery.fn, 'valid').and.returnValue(true); + expect(obj.instantPurchase()).toBeUndefined(); + expect(mocks['Magento_Ui/js/modal/confirm']).toHaveBeenCalled(); + }); + }); +}); From 8805bc07da432624236a4678258a5c6973545810 Mon Sep 17 00:00:00 2001 From: alojua <juan.alonso@staempfli.com> Date: Sat, 25 Nov 2017 12:51:27 +0100 Subject: [PATCH 311/653] Add command "app:config:status" to check whether the config propagation is up to date. This command can be used to decide whether app:config:import execution is needed --- .../Command/App/ConfigStatusCommand.php | 64 ++++++++++++++++ .../Command/App/ConfigStatusCommandTest.php | 76 +++++++++++++++++++ app/code/Magento/Deploy/etc/di.xml | 1 + 3 files changed, 141 insertions(+) create mode 100644 app/code/Magento/Deploy/Console/Command/App/ConfigStatusCommand.php create mode 100644 app/code/Magento/Deploy/Test/Unit/Console/Command/App/ConfigStatusCommandTest.php diff --git a/app/code/Magento/Deploy/Console/Command/App/ConfigStatusCommand.php b/app/code/Magento/Deploy/Console/Command/App/ConfigStatusCommand.php new file mode 100644 index 0000000000000..57782a3be5e53 --- /dev/null +++ b/app/code/Magento/Deploy/Console/Command/App/ConfigStatusCommand.php @@ -0,0 +1,64 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Deploy\Console\Command\App; + +use Magento\Deploy\Model\DeploymentConfig\ChangeDetector; +use Magento\Framework\Console\Cli; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +/** + * Command for checking if Config propagation is up to date + */ +class ConfigStatusCommand extends Command +{ + /** + * Code for error when config import is required. + */ + const EXIT_CODE_CONFIG_IMPORT_REQUIRED = 2; + + /** + * @var ChangeDetector + */ + private $changeDetector; + + /** + * ConfigStatusCommand constructor. + * @param ChangeDetector $changeDetector + */ + public function __construct(ChangeDetector $changeDetector) + { + $this->changeDetector = $changeDetector; + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this->setName('app:config:status') + ->setDescription('Checks if config propagation requires update'); + parent::configure(); + } + + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output) + { + if ($this->changeDetector->hasChanges()) { + $output->writeln( + '<info>The configuration file has changed. ' . + 'Run app:config:import or setup:upgrade command to synchronize configuration.</info>' + ); + return self::EXIT_CODE_CONFIG_IMPORT_REQUIRED; + } + $output->writeln('<info>Configuration files are up to date.</info>'); + return Cli::RETURN_SUCCESS; + } +} \ No newline at end of file diff --git a/app/code/Magento/Deploy/Test/Unit/Console/Command/App/ConfigStatusCommandTest.php b/app/code/Magento/Deploy/Test/Unit/Console/Command/App/ConfigStatusCommandTest.php new file mode 100644 index 0000000000000..cff4e7b4559c6 --- /dev/null +++ b/app/code/Magento/Deploy/Test/Unit/Console/Command/App/ConfigStatusCommandTest.php @@ -0,0 +1,76 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Deploy\Test\Unit\Console\Command\App; + +use Magento\Deploy\Console\Command\App\ConfigStatusCommand; +use Magento\Deploy\Model\DeploymentConfig\ChangeDetector; +use Magento\Framework\Console\Cli; +use Symfony\Component\Console\Tester\CommandTester; + +/** + * @inheritdoc + */ +class ConfigStatusCommandTest extends \PHPUnit\Framework\TestCase +{ + + /** + * @var ConfigStatusCommand + */ + private $command; + /** + * @var ChangeDetector + */ + private $changeDetector; + + /** + * @inheritdoc + */ + protected function setUp() + { + $this->changeDetector = $this->getMockBuilder(ChangeDetector::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->command = new ConfigStatusCommand($this->changeDetector); + } + + /** + * @param bool $hasChanges + * @param string $expectedMessage + * @param int $expectedCode + * + * @dataProvider executeDataProvider + */ + public function testExecute(bool $hasChanges, $expectedMessage, $expectedCode) + { + $this->changeDetector->expects($this->once()) + ->method('hasChanges') + ->will($this->returnValue($hasChanges)); + + $tester = new CommandTester($this->command); + $tester->execute([]); + + $this->assertEquals($expectedMessage, $tester->getDisplay()); + $this->assertSame($expectedCode, $tester->getStatusCode()); + } + + public function executeDataProvider() + { + return [ + 'Config is up to date' => [ + false, + 'Configuration files are up to date.' . PHP_EOL, + Cli::RETURN_SUCCESS + ], + 'Config needs update' => [ + true, + 'The configuration file has changed. ' . + 'Run app:config:import or setup:upgrade command to synchronize configuration.' . PHP_EOL, + ConfigStatusCommand::EXIT_CODE_CONFIG_IMPORT_REQUIRED, + ], + ]; + } +} \ No newline at end of file diff --git a/app/code/Magento/Deploy/etc/di.xml b/app/code/Magento/Deploy/etc/di.xml index e47fca3a6b946..ce7c84c95538a 100644 --- a/app/code/Magento/Deploy/etc/di.xml +++ b/app/code/Magento/Deploy/etc/di.xml @@ -31,6 +31,7 @@ <item name="dumpApplicationCommand" xsi:type="object">\Magento\Deploy\Console\Command\App\ApplicationDumpCommand</item> <item name="sensitiveConfigSetCommand" xsi:type="object">\Magento\Deploy\Console\Command\App\SensitiveConfigSetCommand</item> <item name="configImportCommand" xsi:type="object">Magento\Deploy\Console\Command\App\ConfigImportCommand</item> + <item name="configStatusCommand" xsi:type="object">Magento\Deploy\Console\Command\App\ConfigStatusCommand</item> </argument> </arguments> </type> From e47ec9b35325c1c1134f9340784f7e8f79c36c61 Mon Sep 17 00:00:00 2001 From: alojua <juan.alonso@staempfli.com> Date: Sat, 25 Nov 2017 17:32:27 +0100 Subject: [PATCH 312/653] Small change on output messages --- .../Deploy/Console/Command/App/ConfigStatusCommand.php | 4 ++-- .../Test/Unit/Console/Command/App/ConfigStatusCommandTest.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Deploy/Console/Command/App/ConfigStatusCommand.php b/app/code/Magento/Deploy/Console/Command/App/ConfigStatusCommand.php index 57782a3be5e53..534a54918a396 100644 --- a/app/code/Magento/Deploy/Console/Command/App/ConfigStatusCommand.php +++ b/app/code/Magento/Deploy/Console/Command/App/ConfigStatusCommand.php @@ -53,12 +53,12 @@ protected function execute(InputInterface $input, OutputInterface $output) { if ($this->changeDetector->hasChanges()) { $output->writeln( - '<info>The configuration file has changed. ' . + '<info>Config files have changed. ' . 'Run app:config:import or setup:upgrade command to synchronize configuration.</info>' ); return self::EXIT_CODE_CONFIG_IMPORT_REQUIRED; } - $output->writeln('<info>Configuration files are up to date.</info>'); + $output->writeln('<info>Config files are up to date.</info>'); return Cli::RETURN_SUCCESS; } } \ No newline at end of file diff --git a/app/code/Magento/Deploy/Test/Unit/Console/Command/App/ConfigStatusCommandTest.php b/app/code/Magento/Deploy/Test/Unit/Console/Command/App/ConfigStatusCommandTest.php index cff4e7b4559c6..3e400a28537e3 100644 --- a/app/code/Magento/Deploy/Test/Unit/Console/Command/App/ConfigStatusCommandTest.php +++ b/app/code/Magento/Deploy/Test/Unit/Console/Command/App/ConfigStatusCommandTest.php @@ -62,12 +62,12 @@ public function executeDataProvider() return [ 'Config is up to date' => [ false, - 'Configuration files are up to date.' . PHP_EOL, + 'Config files are up to date.' . PHP_EOL, Cli::RETURN_SUCCESS ], 'Config needs update' => [ true, - 'The configuration file has changed. ' . + 'Config files have changed. ' . 'Run app:config:import or setup:upgrade command to synchronize configuration.' . PHP_EOL, ConfigStatusCommand::EXIT_CODE_CONFIG_IMPORT_REQUIRED, ], From 13574b461903ad8ac726e09ad3f6de015c670dbb Mon Sep 17 00:00:00 2001 From: alojua <juan.alonso@staempfli.com> Date: Sat, 25 Nov 2017 17:33:14 +0100 Subject: [PATCH 313/653] Add 1 new line at the end of php files as it is needed to pass the static tests --- .../Magento/Deploy/Console/Command/App/ConfigStatusCommand.php | 2 +- .../Test/Unit/Console/Command/App/ConfigStatusCommandTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Deploy/Console/Command/App/ConfigStatusCommand.php b/app/code/Magento/Deploy/Console/Command/App/ConfigStatusCommand.php index 534a54918a396..90438380e2232 100644 --- a/app/code/Magento/Deploy/Console/Command/App/ConfigStatusCommand.php +++ b/app/code/Magento/Deploy/Console/Command/App/ConfigStatusCommand.php @@ -61,4 +61,4 @@ protected function execute(InputInterface $input, OutputInterface $output) $output->writeln('<info>Config files are up to date.</info>'); return Cli::RETURN_SUCCESS; } -} \ No newline at end of file +} diff --git a/app/code/Magento/Deploy/Test/Unit/Console/Command/App/ConfigStatusCommandTest.php b/app/code/Magento/Deploy/Test/Unit/Console/Command/App/ConfigStatusCommandTest.php index 3e400a28537e3..7822e75930eba 100644 --- a/app/code/Magento/Deploy/Test/Unit/Console/Command/App/ConfigStatusCommandTest.php +++ b/app/code/Magento/Deploy/Test/Unit/Console/Command/App/ConfigStatusCommandTest.php @@ -73,4 +73,4 @@ public function executeDataProvider() ], ]; } -} \ No newline at end of file +} From 14205b7c4997603daf657faddcdecd2c478245b7 Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko <okorshenko@magento.com> Date: Thu, 9 Nov 2017 19:54:53 -0600 Subject: [PATCH 314/653] MAGETWO-82265: Fixed missing 'size' and 'type' props on a third-party category images #11541 --- app/code/Magento/Catalog/Model/Category/DataProvider.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Category/DataProvider.php b/app/code/Magento/Catalog/Model/Category/DataProvider.php index a1ccfc9f20993..5f02e50082e2c 100644 --- a/app/code/Magento/Catalog/Model/Category/DataProvider.php +++ b/app/code/Magento/Catalog/Model/Category/DataProvider.php @@ -494,8 +494,8 @@ private function convertValues($category, $categoryData) $categoryData[$attributeCode][0]['name'] = $fileName; $categoryData[$attributeCode][0]['url'] = $category->getImageUrl($attributeCode); - $categoryData['image'][0]['size'] = isset($stat) ? $stat['size'] : 0; - $categoryData['image'][0]['type'] = $mime; + $categoryData[$attributeCode][0]['size'] = isset($stat) ? $stat['size'] : 0; + $categoryData[$attributeCode][0]['type'] = $mime; } } } From e9239727aca131f442f93558a1cd185ed537d21d Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Wed, 4 Oct 2017 01:04:15 +0300 Subject: [PATCH 315/653] MQE-377: Add a wishlist test to demo data persistence through frontend http request. --- .../StorefrontExistingCustomerLoginCest.xml | 16 +++---- .../Store/Cest/AdminCreateStoreGroupCest.xml | 9 ++-- .../Store/Metadata/store-meta.xml | 2 +- .../Store/Metadata/store_group-meta.xml | 2 +- .../StorefrontCustomerCreateWishlistCest.xml | 47 +++++++++++++++++++ .../Wishlist/Data/WishlistData.xml | 10 ++++ .../Wishlist/Metadata/wishlist-meta.xml | 12 +++++ .../Page/StorefrontCustomerWishlistPage.xml | 14 ++++++ .../StorefrontCustomerWishlistSection.xml | 14 ++++++ 9 files changed, 111 insertions(+), 15 deletions(-) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontCustomerCreateWishlistCest.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Data/WishlistData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Metadata/wishlist-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Page/StorefrontCustomerWishlistPage.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Section/StorefrontCustomerWishlistSection.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml index 0d6212a96e751..db78d89bb8d4b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml @@ -14,10 +14,10 @@ <stories value="Existing Customer can Login on the Storefront"/> </annotations> <before> - <createData entity="Simple_US_Customer" mergeKey="Simple_US_Customer"/> + <createData mergeKey="customer" entity="Simple_US_Customer"/> </before> <after> - <deleteData createDataKey="Simple_US_Customer" mergeKey="Simple_US_Customer"/> + <deleteData mergeKey="deleteCustomer" createDataKey="customer" /> </after> <test name="ExistingCustomerLoginStorefrontTest"> <annotations> @@ -31,13 +31,13 @@ <env value="phantomjs"/> <env value="headless"/> </annotations> - <amOnPage mergeKey="amOnSignInPage" url="customer/account/login/"/> - <fillField mergeKey="fillEmail" userInput="$$Simple_US_Customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> - <fillField mergeKey="fillPassword" userInput="{{Simple_US_Customer.password}}" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> + <amOnPage mergeKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage}}"/> + <fillField mergeKey="fillEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> + <fillField mergeKey="fillPassword" userInput="$$customer.password$$" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> <click mergeKey="clickSignInAccountButton" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> - <see mergeKey="seeFirstName" userInput="{{Simple_US_Customer.firstname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> - <see mergeKey="seeLastName" userInput="{{Simple_US_Customer.lastname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> - <see mergeKey="seeEmail" userInput="$$Simple_US_Customer.email$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see mergeKey="seeFirstName" userInput="$$customer.firstname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see mergeKey="seeLastName" userInput="$$customer.lastname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see mergeKey="seeEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml index 7d1c8895b415f..b5f3825878305 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml @@ -36,18 +36,17 @@ <click mergeKey="s11" selector="{{AdminStoresGridSection.resetButton}}"/> <waitForPageLoad mergeKey="s15" time="10"/> - <!-- Uncomment after MFTF Bug MQE-391 is fixed --> - <!--fillField mergeKey="s17" selector="{{AdminStoresGridSection.storeGrpFilterTextField}}" userInput="$$b1.group[name]$$"/--> + <fillField mergeKey="s17" selector="{{AdminStoresGridSection.storeGrpFilterTextField}}" userInput="$$b1.group[name]$$"/> <click mergeKey="s19" selector="{{AdminStoresGridSection.searchButton}}"/> <waitForPageLoad mergeKey="s21" time="10"/> - <!--see mergeKey="s23" selector="{{AdminStoresGridSection.storeGrpNameInFirstRow}}" userInput="$$b1.group[name]$$"/--> + <see mergeKey="s23" selector="{{AdminStoresGridSection.storeGrpNameInFirstRow}}" userInput="$$b1.group[name]$$"/> <click mergeKey="s31" selector="{{AdminStoresGridSection.resetButton}}"/> <waitForPageLoad mergeKey="s35" time="10"/> - <!--fillField mergeKey="s37" selector="{{AdminStoresGridSection.storeGrpFilterTextField}}" userInput="$$b2.group[name]$$"/--> + <fillField mergeKey="s37" selector="{{AdminStoresGridSection.storeGrpFilterTextField}}" userInput="$$b2.group[name]$$"/> <click mergeKey="s39" selector="{{AdminStoresGridSection.searchButton}}"/> <waitForPageLoad mergeKey="s41" time="10"/> - <!--see mergeKey="s43" selector="{{AdminStoresGridSection.storeGrpNameInFirstRow}}" userInput="$$b2.group[name]$$"/--> + <see mergeKey="s43" selector="{{AdminStoresGridSection.storeGrpNameInFirstRow}}" userInput="$$b2.group[name]$$"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store-meta.xml index 0cf7683f87ca1..e31443927a13d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store-meta.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateStore" dataType="store" type="create" - auth="adminFormKey" url="/admin/system_store/save" method="POST" successRegex="messages-message-success" returnRegex="" > + auth="adminFormKey" url="/admin/system_store/save" method="POST" successRegex="/messages-message-success/" returnRegex="" > <object dataType="store" key="store"> <field key="group_id">string</field> <field key="name">string</field> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store_group-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store_group-meta.xml index a4820aea080f8..a090e706d1293 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store_group-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Metadata/store_group-meta.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateStoreGroup" dataType="group" type="create" - auth="adminFormKey" url="/admin/system_store/save" method="POST" successRegex="messages-message-success" returnRegex="" > + auth="adminFormKey" url="/admin/system_store/save" method="POST" successRegex="/messages-message-success/" returnRegex="" > <contentType>application/x-www-form-urlencoded</contentType> <object dataType="group" key="group"> <field key="group_id">string</field> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontCustomerCreateWishlistCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontCustomerCreateWishlistCest.xml new file mode 100644 index 0000000000000..a66922db382bd --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontCustomerCreateWishlistCest.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Test XML Example --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="StorefrontCustomerCreateWishlistCest"> + <annotations> + <features value="Persist a wishlist for a customer"/> + <stories value="Persist a wishlist for a customer"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + <group value="wishlist"/> + </annotations> + <before> + <createData mergeKey="category" entity="SimpleSubCategory"/> + <createData mergeKey="product" entity="SimpleProduct" > + <required-entity persistedKey="category"/> + </createData> + <createData mergeKey="customer" entity="Simple_US_Customer"/> + <createData mergeKey="wishlist" entity="Wishlist"> + <required-entity persistedKey="customer"/> + <required-entity persistedKey="product"/> + </createData> + </before> + <after> + <deleteData mergeKey="deleteProduct" createDataKey="product"/> + <deleteData mergeKey="deleteCategory" createDataKey="category"/> + <deleteData mergeKey="deleteCustomer" createDataKey="customer"/> + </after> + <test name="StorefrontCustomerCreateWishlistTest"> + <annotations> + <title value="Persist a wishlist for a customer"/> + <description value="Persist a wishlist for a customer"/> + </annotations> + <amOnPage mergeKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage}}"/> + <fillField mergeKey="fillEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> + <fillField mergeKey="fillPassword" userInput="$$customer.password$$" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> + <waitForElementVisible mergeKey="waitForButton" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> + <click mergeKey="clickSignInAccountButton" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> + <see mergeKey="seeFirstName" userInput="$$customer.firstname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see mergeKey="seeLastName" userInput="$$customer.lastname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see mergeKey="seeEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <waitForPageLoad mergeKey="15"/> + <amOnPage mergeKey="amOnWishlist" url="{{StorefrontCustomerWishlistPage}}"/> + <see mergeKey="seeInField" userInput="$$product.name$$" selector="{{StorefrontCustomerWishlistSection.productItemName}}"/> + </test> + </cest> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Data/WishlistData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Data/WishlistData.xml new file mode 100644 index 0000000000000..343923fada860 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Data/WishlistData.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="Wishlist" type="wishlist"> + <data key="id">null</data> + <var key="product" entityType="product" entityKey="id"/> + <var key="customer_email" entityType="customer" entityKey="email"/> + <var key="customer_password" entityType="customer" entityKey="password"/> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Metadata/wishlist-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Metadata/wishlist-meta.xml new file mode 100644 index 0000000000000..1a542d465bac4 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Metadata/wishlist-meta.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateWishlist" dataType="wishlist" type="create" + auth="customerFormKey" url="/wishlist/index/add/" method="POST" successRegex="" returnRegex="~\/wishlist_id\/(\d*?)\/~" > + <contentType>application/x-www-form-urlencoded</contentType> + <field key="product">integer</field> + <field key="customer_email">string</field> + <field key="customer_password">string</field> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Page/StorefrontCustomerWishlistPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Page/StorefrontCustomerWishlistPage.xml new file mode 100644 index 0000000000000..b488387c8bf38 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Page/StorefrontCustomerWishlistPage.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> + <page name="StorefrontCustomerWishlistPage" urlPath="/wishlist/" module="Magento_Wishlist"> + <section name="StorefrontCustomerWishlistSection" /> + </page> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Section/StorefrontCustomerWishlistSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Section/StorefrontCustomerWishlistSection.xml new file mode 100644 index 0000000000000..3f40af87a50bb --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Section/StorefrontCustomerWishlistSection.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> + <section name="StorefrontCustomerWishlistSection"> + <element name="productItemName" type="text" selector=".products-grid .product-item-name a"/> + </section> +</config> \ No newline at end of file From 229e38144d08227daa6f8fdb785e5571a59ebf69 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Fri, 6 Oct 2017 22:08:11 +0300 Subject: [PATCH 316/653] MQE-377: Addressed review feedback regarding page url reference. --- .../Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml | 2 +- .../FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml | 4 ++-- .../Catalog/Cest/AdminCreateConfigurableProductCest.xml | 2 +- .../Checkout/Cest/StorefrontCustomerCheckoutCest.xml | 2 +- .../Checkout/Cest/StorefrontGuestCheckoutCest.xml | 4 ++-- .../FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml | 4 ++-- .../Customer/Cest/StorefrontExistingCustomerLoginCest.xml | 2 +- .../FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml | 6 +++--- .../FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml | 6 ++---- .../Wishlist/Cest/StorefrontCustomerCreateWishlistCest.xml | 4 ++-- 10 files changed, 17 insertions(+), 19 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml index 4b14e76edb074..a5c9c0c81cc64 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml @@ -26,7 +26,7 @@ <env value="phantomjs"/> <env value="headless"/> </annotations> - <amOnPage url="{{AdminLoginPage}}" mergeKey="amOnAdminLoginPage"/> + <amOnPage url="{{AdminLoginPage.url}}" mergeKey="amOnAdminLoginPage"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickOnSignIn"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml index 0cb12ebe6df01..550e668b0808f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml @@ -26,11 +26,11 @@ <env value="chrome"/> <env value="headless"/> </annotations> - <amOnPage url="{{AdminLoginPage}}" mergeKey="amOnAdminLoginPage"/> + <amOnPage url="{{AdminLoginPage.url}}" mergeKey="amOnAdminLoginPage"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickOnSignIn"/> - <amOnPage url="{{AdminCategoryPage}}" mergeKey="navigateToCategoryPage"/> + <amOnPage url="{{AdminCategoryPage.url}}" mergeKey="navigateToCategoryPage"/> <waitForPageLoad mergeKey="waitForPageLoad1"/> <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" mergeKey="clickOnAddSubCategory"/> <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{SimpleSubCategory.name}}" mergeKey="enterCategoryName"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml index a595cf8b47625..69f1a7ea6b053 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml @@ -40,7 +40,7 @@ <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" mergeKey="clickOnSaveCategory"/> <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" mergeKey="assertSuccessMessage"/> - <amOnPage url="{{AdminProductIndexPage.urlPath}}" mergeKey="amOnProductGridPage"/> + <amOnPage url="{{AdminProductIndexPage.url}}" mergeKey="amOnProductGridPage"/> <waitForPageLoad mergeKey="waitForPageLoad2"/> <click selector="{{AdminProductGridActionSection.addProductToggle}}" mergeKey="clickOnAddProductToggle"/> <click selector="{{AdminProductGridActionSection.addConfigurableProduct}}" mergeKey="clickOnAddConfigurableProduct"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml index 20442a4873301..cd529555ab6a3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml @@ -63,7 +63,7 @@ <grabTextFrom mergeKey="s53" selector="{{CheckoutSuccessMainSection.orderNumber22}}" returnVariable="orderNumber" /> <see mergeKey="s55" selector="{{CheckoutSuccessMainSection.success}}" userInput="Your order number is:" /> - <amOnPage mergeKey="s59" url="{{AdminLoginPage}}" /> + <amOnPage mergeKey="s59" url="{{AdminLoginPage.url}}" /> <fillField mergeKey="s61" selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" /> <fillField mergeKey="s63" selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" /> <click mergeKey="s65" selector="{{AdminLoginFormSection.signIn}}" /> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml index 03e36ff28d9d7..fa441fd673784 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml @@ -62,11 +62,11 @@ <grabTextFrom selector="{{CheckoutSuccessMainSection.orderNumber}}" returnVariable="orderNumber" mergeKey="grabOrderNumber"/> <see selector="{{CheckoutSuccessMainSection.success}}" userInput="Your order # is:" mergeKey="seeOrderNumber"/> <see selector="{{CheckoutSuccessMainSection.success}}" userInput="We'll email you an order confirmation with details and tracking info." mergeKey="seeEmailYou"/> - <amOnPage url="{{AdminLoginPage}}" mergeKey="navigateToAdmin"/> + <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> - <amOnPage url="{{OrdersPage}}" mergeKey="onOrdersPage"/> + <amOnPage url="{{OrdersPage.url}}" mergeKey="onOrdersPage"/> <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="30" mergeKey="waitForOrdersPage"/> <fillField selector="{{OrdersGridSection.search}}" variable="orderNumber" mergeKey="fillOrderNum"/> <click selector="{{OrdersGridSection.submitSearch}}" mergeKey="submitSearchOrderNum"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml index cf1f9564c4b32..9e1525c3670f6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml @@ -27,11 +27,11 @@ <env value="firefox"/> <env value="headless"/> </annotations> - <amOnPage url="{{AdminLoginPage}}" mergeKey="navigateToAdmin"/> + <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> - <amOnPage url="{{CmsPagesPage}}" mergeKey="amOnPagePagesGrid"/> + <amOnPage url="{{CmsPagesPage.url}}" mergeKey="amOnPagePagesGrid"/> <waitForPageLoad mergeKey="waitForPageLoad1"/> <click selector="{{CmsPagesPageActionsSection.addNewPage}}" mergeKey="clickAddNewPage"/> <fillField selector="{{CmsNewPagePageBasicFieldsSection.pageTitle}}" userInput="{{_defaultCmsPage.title}}" mergeKey="fillFieldTitle"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml index db78d89bb8d4b..79fb72a5ff5ea 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml @@ -31,7 +31,7 @@ <env value="phantomjs"/> <env value="headless"/> </annotations> - <amOnPage mergeKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage}}"/> + <amOnPage mergeKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage.url}}"/> <fillField mergeKey="fillEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> <fillField mergeKey="fillPassword" userInput="$$customer.password$$" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> <click mergeKey="clickSignInAccountButton" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml index 7ff96a3bed9de..c043fe298f767 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml @@ -57,13 +57,13 @@ <grabTextFrom selector="{{CheckoutSuccessMainSection.orderNumber}}" returnVariable="orderNumber" mergeKey="grabOrderNumber"/> <!-- end todo --> - <amOnPage url="{{AdminLoginPage}}" mergeKey="goToAdmin"/> + <amOnPage url="{{AdminLoginPage.url}}" mergeKey="goToAdmin"/> <waitForPageLoad mergeKey="waitForPageLoad1"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> - <amOnPage url="{{OrdersPage}}" mergeKey="onOrdersPage"/> + <amOnPage url="{{OrdersPage.url}}" mergeKey="onOrdersPage"/> <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="10" mergeKey="waitSpinner1"/> <fillField selector="{{OrdersGridSection.search}}" variable="orderNumber" mergeKey="searchOrderNum"/> <click selector="{{OrdersGridSection.submitSearch}}" mergeKey="submitSearch"/> @@ -79,7 +79,7 @@ <see selector="{{OrderDetailsInvoicesSection.content}}" userInput="John Doe" mergeKey="seeInvoice2"/> <click selector="{{OrderDetailsOrderViewSection.information}}" mergeKey="clickInformation"/> <see selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Processing" mergeKey="seeOrderStatus"/> - <amOnPage url="{{InvoicesPage}}" mergeKey="goToInvoices"/> + <amOnPage url="{{InvoicesPage.url}}" mergeKey="goToInvoices"/> <waitForElementNotVisible selector="{{InvoicesGridSection.spinner}}" time="10" mergeKey="waitSpinner4"/> <click selector="{{InvoicesGridSection.filter}}" mergeKey="clickFilters"/> <fillField selector="{{InvoicesFiltersSection.orderNum}}" variable="orderNumber" mergeKey="searchOrderNum2"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml index b5f3825878305..53692f3f41de6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml @@ -24,14 +24,12 @@ <annotations> <title value="Create a store group in admin"/> <description value="Create a store group in admin"/> - <severity value="CRITICAL"/> - <testCaseId value="MAGETWO-?????"/> </annotations> - <amOnPage mergeKey="s1" url="{{AdminLoginPage}}"/> + <amOnPage mergeKey="s1" url="{{AdminLoginPage.url}}"/> <fillField mergeKey="s3" selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}"/> <fillField mergeKey="s5" selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}"/> <click mergeKey="s7" selector="{{AdminLoginFormSection.signIn}}"/> - <amOnPage mergeKey="s9" url="{{AdminSystemStorePage}}"/> + <amOnPage mergeKey="s9" url="{{AdminSystemStorePage.url}}"/> <click mergeKey="s11" selector="{{AdminStoresGridSection.resetButton}}"/> <waitForPageLoad mergeKey="s15" time="10"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontCustomerCreateWishlistCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontCustomerCreateWishlistCest.xml index a66922db382bd..6a31e358f538c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontCustomerCreateWishlistCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontCustomerCreateWishlistCest.xml @@ -31,7 +31,7 @@ <title value="Persist a wishlist for a customer"/> <description value="Persist a wishlist for a customer"/> </annotations> - <amOnPage mergeKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage}}"/> + <amOnPage mergeKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage.url}}"/> <fillField mergeKey="fillEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> <fillField mergeKey="fillPassword" userInput="$$customer.password$$" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> <waitForElementVisible mergeKey="waitForButton" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> @@ -40,7 +40,7 @@ <see mergeKey="seeLastName" userInput="$$customer.lastname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> <see mergeKey="seeEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> <waitForPageLoad mergeKey="15"/> - <amOnPage mergeKey="amOnWishlist" url="{{StorefrontCustomerWishlistPage}}"/> + <amOnPage mergeKey="amOnWishlist" url="{{StorefrontCustomerWishlistPage.url}}"/> <see mergeKey="seeInField" userInput="$$product.name$$" selector="{{StorefrontCustomerWishlistSection.productItemName}}"/> </test> </cest> From 55684096f29589b68daaec88f28f6ab9d0f4b086 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Tue, 10 Oct 2017 17:54:41 +0300 Subject: [PATCH 317/653] MQE-377: Addressed review feedback regarding wishlist test. --- ... StorefrontDeletePersistedWishlistCest.xml} | 18 +++++++++++------- .../StorefrontCustomerWishlistSection.xml | 4 +++- 2 files changed, 14 insertions(+), 8 deletions(-) rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/{StorefrontCustomerCreateWishlistCest.xml => StorefrontDeletePersistedWishlistCest.xml} (71%) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontCustomerCreateWishlistCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml similarity index 71% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontCustomerCreateWishlistCest.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml index 6a31e358f538c..1c3ebf7c0ab1c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontCustomerCreateWishlistCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Test XML Example --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> - <cest name="StorefrontCustomerCreateWishlistCest"> + <cest name="StorefrontDeletePersistedWishlistCest"> <annotations> - <features value="Persist a wishlist for a customer"/> - <stories value="Persist a wishlist for a customer"/> + <features value="Delete a persist wishlist for a customer"/> + <stories value="Delete a persist wishlist for a customer"/> <env value="chrome"/> <env value="firefox"/> <env value="phantomjs"/> @@ -26,10 +26,10 @@ <deleteData mergeKey="deleteCategory" createDataKey="category"/> <deleteData mergeKey="deleteCustomer" createDataKey="customer"/> </after> - <test name="StorefrontCustomerCreateWishlistTest"> + <test name="StorefrontDeletePersistedWishlistTest"> <annotations> - <title value="Persist a wishlist for a customer"/> - <description value="Persist a wishlist for a customer"/> + <title value="Delete a persist wishlist for a customer"/> + <description value="Delete a persist wishlist for a customer"/> </annotations> <amOnPage mergeKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage.url}}"/> <fillField mergeKey="fillEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> @@ -41,7 +41,11 @@ <see mergeKey="seeEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> <waitForPageLoad mergeKey="15"/> <amOnPage mergeKey="amOnWishlist" url="{{StorefrontCustomerWishlistPage.url}}"/> - <see mergeKey="seeInField" userInput="$$product.name$$" selector="{{StorefrontCustomerWishlistSection.productItemName}}"/> + <see mergeKey="seeWishlist" userInput="$$product.name$$" selector="{{StorefrontCustomerWishlistSection.productItemNameText}}"/> + <moveMouseOver mergeKey="mouseOver" selector="{{StorefrontCustomerWishlistSection.productItemNameText}}"/> + <waitForElementVisible mergeKey="waitForRemoveButton" selector="{{StorefrontCustomerWishlistSection.removeWishlistButton}}"/> + <click mergeKey="clickRemove" selector="{{StorefrontCustomerWishlistSection.removeWishlistButton}}"/> + <see mergeKey="seeEmptyWishlist" userInput="You have no items in your wish list" selector="{{StorefrontCustomerWishlistSection.emptyWishlistText}}"/> </test> </cest> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Section/StorefrontCustomerWishlistSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Section/StorefrontCustomerWishlistSection.xml index 3f40af87a50bb..0379cc24e895b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Section/StorefrontCustomerWishlistSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Section/StorefrontCustomerWishlistSection.xml @@ -9,6 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="StorefrontCustomerWishlistSection"> - <element name="productItemName" type="text" selector=".products-grid .product-item-name a"/> + <element name="productItemNameText" type="text" selector=".products-grid .product-item-name a"/> + <element name="removeWishlistButton" type="button" selector=".products-grid .btn-remove.action.delete>span" timeout="30"/> + <element name="emptyWishlistText" type="text" selector=".message.info.empty>span"/> </section> </config> \ No newline at end of file From e807e1c9a72060703a0e5b916fa1e0bca023c4d7 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Tue, 10 Oct 2017 22:01:02 +0300 Subject: [PATCH 318/653] MQE-377: resolved additional merge conflicts in wishlist test. --- .../Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml index 1c3ebf7c0ab1c..a424e6b921fa0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml @@ -13,12 +13,12 @@ <before> <createData mergeKey="category" entity="SimpleSubCategory"/> <createData mergeKey="product" entity="SimpleProduct" > - <required-entity persistedKey="category"/> + <required-entity createDataKey="category"/> </createData> <createData mergeKey="customer" entity="Simple_US_Customer"/> <createData mergeKey="wishlist" entity="Wishlist"> - <required-entity persistedKey="customer"/> - <required-entity persistedKey="product"/> + <required-entity createDataKey="customer"/> + <required-entity createDataKey="product"/> </createData> </before> <after> From 5bdb89160a854d0637146d9d202d100e5c47d447 Mon Sep 17 00:00:00 2001 From: Ian Meron <imeron@magento.com> Date: Wed, 11 Oct 2017 22:46:28 +0300 Subject: [PATCH 319/653] MQE-345: [DevOps] [Customizability] Create suite schema declaration and supporting interpretation - add new sample suite file - add robo command to include suite generate --- dev/tests/acceptance/RoboFile.php | 17 +++++++++++++++++ .../acceptance/tests/_suite/sampleSuite.xml | 13 +++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 dev/tests/acceptance/tests/_suite/sampleSuite.xml diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php index ac1e9f407637a..6ebbb75639383 100644 --- a/dev/tests/acceptance/RoboFile.php +++ b/dev/tests/acceptance/RoboFile.php @@ -43,6 +43,23 @@ function generateTests() $this->say("Generate Tests Command Run"); } + /** + * Generate a suite based on name(s) passed in as args + */ + function generateSuite(array $args) + { + if (empty($args)) { + throw new Exception("Please provide suite name(s) after generate:suite command"); + } + + require 'tests/functional/_bootstrap.php'; + $sg = \Magento\FunctionalTestingFramework\Suite\SuiteGenerator::getInstance(); + + foreach ($args as $arg) { + $sg->generateSuite($arg); + } + } + /** * Run all Functional tests using the Chrome environment */ diff --git a/dev/tests/acceptance/tests/_suite/sampleSuite.xml b/dev/tests/acceptance/tests/_suite/sampleSuite.xml new file mode 100644 index 0000000000000..339cb70d890ba --- /dev/null +++ b/dev/tests/acceptance/tests/_suite/sampleSuite.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Suite/etc/suiteSchema.xsd"> + <suite name="mySuite"> + <include> + <group name="example"/> + <cest test="PersistMultipleEntitiesTest" name="PersistMultipleEntitiesCest"/> + <module name="SampleTests" file="SampleCest.xml"/> + </include> + <exclude> + <group name="testGroup"/> + </exclude> + </suite> +</config> \ No newline at end of file From 02d2807b06bf08b330a8eff4cd40c4824f48f479 Mon Sep 17 00:00:00 2001 From: Ian Meron <imeron@magento.com> Date: Fri, 13 Oct 2017 20:19:26 +0300 Subject: [PATCH 320/653] MQE-453: [DevOps] Add optional arg for consolidated test run - add args to robofile command for env and config during test generation --- dev/tests/acceptance/RoboFile.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php index 6ebbb75639383..0c8b075b092c5 100644 --- a/dev/tests/acceptance/RoboFile.php +++ b/dev/tests/acceptance/RoboFile.php @@ -36,10 +36,10 @@ function buildProject() /** * Generate all Tests */ - function generateTests() + function generateTests($opts = ['config' => null, 'env' => 'chrome']) { require 'tests/functional/_bootstrap.php'; - \Magento\FunctionalTestingFramework\Util\TestGenerator::getInstance()->createAllCestFiles(); + \Magento\FunctionalTestingFramework\Util\TestGenerator::getInstance()->createAllCestFiles($opts['config'], $opts['env']); $this->say("Generate Tests Command Run"); } From 1e9886bf6b89ed2c2fd3439555bf6bf5fd26f55b Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Thu, 19 Oct 2017 21:21:08 +0300 Subject: [PATCH 321/653] MQE-429: Added a sample test to perform api PUT request. --- .../Catalog/Data/ProductData.xml | 15 ++++++++++ .../Cest/UpdateSimpleProductByApiCest.xml | 29 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml index 5be4b73510c51..ea57af75d6379 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml @@ -33,4 +33,19 @@ <required-entity type="custom_attribute_array">CustomAttributeCategoryIds</required-entity> <!--required-entity type="custom_attribute">CustomAttributeProductUrlKey</required-entity--> </entity> + <entity name="NewSimpleProduct" type="product"> + <data key="price">321.00</data> + </entity> + <entity name="SimpleOne" type="product"> + <data key="sku" unique="suffix">SimpleOne</data> + <data key="type_id">simple</data> + <data key="attribute_set_id">4</data> + <data key="name" unique="suffix">SimpleProduct</data> + <data key="price">1.23</data> + <data key="visibility">4</data> + <data key="status">1</data> + <required-entity type="product_extension_attribute">EavStockItem</required-entity> + <!--required-entity type="custom_attribute_array">CustomAttributeCategoryIds</required-entity--> + <required-entity type="custom_attribute">CustomAttributeProductAttribute</required-entity> + </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml new file mode 100644 index 0000000000000..929b8488e523b --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Test XML Example --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="UpdateSimpleProductByApiCest"> + <annotations> + <features value="Update simple product by api test."/> + <stories value="Update simple product by api test."/> + <group value="example"/> + <env value="chrome"/> + <env value="firefox"/> + <env value="phantomjs"/> + <env value="headless"/> + </annotations> + <before> + <createData mergeKey="categoryHandle" entity="SimpleSubCategory"/> + <createData mergeKey="originalProductHandle" entity="SimpleProduct" > + <required-entity createDataKey="categoryHandle"/> + </createData> + <updateData mergeKey="productHandle" entity="NewSimpleProduct" createDataKey="originalProductHandle"> + </updateData> + + </before> + <after> + <deleteData mergeKey="delete" createDataKey="productHandle"/> + </after> + <test name="UpdateSimpleProductByApiTest"> + </test> + </cest> +</config> \ No newline at end of file From 5dc68b7881e528bf67400d22b5466966a9825029 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Thu, 19 Oct 2017 19:07:09 +0300 Subject: [PATCH 322/653] MQE-440: Added configurable product related metadata, data, and a sample test. --- .../Catalog/Data/CategoryData.xml | 1 - .../Catalog/Data/CustomAttributeData.xml | 4 + .../Data/FrontendLabelData.xml} | 6 +- .../Catalog/Data/ProductAttributeData.xml | 32 +++++ .../Data/ProductAttributeOptionData.xml | 30 +++++ .../Catalog/Data/ProductAttributeSetData.xml | 17 +++ .../Catalog/Data/StoreLabelData.xml | 27 ++++ .../Metadata/custom_attribute-meta.xml | 0 .../empty_extension_attribute-meta.xml | 0 .../Catalog/Metadata/frontend_label-meta.xml | 15 +++ .../Catalog/Metadata/product-meta.xml | 13 +- .../Metadata/product_attribute-meta.xml | 117 ++++++++++++++++++ .../product_attribute_option-meta.xml | 33 +++++ .../Metadata/product_attribute_set-meta.xml | 23 ++++ .../Catalog/Metadata/store_label-meta.xml | 15 +++ .../Catalog/Metadata/validation_rule-meta.xml | 19 +++ .../AdminCreateConfigurableProductCest.xml | 0 .../Data/ConfigurableProductData.xml | 14 ++- .../Data/ConfigurableProductOptionData.xml | 17 +++ .../Data/ValueIndexData.xml | 17 +++ .../configurable_product_add_child-meta.xml | 16 +++ .../configurable_product_options-meta.xml | 22 ++++ ...bute_configurable_product_options-meta.xml | 21 ++++ .../Metadata/valueIndex-meta.xml | 14 +++ .../ConfigurableProduct/composer.json | 4 +- ... StorefrontPersistedCustomerLoginCest.xml} | 12 +- .../Customer/Data/CustomerData.xml | 5 + .../Customer/Metadata/customer-meta.xml | 33 +---- .../FunctionalTest/Customer/composer.json | 4 +- .../CreateConfigurableProductByApiCest.xml | 70 +++++++++++ 30 files changed, 545 insertions(+), 56 deletions(-) rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/{Customer/Data/CustomAttributeData.xml => Catalog/Data/FrontendLabelData.xml} (71%) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductAttributeData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductAttributeOptionData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductAttributeSetData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/StoreLabelData.xml rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/{Customer => Catalog}/Metadata/custom_attribute-meta.xml (100%) rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/{Customer => Catalog}/Metadata/empty_extension_attribute-meta.xml (100%) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/frontend_label-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_option-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_set-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/store_label-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/validation_rule-meta.xml rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/{Catalog => ConfigurableProduct}/Cest/AdminCreateConfigurableProductCest.xml (100%) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductOptionData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ValueIndexData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_add_child-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_options-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/extension_attribute_configurable_product_options-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/valueIndex-meta.xml rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/{StorefrontExistingCustomerLoginCest.xml => StorefrontPersistedCustomerLoginCest.xml} (82%) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CategoryData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CategoryData.xml index b2877aebe72de..67413dc4756f3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CategoryData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CategoryData.xml @@ -18,6 +18,5 @@ <data key="name_lwr" unique="suffix">simplesubcategory</data> <data key="is_active">true</data> <data key="include_in_menu">true</data> - <!--required-entity type="custom_attribute">CustomAttributeCategoryUrlKey</required-entity--> </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeData.xml index 46383269b88e8..5319df4773a0b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/CustomAttributeData.xml @@ -20,4 +20,8 @@ <data key="attribute_code">category_ids</data> <var key="value" entityType="category" entityKey="id"/> </entity> + <entity name="CustomAttributeProductAttribute" type="custom_attribute"> + <var key="attribute_code" entityKey="attribute_code" entityType="ProductAttribute"/> + <var key="value" entityKey="value" entityType="ProductAttributeOption"/> + </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomAttributeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/FrontendLabelData.xml similarity index 71% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomAttributeData.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/FrontendLabelData.xml index ca98ffedd111b..5cd129297e0fb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomAttributeData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/FrontendLabelData.xml @@ -8,8 +8,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> - <entity name="CustomAttributeSimple" type="custom_attribute"> - <data key="attribute_code">100</data> - <data key="value">test</data> + <entity name="ProductAttributeFrontendLabel" type="FrontendLabel"> + <data key="store_id">0</data> + <data key="label" unique="suffix">attribute</data> </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductAttributeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductAttributeData.xml new file mode 100644 index 0000000000000..118b93a0219fa --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductAttributeData.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="productAttributeWithTwoOptions" type="ProductAttribute"> + <data key="attribute_code" unique="suffix">attribute</data> + <data key="frontend_input">select</data> + <data key="scope">global</data> + <data key="is_required">false</data> + <data key="is_unique">false</data> + <data key="is_searchable">true</data> + <data key="is_visible">true</data> + <data key="is_visible_in_advanced_search">true</data> + <data key="is_visible_on_front">true</data> + <data key="is_filterable">true</data> + <data key="is_filterable_in_search">true</data> + <data key="used_in_product_listing">true</data> + <data key="is_used_for_promo_rules">true</data> + <data key="is_comparable">true</data> + <data key="is_used_in_grid">true</data> + <data key="is_visible_in_grid">true</data> + <data key="is_filterable_in_grid">true</data> + <data key="used_for_sort_by">true</data> + <required-entity type="FrontendLabel">ProductAttributeFrontendLabel</required-entity> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductAttributeOptionData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductAttributeOptionData.xml new file mode 100644 index 0000000000000..3f75639c21ab7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductAttributeOptionData.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="productAttributeOption1" type="ProductAttributeOption"> + <var key="attribute_code" entityKey="attribute_code" entityType="ProductAttribute"/> + <data key="label" unique="suffix">option1</data> + <data key="is_default">false</data> + <data key="sort_order">0</data> + <required-entity type="StoreLabel">Option1Store0</required-entity> + <required-entity type="StoreLabel">Option1Store1</required-entity> + </entity> + <entity name="productAttributeOption2" type="ProductAttributeOption"> + <var key="attribute_code" entityKey="attribute_code" entityType="ProductAttribute"/> + <data key="label" unique="suffix">option2</data> + <data key="is_default">true</data> + <data key="sort_order">1</data> + <required-entity type="StoreLabel">Option2Store0</required-entity> + <required-entity type="StoreLabel">Option2Store1</required-entity> + </entity> + <entity name="ProductAttributeOptionGetter" type="ProductAttributeOption"> + <var key="attribute_code" entityKey="attribute_code" entityType="ProductAttribute"/> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductAttributeSetData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductAttributeSetData.xml new file mode 100644 index 0000000000000..fca2c8ec569d6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductAttributeSetData.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="AddToDefaultSet" type="ProductAttributeSet"> + <var key="attributeCode" entityKey="attribute_code" entityType="ProductAttribute"/> + <data key="attributeSetId">4</data> + <data key="attributeGroupId">7</data> + <data key="sortOrder">0</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/StoreLabelData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/StoreLabelData.xml new file mode 100644 index 0000000000000..c362f81eb2eff --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/StoreLabelData.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="Option1Store0" type="StoreLabel"> + <data key="store_id">0</data> + <data key="label">option1</data> + </entity> + <entity name="Option1Store1" type="StoreLabel"> + <data key="store_id">1</data> + <data key="label">option1</data> + </entity> + <entity name="Option2Store0" type="StoreLabel"> + <data key="store_id">0</data> + <data key="label">option2</data> + </entity> + <entity name="Option2Store1" type="StoreLabel"> + <data key="store_id">1</data> + <data key="label">option2</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml similarity index 100% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/custom_attribute-meta.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/custom_attribute-meta.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/empty_extension_attribute-meta.xml similarity index 100% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/empty_extension_attribute-meta.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/empty_extension_attribute-meta.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/frontend_label-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/frontend_label-meta.xml new file mode 100644 index 0000000000000..90e717019c0ec --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/frontend_label-meta.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateFrontendLabel" dataType="FrontendLabel" type="create"> + <field key="store_id">integer</field> + <field key="label">string</field> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml index 068eb692a4668..6103c6cc3f47c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml @@ -27,14 +27,16 @@ </array> <array key="custom_attributes"> <value>custom_attribute_array</value> + <value>custom_attribute</value> </array> <array key="options"> <value>product_option</value> </array> </object> </operation> - <operation name="UpdateProduct" dataType="product" type="update" auth="adminOauth" url="/V1/products" method="PUT"> + <operation name="UpdateProduct" dataType="product" type="update" auth="adminOauth" url="/V1/products/{sku}" method="PUT"> <contentType>application/json</contentType> + <param key="sku" type="path">{sku}</param> <object dataType="product" key="product"> <field key="id">integer</field> <field key="sku">string</field> @@ -53,20 +55,15 @@ </array> <array key="custom_attributes"> <value>custom_attribute_array</value> + <value>custom_attribute</value> </array> <array key="options"> <value>product_option</value> </array> - <!--array key="media_gallery_entries"> - <value>media_gallery_entries</value> - </array> - <array key="tier_prices"> - <value>tier_prices</value> - </array--> </object> <field key="saveOptions">boolean</field> </operation> - <operation name="deleteProduct" dataType="product" type="delete" auth="adminOauth" url="/V1/products" method="DELETE"> + <operation name="deleteProduct" dataType="product" type="delete" auth="adminOauth" url="/V1/products/{sku}" method="DELETE"> <contentType>application/json</contentType> <param key="sku" type="path">{sku}</param> </operation> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute-meta.xml new file mode 100644 index 0000000000000..a517d6cd80a29 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute-meta.xml @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateProductAttribute" dataType="ProductAttribute" type="create" auth="adminOauth" url="/V1/products/attributes" method="POST"> + <contentType>application/json</contentType> + <object dataType="ProductAttribute" key="attribute"> + <field key="attribute_code">string</field> + <field key="default_value">string</field> + <field key="frontend_input">string</field> + <field key="entity_type_id">string</field> + <field key="backend_type">string</field> + <field key="backend_model">string</field> + <field key="source_model">string</field> + <field key="frontend_class">string</field> + <field key="default_frontend_label">string</field> + <field key="note">string</field> + <field key="scope">string</field> + <field key="is_unique">boolean</field> + <field key="is_searchable">boolean</field> + <field key="is_visible_in_advanced_search">boolean</field> + <field key="is_comparable">boolean</field> + <field key="is_used_for_promo_rules">boolean</field> + <field key="is_visible_on_front">boolean</field> + <field key="used_in_product_listing">boolean</field> + <field key="is_wysiwyg_enabled">boolean</field> + <field key="is_html_allowed_on_front">boolean</field> + <field key="used_for_sort_by">boolean</field> + <field key="is_filterable">boolean</field> + <field key="is_filterable_in_search">boolean</field> + <field key="is_used_in_grid">boolean</field> + <field key="is_visible_in_grid">boolean</field> + <field key="is_filterable_in_grid">boolean</field> + <field key="is_visible">boolean</field> + <field key="is_required">boolean</field> + <field key="is_user_defined">boolean</field> + <field key="extension_attributes">empty_extension_attribute-meta</field> + <array key="apply_to"> + <value>string</value> + </array> + <array key="options"> + <value>ProductAttributeOption</value> + </array> + <array key="custom_attributes"> + <value>custom_attribute_array</value> + </array> + <array key="validation_rules"> + <value>validation_rule</value> + </array> + <array key="frontend_labels"> + <value>FrontendLabel</value> + </array> + </object> + </operation> + <operation name="UpdateProductAttribute" dataType="ProductAttribute" type="update" auth="adminOauth" url="/V1/products/attributes/{attributeCode}" method="PUT"> + <contentType>application/json</contentType> + <param key="attributeCode" type="path">{attributeCode}</param> + <object dataType="ProductAttribute" key="attribute"> + <field key="attribute_code">string</field> + <field key="attribute_id">string</field> + <field key="default_value">string</field> + <field key="frontend_input">string</field> + <field key="entity_type_id">string</field> + <field key="backend_type">string</field> + <field key="backend_model">string</field> + <field key="source_model">string</field> + <field key="frontend_class">string</field> + <field key="default_frontend_label">string</field> + <field key="note">string</field> + <field key="scope">string</field> + <field key="is_unique">boolean</field> + <field key="is_searchable">boolean</field> + <field key="is_visible_in_advanced_search">boolean</field> + <field key="is_comparable">boolean</field> + <field key="is_used_for_promo_rules">boolean</field> + <field key="is_visible_on_front">boolean</field> + <field key="used_in_product_listing">boolean</field> + <field key="is_wysiwyg_enabled">boolean</field> + <field key="is_html_allowed_on_front">boolean</field> + <field key="used_for_sort_by">boolean</field> + <field key="is_filterable">boolean</field> + <field key="is_filterable_in_search">boolean</field> + <field key="is_used_in_grid">boolean</field> + <field key="is_visible_in_grid">boolean</field> + <field key="is_filterable_in_grid">boolean</field> + <field key="is_visible">boolean</field> + <field key="is_required">boolean</field> + <field key="is_user_defined">boolean</field> + <field key="extension_attributes">empty_extension_attribute-meta</field> + <array key="apply_to"> + <value>string</value> + </array> + <array key="options"> + <value>ProductAttributeOption</value> + </array> + <array key="custom_attributes"> + <value>custom_attribute_array</value> + </array> + <array key="validation_rules"> + <value>validation_rule</value> + </array> + <array key="frontend_labels"> + <value>FrontendLabel</value> + </array> + </object> + </operation> + <operation name="DeleteProductAttribute" dataType="ProductAttribute" type="delete" auth="adminOauth" url="/V1/products/attributes/{attributeCode}" method="DELETE"> + <contentType>application/json</contentType> + <param key="attributeCode" type="path">{attributeCode}</param> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_option-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_option-meta.xml new file mode 100644 index 0000000000000..bb5a37229fd35 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_option-meta.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateProductAttributeOption" dataType="ProductAttributeOption" type="create" auth="adminOauth" url="/V1/products/attributes/{attribute_code}/options" method="POST"> + <contentType>application/json</contentType> + <param key="attribute_code" type="path">{attribute_code}</param> + <object dataType="ProductAttributeOption" key="option"> + <field key="label">string</field> + <field key="value">string</field> + <field key="sort_order">integer</field> + <field key="is_default">boolean</field> + <array key="store_labels"> + <value>StoreLabel</value> + </array> + </object> + </operation> + <operation name="DeleteProductAttributeOption" dataType="ProductAttributeOption" type="delete" auth="adminOauth" url="/V1/products/attributes/{attribute_code}/options/{optionId}" method="DELETE"> + <contentType>application/json</contentType> + <param key="attribute_code" type="path">{attribute_code}</param> + <param key="optionId" type="path">{optionId}</param> + </operation> + <operation name="GetProductAttributeOption" dataType="ProductAttributeOption" type="get" auth="adminOauth" url="/V1/products/attributes/{attribute_code}/options/" method="GET"> + <contentType>application/json</contentType> + <param key="attribute_code" type="path">{attribute_code}</param> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_set-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_set-meta.xml new file mode 100644 index 0000000000000..c15fb764a7f2c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_set-meta.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="AddProductAttributeToAttributeSet" dataType="ProductAttributeSet" type="create" auth="adminOauth" url="/V1/products/attribute-sets/attributes" method="POST"> + <contentType>application/json</contentType> + <field key="attributeSetId">integer</field> + <field key="attributeGroupId">integer</field> + <field key="attributeCode">string</field> + <field key="sortOrder">integer</field> + </operation> + <operation name="DeleteProductAttributeFromAttributeSet" dataType="ProductAttributeSet" type="delete" auth="adminOauth" url="/V1/products/attribute-sets/{attributeSetId}/attributes/{attributeCode}" method="DELETE"> + <contentType>application/json</contentType> + <param key="attributeSetId" type="path">{attributeSetId}</param> + <param key="attributeCode" type="path">{attributeCode}</param> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/store_label-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/store_label-meta.xml new file mode 100644 index 0000000000000..ae5210ed3a61a --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/store_label-meta.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateStoreLabel" dataType="StoreLabel" type="create"> + <field key="store_id">integer</field> + <field key="label">string</field> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/validation_rule-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/validation_rule-meta.xml new file mode 100644 index 0000000000000..d79c7b637fb6e --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/validation_rule-meta.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateValidationRule" dataType="validation_rule" type="create"> + <field key="key">string</field> + <field key="value">string</field> + </operation> + <operation name="UpdateValidationRule" dataType="validation_rule" type="update"> + <field key="key">string</field> + <field key="value">string</field> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml similarity index 100% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateConfigurableProductCest.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml index 1e5538dae880f..7569f7aeea327 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml @@ -8,7 +8,17 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> - <entity name="ConfigurableProductOne" type="configurableProduct"> - <data key="configurableProductName">data</data> + <entity name="BaseConfigurableProduct" type="product"> + <data key="sku" unique="suffix">configurable</data> + <data key="type_id">configurable</data> + <data key="attribute_set_id">4</data> + <data key="visibility">4</data> + <data key="name" unique="suffix">configurable</data> + <data key="price">123.00</data> + <data key="urlKey" unique="suffix">configurableurlkey</data> + <data key="status">1</data> + <data key="quantity">100</data> + <required-entity type="product_extension_attribute">EavStockItem</required-entity> + <required-entity type="custom_attribute_array">CustomAttributeCategoryIds</required-entity> </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductOptionData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductOptionData.xml new file mode 100644 index 0000000000000..58697b765812f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductOptionData.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="ConfigurableProductTwoOptions" type="ConfigurableProductOption"> + <var key="attribute_id" entityKey="attribute_id" entityType="ProductAttribute" /> + <data key="label">option</data> + <required-entity type="ValueIndex">ValueIndex1</required-entity> + <required-entity type="ValueIndex">ValueIndex2</required-entity> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ValueIndexData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ValueIndexData.xml new file mode 100644 index 0000000000000..58a28b0fe0fc7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ValueIndexData.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="ValueIndex1" type="ValueIndex"> + <var key="value_index" entityKey="value" entityType="ProductAttributeOption"/> + </entity> + <entity name="ValueIndex2" type="ValueIndex"> + <var key="value_index" entityKey="value" entityType="ProductAttributeOption"/> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_add_child-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_add_child-meta.xml new file mode 100644 index 0000000000000..625cb160c58a8 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_add_child-meta.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="ConfigurableProductAddChild" dataType="ConfigurableProductAddChild" type="create" auth="adminOauth" url="/V1/configurable-products/{sku}/child" method="POST"> + <contentType>application/json</contentType> + <param key="sku" type="path">{sku}</param> + <field key="childSku">string</field> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_options-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_options-meta.xml new file mode 100644 index 0000000000000..e3c10d88f53ab --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_options-meta.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateConfigurableProductOption" dataType="ConfigurableProductOption" type="create" auth="adminOauth" url="/V1/configurable-products/{sku}/options" method="POST"> + <contentType>application/json</contentType> + <param key="sku" type="path">{sku}</param> + <object dataType="ConfigurableProductOption" key="option"> + <field key="attribute_id">integer</field> + <field key="label">string</field> + <array key="values"> + <value>ValueIndex</value> + </array> + </object> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/extension_attribute_configurable_product_options-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/extension_attribute_configurable_product_options-meta.xml new file mode 100644 index 0000000000000..757e1d66f4725 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/extension_attribute_configurable_product_options-meta.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateExtensionAttributeConfigProductOption" dataType="ExtensionAttributeConfigProductOption" type="create"> + <contentType>application/json</contentType> + <array key="configurable_product_options"> + <object dataType="ExtensionAttributeConfigProductOption" key="configurable_product_options"> + <array key="0"> + <value>ConfigProductOption</value> + </array> + </object> + </array> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/valueIndex-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/valueIndex-meta.xml new file mode 100644 index 0000000000000..a0e9c0b790d0f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/valueIndex-meta.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="ValueIndex" dataType="ValueIndex" type="create"> + <field key="value_index">integer</field> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json index 9bc6d9d574c4b..6cdd99c2e0cd6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json @@ -14,11 +14,11 @@ "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "dev-develop", + "magento/magento2-functional-test-module-catalog": "dev-master" }, "suggest": { "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", "magento/magento2-functional-test-module-catalog-inventory": "dev-master", "magento/magento2-functional-test-module-checkout": "dev-master", "magento/magento2-functional-test-module-msrp": "dev-master", diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml similarity index 82% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml index 79fb72a5ff5ea..2e039b51bf107 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontExistingCustomerLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml @@ -8,10 +8,10 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> - <cest name="StorefrontExistingCustomerLoginCest"> + <cest name="StorefrontPersistedCustomerLoginCest"> <annotations> - <features value="Customer Login"/> - <stories value="Existing Customer can Login on the Storefront"/> + <features value="Persisted customer can login from storefront."/> + <stories value="Persisted customer can login from storefront."/> </annotations> <before> <createData mergeKey="customer" entity="Simple_US_Customer"/> @@ -19,10 +19,10 @@ <after> <deleteData mergeKey="deleteCustomer" createDataKey="customer" /> </after> - <test name="ExistingCustomerLoginStorefrontTest"> + <test name="StorefrontPersistedCustomerLoginTest"> <annotations> - <title value="You should be able to create a customer via the storefront"/> - <description value="You should be able to create a customer via the storefront."/> + <title value="Persisted customer can login from storefront."/> + <description value="Persisted customer can login from storefront."/> <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72103"/> <group value="customer"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml index b2693d09b6e9d..a5bb51fbcc0a1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml @@ -44,4 +44,9 @@ <data key="website_id">0</data> <required-entity type="address">US_Address_TX</required-entity> </entity> + <entity name="Simple_US_Customer_For_Update" type="customer"> + <var key="id" entityKey="id" entityType="customer"/> + <data key="firstname">Jane</data> + + </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml index 797ffff72f8b1..a8ef5dcce9b96 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml @@ -39,40 +39,9 @@ </array> </object> <field key="password">string</field> - </operation> - <operation name="UpdateCustomer" dataType="customer" type="update" auth="adminOauth" url="/V1/customers" method="PUT"> - <contentType>application/json</contentType> - <field key="id">integer</field> - <field key="group_id">integer</field> - <field key="default_billing">string</field> - <field key="default_shipping">string</field> - <field key="confirmation">string</field> - <field key="created_at">string</field> - <field key="updated_at">string</field> - <field key="created_in">string</field> - <field key="dob">string</field> - <field key="email">string</field> - <field key="firstname">string</field> - <field key="lastname">string</field> - <field key="middlename">string</field> - <field key="prefix">string</field> - <field key="suffix">string</field> - <field key="gender">integer</field> - <field key="store_id">integer</field> - <field key="taxvat">string</field> - <field key="website_id">integer</field> - <array key="addresses"> - <value>address</value> - </array> - <field key="disable_auto_group_change">integer</field> - <field key="extension_attributes">customer_extension_attribute</field> - <array key="custom_attributes"> - <value>custom_attribute</value> - </array> - <field key="password">string</field> <field key="redirectUrl">string</field> </operation> - <operation name="DeleteCustomer" dataType="customer" type="delete" auth="adminOauth" url="/V1/customers" method="DELETE"> + <operation name="DeleteCustomer" dataType="customer" type="delete" auth="adminOauth" url="/V1/customers/{id}" method="DELETE"> <contentType>application/json</contentType> <param key="id" type="path">{id}</param> </operation> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json index 3a13bf562bb57..61a6eddb0edff 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json @@ -14,13 +14,13 @@ "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "dev-develop", + "magento/magento2-functional-test-module-catalog": "dev-master" }, "suggest": { "magento/magento2-functional-test-module-store": "dev-master", "magento/magento2-functional-test-module-eav": "dev-master", "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", "magento/magento2-functional-test-module-newsletter": "dev-master", "magento/magento2-functional-test-module-sales": "dev-master", "magento/magento2-functional-test-module-checkout": "dev-master", diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml new file mode 100644 index 0000000000000..f90270ae7188f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="CreateConfigurableProductByApiCest"> + <annotations> + <features value="Create a Configurable Product By API"/> + <stories value="Create a Configurable Product By API"/> + </annotations> + <before> + <createData mergeKey="categoryHandle" entity="SimpleSubCategory" /> + <createData mergeKey="baseConfigProductHandle" entity="BaseConfigurableProduct" > + <required-entity createDataKey="categoryHandle"/> + </createData> + <createData mergeKey="productAttributeHandle" entity="productAttributeWithTwoOptions"/> + + <createData mergeKey="productAttributeOption1Handle" entity="productAttributeOption1"> + <required-entity createDataKey="productAttributeHandle"/> + </createData> + <createData mergeKey="productAttributeOption2Handle" entity="productAttributeOption2"> + <required-entity createDataKey="productAttributeHandle"/> + </createData> + + <createData mergeKey="addToAttributeSetHandle" entity="AddToDefaultSet"> + <required-entity createDataKey="productAttributeHandle"/> + </createData> + + <getData mergeKey="getAttributeOption1Handle" entity="ProductAttributeOptionGetter" index="1"> + <required-entity createDataKey="productAttributeHandle"/> + </getData> + <getData mergeKey="getAttributeOption2Handle" entity="ProductAttributeOptionGetter" index="2"> + <required-entity createDataKey="productAttributeHandle"/> + </getData> + + <createData mergeKey="childProductHandle1" entity="SimpleOne"> + <required-entity createDataKey="productAttributeHandle"/> + <required-entity createDataKey="getAttributeOption1Handle"/> + </createData> + <createData mergeKey="childProductHandle2" entity="SimpleOne"> + <required-entity createDataKey="productAttributeHandle"/> + <required-entity createDataKey="getAttributeOption2Handle"/> + </createData> + + <createData mergeKey="configProductOptionHandle" entity="ConfigurableProductTwoOptions"> + <required-entity createDataKey="baseConfigProductHandle"/> + <required-entity createDataKey="productAttributeHandle"/> + <required-entity createDataKey="getAttributeOption1Handle"/> + <required-entity createDataKey="getAttributeOption2Handle"/> + </createData> + + <createData mergeKey="configProductHandle1" entity="ConfigurableProductAddChild"> + <required-entity createDataKey="childProductHandle1"/> + <required-entity createDataKey="baseConfigProductHandle"/> + </createData> + <!--Uncomment this when MQE-472 is fixed--> + <!--createData mergeKey="configProductHandle2" entity="ConfigurableProductAddChild"> + <required-entity createDataKey="childProductHandle2"/> + <required-entity createDataKey="baseConfigProductHandle"/> + </createData--> + </before> + <test name="CreateConfigurableProductByApiTest"> + </test> + </cest> +</config> \ No newline at end of file From 0bb0b0aa2d52cb402f7d3a02c27de4d82c80cfd7 Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Fri, 20 Oct 2017 17:26:49 +0300 Subject: [PATCH 323/653] MQE-394: Pre-Install Script - Adding pre-install script for the framework that will check to see if you have all necessary software installed. - Adding a Robo command to run the script. --- dev/tests/acceptance/RoboFile.php | 8 + dev/tests/acceptance/pre-install.php | 387 +++++++++++++++++++++++++++ 2 files changed, 395 insertions(+) create mode 100644 dev/tests/acceptance/pre-install.php diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php index 0c8b075b092c5..1a52216038b95 100644 --- a/dev/tests/acceptance/RoboFile.php +++ b/dev/tests/acceptance/RoboFile.php @@ -173,4 +173,12 @@ function allure2Report() $this->allure2Open(); } } + + /** + * Run the Pre-Install Check Script + */ + function preInstall() + { + $this->_exec('php pre-install.php'); + } } diff --git a/dev/tests/acceptance/pre-install.php b/dev/tests/acceptance/pre-install.php new file mode 100644 index 0000000000000..e723eb8d149c0 --- /dev/null +++ b/dev/tests/acceptance/pre-install.php @@ -0,0 +1,387 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +class CliColors { + private $foreground_colors = array(); + private $background_colors = array(); + + public function __construct() { + // Set up shell colors + $this->foreground_colors['black'] = '0;30'; + $this->foreground_colors['dark_gray'] = '1;30'; + $this->foreground_colors['blue'] = '0;34'; + $this->foreground_colors['light_blue'] = '1;34'; + $this->foreground_colors['green'] = '0;32'; + $this->foreground_colors['light_green'] = '1;32'; + $this->foreground_colors['cyan'] = '0;36'; + $this->foreground_colors['light_cyan'] = '1;36'; + $this->foreground_colors['red'] = '0;31'; + $this->foreground_colors['light_red'] = '1;31'; + $this->foreground_colors['purple'] = '0;35'; + $this->foreground_colors['light_purple'] = '1;35'; + $this->foreground_colors['brown'] = '0;33'; + $this->foreground_colors['yellow'] = '1;33'; + $this->foreground_colors['light_gray'] = '0;37'; + $this->foreground_colors['white'] = '1;37'; + + $this->background_colors['black'] = '40'; + $this->background_colors['red'] = '41'; + $this->background_colors['green'] = '42'; + $this->background_colors['yellow'] = '43'; + $this->background_colors['blue'] = '44'; + $this->background_colors['magenta'] = '45'; + $this->background_colors['cyan'] = '46'; + $this->background_colors['light_gray'] = '47'; + } + + /** + * Returns colored string + * + * @param $string + * @param null $foreground_color + * @param null $background_color + * @return string + */ + public function getColoredString($string, $foreground_color = null, $background_color = null) { + $colored_string = ""; + + // Check if given foreground color found + if (isset($this->foreground_colors[$foreground_color])) { + $colored_string .= "\033[" . $this->foreground_colors[$foreground_color] . "m"; + } + // Check if given background color found + if (isset($this->background_colors[$background_color])) { + $colored_string .= "\033[" . $this->background_colors[$background_color] . "m"; + } + + // Add string and end coloring + $colored_string .= $string . "\033[0m"; + + return $colored_string; + } + + /** + * Returns all foreground color names + * + * @return array + */ + public function getForegroundColors() { + return array_keys($this->foreground_colors); + } + + /** + * Returns all background color names + * + * @return array + */ + public function getBackgroundColors() { + return array_keys($this->background_colors); + } +} + +class PreInstallCheck { + private $installedViaBrew = false; + private $filePath = ''; + private $seleniumJarVersion = ''; + + private $phpWebsite = 'http://php.net/manual/en/install.php'; + private $composerWebsite = 'https://getcomposer.org/download/'; + private $javaWebsite = 'https://www.java.com/en/download/'; + private $allureCliWebsite = 'https://docs.qameta.io/allure/latest/#_installing_a_commandline'; + private $seleniumWebsite = 'http://www.seleniumhq.org/download/'; + private $chromeDriverWebsite = 'https://sites.google.com/a/chromium.org/chromedriver/downloads'; + private $geckoDriverWebsite = 'https://github.com/mozilla/geckodriver'; + private $phantomJsWebsite = 'http://phantomjs.org/'; + + private $phpSupportedVersion = '7.1.0'; + private $composerSupportedVersion = '1.3.0'; + private $javaSupportedVersion = '1.8.0'; + private $allureCliSupportedVersion = '2.3.0'; + private $seleniumSupportedVersion = '3.6.0'; + private $chromeDriverSupportedVersion = '2.33.0'; + private $geckoDriverSupportedVersion = '0.19.0'; + private $phantomJsSupportedVersion = '2.1.0'; + + private $getPhpVersion; + private $getComposerVersion; + private $getJavaVersion; + private $getAllureCliVersion; + private $getSeleniumVersion; + private $getChromeDriverVersion; + private $getGeckoDriverVersion; + private $getPhantomJsVersion; + + private $phpVersion; + private $composerVersion; + private $javaVersion; + private $allureCliVersion; + private $seleniumVersion; + private $chromeDriverVersion; + private $geckoDriverVersion; + private $phantomJsVersion; + + private $phpStatus; + private $composerStatus; + private $javaStatus; + private $allureCliStatus; + private $seleniumStatus; + private $chromeDriverStatus; + private $geckoDriverStatus; + private $phantomJsStatus; + + function __construct() { + $this->didYouInstallViaBrew(); + + $this->getPhpVersion = shell_exec('php --version'); + $this->getComposerVersion = shell_exec('composer --version'); + $this->getJavaVersion = shell_exec("java -version 2>&1"); + $this->getAllureCliVersion = shell_exec('allure --version'); + $this->getSeleniumVersion = $this->getSeleniumVersion(); + $this->getChromeDriverVersion = $this->getChromeDriverVersion(); + $this->getGeckoDriverVersion = shell_exec('geckodriver --version'); + $this->getPhantomJsVersion = $this->getPhantomJsVersion(); + + $this->phpVersion = $this->parseVersion($this->getPhpVersion); + $this->composerVersion = $this->parseVersion($this->getComposerVersion); + $this->javaVersion = $this->parseJavaVersion($this->getJavaVersion); + $this->allureCliVersion = $this->parseVersion($this->getAllureCliVersion); + $this->seleniumVersion = $this->parseVersion($this->getSeleniumVersion); + $this->chromeDriverVersion = $this->parseVersion($this->getChromeDriverVersion); + $this->geckoDriverVersion = $this->parseVersion($this->getGeckoDriverVersion); + $this->phantomJsVersion = $this->parseVersion($this->getPhantomJsVersion); + + // String of null Versions - For Testing +// $this->phpVersion = null; +// $this->composerVersion = null; +// $this->javaVersion = null; +// $this->allureCliVersion = null; +// $this->seleniumVersion = null; +// $this->chromeDriverVersion = null; +// $this->geckoDriverVersion = null; +// $this->phantomJsVersion = null; + + // String of invalid Versions - For Testing +// $this->phpVersion = '7.0.0'; +// $this->composerVersion = '1.0.0'; +// $this->javaVersion = '1.0.0'; +// $this->allureCliVersion = '2.0.0'; +// $this->seleniumVersion = '3.0.0'; +// $this->chromeDriverVersion = '2.0.0'; +// $this->geckoDriverVersion = '0.0.0'; +// $this->phantomJsVersion = '2.0.0'; + + $this->phpStatus = $this->verifyVersion('PHP', $this->phpVersion, $this->phpSupportedVersion, $this->phpWebsite); + $this->composerStatus = $this->verifyVersion('Composer', $this->composerVersion, $this->composerSupportedVersion, $this->composerWebsite); + $this->javaStatus = $this->verifyVersion('Java', $this->javaVersion, $this->javaSupportedVersion, $this->javaWebsite); + $this->allureCliStatus = $this->verifyVersion('Allure CLI', $this->allureCliVersion, $this->allureCliSupportedVersion, $this->allureCliWebsite); + $this->seleniumStatus = $this->verifyVersion('Selenium Standalone Server', $this->seleniumVersion, $this->seleniumSupportedVersion, $this->seleniumWebsite); + $this->chromeDriverStatus = $this->verifyVersion('ChromeDriver', $this->chromeDriverVersion, $this->chromeDriverSupportedVersion, $this->chromeDriverWebsite); + $this->geckoDriverStatus = $this->verifyVersion('GeckoDriver', $this->geckoDriverVersion, $this->geckoDriverSupportedVersion, $this->geckoDriverWebsite); + $this->phantomJsStatus = $this->verifyVersion('PhantomJS', $this->phantomJsVersion, $this->phantomJsSupportedVersion, $this->phantomJsWebsite); + + ECHO "\n"; + $mask = "|%-13.13s |%18.18s |%18.18s |%-23.23s |\n"; + printf("---------------------------------------------------------------------------------\n"); + printf($mask, ' Software', 'Supported Version', 'Installed Version', ' Status'); + printf("---------------------------------------------------------------------------------\n"); + printf($mask, ' PHP', $this->phpSupportedVersion . '+', $this->phpVersion, ' ' . $this->phpStatus); + printf($mask, ' Composer', $this->composerSupportedVersion . '+', $this->composerVersion, ' ' . $this->composerStatus); + printf($mask, ' Java', $this->javaSupportedVersion . '+', $this->javaVersion, ' ' . $this->javaStatus); + printf($mask, ' Allure CLI', $this->allureCliSupportedVersion . '+', $this->allureCliVersion, ' ' . $this->allureCliStatus); + printf($mask, ' Selenium', $this->seleniumSupportedVersion . '+', $this->seleniumVersion, ' ' . $this->seleniumStatus); + printf($mask, ' ChromeDriver', $this->chromeDriverSupportedVersion . '+', $this->chromeDriverVersion, ' ' . $this->chromeDriverStatus); + printf($mask, ' GeckoDriver', $this->geckoDriverSupportedVersion . '+', $this->geckoDriverVersion, ' ' . $this->geckoDriverStatus); + printf($mask, ' PhantomJS', $this->phantomJsSupportedVersion . '+', $this->phantomJsVersion, ' ' . $this->phantomJsStatus); + printf("---------------------------------------------------------------------------------\n"); + } + + /** + * Ask if they installed the Browser Drivers via Brew. + * Brew installs things globally making them easier for us to access. + */ + public function didYouInstallViaBrew() + { + ECHO "Did you install Selenium Server, ChromeDriver, GeckoDriver and PhantomJS using Brew? (y/n) "; + $handle1 = fopen ("php://stdin","r"); + $line1 = fgets($handle1); + if (trim($line1) != 'y') { + ECHO "Where did you save the files? (ex /Users/first_last/Automation/) "; + $handle2 = fopen ("php://stdin","r"); + $this->filePath = fgets($handle2); + fclose($handle2); + + ECHO "Which selenium-server-standalone-X.X.X.jar file did you download? (ex 3.6.0) "; + $handle3 = fopen ("php://stdin","r"); + $this->seleniumJarVersion = fgets($handle3); + fclose($handle3); + fclose($handle1); + ECHO "\n"; + } else { + $this->installedViaBrew = true; + fclose($handle1); + ECHO "\n"; + } + } + + /** + * Parse the string that is returned for the Version number only. + * + * @param $stdout + * @return null + */ + public function parseVersion($stdout) + { + preg_match("/\d+(?:\.\d+)+/", $stdout, $matches); + + if (!is_null($matches) && isset($matches[0])) { + return $matches[0]; + } else { + return null; + } + } + + /** + * Parse the string that is returned for the Version number only. + * The message Java returns differs from the others hence the separate function. + * + * @param $stdout + * @return null + */ + public function parseJavaVersion($stdout) + { + preg_match('/\"(.+?)\"/', $stdout, $output_array); + + if (!is_null($output_array)) { + return $output_array[1]; + } else { + return null; + } + } + + /** + * Get the Selenium Server version based on how it was installed. + * + * @return string + */ + public function getSeleniumVersion() + { + $this->installedViaBrew; + $this->filePath; + $this->seleniumJarVersion; + + if ($this->installedViaBrew) { + return shell_exec('selenium-server --version'); + } else { + $command = sprintf('java -jar %s/selenium-server-standalone-%s.jar --version', $this->filePath, $this->seleniumJarVersion); + $command = str_replace(array("\r", "\n"), '', $command) . "\n"; + return shell_exec($command); + } + } + + /** + * Get the ChromeDriver version based on how it was installed. + * + * @return string + */ + public function getChromeDriverVersion() + { + $this->installedViaBrew; + $this->filePath; + + if ($this->installedViaBrew) { + return shell_exec('chromedriver --version'); + } else { + $command = sprintf('%s/chromedriver --version', $this->filePath); + $command = str_replace(array("\r", "\n"), '', $command) . "\n"; + return shell_exec($command); + } + } + + /** + * Get the PhantomJS version based on how it was installed. + * + * @return string + */ + public function getPhantomJsVersion() + { + $this->installedViaBrew; + $this->filePath; + + if ($this->installedViaBrew) { + return shell_exec('phantomjs --version'); + } else { + $command = sprintf('%s/phantomjs --version', $this->filePath); + $command = str_replace(array("\r", "\n"), '', $command) . "\n"; + return shell_exec($command); + } + } + + /** + * Print a "Valid Version Detected" message in color. + * + * @param $softwareName + */ + public function printValidVersion($softwareName) + { + $colors = new CliColors(); + $string = sprintf("%s detected. Version is supported!", $softwareName); + ECHO $colors->getColoredString($string, "black", "green") . "\n"; + } + + /** + * Print a "Upgraded Version Needed" message in color. + * + * @param $softwareName + * @param $supportedVersion + * @param $website + */ + public function printUpgradeVersion($softwareName, $supportedVersion, $website) + { + $colors = new CliColors(); + $string = sprintf("Unsupported version of %s detected. Please upgrade to v%s+: %s", $softwareName, $supportedVersion, $website); + ECHO $colors->getColoredString($string, "black", "yellow") . "\n"; + } + + /** + * Print a "Not Installed. Install Required." message in color. + * + * @param $softwareName + * @param $supportedVersion + * @param $website + */ + public function printNoInstalledVersion($softwareName, $supportedVersion, $website) + { + $colors = new CliColors(); + $string = sprintf("%s not detected. Please install v%s+: %s", $softwareName, $supportedVersion, $website); + ECHO $colors->getColoredString($string, "black", "red") . "\n"; + } + + /** + * Verify that the versions. + * Print the correct status message. + * + * @param $softwareName + * @param $installedVersion + * @param $supportedVersion + * @param $website + * @return string + */ + public function verifyVersion($softwareName, $installedVersion, $supportedVersion, $website) + { + if (is_null($installedVersion)) { + $this->printNoInstalledVersion($softwareName, $supportedVersion, $website); + return 'Installation Required!'; + } else if ($installedVersion >= $supportedVersion) { + $this->printValidVersion($softwareName); + return 'Correct Version!'; + } else { + $this->printUpgradeVersion($softwareName, $supportedVersion, $website); + return 'Upgrade Required!'; + } + } +} + +$preCheck = new PreInstallCheck(); \ No newline at end of file From 7a5a0f927562ba1914716d46e30590973078f977 Mon Sep 17 00:00:00 2001 From: Ian Meron <imeron@magento.com> Date: Thu, 19 Oct 2017 22:30:39 +0300 Subject: [PATCH 324/653] MQE-237: [Generator] Add before and after logic to suites - update sample suite file --- dev/tests/acceptance/tests/_suite/sampleSuite.xml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/dev/tests/acceptance/tests/_suite/sampleSuite.xml b/dev/tests/acceptance/tests/_suite/sampleSuite.xml index 339cb70d890ba..977563871a398 100644 --- a/dev/tests/acceptance/tests/_suite/sampleSuite.xml +++ b/dev/tests/acceptance/tests/_suite/sampleSuite.xml @@ -1,6 +1,16 @@ <?xml version="1.0" encoding="UTF-8"?> -<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Suite/etc/suiteSchema.xsd"> +<suites xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Suite/etc/suiteSchema.xsd"> <suite name="mySuite"> + <before> + <createData entity="_defaultCategory" mergeKey="createCategory"/> + <createData entity="_defaultProduct" mergeKey="createProduct"> + <required-entity createDataKey="createCategory"/> + </createData> + </before> + <after> + <deleteData mergeKey="deleteMyProduct" createDataKey="createProduct"/> + <deleteData mergeKey="deleteMyCategory" createDataKey="createCategory"/> + </after> <include> <group name="example"/> <cest test="PersistMultipleEntitiesTest" name="PersistMultipleEntitiesCest"/> @@ -10,4 +20,4 @@ <group name="testGroup"/> </exclude> </suite> -</config> \ No newline at end of file +</suites> \ No newline at end of file From 9495d63cd267a1015c847aecc68db6d83e9a159e Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Fri, 20 Oct 2017 18:43:00 +0300 Subject: [PATCH 325/653] MQE-440: metadata changes for path parameters bug fix. --- .../FunctionalTest/Catalog/Metadata/category-meta.xml | 7 ++++--- .../FunctionalTest/Checkout/Metadata/coupon-meta.xml | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml index 0ab9bd1f56229..e88c454d6946c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml @@ -30,8 +30,9 @@ </object> </operation> - <operation name="UpdateCategory" dataType="category" type="update" auth="adminOauth" url="/V1/categories" method="PUT"> + <operation name="UpdateCategory" dataType="category" type="update" auth="adminOauth" url="/V1/categories/{id}" method="PUT"> <contentType>application/json</contentType> + <param key="id" type="path">{id}</param> <object key="category" dataType="category"> <field key="id">integer</field> <field key="parent_id">integer</field> @@ -54,8 +55,8 @@ </object> </operation> - <operation name="DeleteCategory" dataType="category" type="delete" auth="adminOauth" url="/V1/categories" method="DELETE"> + <operation name="DeleteCategory" dataType="category" type="delete" auth="adminOauth" url="/V1/categories/{id}" method="DELETE"> <contentType>application/json</contentType> - <param key="categoryId" type="path">{id}</param> + <param key="id" type="path">{id}</param> </operation> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml index 5be13e54fc571..5e2eeee9cce26 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml @@ -25,8 +25,8 @@ </object> </operation> - <operation name="DeleteCoupon" dataType="coupon" type="delete" auth="adminOauth" url="/rest/V1/coupons" method="DELETE"> + <operation name="DeleteCoupon" dataType="coupon" type="delete" auth="adminOauth" url="/rest/V1/coupons/{couponId}" method="DELETE"> <header param="Content-Type">application/json</header> - <param key="couponId" type="path">{coupon_id}</param> + <param key="couponId" type="path">{couponId}</param> </operation> </config> From 9a15f7afde5b5cd806a235bb3e7a962bcb6d5630 Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Tue, 24 Oct 2017 03:16:38 +0300 Subject: [PATCH 326/653] MQE-478: Deliver Pangolins Sprint 11 --- .../ConfigurableProduct/Data/ConfigurableProductData.xml | 4 ++++ .../FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml | 6 +++--- .../SampleTests/Cest/PersistMultipleEntitiesCest.xml | 1 - 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml index 7569f7aeea327..c00794af79c7c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml @@ -21,4 +21,8 @@ <required-entity type="product_extension_attribute">EavStockItem</required-entity> <required-entity type="custom_attribute_array">CustomAttributeCategoryIds</required-entity> </entity> + <entity name="ConfigurableProductAddChild" type="ConfigurableProductAddChild"> + <var key="sku" entityKey="sku" entityType="product" /> + <var key="childSku" entityKey="sku" entityType="product"/> + </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml index c043fe298f767..7ff96a3bed9de 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml @@ -57,13 +57,13 @@ <grabTextFrom selector="{{CheckoutSuccessMainSection.orderNumber}}" returnVariable="orderNumber" mergeKey="grabOrderNumber"/> <!-- end todo --> - <amOnPage url="{{AdminLoginPage.url}}" mergeKey="goToAdmin"/> + <amOnPage url="{{AdminLoginPage}}" mergeKey="goToAdmin"/> <waitForPageLoad mergeKey="waitForPageLoad1"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> - <amOnPage url="{{OrdersPage.url}}" mergeKey="onOrdersPage"/> + <amOnPage url="{{OrdersPage}}" mergeKey="onOrdersPage"/> <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="10" mergeKey="waitSpinner1"/> <fillField selector="{{OrdersGridSection.search}}" variable="orderNumber" mergeKey="searchOrderNum"/> <click selector="{{OrdersGridSection.submitSearch}}" mergeKey="submitSearch"/> @@ -79,7 +79,7 @@ <see selector="{{OrderDetailsInvoicesSection.content}}" userInput="John Doe" mergeKey="seeInvoice2"/> <click selector="{{OrderDetailsOrderViewSection.information}}" mergeKey="clickInformation"/> <see selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Processing" mergeKey="seeOrderStatus"/> - <amOnPage url="{{InvoicesPage.url}}" mergeKey="goToInvoices"/> + <amOnPage url="{{InvoicesPage}}" mergeKey="goToInvoices"/> <waitForElementNotVisible selector="{{InvoicesGridSection.spinner}}" time="10" mergeKey="waitSpinner4"/> <click selector="{{InvoicesGridSection.filter}}" mergeKey="clickFilters"/> <fillField selector="{{InvoicesFiltersSection.orderNum}}" variable="orderNumber" mergeKey="searchOrderNum2"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml index 74bde899cb4a9..12b2a8774c49b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml @@ -25,7 +25,6 @@ </after> <test name="PersistMultipleEntitiesTest"> <annotations> - <group value="ff"/> <group value="skip"/> </annotations> <amOnPage mergeKey="s11" url="/$$simplecategory.name$$.html" /> From 001c35cfabe2a24d6fc790f72019b328e143bce1 Mon Sep 17 00:00:00 2001 From: Ian Meron <imeron@magento.com> Date: Tue, 24 Oct 2017 17:54:09 +0300 Subject: [PATCH 327/653] MQE-478: Deliver Pangolins Sprint 11 - code review fixes --- dev/tests/acceptance/RoboFile.php | 45 +++++++++++++++++-- dev/tests/acceptance/pre-install.php | 5 ++- .../acceptance/tests/_suite/sampleSuite.xml | 9 +++- .../Customer/Data/CustomerData.xml | 1 - .../Cest/UpdateSimpleProductByApiCest.xml | 11 +++-- .../StorefrontDeletePersistedWishlistCest.xml | 10 ++++- .../Wishlist/Data/WishlistData.xml | 6 +++ .../Wishlist/Metadata/wishlist-meta.xml | 8 +++- 8 files changed, 82 insertions(+), 13 deletions(-) diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php index 1a52216038b95..f79f04839cf7d 100644 --- a/dev/tests/acceptance/RoboFile.php +++ b/dev/tests/acceptance/RoboFile.php @@ -15,6 +15,8 @@ class RoboFile extends \Robo\Tasks /** * Duplicate the Example configuration files used to customize the Project for customization + * + * @return void */ function cloneFiles() { @@ -26,6 +28,8 @@ function cloneFiles() /** * Clone the Example configuration files * Build the Codeception project + * + * @return void */ function buildProject() { @@ -34,17 +38,24 @@ function buildProject() } /** - * Generate all Tests + * Generate all Tests command. + * + * @param string[] $opts + * @return void */ function generateTests($opts = ['config' => null, 'env' => 'chrome']) { - require 'tests/functional/_bootstrap.php'; + require 'tests'. DIRECTORY_SEPARATOR . 'functional' . DIRECTORY_SEPARATOR . '_bootstrap.php'; \Magento\FunctionalTestingFramework\Util\TestGenerator::getInstance()->createAllCestFiles($opts['config'], $opts['env']); $this->say("Generate Tests Command Run"); } /** * Generate a suite based on name(s) passed in as args + * + * @param string[] args + * @return void + * @throws Exception */ function generateSuite(array $args) { @@ -52,7 +63,7 @@ function generateSuite(array $args) throw new Exception("Please provide suite name(s) after generate:suite command"); } - require 'tests/functional/_bootstrap.php'; + require 'tests'. DIRECTORY_SEPARATOR . 'functional' . DIRECTORY_SEPARATOR . '_bootstrap.php'; $sg = \Magento\FunctionalTestingFramework\Suite\SuiteGenerator::getInstance(); foreach ($args as $arg) { @@ -62,6 +73,8 @@ function generateSuite(array $args) /** * Run all Functional tests using the Chrome environment + * + * @return void */ function chrome() { @@ -70,6 +83,8 @@ function chrome() /** * Run all Functional tests using the FireFox environment + * + * @return void */ function firefox() { @@ -78,6 +93,8 @@ function firefox() /** * Run all Functional tests using the PhantomJS environment + * + * @return void */ function phantomjs() { @@ -86,6 +103,8 @@ function phantomjs() /** * Run all Functional tests using the Chrome Headless environment + * + * @return void */ function headless() { @@ -94,7 +113,9 @@ function headless() /** * Run all Tests with the specified @group tag, excluding @group 'skip', using the Chrome environment + * * @param string $args + * @return void */ function group($args = '') { @@ -103,7 +124,9 @@ function group($args = '') /** * Run all Functional tests located under the Directory Path provided using the Chrome environment + * * @param string $args + * @return void */ function folder($args = '') { @@ -112,6 +135,8 @@ function folder($args = '') /** * Run all Tests marked with the @group tag 'example', using the Chrome environment + * + * @return void */ function example() { @@ -120,6 +145,8 @@ function example() /** * Generate the HTML for the Allure report based on the Test XML output - Allure v1.4.X + * + * @return void */ function allure1Generate() { @@ -128,6 +155,8 @@ function allure1Generate() /** * Generate the HTML for the Allure report based on the Test XML output - Allure v2.3.X + * + * @return void */ function allure2Generate() { @@ -136,6 +165,8 @@ function allure2Generate() /** * Open the HTML Allure report - Allure v1.4.xX + * + * @return void */ function allure1Open() { @@ -144,6 +175,8 @@ function allure1Open() /** * Open the HTML Allure report - Allure v2.3.X + * + * @return void */ function allure2Open() { @@ -152,6 +185,8 @@ function allure2Open() /** * Generate and open the HTML Allure report - Allure v1.4.X + * + * @return void */ function allure1Report() { @@ -164,6 +199,8 @@ function allure1Report() /** * Generate and open the HTML Allure report - Allure v2.3.X + * + * @return void */ function allure2Report() { @@ -176,6 +213,8 @@ function allure2Report() /** * Run the Pre-Install Check Script + * + * @return void */ function preInstall() { diff --git a/dev/tests/acceptance/pre-install.php b/dev/tests/acceptance/pre-install.php index e723eb8d149c0..eaa25998f6dcb 100644 --- a/dev/tests/acceptance/pre-install.php +++ b/dev/tests/acceptance/pre-install.php @@ -3,7 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ - +// @codingStandardsIgnoreStart class CliColors { private $foreground_colors = array(); private $background_colors = array(); @@ -384,4 +384,5 @@ public function verifyVersion($softwareName, $installedVersion, $supportedVersio } } -$preCheck = new PreInstallCheck(); \ No newline at end of file +$preCheck = new PreInstallCheck(); +// @codingStandardsIgnoreEnd \ No newline at end of file diff --git a/dev/tests/acceptance/tests/_suite/sampleSuite.xml b/dev/tests/acceptance/tests/_suite/sampleSuite.xml index 977563871a398..f9b142d89c8a1 100644 --- a/dev/tests/acceptance/tests/_suite/sampleSuite.xml +++ b/dev/tests/acceptance/tests/_suite/sampleSuite.xml @@ -1,4 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + <suites xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Suite/etc/suiteSchema.xsd"> <suite name="mySuite"> <before> @@ -20,4 +27,4 @@ <group name="testGroup"/> </exclude> </suite> -</suites> \ No newline at end of file +</suites> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml index a5bb51fbcc0a1..f4bed283bb796 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Data/CustomerData.xml @@ -47,6 +47,5 @@ <entity name="Simple_US_Customer_For_Update" type="customer"> <var key="id" entityKey="id" entityType="customer"/> <data key="firstname">Jane</data> - </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml index 929b8488e523b..aaf5439b3b59c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml @@ -1,5 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Test XML Example --> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> <cest name="UpdateSimpleProductByApiCest"> <annotations> @@ -18,7 +24,6 @@ </createData> <updateData mergeKey="productHandle" entity="NewSimpleProduct" createDataKey="originalProductHandle"> </updateData> - </before> <after> <deleteData mergeKey="delete" createDataKey="productHandle"/> @@ -26,4 +31,4 @@ <test name="UpdateSimpleProductByApiTest"> </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml index a424e6b921fa0..b1f452ac565be 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml @@ -1,5 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Test XML Example --> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> <cest name="StorefrontDeletePersistedWishlistCest"> <annotations> @@ -48,4 +54,4 @@ <see mergeKey="seeEmptyWishlist" userInput="You have no items in your wish list" selector="{{StorefrontCustomerWishlistSection.emptyWishlistText}}"/> </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Data/WishlistData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Data/WishlistData.xml index 343923fada860..b45c2e21d4832 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Data/WishlistData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Data/WishlistData.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> <entity name="Wishlist" type="wishlist"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Metadata/wishlist-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Metadata/wishlist-meta.xml index 1a542d465bac4..ab1aa22f9b80e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Metadata/wishlist-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Metadata/wishlist-meta.xml @@ -1,4 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> @@ -9,4 +15,4 @@ <field key="customer_email">string</field> <field key="customer_password">string</field> </operation> -</config> \ No newline at end of file +</config> From e7bdb594deb154d7be5558ae194103962669e5d7 Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Tue, 24 Oct 2017 19:58:14 +0300 Subject: [PATCH 328/653] MQE-478: Deliver Pangolins Sprint 11 - code review fixes --- dev/tests/acceptance/pre-install.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dev/tests/acceptance/pre-install.php b/dev/tests/acceptance/pre-install.php index eaa25998f6dcb..6192044af9d1f 100644 --- a/dev/tests/acceptance/pre-install.php +++ b/dev/tests/acceptance/pre-install.php @@ -3,7 +3,11 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ -// @codingStandardsIgnoreStart + +/** + * @codingStandardsIgnoreStart + * @SuppressWarnings(PHPMD) + */ class CliColors { private $foreground_colors = array(); private $background_colors = array(); From 754d569363ac1315e026491010a9f69d9bc5aa63 Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Tue, 24 Oct 2017 20:34:49 +0300 Subject: [PATCH 329/653] MQE-478: Deliver Pangolins Sprint 11 - code review fixes --- dev/tests/acceptance/pre-install.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dev/tests/acceptance/pre-install.php b/dev/tests/acceptance/pre-install.php index 6192044af9d1f..4021dc1094948 100644 --- a/dev/tests/acceptance/pre-install.php +++ b/dev/tests/acceptance/pre-install.php @@ -86,6 +86,9 @@ public function getBackgroundColors() { } } +/** + * @SuppressWarnings(PHPMD) + */ class PreInstallCheck { private $installedViaBrew = false; private $filePath = ''; From ca1df8c6dd906b9fb50d116529e47c011b9debae Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Fri, 27 Oct 2017 18:16:21 +0300 Subject: [PATCH 330/653] MQE-487: Robo Symfony Error - Updating the Doc Comments, adjusting the @param value. "@param string[]" is invalid now, use "@param array" instead. - Updating the Doc Comments, adding "@return void" to most of the functions. PHPStorm doesn't automatically add that now. --- dev/tests/acceptance/RoboFile.php | 38 +++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php index f79f04839cf7d..038e3e9cd26da 100644 --- a/dev/tests/acceptance/RoboFile.php +++ b/dev/tests/acceptance/RoboFile.php @@ -14,7 +14,7 @@ class RoboFile extends \Robo\Tasks use Robo\Task\Base\loadShortcuts; /** - * Duplicate the Example configuration files used to customize the Project for customization + * Duplicate the Example configuration files used to customize the Project for customization. * * @return void */ @@ -26,8 +26,8 @@ function cloneFiles() } /** - * Clone the Example configuration files - * Build the Codeception project + * Duplicate the Example configuration files for the Project. + * Build the Codeception project. * * @return void */ @@ -38,9 +38,9 @@ function buildProject() } /** - * Generate all Tests command. + * Generate all Tests in PHP. * - * @param string[] $opts + * @param array $opts * @return void */ function generateTests($opts = ['config' => null, 'env' => 'chrome']) @@ -51,11 +51,11 @@ function generateTests($opts = ['config' => null, 'env' => 'chrome']) } /** - * Generate a suite based on name(s) passed in as args + * Generate a suite based on name(s) passed in as args. * - * @param string[] args - * @return void + * @param array $args * @throws Exception + * @return void */ function generateSuite(array $args) { @@ -72,7 +72,7 @@ function generateSuite(array $args) } /** - * Run all Functional tests using the Chrome environment + * Run all Functional tests using the Chrome environment. * * @return void */ @@ -82,7 +82,7 @@ function chrome() } /** - * Run all Functional tests using the FireFox environment + * Run all Functional tests using the FireFox environment. * * @return void */ @@ -92,7 +92,7 @@ function firefox() } /** - * Run all Functional tests using the PhantomJS environment + * Run all Functional tests using the PhantomJS environment. * * @return void */ @@ -102,7 +102,7 @@ function phantomjs() } /** - * Run all Functional tests using the Chrome Headless environment + * Run all Functional tests using the Chrome Headless environment. * * @return void */ @@ -112,7 +112,7 @@ function headless() } /** - * Run all Tests with the specified @group tag, excluding @group 'skip', using the Chrome environment + * Run all Tests with the specified @group tag, excluding @group 'skip', using the Chrome environment. * * @param string $args * @return void @@ -123,7 +123,7 @@ function group($args = '') } /** - * Run all Functional tests located under the Directory Path provided using the Chrome environment + * Run all Functional tests located under the Directory Path provided using the Chrome environment. * * @param string $args * @return void @@ -134,7 +134,7 @@ function folder($args = '') } /** - * Run all Tests marked with the @group tag 'example', using the Chrome environment + * Run all Tests marked with the @group tag 'example', using the Chrome environment. * * @return void */ @@ -146,7 +146,7 @@ function example() /** * Generate the HTML for the Allure report based on the Test XML output - Allure v1.4.X * - * @return void + * @return \Robo\Result */ function allure1Generate() { @@ -156,7 +156,7 @@ function allure1Generate() /** * Generate the HTML for the Allure report based on the Test XML output - Allure v2.3.X * - * @return void + * @return \Robo\Result */ function allure2Generate() { @@ -164,7 +164,7 @@ function allure2Generate() } /** - * Open the HTML Allure report - Allure v1.4.xX + * Open the HTML Allure report - Allure v1.4.X * * @return void */ @@ -212,7 +212,7 @@ function allure2Report() } /** - * Run the Pre-Install Check Script + * Run the Pre-Install system check script. * * @return void */ From f12100a0de1aabbbfe2baceb06c9f8634f085add Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Fri, 27 Oct 2017 18:30:28 +0300 Subject: [PATCH 331/653] MQE-236: Adding a comment tag - Adding an example to the SampleCest. --- .../Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml index 21c3e6ef3472e..277f4e3341a05 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml @@ -49,6 +49,7 @@ <clickWithRightButton selectorArray="['css' => '.checkout']" mergeKey="clickWithRightButton2" x="23" y="324"/> <clickWithRightButton mergeKey="clickWithRightButton3" x="23" y="324"/> <closeTab mergeKey="closeTab"/> + <comment userInput="This is a Comment." mergeKey="comment"/> <createData entity="CustomerEntity1" mergeKey="createData1"/> <deleteData createDataKey="createData1" mergeKey="deleteData1"/> <dontSee userInput="Text" mergeKey="dontSee1"/> From dd50ccd280999ff14bed382dbd7cd9a7ff565ce7 Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Fri, 27 Oct 2017 18:38:53 +0300 Subject: [PATCH 332/653] MQE-450: Adding a clearField method - Adding the clearField method to the SampleCest. --- .../Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml index 277f4e3341a05..92bf0c291491b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml @@ -38,6 +38,7 @@ <attachFile userInput="filename.php" selector="#stuff" mergeKey="attachFile"/> <cancelPopup mergeKey="cancelPopup"/> <checkOption selector="#checkbox" mergeKey="checkOption"/> + <clearField selector="#field" mergeKey="clearField"/> <click selector="#button" userInput="Context" mergeKey="click1"/> <click selectorArray="['link' => 'Login']" mergeKey="click2"/> <click selectorArray="['link' => 'Login']" userInput="stuff" mergeKey="click3"/> From e693d3b1874b3c5ce227ef6d384a386f971296d0 Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Mon, 30 Oct 2017 21:40:16 +0200 Subject: [PATCH 333/653] MQE-398: Rename Page.urlPath attribute --- .../Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml | 2 +- .../Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml | 2 +- .../FunctionalTest/Catalog/Page/AdminCategoryPage.xml | 2 +- .../FunctionalTest/Catalog/Page/AdminProductEditPage.xml | 2 +- .../FunctionalTest/Catalog/Page/AdminProductIndexPage.xml | 2 +- .../FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml | 2 +- .../FunctionalTest/Catalog/Page/StorefrontProductPage.xml | 2 +- .../Checkout/Cest/StorefrontCustomerCheckoutCest.xml | 2 +- .../Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml | 2 +- .../FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml | 2 +- .../FunctionalTest/Checkout/Page/GuestCheckoutPage.xml | 2 +- .../Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml | 2 +- .../Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml | 2 +- .../Cest/AdminCreateConfigurableProductCest.xml | 4 ++-- .../FunctionalTest/Customer/Page/AdminCustomerPage.xml | 2 +- .../FunctionalTest/Customer/Page/AdminNewCustomerPage.xml | 2 +- .../Customer/Page/StorefrontCustomerCreatePage.xml | 2 +- .../Customer/Page/StorefrontCustomerDashboardPage.xml | 2 +- .../Customer/Page/StorefrontCustomerSignInPage.xml | 2 +- .../FunctionalTest/Customer/Page/StorefrontHomePage.xml | 2 +- .../FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml | 6 +++--- .../FunctionalTest/Sales/Page/InvoiceDetailsPage.xml | 2 +- .../Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml | 2 +- .../Magento/FunctionalTest/Sales/Page/InvoicesPage.xml | 2 +- .../Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml | 2 +- .../Magento/FunctionalTest/Sales/Page/OrdersPage.xml | 2 +- .../SampleTemplates/Page/TemplatePageFile.xml | 2 +- .../FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml | 2 +- .../FunctionalTest/SampleTests/Cest/MinimumTestCest.xml | 2 +- .../Magento/FunctionalTest/SampleTests/Page/SamplePage.xml | 2 +- .../FunctionalTest/Store/Page/AdminSystemStorePage.xml | 2 +- .../Wishlist/Page/StorefrontCustomerWishlistPage.xml | 4 ++-- 32 files changed, 36 insertions(+), 36 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml index a5c9c0c81cc64..a50d75c167c9c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml @@ -30,7 +30,7 @@ <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickOnSignIn"/> - <seeInCurrentUrl url="{{AdminLoginPage}}" mergeKey="seeAdminLoginUrl"/> + <seeInCurrentUrl url="{{AdminLoginPage.url}}" mergeKey="seeAdminLoginUrl"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml index 582c0733ff5cd..6dd9f1334f7a9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Page/AdminLoginPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="AdminLoginPage" urlPath="admin/admin" module="Magento_Backend"> + <page name="AdminLoginPage" url="admin/admin" module="Magento_Backend"> <section name="AdminLoginFormSection"/> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml index 5cb797de26cd1..42eac82293db5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminCategoryPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="AdminCategoryPage" urlPath="admin/catalog/category/" module="Catalog"> + <page name="AdminCategoryPage" url="admin/catalog/category/" module="Catalog"> <section name="AdminCategorySidebarActionSection"/> <section name="AdminCategorySidebarTreeSection"/> <section name="AdminCategoryBasicFieldSection"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductEditPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductEditPage.xml index ec19e6f3cc018..b0a19c3dac6f6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductEditPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductEditPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="AdminProductEditPage" urlPath="admin/catalog/product/new" module="Magento_Catalog"> + <page name="AdminProductEditPage" url="admin/catalog/product/new" module="Magento_Catalog"> <section name="AdminProductFormSection"/> <section name="AdminProductFormActionSection"/> <section name="AdminMessagesSection"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductIndexPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductIndexPage.xml index e3ad5dac78ce7..7ebb7e05f31ab 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductIndexPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductIndexPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="AdminProductIndexPage" urlPath="admin/catalog/product/index" module="Magento_Catalog"> + <page name="AdminProductIndexPage" url="admin/catalog/product/index" module="Magento_Catalog"> <section name="AdminProductGridActionSection" /> <section name="AdminProductGridSection" /> <section name="AdminMessagesSection" /> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml index 7cc0fcf136404..2f8a144083874 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontCategoryPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="StorefrontCategoryPage" urlPath="/{{var1}}.html" module="Category" parameterized="true"> + <page name="StorefrontCategoryPage" url="/{{var1}}.html" module="Category" parameterized="true"> <section name="StorefrontCategoryMainSection"/> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml index 998bf0035f5df..5565afa9549f7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="StorefrontProductPage" urlPath="admin/catalog/product/view" module="Magento_Catalog"> + <page name="StorefrontProductPage" url="admin/catalog/product/view" module="Magento_Catalog"> <section name="StorefrontProductInfoMainSection" /> <section name="StorefrontProductInfoDetailsSection" /> <section name="StorefrontProductImageSection" /> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml index cd529555ab6a3..5e97a6ab03b1b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml @@ -68,7 +68,7 @@ <fillField mergeKey="s63" selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" /> <click mergeKey="s65" selector="{{AdminLoginFormSection.signIn}}" /> - <amOnPage mergeKey="s67" url="{{OrdersPage}}"/> + <amOnPage mergeKey="s67" url="{{OrdersPage.url}}"/> <waitForPageLoad mergeKey="s75"/> <fillField mergeKey="s77" selector="{{OrdersGridSection.search}}" variable="orderNumber" /> <waitForPageLoad mergeKey="s78"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml index 54b9062425c72..5a2640a52bdaf 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="CheckoutPage" urlPath="/checkout" module="Checkout"> + <page name="CheckoutPage" url="/checkout" module="Checkout"> <section name="CheckoutShippingSection"/> <section name="CheckoutShippingMethodsSection"/> <section name="CheckoutOrderSummarySection"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml index 44b82ab9270f6..23b6e0a01e7e1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/CheckoutSuccessPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="CheckoutSuccessPage" urlPath="/checkout/onepage/success/" module="Checkout"> + <page name="CheckoutSuccessPage" url="/checkout/onepage/success/" module="Checkout"> <section name="CheckoutSuccessMainSection"/> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/GuestCheckoutPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/GuestCheckoutPage.xml index a54db5eb82f8b..a1ff9ad939ae8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/GuestCheckoutPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Page/GuestCheckoutPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="GuestCheckoutPage" urlPath="/checkout" module="Checkout"> + <page name="GuestCheckoutPage" url="/checkout" module="Checkout"> <section name="GuestCheckoutShippingSection"/> <section name="GuestCheckoutPaymentSection"/> </page> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml index 5624767bb253f..fd75faa59f5ae 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsNewPagePage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="CmsNewPagePage" urlPath="admin/cms/page/new" module="Magento_Cms"> + <page name="CmsNewPagePage" url="admin/cms/page/new" module="Magento_Cms"> <section name="CmsNewPagePageActionsSection"/> <section name="CmsNewPagePageBasicFieldsSection"/> <section name="CmsNewPagePageContentSection"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml index f8564145ae3d1..a3e9406b99095 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Page/CmsPagesPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="CmsPagesPage" urlPath="admin/cms/page" module="Magento_Cms"> + <page name="CmsPagesPage" url="admin/cms/page" module="Magento_Cms"> <section name="CmsPagesPageActionsSection"/> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml index 69f1a7ea6b053..ec091a292d4f2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml @@ -30,7 +30,7 @@ <env value="chrome"/> </annotations> - <amOnPage url="{{AdminCategoryPage.urlPath}}" mergeKey="amOnCategoryGridPage"/> + <amOnPage url="{{AdminCategoryPage.url}}" mergeKey="amOnCategoryGridPage"/> <waitForPageLoad mergeKey="waitForPageLoad1"/> <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" mergeKey="clickOnAddSubCategory"/> @@ -131,4 +131,4 @@ <see selector="{{StorefrontProductInfoMainSection.productAttributeOptions1}}" userInput="{{colorProductAttribute3.name}}" mergeKey="seeInDropDown3"/> </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml index 450372d2d8ba3..8497767309607 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminCustomerPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="AdminCustomerPage" urlPath="/admin/customer/index/" module="Customer"> + <page name="AdminCustomerPage" url="/admin/customer/index/" module="Customer"> <section name="AdminCustomerMainActionsSection"/> <section name="AdminCustomerMessagesSection"/> <section name="AdminCustomerGridSection"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml index 725fe9f9618f9..5535e229f1386 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/AdminNewCustomerPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="AdminNewCustomerPage" urlPath="/admin/customer/index/new" module="Customer"> + <page name="AdminNewCustomerPage" url="/admin/customer/index/new" module="Customer"> <section name="AdminNewCustomerAccountInformationSection"/> <section name="AdminNewCustomerMainActionsSection"/> </page> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml index 12f6c61f7620d..3949babe77274 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerCreatePage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="StorefrontCustomerCreatePage" urlPath="/customer/account/create/" module="Magento_Customer"> + <page name="StorefrontCustomerCreatePage" url="/customer/account/create/" module="Magento_Customer"> <section name="StorefrontCustomerCreateFormSection" /> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml index 498c39a1f6ad7..34b25b514448e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerDashboardPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="StorefrontCustomerDashboardPage" urlPath="/customer/account/" module="Magento_Customer"> + <page name="StorefrontCustomerDashboardPage" url="/customer/account/" module="Magento_Customer"> <section name="StorefrontCustomerDashboardAccountInformationSection" /> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml index ddf5769bdcb76..1500e59b4f0ae 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontCustomerSignInPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="StorefrontCustomerSignInPage" urlPath="/customer/account/login/" module="Magento_Customer"> + <page name="StorefrontCustomerSignInPage" url="/customer/account/login/" module="Magento_Customer"> <section name="StorefrontCustomerSignInFormSection" /> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml index 3d826553ab8aa..42a4336cc6483 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Page/StorefrontHomePage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="StorefrontProductPage" urlPath="/" module="Magento_Customer"> + <page name="StorefrontProductPage" url="/" module="Magento_Customer"> <section name="StorefrontPanelHeader" /> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml index 7ff96a3bed9de..c043fe298f767 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml @@ -57,13 +57,13 @@ <grabTextFrom selector="{{CheckoutSuccessMainSection.orderNumber}}" returnVariable="orderNumber" mergeKey="grabOrderNumber"/> <!-- end todo --> - <amOnPage url="{{AdminLoginPage}}" mergeKey="goToAdmin"/> + <amOnPage url="{{AdminLoginPage.url}}" mergeKey="goToAdmin"/> <waitForPageLoad mergeKey="waitForPageLoad1"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> - <amOnPage url="{{OrdersPage}}" mergeKey="onOrdersPage"/> + <amOnPage url="{{OrdersPage.url}}" mergeKey="onOrdersPage"/> <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="10" mergeKey="waitSpinner1"/> <fillField selector="{{OrdersGridSection.search}}" variable="orderNumber" mergeKey="searchOrderNum"/> <click selector="{{OrdersGridSection.submitSearch}}" mergeKey="submitSearch"/> @@ -79,7 +79,7 @@ <see selector="{{OrderDetailsInvoicesSection.content}}" userInput="John Doe" mergeKey="seeInvoice2"/> <click selector="{{OrderDetailsOrderViewSection.information}}" mergeKey="clickInformation"/> <see selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Processing" mergeKey="seeOrderStatus"/> - <amOnPage url="{{InvoicesPage}}" mergeKey="goToInvoices"/> + <amOnPage url="{{InvoicesPage.url}}" mergeKey="goToInvoices"/> <waitForElementNotVisible selector="{{InvoicesGridSection.spinner}}" time="10" mergeKey="waitSpinner4"/> <click selector="{{InvoicesGridSection.filter}}" mergeKey="clickFilters"/> <fillField selector="{{InvoicesFiltersSection.orderNum}}" variable="orderNumber" mergeKey="searchOrderNum2"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceDetailsPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceDetailsPage.xml index 186097f404011..c18d0babc4761 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceDetailsPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceDetailsPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="InvoiceDetailsPage" urlPath="/admin/sales/invoice/view/invoice_id/" module="Sales"> + <page name="InvoiceDetailsPage" url="/admin/sales/invoice/view/invoice_id/" module="Sales"> <section name="InvoiceDetailsInformationSection"/> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml index 185d89e80f821..c22b278bdaf20 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoiceNewPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="InvoiceNewPage" urlPath="/admin/sales/order_invoice/new/order_id/" module="Sales"> + <page name="InvoiceNewPage" url="/admin/sales/order_invoice/new/order_id/" module="Sales"> <section name="InvoiceNewSection"/> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoicesPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoicesPage.xml index ae145b50a8e2e..a774ced243606 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoicesPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/InvoicesPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="InvoicesPage" urlPath="/admin/sales/invoice/" module="Sales"> + <page name="InvoicesPage" url="/admin/sales/invoice/" module="Sales"> <section name="InvoicesGridSection"/> <section name="InvoicesFiltersSection"/> </page> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml index 050254c7ee5c5..6f8f9a3d2fdf2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrderDetailsPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="OrderDetailsPage" urlPath="/admin/sales/order/view/order_id/" module="Sales"> + <page name="OrderDetailsPage" url="/admin/sales/order/view/order_id/" module="Sales"> <section name="OrderDetailsMainActionsSection"/> <section name="OrderDetailsInformationSection"/> <section name="OrderDetailsMessagesSection"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrdersPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrdersPage.xml index 0d009bba52967..d57f13f82407c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrdersPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Page/OrdersPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="OrdersPage" urlPath="/admin/sales/order/" module="Sales"> + <page name="OrdersPage" url="/admin/sales/order/" module="Sales"> <section name="OrdersGridSection"/> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Page/TemplatePageFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Page/TemplatePageFile.xml index 17be26f6b6f7e..755e15113e4f4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Page/TemplatePageFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Page/TemplatePageFile.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="" urlPath="" module=""> + <page name="" url="" module=""> <section name=""/> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml index 50a3793fb2dad..11dfa611f2062 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml @@ -36,7 +36,7 @@ </createData> <!-- Parameterized url --> - <amOnPage url="{{SamplePage('foo', SamplePerson.bar)}}" mergeKey="amOnPage"/> + <amOnPage url="{{SamplePage.url('foo', SamplePerson.bar)}}" mergeKey="amOnPage"/> <!-- Parameterized selector --> <grabTextFrom selector="{{SampleSection.twoParamElement(SamplePerson.foo, 'bar')}}" returnVariable="myReturnVar" mergeKey="grabTextFrom"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml index 6d4e6a73c8707..b1cfc787acbb7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml @@ -26,7 +26,7 @@ <env value="phantomjs"/> <env value="headless"/> </annotations> - <amOnPage url="{{AdminLoginPage}}" mergeKey="navigateToAdmin"/> + <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Page/SamplePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Page/SamplePage.xml index 034e0dd50dd6e..d82d1079b7533 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Page/SamplePage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Page/SamplePage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="SamplePage" urlPath="/{{var1}}/{{var2}}.html" module="SampleTests" parameterized="true"> + <page name="SamplePage" url="/{{var1}}/{{var2}}.html" module="SampleTests" parameterized="true"> <section name="SampleSection"/> </page> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Page/AdminSystemStorePage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Page/AdminSystemStorePage.xml index 4d981b218b7ee..8aef6123f5a51 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Page/AdminSystemStorePage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Page/AdminSystemStorePage.xml @@ -6,7 +6,7 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="AdminSystemStorePage" urlPath="/admin/admin/system_store/" module="Store"> + <page name="AdminSystemStorePage" url="/admin/admin/system_store/" module="Store"> <section name="AdminStoresMainActionsSection"/> <section name="AdminStoresGridSection"/> </page> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Page/StorefrontCustomerWishlistPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Page/StorefrontCustomerWishlistPage.xml index b488387c8bf38..0ffe0f6c9efad 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Page/StorefrontCustomerWishlistPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Page/StorefrontCustomerWishlistPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="StorefrontCustomerWishlistPage" urlPath="/wishlist/" module="Magento_Wishlist"> + <page name="StorefrontCustomerWishlistPage" url="/wishlist/" module="Magento_Wishlist"> <section name="StorefrontCustomerWishlistSection" /> </page> -</config> \ No newline at end of file +</config> From 500cc7f68ad5b1c1582cb858ca6ac7abb6a2a0bb Mon Sep 17 00:00:00 2001 From: Ian Meron <imeron@magento.com> Date: Thu, 26 Oct 2017 23:51:23 +0300 Subject: [PATCH 334/653] MQE-388: Write store settings before tests - add paypal and braintree config metadata - add paypal nad braintree sample data --- .../Config/Data/braintreeData.xml | 37 ++++++++++++++ .../FunctionalTest/Config/Data/paypalData.xml | 41 +++++++++++++++ .../Config/Metadata/braintree_config-meta.xml | 45 ++++++++++++++++ .../Config/Metadata/paypal_config-meta.xml | 51 +++++++++++++++++++ 4 files changed, 174 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/braintreeData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/paypalData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/braintree_config-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/paypal_config-meta.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/braintreeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/braintreeData.xml new file mode 100644 index 0000000000000..273669acc4578 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/braintreeData.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="sampleBraintreeConfig" type="braintree_config_state"> + <required-entity type="title">sampleTitle</required-entity> + <required-entity type="payment_action">samplePaymentAction</required-entity> + <required-entity type="environment">sampleEnvironment</required-entity> + <required-entity type="merchant_id">sampleMerchantId</required-entity> + <required-entity type="public_key">samplePublicKey</required-entity> + <required-entity type="private_key">samplePrivateKey</required-entity> + </entity> + <entity name="sampleTitle" type="title"> + <data key="value">Sample Braintree Config</data> + </entity> + <entity name="samplePaymentAction" type="payment_action"> + <data key="value">authorize</data> + </entity> + <entity name="sampleEnvironment" type="environment"> + <data key="value">sandbox</data> + </entity> + <entity name="sampleMerchantId" type="merchant_id"> + <data key="value">someMerchantId</data> + </entity> + <entity name="samplePublicKey" type="public_key"> + <data key="value">somePublicKey</data> + </entity> + <entity name="samplePrivateKey" type="private_key"> + <data key="value">somePrivateKey</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/paypalData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/paypalData.xml new file mode 100644 index 0000000000000..96c5986732d78 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/paypalData.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="samplePaypalConfig" type="paypal_config_state"> + <required-entity type="business_account">sampleBusinessAccount</required-entity> + <required-entity type="api_username">sampleApiUsername</required-entity> + <required-entity type="api_password">sampleApiPassword</required-entity> + <required-entity type="api_signature">sampleApiSignature</required-entity> + <required-entity type="api_authentication">sampleApiAuthentication</required-entity> + <required-entity type="sandbox_flag">sampleSandboxFlag</required-entity> + <required-entity type="use_proxy">sampleUseProxy</required-entity> + </entity> + <entity name="sampleBusinessAccount" type="business_account"> + <data key="value">myBusinessAccount@magento.com</data> + </entity> + <entity name="sampleApiUsername" type="api_username"> + <data key="value">myApiUsername.magento.com</data> + </entity> + <entity name="sampleApiPassword" type="api_password"> + <data key="value">somePassword</data> + </entity> + <entity name="sampleApiSignature" type="api_signature"> + <data key="value">someApiSignature</data> + </entity> + <entity name="sampleApiAuthentication" type="api_authentication"> + <data key="value">0</data> + </entity> + <entity name="sampleSandboxFlag" type="sandbox_flag"> + <data key="value">0</data> + </entity> + <entity name="sampleUseProxy" type="use_proxy"> + <data key="value">0</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/braintree_config-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/braintree_config-meta.xml new file mode 100644 index 0000000000000..04b7f5fb526cf --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/braintree_config-meta.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="createBraintreeConfigState" dataType="braintree_config_state" type="create" auth="adminFormKey" url="/admin/system_config/save/section/payment/" method="POST"> + <object key="groups" dataType="braintree_config_state"> + <object key="braintree_section" dataType="braintree_config_state"> + <object key="groups" dataType="braintree_config_state"> + <object key="braintree" dataType="braintree_config_state"> + <object key="groups" dataType="braintree_config_state"> + <object key="braintree_required" dataType="braintree_config_state"> + <object key="fields" dataType="braintree_config_state"> + <object key="title" dataType="title"> + <field key="value">string</field> + </object> + <object key="environment" dataType="environment"> + <field key="value">string</field> + </object> + <object key="payment_action" dataType="payment_action"> + <field key="value">string</field> + </object> + <object key="merchant_id" dataType="merchant_id"> + <field key="value">string</field> + </object> + <object key="public_key" dataType="public_key"> + <field key="value">string</field> + </object> + <object key="private_key" dataType="private_key"> + <field key="value">string</field> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + </operation> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/paypal_config-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/paypal_config-meta.xml new file mode 100644 index 0000000000000..2e58876103d62 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/paypal_config-meta.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="createPaypalConfigState" dataType="paypal_config_state" type="create" auth="adminFormKey" url="/admin/system_config/save/section/payment/" method="POST"> + <object key="groups" dataType="paypal_config_state"> + <object key="paypal_alternative_payment_methods" dataType="paypal_config_state"> + <object key="groups" dataType="paypal_config_state"> + <object key="express_checkout_us" dataType="paypal_config_state"> + <object key="groups" dataType="paypal_config_state"> + <object key="express_checkout_required" dataType="paypal_config_state"> + <object key="groups" dataType="paypal_config_state"> + <object key="express_checkout_required_express_checkout" dataType="paypal_config_state"> + <object key="fields" dataType="paypal_config_state"> + <object key="business_account" dataType="business_account"> + <field key="value">string</field> + </object> + <object key="api_username" dataType="api_username"> + <field key="value">string</field> + </object> + <object key="api_password" dataType="api_password"> + <field key="value">string</field> + </object> + <object key="api_signature" dataType="api_signature"> + <field key="value">string</field> + </object> + <object key="sandbox_flag" dataType="sandbox_flag"> + <field key="value">string</field> + </object> + <object key="use_proxy" dataType="use_proxy"> + <field key="value">string</field> + </object> + <object key="api_authentication" dataType="api_authentication"> + <field key="value">string</field> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + </object> + </operation> +</config> From 5fe6e2bb66db679f184795830da52b397e7b1d13 Mon Sep 17 00:00:00 2001 From: Ian Meron <imeron@magento.com> Date: Mon, 30 Oct 2017 20:35:12 +0200 Subject: [PATCH 335/653] MQE-388: Write store settings before tests - add new test to demonstrate usage - add new default config for restoring settings --- .../Config/Data/braintreeData.xml | 28 +++++++++++++++++++ .../FunctionalTest/Config/Data/paypalData.xml | 20 +++++++++++++ .../Cest/SetPaymentConfigurationCest.xml | 21 ++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/braintreeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/braintreeData.xml index 273669acc4578..ae5bfd17fe85e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/braintreeData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/braintreeData.xml @@ -34,4 +34,32 @@ <entity name="samplePrivateKey" type="private_key"> <data key="value">somePrivateKey</data> </entity> + + <!-- default configuration used to restore Magento config --> + <entity name="defaultBraintreeConfig" type="braintree_config_state"> + <required-entity type="title">defaultTitle</required-entity> + <required-entity type="payment_action">defaultPaymentAction</required-entity> + <required-entity type="environment">defaultEnvironment</required-entity> + <required-entity type="merchant_id">defaultMerchantId</required-entity> + <required-entity type="public_key">defaultPublicKey</required-entity> + <required-entity type="private_key">defaultPrivateKey</required-entity> + </entity> + <entity name="defaultTitle" type="title"> + <data key="value"/> + </entity> + <entity name="defaultPaymentAction" type="payment_action"> + <data key="value"/> + </entity> + <entity name="defaultEnvironment" type="environment"> + <data key="value"/> + </entity> + <entity name="defaultMerchantId" type="merchant_id"> + <data key="value"/> + </entity> + <entity name="defaultPublicKey" type="public_key"> + <data key="value"/> + </entity> + <entity name="defaultPrivateKey" type="private_key"> + <data key="value"/> + </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/paypalData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/paypalData.xml index 96c5986732d78..3f1190a408ac0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/paypalData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/paypalData.xml @@ -38,4 +38,24 @@ <entity name="sampleUseProxy" type="use_proxy"> <data key="value">0</data> </entity> + + <!-- default configuration used to restore Magento config --> + <entity name="defaultPayPalConfig" type="paypal_config_state"> + <required-entity type="business_account">defaultBusinessAccount</required-entity> + <required-entity type="api_username">defaultApiUsername</required-entity> + <required-entity type="api_password">defaultApiPassword</required-entity> + <required-entity type="api_signature">defaultApiSignature</required-entity> + </entity> + <entity name="defaultBusinessAccount" type="business_account"> + <data key="value"/> + </entity> + <entity name="defaultApiUsername" type="api_username"> + <data key="value"/> + </entity> + <entity name="defaultApiPassword" type="api_password"> + <data key="value"/> + </entity> + <entity name="defaultApiSignature" type="api_signature"> + <data key="value"/> + </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml new file mode 100644 index 0000000000000..51d07d501e374 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="SetPaymentConfigurationCest"> + <test name="SetPaypalConfigurationTest"> + <createData entity="samplePaypalConfig" mergeKey="createSamplePaypalConfig"/> + <createData entity="defaultPaypalConfig" mergeKey="restoreDefaultPaypalConfig"/> + </test> + <test name="SetBraintreeConfigurationTest"> + <createData entity="sampleBraintreeConfig" mergeKey="createSampleBraintreeConfig"/> + <createData entity="defaultBraintreeConfig" mergeKey="restoreDefaultBraintreeConfig"/> + </test> + </cest> +</config> From e5c9da6bffe7b3c65d56f3d5aa8ab094f58380be Mon Sep 17 00:00:00 2001 From: Kevin Kozan <kkozan@magento.com> Date: Tue, 31 Oct 2017 20:34:13 +0200 Subject: [PATCH 336/653] MQE-484: parameter array with data replacement does not generate uniqueness function correctly - fixed SimpleProductCest to not generate bad output - Fixed configurableProductCest to not generate bad output. --- .../Catalog/Cest/AdminCreateSimpleProductCest.xml | 2 +- .../Cest/AdminCreateConfigurableProductCest.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml index 87b8e2a1d9435..f649580554eaa 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml @@ -37,7 +37,7 @@ <fillField userInput="{{_defaultProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" mergeKey="fillSKU"/> <fillField userInput="{{_defaultProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" mergeKey="fillPrice"/> <fillField userInput="{{_defaultProduct.quantity}}" selector="{{AdminProductFormSection.productQuantity}}" mergeKey="fillQuantity"/> - <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="['$$createPreReqCategory.name$$']" mergeKey="searchAndSelectCategory"/> + <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="[$$createPreReqCategory.name$$]" mergeKey="searchAndSelectCategory"/> <click selector="{{AdminProductSEOSection.sectionHeader}}" mergeKey="openSeoSection"/> <fillField userInput="{{_defaultProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" mergeKey="fillUrlKey"/> <click selector="{{AdminProductFormActionSection.saveButton}}" mergeKey="saveProduct"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml index ec091a292d4f2..fbcc2581b4089 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml @@ -48,7 +48,7 @@ <fillField userInput="{{_defaultProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" mergeKey="fillSKU"/> <fillField userInput="{{_defaultProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" mergeKey="fillPrice"/> <fillField userInput="{{_defaultProduct.quantity}}" selector="{{AdminProductFormSection.productQuantity}}" mergeKey="fillQuantity"/> - <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="['{{_defaultCategory.name}}']" mergeKey="searchAndSelectCategory"/> + <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="[{{_defaultCategory.name}}]" mergeKey="searchAndSelectCategory"/> <click selector="{{AdminProductSEOSection.sectionHeader}}" mergeKey="openSeoSection"/> <fillField userInput="{{_defaultProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" mergeKey="fillUrlKey"/> From 277a09e4ead50e71433e6ef3142f98206ebb0884 Mon Sep 17 00:00:00 2001 From: Ian Meron <imeron@magento.com> Date: Tue, 31 Oct 2017 21:12:54 +0200 Subject: [PATCH 337/653] MQE-484: ParamterArray with data replacement does not generate uniqueness function correctly - fix SampleCest.xml to account for new parameterArray rule --- .../FunctionalTest/SampleTests/Cest/SampleCest.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml index 92bf0c291491b..e3ff7be39cbf7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml @@ -105,9 +105,9 @@ <performOn selector=".rememberMe" function="function (WebDriver $I) { $I->see('Remember me next time'); $I->seeElement('#LoginForm_rememberMe'); $I->dontSee('Login'); }" mergeKey="performOn1"/> <performOn selector=".rememberMe" function="ActionSequence::build()->see('Warning')->see('Are you sure you want to delete this?')->click('Yes')" mergeKey="performOn2"/> <pressKey selector="#page" userInput="a" mergeKey="pressKey1"/> - <pressKey selector="#page" parameterArray="array('ctrl','a'),'new'" mergeKey="pressKey2"/> - <pressKey selector="#page" parameterArray="array('shift','111'),'1','x'" mergeKey="pressKey3"/> - <pressKey selector="#page" parameterArray="array('ctrl', 'a'), \Facebook\WebDriver\WebDriverKeys::DELETE" mergeKey="pressKey4"/> + <pressKey selector="#page" parameterArray="[['ctrl','a'],'new']" mergeKey="pressKey2"/> + <pressKey selector="#page" parameterArray="[['shift','111'],'1','x']" mergeKey="pressKey3"/> + <pressKey selector="#page" parameterArray="[['ctrl', 'a'], \Facebook\WebDriver\WebDriverKeys::DELETE]" mergeKey="pressKey4"/> <!--pressKey selector="descendant-or-self::*[@id='page']" userInput="u" mergeKey="pressKey5"/--> <reloadPage mergeKey="reloadPage"/> <resetCookie userInput="cookie" mergeKey="resetCookie1"/> @@ -135,7 +135,7 @@ <seeInField userInput="Stuff" selector="#field" mergeKey="seeInField1"/> <seeInField userInput="Stuff" selectorArray="['name' => 'search']" mergeKey="seeInField2"/> <seeInFormFields selector="form[name=myform]" parameterArray="['input1' => 'value','input2' => 'other value']" mergeKey="seeInFormFields1"/> - <seeInFormFields selector=".form-class" parameterArray="['multiselect' => ['value1','value2'],'checkbox[]' => ['a checked value','another checked value',]]" mergeKey="seeInFormFields2"/> + <seeInFormFields selector=".form-class" parameterArray="[['multiselect' => ['value1','value2'],'checkbox[]]' => ['a checked value','another checked value',]]" mergeKey="seeInFormFields2"/> <!--<seeInPageSource html="<h1></h1>" mergeKey="seeInPageSource"/>--> <seeInPopup userInput="Yes in Popup" mergeKey="seeInPopup"/> <!--<seeInSource html="<h1></h1>" mergeKey="seeInSource"/>--> @@ -146,8 +146,8 @@ <seeNumberOfElements selector="tr" userInput="[0, 10]" mergeKey="seeNumberOfElements2"/> <seeOptionIsSelected selector=".option" userInput="Visa" mergeKey="seeOptionIsSelected"/> <selectOption selector=".dropDown" userInput="Option Name" mergeKey="selectOption1"/> - <selectOption selector="//form/select[@name=account]" parameterArray="array('Windows','Linux')" mergeKey="selectOption2"/> - <selectOption selector="Which OS do you use?" parameterArray="array('text' => 'Windows')" mergeKey="selectOption3"/> + <selectOption selector="//form/select[@name=account]" parameterArray="['Windows','Linux']" mergeKey="selectOption2"/> + <selectOption selector="Which OS do you use?" parameterArray="['text' => 'Windows']" mergeKey="selectOption3"/> <setCookie userInput="PHPSESSID" value="stuff" mergeKey="setCookie1"/> <setCookie userInput="PHPSESSID" value="stuff" parameterArray="['domainName' => 'www.google.com']" mergeKey="setCookie2"/> <submitForm selector="#my-form" parameterArray="['field' => ['value','another value',]]" button="#submit" mergeKey="submitForm2"/> From c9fe893bbf83b6d002d3e9f562f94260a8cf7b00 Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Thu, 2 Nov 2017 18:12:02 +0200 Subject: [PATCH 338/653] MQE-510: Output from robo generate:tests contains --env chrome parameters - Remove env argument from generate:tests command --- dev/tests/acceptance/RoboFile.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php index 038e3e9cd26da..c255e9f065392 100644 --- a/dev/tests/acceptance/RoboFile.php +++ b/dev/tests/acceptance/RoboFile.php @@ -43,10 +43,10 @@ function buildProject() * @param array $opts * @return void */ - function generateTests($opts = ['config' => null, 'env' => 'chrome']) + function generateTests($opts = ['config' => null]) { require 'tests'. DIRECTORY_SEPARATOR . 'functional' . DIRECTORY_SEPARATOR . '_bootstrap.php'; - \Magento\FunctionalTestingFramework\Util\TestGenerator::getInstance()->createAllCestFiles($opts['config'], $opts['env']); + \Magento\FunctionalTestingFramework\Util\TestGenerator::getInstance()->createAllCestFiles($opts['config']); $this->say("Generate Tests Command Run"); } From 7aa51ab059d2fd2941b50332ea41a4e241e51c52 Mon Sep 17 00:00:00 2001 From: Kevin Kozan <kkozan@magento.com> Date: Thu, 2 Nov 2017 18:19:18 +0200 Subject: [PATCH 339/653] MQE-496: Unable to pass multiple ActionGroup arguments into parameterized selector - Added SampleTests eamples with the problematic ActionGroup. --- .../SampleTests/ActionGroup/SampleActionGroup.xml | 6 ++++++ .../FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml | 4 ++++ .../Magento/FunctionalTest/SampleTests/Data/SampleData.xml | 5 +++++ .../FunctionalTest/SampleTests/Section/SampleSection.xml | 3 +++ 4 files changed, 18 insertions(+) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml index 858d5017dd9ef..629688f7437b8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml @@ -15,4 +15,10 @@ <fillField selector="#foo" userInput="{{person.foo}}" mergeKey="fillField1"/> <fillField selector="#bar" userInput="{{person.bar}}" mergeKey="fillField2"/> </actionGroup> + <actionGroup name="ValidateSlideOutPanelField"> + <arguments> + <argument name="property" defaultValue=""/> + </arguments> + <see userInput="{{property.name}}" selector="{{ColumnSection.panelFieldLabel(property.section, property.fieldName, property.section, property.name)}}" mergeKey="seePropertyLabel"/> + </actionGroup> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml index 11dfa611f2062..761635f281886 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml @@ -48,6 +48,10 @@ <actionGroup ref="SampleActionGroup" mergeKey="actionGroup"> <argument name="person" value="OverrideDefaultPerson"/> </actionGroup> + + <actionGroup ref="ValidateSlideOutPanelField" mergeKey="seeAppearanceMinHeightProperty"> + <argument name="property" value="AppearanceMinHeightProperty"/> + </actionGroup> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Data/SampleData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Data/SampleData.xml index 7f5fbde6217fc..9e431fec66eca 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Data/SampleData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Data/SampleData.xml @@ -19,4 +19,9 @@ <data key="foo">fizz</data> <data key="bar">buzz</data> </entity> + <entity name="AppearanceMinHeightProperty" type="min_height_property"> + <data key="name">Minimum Height</data> + <data key="section">appearance</data> + <data key="fieldName">min_height</data> + </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Section/SampleSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Section/SampleSection.xml index 789e8dfd3a7a6..a3862d1520c0b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Section/SampleSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Section/SampleSection.xml @@ -14,4 +14,7 @@ <element name="threeParamElement" type="button" selector="#{{var1}}-{{var2}} .{{var3}}" parameterized="true"/> <element name="timeoutElement" type="button" selector="#foo" timeout="30"/> </section> + <section name="ColumnSection"> + <element name="panelFieldLabel" type="text" selector='//div[@data-index="{{arg1}}"]/descendant::div[@data-index="{{arg2}}"]/label | //div[@data-index="{{arg3}}"]/descendant::*[@class="admin__field-label"]/span[text()="{{arg4}}"]' parameterized="true" /> + </section> </config> From 6a936cec5df174a6ba29de14091fd42967191991 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Wed, 25 Oct 2017 22:00:02 +0300 Subject: [PATCH 340/653] MQE-465: Data object xml support multidimensional arrays; SalesRule metadata, data and api test. --- .../SalesRule/Data/salesRuleData.xml | 25 +++++++ .../SalesRule/Metadata/sales_rule-meta.xml | 75 +++++++++++++++++++ .../Metadata/sales_rule_store_label-meta.xml | 15 ++++ .../Cest/CreateSalesRuleByApiCest.xml | 23 ++++++ 4 files changed, 138 insertions(+) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/salesRuleData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Metadata/sales_rule-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Metadata/sales_rule_store_label-meta.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/salesRuleData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/salesRuleData.xml new file mode 100644 index 0000000000000..3f13fbf02a8fd --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/salesRuleData.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="SimpleSalesRule" type="SalesRule"> + <data key="name" unique="suffix">SalesRule</data> + <data key="is_active">true</data> + <required-entity type="SalesRuleStoreLabel">SalesRuleStoreLabel1</required-entity> + <required-entity type="SalesRuleStoreLabel">SalesRuleStoreLabel2</required-entity> + </entity> + <entity name="SalesRuleStoreLabel1" type="SalesRuleStoreLabel"> + <data key="store_id">0</data> + <data key="store_label">TestRule_Label</data> + </entity> + <entity name="SalesRuleStoreLabel2" type="SalesRuleStoreLabel"> + <data key="store_id">1</data> + <data key="store_label">TestRule_Label_default</data> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Metadata/sales_rule-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Metadata/sales_rule-meta.xml new file mode 100644 index 0000000000000..9417c61dd1537 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Metadata/sales_rule-meta.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateSalesRule" dataType="SalesRule" type="create" auth="adminOauth" url="/V1/salesRules" method="POST"> + <contentType>application/json</contentType> + <object key="rule" dataType="SalesRule"> + <field key="name" required="true">string</field> + <field key="description">string</field> + <field key="is_active">boolean</field> + <field key="from_date">string</field> + <field key="to_date">string</field> + <field key="uses_per_customer">integer</field> + <field key="sort_order">integer</field> + <field key="simple_action">string</field> + <field key="discount_amount">integer</field> + <field key="discount_qty">integer</field> + <field key="discount_step">integer</field> + <field key="times_used">integer</field> + <field key="uses_per_coupon">integer</field> + <field key="apply_to_shipping">boolean</field> + <field key="is_rss">boolean</field> + <field key="use_auto_generation">boolean</field> + <field key="coupon_type">string</field> + <field key="simple_free_shipping">string</field> + <field key="stop_rules_processing">boolean</field> + <field key="is_advanced">boolean</field> + <array key="store_labels"> + <!-- specify object name as array value --> + <value>SalesRuleStoreLabel</value> + <!-- alternatively, define object embedded in array directly --> + <!--object dataType="SalesRuleStoreLabel" key="store_labels"> + <field key="store_id">integer</field> + <field key="store_label">string</field> + </object--> + </array> + <array key="product_ids"> + <value>integer</value> + </array> + <array key="customer_group_ids"> + <value>integer</value> + </array> + <array key="website_ids"> + <value>integer</value> + </array> + <object dataType="RuleCondition" key="condition"> + <field key="condition_type">string</field> + <array key="conditions"> + <value>integer</value> + </array> + <field key="aggregator_type">string</field> + <field key="operator">string</field> + <field key="attribute_name">string</field> + <field key="value">string</field> + <field key="extension_attributes">empty_extension_attribute</field> + </object> + <object dataType="ActionCondition" key="action_condition"> + <field key="condition_type">string</field> + <field key="aggregator_type">string</field> + <field key="operator">string</field> + <field key="attribute_name">string</field> + <field key="value">string</field> + <field key="extension_attributes">empty_extension_attribute</field> + </object> + <object dataType="ExtensionAttribute" key="extension_attributes"> + <field key="reward_points_delta">integer</field> + </object> + </object> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Metadata/sales_rule_store_label-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Metadata/sales_rule_store_label-meta.xml new file mode 100644 index 0000000000000..584bbb43cf77f --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Metadata/sales_rule_store_label-meta.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> + <operation name="CreateSalesRuleStoreLabel" dataType="SalesRuleStoreLabel" type="create"> + <field key="store_id">integer</field> + <field key="store_label">string</field> + </operation> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml new file mode 100644 index 0000000000000..8ee7a705eb512 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="CreateSalesRuleByApiCest"> + <annotations> + <features value="Create a Sales Rule By API"/> + <stories value="Create a Sales Rule By API"/> + </annotations> + <before> + <createData mergeKey="saleRule" entity="SimpleSalesRule" /> + </before> + <test name="CreateSalesRuleByApiTest"> + <!--see mergeKey="test" userInput="$$saleRule.store_labels[0][store_id]$$" selector="test"/--> + </test> + </cest> +</config> \ No newline at end of file From 5bcc975a7506921540f3370882360021a86ae41d Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Tue, 7 Nov 2017 18:07:45 +0200 Subject: [PATCH 341/653] MQE-523: Create mainline PRs for previous sprint (12) - Fixed Alex's feedback --- .../Braintree/Data/BraintreeData.xml | 65 +++++++++++++++++++ .../Metadata/braintree_config-meta.xml | 4 +- ...ntProductPage.xml => AdminProductPage.xml} | 2 +- .../Config/Data/braintreeData.xml | 65 ------------------- .../FunctionalTest/Config/Data/paypalData.xml | 61 ----------------- .../FunctionalTest/Paypal/Data/PaypalData.xml | 61 +++++++++++++++++ .../Metadata/paypal_config-meta.xml | 2 +- .../Cest/CreateSalesRuleByApiCest.xml | 2 +- .../Cest/SetPaymentConfigurationCest.xml | 8 +-- 9 files changed, 135 insertions(+), 135 deletions(-) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/Data/BraintreeData.xml rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/{Config => Braintree}/Metadata/braintree_config-meta.xml (97%) rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/{StorefrontProductPage.xml => AdminProductPage.xml} (86%) delete mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/braintreeData.xml delete mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/paypalData.xml create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/Data/PaypalData.xml rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/{Config => Paypal}/Metadata/paypal_config-meta.xml (98%) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/Data/BraintreeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/Data/BraintreeData.xml new file mode 100644 index 0000000000000..0beed525e6659 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/Data/BraintreeData.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="SampleBraintreeConfig" type="braintree_config_state"> + <required-entity type="title">SampleTitle</required-entity> + <required-entity type="payment_action">SamplePaymentAction</required-entity> + <required-entity type="environment">SampleEnvironment</required-entity> + <required-entity type="merchant_id">SampleMerchantId</required-entity> + <required-entity type="public_key">SamplePublicKey</required-entity> + <required-entity type="private_key">SamplePrivateKey</required-entity> + </entity> + <entity name="SampleTitle" type="title"> + <data key="value">Sample Braintree Config</data> + </entity> + <entity name="SamplePaymentAction" type="payment_action"> + <data key="value">authorize</data> + </entity> + <entity name="SampleEnvironment" type="environment"> + <data key="value">sandbox</data> + </entity> + <entity name="SampleMerchantId" type="merchant_id"> + <data key="value">someMerchantId</data> + </entity> + <entity name="SamplePublicKey" type="public_key"> + <data key="value">somePublicKey</data> + </entity> + <entity name="SamplePrivateKey" type="private_key"> + <data key="value">somePrivateKey</data> + </entity> + + <!-- default configuration used to restore Magento config --> + <entity name="DefaultBraintreeConfig" type="braintree_config_state"> + <required-entity type="title">DefaultTitle</required-entity> + <required-entity type="payment_action">DefaultPaymentAction</required-entity> + <required-entity type="environment">DefaultEnvironment</required-entity> + <required-entity type="merchant_id">DefaultMerchantId</required-entity> + <required-entity type="public_key">DefaultPublicKey</required-entity> + <required-entity type="private_key">DefaultPrivateKey</required-entity> + </entity> + <entity name="DefaultTitle" type="title"> + <data key="value"/> + </entity> + <entity name="DefaultPaymentAction" type="payment_action"> + <data key="value"/> + </entity> + <entity name="DefaultEnvironment" type="environment"> + <data key="value"/> + </entity> + <entity name="DefaultMerchantId" type="merchant_id"> + <data key="value"/> + </entity> + <entity name="DefaultPublicKey" type="public_key"> + <data key="value"/> + </entity> + <entity name="DefaultPrivateKey" type="private_key"> + <data key="value"/> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/braintree_config-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/Metadata/braintree_config-meta.xml similarity index 97% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/braintree_config-meta.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/Metadata/braintree_config-meta.xml index 04b7f5fb526cf..d450c0ddf011e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/braintree_config-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/Metadata/braintree_config-meta.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> - <operation name="createBraintreeConfigState" dataType="braintree_config_state" type="create" auth="adminFormKey" url="/admin/system_config/save/section/payment/" method="POST"> + <operation name="CreateBraintreeConfigState" dataType="braintree_config_state" type="create" auth="adminFormKey" url="/admin/system_config/save/section/payment/" method="POST"> <object key="groups" dataType="braintree_config_state"> <object key="braintree_section" dataType="braintree_config_state"> <object key="groups" dataType="braintree_config_state"> @@ -42,4 +42,4 @@ </object> </object> </operation> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductPage.xml similarity index 86% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductPage.xml index 5565afa9549f7..2844907769243 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/StorefrontProductPage.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Page/AdminProductPage.xml @@ -8,7 +8,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/PageObject.xsd"> - <page name="StorefrontProductPage" url="admin/catalog/product/view" module="Magento_Catalog"> + <page name="AdminProductPage" url="admin/catalog/product/view" module="Magento_Catalog"> <section name="StorefrontProductInfoMainSection" /> <section name="StorefrontProductInfoDetailsSection" /> <section name="StorefrontProductImageSection" /> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/braintreeData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/braintreeData.xml deleted file mode 100644 index ae5bfd17fe85e..0000000000000 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/braintreeData.xml +++ /dev/null @@ -1,65 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - /** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ ---> - -<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> - <entity name="sampleBraintreeConfig" type="braintree_config_state"> - <required-entity type="title">sampleTitle</required-entity> - <required-entity type="payment_action">samplePaymentAction</required-entity> - <required-entity type="environment">sampleEnvironment</required-entity> - <required-entity type="merchant_id">sampleMerchantId</required-entity> - <required-entity type="public_key">samplePublicKey</required-entity> - <required-entity type="private_key">samplePrivateKey</required-entity> - </entity> - <entity name="sampleTitle" type="title"> - <data key="value">Sample Braintree Config</data> - </entity> - <entity name="samplePaymentAction" type="payment_action"> - <data key="value">authorize</data> - </entity> - <entity name="sampleEnvironment" type="environment"> - <data key="value">sandbox</data> - </entity> - <entity name="sampleMerchantId" type="merchant_id"> - <data key="value">someMerchantId</data> - </entity> - <entity name="samplePublicKey" type="public_key"> - <data key="value">somePublicKey</data> - </entity> - <entity name="samplePrivateKey" type="private_key"> - <data key="value">somePrivateKey</data> - </entity> - - <!-- default configuration used to restore Magento config --> - <entity name="defaultBraintreeConfig" type="braintree_config_state"> - <required-entity type="title">defaultTitle</required-entity> - <required-entity type="payment_action">defaultPaymentAction</required-entity> - <required-entity type="environment">defaultEnvironment</required-entity> - <required-entity type="merchant_id">defaultMerchantId</required-entity> - <required-entity type="public_key">defaultPublicKey</required-entity> - <required-entity type="private_key">defaultPrivateKey</required-entity> - </entity> - <entity name="defaultTitle" type="title"> - <data key="value"/> - </entity> - <entity name="defaultPaymentAction" type="payment_action"> - <data key="value"/> - </entity> - <entity name="defaultEnvironment" type="environment"> - <data key="value"/> - </entity> - <entity name="defaultMerchantId" type="merchant_id"> - <data key="value"/> - </entity> - <entity name="defaultPublicKey" type="public_key"> - <data key="value"/> - </entity> - <entity name="defaultPrivateKey" type="private_key"> - <data key="value"/> - </entity> -</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/paypalData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/paypalData.xml deleted file mode 100644 index 3f1190a408ac0..0000000000000 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Data/paypalData.xml +++ /dev/null @@ -1,61 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - /** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ ---> - -<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> - <entity name="samplePaypalConfig" type="paypal_config_state"> - <required-entity type="business_account">sampleBusinessAccount</required-entity> - <required-entity type="api_username">sampleApiUsername</required-entity> - <required-entity type="api_password">sampleApiPassword</required-entity> - <required-entity type="api_signature">sampleApiSignature</required-entity> - <required-entity type="api_authentication">sampleApiAuthentication</required-entity> - <required-entity type="sandbox_flag">sampleSandboxFlag</required-entity> - <required-entity type="use_proxy">sampleUseProxy</required-entity> - </entity> - <entity name="sampleBusinessAccount" type="business_account"> - <data key="value">myBusinessAccount@magento.com</data> - </entity> - <entity name="sampleApiUsername" type="api_username"> - <data key="value">myApiUsername.magento.com</data> - </entity> - <entity name="sampleApiPassword" type="api_password"> - <data key="value">somePassword</data> - </entity> - <entity name="sampleApiSignature" type="api_signature"> - <data key="value">someApiSignature</data> - </entity> - <entity name="sampleApiAuthentication" type="api_authentication"> - <data key="value">0</data> - </entity> - <entity name="sampleSandboxFlag" type="sandbox_flag"> - <data key="value">0</data> - </entity> - <entity name="sampleUseProxy" type="use_proxy"> - <data key="value">0</data> - </entity> - - <!-- default configuration used to restore Magento config --> - <entity name="defaultPayPalConfig" type="paypal_config_state"> - <required-entity type="business_account">defaultBusinessAccount</required-entity> - <required-entity type="api_username">defaultApiUsername</required-entity> - <required-entity type="api_password">defaultApiPassword</required-entity> - <required-entity type="api_signature">defaultApiSignature</required-entity> - </entity> - <entity name="defaultBusinessAccount" type="business_account"> - <data key="value"/> - </entity> - <entity name="defaultApiUsername" type="api_username"> - <data key="value"/> - </entity> - <entity name="defaultApiPassword" type="api_password"> - <data key="value"/> - </entity> - <entity name="defaultApiSignature" type="api_signature"> - <data key="value"/> - </entity> -</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/Data/PaypalData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/Data/PaypalData.xml new file mode 100644 index 0000000000000..6d2fed324c7c8 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/Data/PaypalData.xml @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="SamplePaypalConfig" type="paypal_config_state"> + <required-entity type="business_account">SampleBusinessAccount</required-entity> + <required-entity type="api_username">SampleApiUsername</required-entity> + <required-entity type="api_password">SampleApiPassword</required-entity> + <required-entity type="api_signature">SampleApiSignature</required-entity> + <required-entity type="api_authentication">SampleApiAuthentication</required-entity> + <required-entity type="sandbox_flag">SampleSandboxFlag</required-entity> + <required-entity type="use_proxy">SampleUseProxy</required-entity> + </entity> + <entity name="SampleBusinessAccount" type="business_account"> + <data key="value">myBusinessAccount@magento.com</data> + </entity> + <entity name="SampleApiUsername" type="api_username"> + <data key="value">myApiUsername.magento.com</data> + </entity> + <entity name="SampleApiPassword" type="api_password"> + <data key="value">somePassword</data> + </entity> + <entity name="SampleApiSignature" type="api_signature"> + <data key="value">someApiSignature</data> + </entity> + <entity name="SampleApiAuthentication" type="api_authentication"> + <data key="value">0</data> + </entity> + <entity name="SampleSandboxFlag" type="sandbox_flag"> + <data key="value">0</data> + </entity> + <entity name="SampleUseProxy" type="use_proxy"> + <data key="value">0</data> + </entity> + + <!-- default configuration used to restore Magento config --> + <entity name="DefaultPayPalConfig" type="paypal_config_state"> + <required-entity type="business_account">DefaultBusinessAccount</required-entity> + <required-entity type="api_username">DefaultApiUsername</required-entity> + <required-entity type="api_password">DefaultApiPassword</required-entity> + <required-entity type="api_signature">DefaultApiSignature</required-entity> + </entity> + <entity name="DefaultBusinessAccount" type="business_account"> + <data key="value"/> + </entity> + <entity name="DefaultApiUsername" type="api_username"> + <data key="value"/> + </entity> + <entity name="DefaultApiPassword" type="api_password"> + <data key="value"/> + </entity> + <entity name="DefaultApiSignature" type="api_signature"> + <data key="value"/> + </entity> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/paypal_config-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/Metadata/paypal_config-meta.xml similarity index 98% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/paypal_config-meta.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/Metadata/paypal_config-meta.xml index 2e58876103d62..043287868cf35 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/Metadata/paypal_config-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/Metadata/paypal_config-meta.xml @@ -7,7 +7,7 @@ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> - <operation name="createPaypalConfigState" dataType="paypal_config_state" type="create" auth="adminFormKey" url="/admin/system_config/save/section/payment/" method="POST"> + <operation name="CreatePaypalConfigState" dataType="paypal_config_state" type="create" auth="adminFormKey" url="/admin/system_config/save/section/payment/" method="POST"> <object key="groups" dataType="paypal_config_state"> <object key="paypal_alternative_payment_methods" dataType="paypal_config_state"> <object key="groups" dataType="paypal_config_state"> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml index 8ee7a705eb512..bdbca5862a2b5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml @@ -20,4 +20,4 @@ <!--see mergeKey="test" userInput="$$saleRule.store_labels[0][store_id]$$" selector="test"/--> </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml index 51d07d501e374..60b1f945e6b4a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml @@ -10,12 +10,12 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> <cest name="SetPaymentConfigurationCest"> <test name="SetPaypalConfigurationTest"> - <createData entity="samplePaypalConfig" mergeKey="createSamplePaypalConfig"/> - <createData entity="defaultPaypalConfig" mergeKey="restoreDefaultPaypalConfig"/> + <createData entity="SamplePaypalConfig" mergeKey="createSamplePaypalConfig"/> + <createData entity="DefaultPayPalConfig" mergeKey="restoreDefaultPaypalConfig"/> </test> <test name="SetBraintreeConfigurationTest"> - <createData entity="sampleBraintreeConfig" mergeKey="createSampleBraintreeConfig"/> - <createData entity="defaultBraintreeConfig" mergeKey="restoreDefaultBraintreeConfig"/> + <createData entity="SampleBraintreeConfig" mergeKey="createSampleBraintreeConfig"/> + <createData entity="DefaultBraintreeConfig" mergeKey="restoreDefaultBraintreeConfig"/> </test> </cest> </config> From 8c09efddad1a77dfc0a27a92e13b06198e113175 Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Mon, 27 Nov 2017 13:26:44 +0200 Subject: [PATCH 342/653] MQE-523: Create mainline PRs for previous sprint (12) - Update file name to follow uppercase name convention --- .../SalesRule/Data/{salesRuleData.xml => SalesRuleData.xml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/{salesRuleData.xml => SalesRuleData.xml} (100%) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/salesRuleData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/SalesRuleData.xml similarity index 100% rename from dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/salesRuleData.xml rename to dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/SalesRuleData.xml From 9192d61851e32ef96e3d6a26727e6d3a42124ac6 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Thu, 9 Nov 2017 21:20:01 +0200 Subject: [PATCH 343/653] MQE-235: updated sample cest and data with a set of codeception assert functions. --- .../SampleTests/Cest/SampleCest.xml | 64 +++++++++++++++++++ .../SampleTests/Data/SampleData.xml | 5 ++ 2 files changed, 69 insertions(+) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml index e3ff7be39cbf7..f00c27f7d19e4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml @@ -18,10 +18,12 @@ <before> <amOnUrl url="http://127.0.0.1:32772/admin/" mergeKey="amOnPage"/> <createData entity="CustomerEntity1" mergeKey="createData1"/> + <createData entity="AssertThis" mergeKey="createData2"/> </before> <after> <amOnUrl url="http://127.0.0.1:32772/admin/admin/auth/logout" mergeKey="amOnPage"/> <deleteData createDataKey="createData1" mergeKey="deleteData1"/> + <deleteData createDataKey="createData2" mergeKey="deleteData2"/> </after> <test name="AllCodeceptionMethodsTest"> <annotations> @@ -170,6 +172,51 @@ <waitForJS function="return $.active == 0;" time="30" mergeKey="waitForJS"/> <waitForText userInput="foo" time="30" mergeKey="waitForText1"/> <waitForText userInput="foo" selector=".title" time="30" mergeKey="waitForText2"/> + <!-- Codeception Assert --> + <assertArrayHasKey mergeKey="assertArrayHasKey" expected="apple" actualArray="[['orange' => 2], ['apple' => 1]" message="pass"/> + <assertArrayNotHasKey mergeKey="assertArrayNotHasKey" expected="kiwi" actualArray="[['orange' => 2], ['apple' => 1]" message="pass"/> + <assertArraySubset mergeKey="assertArraySubset" expectedArray="[1, 2]" actualArray="[5, 3, 2, 1]" message="pass"/> + <assertContains mergeKey="assertContains" expected="ab" actualArray="[['item1' => 'a'], ['item2' => 'ab']" message="pass"/> + <assertCount mergeKey="assertCount" expected="2" actualArray="['a', 'b']" message="pass"/> + <assertEmpty mergeKey="assertEmpty1" actual="''" message="pass"/> + <assertEmpty mergeKey="assertEmpty2" actual="[]" message="pass"/> + <assertEmpty mergeKey="assertEmpty3" actualVariable="value1" message="pass"/> + <assertEquals mergeKey="assertEquals1" expected="abc" actual="abc" message="pass"/> + <assertEquals mergeKey="assertEquals2" expected="2" actualVariable="value1" message="pass"/> + <assertFalse mergeKey="assertFalse" actualVariable="value1" message="pass"/> + <assertFileExists mergeKey="assertFileExists1" actual="/out.txt" message="pass"/> + <assertFileExists mergeKey="assertFileExists2" actualVariable="value1" message="pass"/> + <assertFileNotExists mergeKey="assertFileNotExists1" actual="/out.txt" message="pass"/> + <assertFileNotExists mergeKey="assertFileNotExists2" actual="file" message="pass"/> + <assertGreaterOrEquals mergeKey="assertGreaterOrEquals" expected="5" actual="2" message="pass"/> + <assertGreaterThan mergeKey="assertGreaterThan" expected="5" actual="2" message="pass"/> + <assertGreaterThanOrEqual mergeKey="assertGreaterThanOrEqual" expected="5" actual="2" message="pass"/> + <assertInstanceOf mergeKey="assertInstanceOf" class="User::class" actualVariable="value1" message="pass"/> + <assertInternalType mergeKey="assertInternalType1" expected="string" actual="xyz" message="pass"/> + <assertInternalType mergeKey="assertInternalType2" type="string" actual="xyz" message="pass"/> + <assertInternalType mergeKey="assertInternalType3" type="string" actualVariable="value1" message="pass"/> + <assertIsEmpty mergeKey="assertIsEmpty" actualVariable="value1" message="pass"/> + <assertLessOrEquals mergeKey="assertLessOrEquals" expected="2" actual="5" message="pass"/> + <assertLessThan mergeKey="assertLessThan" expected="2" actual="5" message="pass"/> + <assertLessThanOrEqual mergeKey="assertLessThanOrEqual" expected="2" actual="5" message="pass"/> + <assertNotContains mergeKey="assertNotContains1" expected="bc" actualArray="[['item1' => 'a'], ['item2' => 'ab']" message="pass"/> + <assertNotContains mergeKey="assertNotContains2" expected="bc" actualVariable="value1" message="pass"/> + <assertNotEmpty mergeKey="assertNotEmpty1" actual="[1, 2]" message="pass"/> + <assertNotEmpty mergeKey="assertNotEmpty2" actualVariable="value1" message="pass"/> + <assertNotEquals mergeKey="assertNotEquals" expected="2" actual="5" message="pass" delta=""/> + <assertNotInstanceOf mergeKey="assertNotInstanceOf" expected="RuntimeException::class" actual="21" message="pass"/> + <assertNotNull mergeKey="assertNotNull1" actual="abc" message="pass"/> + <assertNotNull mergeKey="assertNotNull2" actualVariable="value1" message="pass"/> + <assertNotRegExp mergeKey="assertNotRegExp" expected="/foo/" actual="bar" message="pass"/> + <assertNotSame mergeKey="assertNotSame" expected="log" actual="tag" message="pass"/> + <assertNull mergeKey="assertNull" actualVariable="value1" message="pass"/> + <assertRegExp mergeKey="assertRegExp" expected="/foo/" actual="foo" message="pass"/> + <assertSame mergeKey="assertSame" expected="bar" actual="bar" message="pass"/> + <assertStringStartsNotWith mergeKey="assertStringStartsNotWith" expected="a" actual="banana" message="pass"/> + <assertStringStartsWith mergeKey="assertStringStartsWith" expected="a" actual="apple" message="pass"/> + <assertTrue mergeKey="assertTrue" actual="true" message="pass"/> + <expectException mergeKey="expectException" class="new MyException('exception msg')" function="function() {$this->doSomethingBad();}"/> + <fail mergeKey="fail" message="fail"/> </test> <test name="AllCustomMethodsTest"> <annotations> @@ -258,6 +305,7 @@ </annotations> <createData entity="CustomerEntity1" mergeKey="testScopeData"/> + <createData entity="AssertThis" mergeKey="testScopeData2"/> <!-- parameterized url that uses literal params --> <amOnPage url="{{SamplePage.url('success','success2')}}" mergeKey="a0"/> @@ -286,6 +334,22 @@ <!-- userInput that uses created data --> <fillField selector="#sample" userInput="Hello $testScopeData.firstname$ $testScopeData.lastname$" mergeKey="f1"/> <fillField selector="#sample" userInput="Hello $$createData1.firstname$$ $$createData1.lastname$$" mergeKey="f2"/> + + <!-- expected, actual that use created data --> + <assertStringStartsNotWith mergeKey="assert1" expected="D" actual="$$createData2.lastname$$, $$createData2.firstname$$" message="fail"/> + <assertStringStartsWith mergeKey="assert2" expected="W" actual="$testScopeData2.firstname$ $testScopeData2.lastname$" message="pass"/> + <assertEquals mergeKey="assert5" expected="$$createData1.lastname$$" actual="$$createData1.lastname$$" message="pass"/> + <assertFileExists mergeKey="assert6" actual="../Data/SampleData.xml" message="pass"/> + + <!-- expectedArray, actualArray that use created data --> + <assertArraySubset mergeKey="assert9" expectedArray="[$$createData2.lastname$$, $$createData2.firstname$$]" actualArray="[$$createData2.lastname$$, $$createData2.firstname$$, 1]" message="pass"/> + <assertArraySubset mergeKey="assert10" expectedArray="[$testScopeData2.firstname$, $testScopeData2.lastname$]" actualArray="[$testScopeData2.firstname$, $testScopeData2.lastname$, 1]" message="pass"/> + <assertArrayHasKey mergeKey="assert3" expected="lastname" actualArray="[['lastname' => $$createData1.lastname$$], ['firstname' => $$createData1.firstname$$]" message="pass"/> + <assertArrayHasKey mergeKey="assert4" expected="lastname" actualArray="[['lastname' => $testScopeData.lastname$], ['firstname' => $testScopeData.firstname$]" message="pass"/> + + <!-- message that uses created data --> + <fail mergeKey="assert7" message="$testScopeData.firstname$ $testScopeData.lastname$"/> + <fail mergeKey="assert8" message="$$createData1.firstname$$ $$createData1.lastname$$"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Data/SampleData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Data/SampleData.xml index 9e431fec66eca..222d81d1df1a1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Data/SampleData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Data/SampleData.xml @@ -24,4 +24,9 @@ <data key="section">appearance</data> <data key="fieldName">min_height</data> </entity> + <entity name="AssertThis" type="samplePerson"> + <data key="firstname">Well</data> + <data key="lastname">Done</data> + <data key="email" unique="prefix">.email@gmail.com</data> + </entity> </config> From af626ce0923e9ca18acc10bc199d7602e14b60f9 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Thu, 26 Oct 2017 17:20:27 +0300 Subject: [PATCH 344/653] MQE-472: resolved array data input in MFTF; updated configurable test. --- .../Catalog/Data/ProductData.xml | 4 +- .../Catalog/Metadata/category-meta.xml | 2 - .../Catalog/Metadata/product-meta.xml | 59 +++++++++++++++++-- .../Metadata/product_attribute-meta.xml | 6 +- .../product_attribute_option-meta.xml | 6 +- .../Metadata/product_attribute_set-meta.xml | 10 +++- .../product_link_extension_attribute-meta.xml | 4 +- .../Checkout/Metadata/coupon-meta.xml | 7 +-- .../Data/ConfigurableProductData.xml | 2 +- .../configurable_product_add_child-meta.xml | 1 - .../configurable_product_options-meta.xml | 1 - .../Customer/Metadata/customer-meta.xml | 1 - .../Metadata/TemplateMetaFile.xml | 4 +- .../CreateConfigurableProductByApiCest.xml | 12 +++- .../Cest/UpdateSimpleProductByApiCest.xml | 7 +-- 15 files changed, 86 insertions(+), 40 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml index ea57af75d6379..827589493d841 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Data/ProductData.xml @@ -31,12 +31,11 @@ <data key="status">1</data> <required-entity type="product_extension_attribute">EavStockItem</required-entity> <required-entity type="custom_attribute_array">CustomAttributeCategoryIds</required-entity> - <!--required-entity type="custom_attribute">CustomAttributeProductUrlKey</required-entity--> </entity> <entity name="NewSimpleProduct" type="product"> <data key="price">321.00</data> </entity> - <entity name="SimpleOne" type="product"> + <entity name="SimpleOne" type="product2"> <data key="sku" unique="suffix">SimpleOne</data> <data key="type_id">simple</data> <data key="attribute_set_id">4</data> @@ -45,7 +44,6 @@ <data key="visibility">4</data> <data key="status">1</data> <required-entity type="product_extension_attribute">EavStockItem</required-entity> - <!--required-entity type="custom_attribute_array">CustomAttributeCategoryIds</required-entity--> <required-entity type="custom_attribute">CustomAttributeProductAttribute</required-entity> </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml index e88c454d6946c..d22c2bc1f7738 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/category-meta.xml @@ -32,7 +32,6 @@ <operation name="UpdateCategory" dataType="category" type="update" auth="adminOauth" url="/V1/categories/{id}" method="PUT"> <contentType>application/json</contentType> - <param key="id" type="path">{id}</param> <object key="category" dataType="category"> <field key="id">integer</field> <field key="parent_id">integer</field> @@ -57,6 +56,5 @@ <operation name="DeleteCategory" dataType="category" type="delete" auth="adminOauth" url="/V1/categories/{id}" method="DELETE"> <contentType>application/json</contentType> - <param key="id" type="path">{id}</param> </operation> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml index 6103c6cc3f47c..2a478c3ee51bc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product-meta.xml @@ -27,7 +27,6 @@ </array> <array key="custom_attributes"> <value>custom_attribute_array</value> - <value>custom_attribute</value> </array> <array key="options"> <value>product_option</value> @@ -36,7 +35,6 @@ </operation> <operation name="UpdateProduct" dataType="product" type="update" auth="adminOauth" url="/V1/products/{sku}" method="PUT"> <contentType>application/json</contentType> - <param key="sku" type="path">{sku}</param> <object dataType="product" key="product"> <field key="id">integer</field> <field key="sku">string</field> @@ -55,7 +53,6 @@ </array> <array key="custom_attributes"> <value>custom_attribute_array</value> - <value>custom_attribute</value> </array> <array key="options"> <value>product_option</value> @@ -65,6 +62,60 @@ </operation> <operation name="deleteProduct" dataType="product" type="delete" auth="adminOauth" url="/V1/products/{sku}" method="DELETE"> <contentType>application/json</contentType> - <param key="sku" type="path">{sku}</param> + </operation> + <operation name="CreateProduct2" dataType="product2" type="create" auth="adminOauth" url="/V1/products" method="POST"> + <contentType>application/json</contentType> + <object dataType="product2" key="product"> + <field key="sku">string</field> + <field key="name">string</field> + <field key="attribute_set_id">integer</field> + <field key="price">integer</field> + <field key="status">integer</field> + <field key="visibility">integer</field> + <field key="type_id">string</field> + <field key="created_at">string</field> + <field key="updated_at">string</field> + <field key="weight">integer</field> + <field key="extension_attributes">product_extension_attribute</field> + <array key="product_links"> + <value>product_link</value> + </array> + <array key="custom_attributes"> + <value>custom_attribute</value> + </array> + <array key="options"> + <value>product_option</value> + </array> + </object> + </operation> + <operation name="UpdateProduct2" dataType="product2" type="update" auth="adminOauth" url="/V1/products/{sku}" method="PUT"> + <contentType>application/json</contentType> + <object dataType="product2" key="product"> + <field key="id">integer</field> + <field key="sku">string</field> + <field key="name">string</field> + <field key="attribute_set_id">integer</field> + <field key="price">integer</field> + <field key="status">integer</field> + <field key="visibility">integer</field> + <field key="type_id">string</field> + <field key="created_at">string</field> + <field key="updated_at">string</field> + <field key="weight">integer</field> + <field key="extension_attributes">product_extension_attribute</field> + <array key="product_links"> + <value>product_link</value> + </array> + <array key="custom_attributes"> + <value>custom_attribute</value> + </array> + <array key="options"> + <value>product_option</value> + </array> + </object> + <field key="saveOptions">boolean</field> + </operation> + <operation name="deleteProduct2" dataType="product2" type="delete" auth="adminOauth" url="/V1/products/{sku}" method="DELETE"> + <contentType>application/json</contentType> </operation> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute-meta.xml index a517d6cd80a29..3a2bfb76d067c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute-meta.xml @@ -58,9 +58,8 @@ </array> </object> </operation> - <operation name="UpdateProductAttribute" dataType="ProductAttribute" type="update" auth="adminOauth" url="/V1/products/attributes/{attributeCode}" method="PUT"> + <operation name="UpdateProductAttribute" dataType="ProductAttribute" type="update" auth="adminOauth" url="/V1/products/attributes/{attribute_code}" method="PUT"> <contentType>application/json</contentType> - <param key="attributeCode" type="path">{attributeCode}</param> <object dataType="ProductAttribute" key="attribute"> <field key="attribute_code">string</field> <field key="attribute_id">string</field> @@ -110,8 +109,7 @@ </array> </object> </operation> - <operation name="DeleteProductAttribute" dataType="ProductAttribute" type="delete" auth="adminOauth" url="/V1/products/attributes/{attributeCode}" method="DELETE"> + <operation name="DeleteProductAttribute" dataType="ProductAttribute" type="delete" auth="adminOauth" url="/V1/products/attributes/{attribute_code}" method="DELETE"> <contentType>application/json</contentType> - <param key="attributeCode" type="path">{attributeCode}</param> </operation> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_option-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_option-meta.xml index bb5a37229fd35..81fbc4d313e79 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_option-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_option-meta.xml @@ -10,7 +10,6 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateProductAttributeOption" dataType="ProductAttributeOption" type="create" auth="adminOauth" url="/V1/products/attributes/{attribute_code}/options" method="POST"> <contentType>application/json</contentType> - <param key="attribute_code" type="path">{attribute_code}</param> <object dataType="ProductAttributeOption" key="option"> <field key="label">string</field> <field key="value">string</field> @@ -21,13 +20,10 @@ </array> </object> </operation> - <operation name="DeleteProductAttributeOption" dataType="ProductAttributeOption" type="delete" auth="adminOauth" url="/V1/products/attributes/{attribute_code}/options/{optionId}" method="DELETE"> + <operation name="DeleteProductAttributeOption" dataType="ProductAttributeOption" type="delete" auth="adminOauth" url="/V1/products/attributes/{attribute_code}/options/{option_id}" method="DELETE"> <contentType>application/json</contentType> - <param key="attribute_code" type="path">{attribute_code}</param> - <param key="optionId" type="path">{optionId}</param> </operation> <operation name="GetProductAttributeOption" dataType="ProductAttributeOption" type="get" auth="adminOauth" url="/V1/products/attributes/{attribute_code}/options/" method="GET"> <contentType>application/json</contentType> - <param key="attribute_code" type="path">{attribute_code}</param> </operation> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_set-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_set-meta.xml index c15fb764a7f2c..dde27a54a4a3e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_set-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_attribute_set-meta.xml @@ -15,9 +15,13 @@ <field key="attributeCode">string</field> <field key="sortOrder">integer</field> </operation> - <operation name="DeleteProductAttributeFromAttributeSet" dataType="ProductAttributeSet" type="delete" auth="adminOauth" url="/V1/products/attribute-sets/{attributeSetId}/attributes/{attributeCode}" method="DELETE"> + <operation name="DeleteProductAttributeFromAttributeSet" dataType="ProductAttributeSet" type="delete" auth="adminOauth" url="/V1/products/attribute-sets/{attribute_set_id}/attributes/{attribute_code}" method="DELETE"> + <contentType>application/json</contentType> + </operation> + <operation name="GetProductAttributesFromDefaultSet" dataType="ProductAttributesFromDefaultSet" type="get" auth="adminOauth" url="/V1/products/attribute-sets/4/attributes" method="GET"> + <contentType>application/json</contentType> + </operation> + <operation name="GetDefaultProductAttributeSetInfo" dataType="DefaultProductAttributeSetInfo" type="get" auth="adminOauth" url="/V1/products/attribute-sets/4" method="GET"> <contentType>application/json</contentType> - <param key="attributeSetId" type="path">{attributeSetId}</param> - <param key="attributeCode" type="path">{attributeCode}</param> </operation> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml index eaeedafe042ee..b0b1c840afdaf 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Metadata/product_link_extension_attribute-meta.xml @@ -9,11 +9,11 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateProductLinkExtensionAttribute" dataType="product_link_extension_attribute" type="create"> - <header param="Content-Type">application/json</header> + <contentType>application/json</contentType> <field key="qty">integer</field> </operation> <operation name="UpdateProductLinkExtensionAttribute" dataType="product_link_extension_attribute" type="update"> - <header param="Content-Type">application/json</header> + <contentType>application/json</contentType> <field key="qty">integer</field> </operation> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml index 5e2eeee9cce26..58a2204de7e83 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Metadata/coupon-meta.xml @@ -10,7 +10,7 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateCoupon" dataType="coupon" type="create" auth="adminOauth" url="/rest/V1/coupons" method="POST"> - <header param="Content-Type">application/json</header> + <contentType>application/json</contentType> <object key="coupon" dataType="coupon"> <field key="rule_id" required="true">integer</field> <field key="times_used" required="true">integer</field> @@ -25,8 +25,7 @@ </object> </operation> - <operation name="DeleteCoupon" dataType="coupon" type="delete" auth="adminOauth" url="/rest/V1/coupons/{couponId}" method="DELETE"> - <header param="Content-Type">application/json</header> - <param key="couponId" type="path">{couponId}</param> + <operation name="DeleteCoupon" dataType="coupon" type="delete" auth="adminOauth" url="/rest/V1/coupons/{coupon_id}" method="DELETE"> + <contentType>application/json</contentType> </operation> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml index c00794af79c7c..ce15d793ac5a3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Data/ConfigurableProductData.xml @@ -23,6 +23,6 @@ </entity> <entity name="ConfigurableProductAddChild" type="ConfigurableProductAddChild"> <var key="sku" entityKey="sku" entityType="product" /> - <var key="childSku" entityKey="sku" entityType="product"/> + <var key="childSku" entityKey="sku" entityType="product2"/> </entity> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_add_child-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_add_child-meta.xml index 625cb160c58a8..a438c92753a59 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_add_child-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_add_child-meta.xml @@ -10,7 +10,6 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="ConfigurableProductAddChild" dataType="ConfigurableProductAddChild" type="create" auth="adminOauth" url="/V1/configurable-products/{sku}/child" method="POST"> <contentType>application/json</contentType> - <param key="sku" type="path">{sku}</param> <field key="childSku">string</field> </operation> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_options-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_options-meta.xml index e3c10d88f53ab..4792eafaf061b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_options-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Metadata/configurable_product_options-meta.xml @@ -10,7 +10,6 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="CreateConfigurableProductOption" dataType="ConfigurableProductOption" type="create" auth="adminOauth" url="/V1/configurable-products/{sku}/options" method="POST"> <contentType>application/json</contentType> - <param key="sku" type="path">{sku}</param> <object dataType="ConfigurableProductOption" key="option"> <field key="attribute_id">integer</field> <field key="label">string</field> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml index a8ef5dcce9b96..908b5daa9cc61 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Metadata/customer-meta.xml @@ -43,6 +43,5 @@ </operation> <operation name="DeleteCustomer" dataType="customer" type="delete" auth="adminOauth" url="/V1/customers/{id}" method="DELETE"> <contentType>application/json</contentType> - <param key="id" type="path">{id}</param> </operation> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Metadata/TemplateMetaFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Metadata/TemplateMetaFile.xml index 3610dc9793514..89c9c1b3208b6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Metadata/TemplateMetaFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Metadata/TemplateMetaFile.xml @@ -9,8 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataOperation.xsd"> <operation name="" dataType="" type="" auth="adminOauth" url="" method=""> - <header param="">application/json</header> - <param key="" type="">{}</param> + <contentType>application/json</contentType> + <param key=""></param> <object dataType="" key=""> <field key=""></field> <array key=""> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml index f90270ae7188f..690b008fe2952 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml @@ -58,12 +58,18 @@ <required-entity createDataKey="childProductHandle1"/> <required-entity createDataKey="baseConfigProductHandle"/> </createData> - <!--Uncomment this when MQE-472 is fixed--> - <!--createData mergeKey="configProductHandle2" entity="ConfigurableProductAddChild"> + <createData mergeKey="configProductHandle2" entity="ConfigurableProductAddChild"> <required-entity createDataKey="childProductHandle2"/> <required-entity createDataKey="baseConfigProductHandle"/> - </createData--> + </createData> </before> + <after> + <deleteData mergeKey="d2" createDataKey="childProductHandle1"/> + <deleteData mergeKey="d3" createDataKey="childProductHandle2"/> + <deleteData mergeKey="d7" createDataKey="baseConfigProductHandle"/> + <deleteData mergeKey="d8" createDataKey="categoryHandle"/> + <deleteData mergeKey="d6" createDataKey="productAttributeHandle"/> + </after> <test name="CreateConfigurableProductByApiTest"> </test> </cest> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml index aaf5439b3b59c..7d80719a227ef 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml @@ -19,11 +19,10 @@ </annotations> <before> <createData mergeKey="categoryHandle" entity="SimpleSubCategory"/> - <createData mergeKey="originalProductHandle" entity="SimpleProduct" > + <createData mergeKey="productHandle" entity="SimpleProduct" > <required-entity createDataKey="categoryHandle"/> </createData> - <updateData mergeKey="productHandle" entity="NewSimpleProduct" createDataKey="originalProductHandle"> - </updateData> + <updateData mergeKey="updateProduct" entity="NewSimpleProduct" createDataKey="productHandle"/> </before> <after> <deleteData mergeKey="delete" createDataKey="productHandle"/> @@ -31,4 +30,4 @@ <test name="UpdateSimpleProductByApiTest"> </test> </cest> -</config> +</config> \ No newline at end of file From 22b3f7ade06a4dc86b777d8ca9f014f07a0d277c Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Wed, 15 Nov 2017 18:09:20 +0200 Subject: [PATCH 345/653] MQE-282: Stable MFTF Tests build plan for teams - Skip AdminCreateCmsPageCest:CreateNewPage (failing on Jenkins) - Add firefox env to all tests - Remove any other env from all tests --- .../Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml | 3 --- .../FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml | 3 +-- .../Catalog/Cest/AdminCreateSimpleProductCest.xml | 3 +-- .../Checkout/Cest/StorefrontCustomerCheckoutCest.xml | 3 +-- .../Checkout/Cest/StorefrontGuestCheckoutCest.xml | 3 +-- .../FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml | 4 ++-- .../Cest/AdminCreateConfigurableProductCest.xml | 2 +- .../FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml | 3 +-- .../Customer/Cest/StorefrontCreateCustomerCest.xml | 4 +--- .../Customer/Cest/StorefrontPersistedCustomerLoginCest.xml | 3 --- .../FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml | 3 +-- .../FunctionalTest/SampleTests/Cest/MinimumTestCest.xml | 3 --- .../SampleTests/Cest/UpdateSimpleProductByApiCest.xml | 5 +---- .../FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml | 2 -- .../Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml | 2 -- 15 files changed, 11 insertions(+), 35 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml index a50d75c167c9c..2689f07d9f412 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml @@ -21,10 +21,7 @@ <testCaseId value="MAGETWO-71572"/> <group value="example"/> <group value="login"/> - <env value="chrome"/> <env value="firefox"/> - <env value="phantomjs"/> - <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="amOnAdminLoginPage"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml index 550e668b0808f..1441a686ed36f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml @@ -23,8 +23,7 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72102"/> <group value="category"/> - <env value="chrome"/> - <env value="headless"/> + <env value="firefox"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="amOnAdminLoginPage"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml index f649580554eaa..5e55b86263e6b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml @@ -23,8 +23,7 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-23414"/> <group value="product"/> - <env value="chrome"/> - <env value="headless"/> + <env value="firefox"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml index 5e97a6ab03b1b..f8ab2c472f7bf 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml @@ -32,8 +32,7 @@ <severity value="CRITICAL"/> <testCaseId value="#"/> <group value="checkout"/> - <env value="chrome"/> - <env value="headless"/> + <env value="firefox"/> </annotations> <amOnPage mergeKey="s1" url="customer/account/login/"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml index fa441fd673784..31a0546dd3503 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml @@ -30,8 +30,7 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72094"/> <group value="checkout"/> - <env value="chrome"/> - <env value="headless"/> + <env value="firefox"/> </annotations> <amOnPage url="{{StorefrontCategoryPage.url($$createCategory.name$$)}}" mergeKey="onCategoryPage"/> <waitForPageLoad mergeKey="waitForPageLoad1"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml index 9e1525c3670f6..328a8cd84d0da 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml @@ -23,9 +23,8 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-25580"/> <group value="cms"/> - <env value="chrome"/> + <group value="skip"/> <env value="firefox"/> - <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> @@ -37,6 +36,7 @@ <fillField selector="{{CmsNewPagePageBasicFieldsSection.pageTitle}}" userInput="{{_defaultCmsPage.title}}" mergeKey="fillFieldTitle"/> <click selector="{{CmsNewPagePageContentSection.header}}" mergeKey="clickExpandContent"/> <fillField selector="{{CmsNewPagePageContentSection.contentHeading}}" userInput="{{_defaultCmsPage.content_heading}}" mergeKey="fillFieldContentHeading"/> + <!-- As of 2017/11/15, this test is failing to find the selector below (Jenkins only, works locally). See MQE-282. --> <fillField selector="{{CmsNewPagePageContentSection.content}}" userInput="{{_defaultCmsPage.content}}" mergeKey="fillFieldContent"/> <click selector="{{CmsNewPagePageSeoSection.header}}" mergeKey="clickExpandSearchEngineOptimisation"/> <fillField selector="{{CmsNewPagePageSeoSection.urlKey}}" userInput="{{_defaultCmsPage.identifier}}" mergeKey="fillFieldUrlKey"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml index fbcc2581b4089..291ff8b45f55b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml @@ -27,7 +27,7 @@ <testCaseId value="MAGETWO-26041"/> <group value="configurable"/> <group value="product"/> - <env value="chrome"/> + <env value="firefox"/> </annotations> <amOnPage url="{{AdminCategoryPage.url}}" mergeKey="amOnCategoryGridPage"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml index b577bca92e34f..94ce61a1f7f51 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml @@ -21,8 +21,7 @@ <testCaseId value="MAGETWO-72095"/> <group value="customer"/> <group value="create"/> - <env value="chrome"/> - <env value="headless"/> + <env value="firefox"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml index 37fe0017b8685..d8435ff1b84a1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml @@ -21,9 +21,7 @@ <testCaseId value="MAGETWO-23546"/> <group value="customer"/> <group value="create"/> - <env value="chrome"/> <env value="firefox"/> - <env value="headless"/> </annotations> <amOnPage mergeKey="amOnStorefrontPage" url="/"/> <click mergeKey="clickOnCreateAccountLink" selector="{{StorefrontPanelHeaderSection.createAnAccountLink}}"/> @@ -39,4 +37,4 @@ <see mergeKey="seeEmail" userInput="{{CustomerEntityOne.email}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml index 2e039b51bf107..8c1398851b4b8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml @@ -26,10 +26,7 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72103"/> <group value="customer"/> - <env value="chrome"/> <env value="firefox"/> - <env value="phantomjs"/> - <env value="headless"/> </annotations> <amOnPage mergeKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage.url}}"/> <fillField mergeKey="fillEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml index c043fe298f767..606ba4c378419 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml @@ -27,8 +27,7 @@ <severity value="NORMAL"/> <testCaseId value="MAGETWO-72096"/> <group value="sales"/> - <env value="chrome"/> - <env value="headless"/> + <env value="firefox"/> </annotations> <!-- todo: Create an order via the api instead of driving the browser --> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml index b1cfc787acbb7..07da32b7e68f3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml @@ -21,10 +21,7 @@ <title value="Minimum Test"/> <description value="Minimum Test"/> <group value="example"/> - <env value="chrome"/> <env value="firefox"/> - <env value="phantomjs"/> - <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml index 7d80719a227ef..0aa79f7415084 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml @@ -12,10 +12,7 @@ <features value="Update simple product by api test."/> <stories value="Update simple product by api test."/> <group value="example"/> - <env value="chrome"/> <env value="firefox"/> - <env value="phantomjs"/> - <env value="headless"/> </annotations> <before> <createData mergeKey="categoryHandle" entity="SimpleSubCategory"/> @@ -30,4 +27,4 @@ <test name="UpdateSimpleProductByApiTest"> </test> </cest> -</config> \ No newline at end of file +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml index 53692f3f41de6..b933f7a7adab3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml @@ -11,9 +11,7 @@ <annotations> <features value="Create a store group in admin"/> <stories value="Create a store group in admin"/> - <env value="chrome"/> <env value="firefox"/> - <env value="phantomjs"/> <group value="store"/> </annotations> <before> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml index b1f452ac565be..9ff95363e6f26 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml @@ -11,9 +11,7 @@ <annotations> <features value="Delete a persist wishlist for a customer"/> <stories value="Delete a persist wishlist for a customer"/> - <env value="chrome"/> <env value="firefox"/> - <env value="phantomjs"/> <group value="wishlist"/> </annotations> <before> From 21687d5e138432fd90147405e071f478e9359354 Mon Sep 17 00:00:00 2001 From: Tom Reece <treece@magento.com> Date: Wed, 15 Nov 2017 21:09:27 +0200 Subject: [PATCH 346/653] MQE-282: Stable MFTF Tests build plan for teams - Revert all @env changes This reverts commit 147214469fa8867d5154f755e1bff36e808206bb. --- .../Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml | 3 +++ .../FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml | 3 ++- .../Catalog/Cest/AdminCreateSimpleProductCest.xml | 3 ++- .../Checkout/Cest/StorefrontCustomerCheckoutCest.xml | 3 ++- .../Checkout/Cest/StorefrontGuestCheckoutCest.xml | 3 ++- .../FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml | 4 +++- .../Cest/AdminCreateConfigurableProductCest.xml | 2 +- .../FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml | 3 ++- .../Customer/Cest/StorefrontCreateCustomerCest.xml | 4 +++- .../Customer/Cest/StorefrontPersistedCustomerLoginCest.xml | 3 +++ .../FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml | 3 ++- .../FunctionalTest/SampleTests/Cest/MinimumTestCest.xml | 3 +++ .../SampleTests/Cest/UpdateSimpleProductByApiCest.xml | 5 ++++- .../FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml | 2 ++ .../Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml | 2 ++ 15 files changed, 36 insertions(+), 10 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml index 2689f07d9f412..a50d75c167c9c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml @@ -21,7 +21,10 @@ <testCaseId value="MAGETWO-71572"/> <group value="example"/> <group value="login"/> + <env value="chrome"/> <env value="firefox"/> + <env value="phantomjs"/> + <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="amOnAdminLoginPage"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml index 1441a686ed36f..550e668b0808f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml @@ -23,7 +23,8 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72102"/> <group value="category"/> - <env value="firefox"/> + <env value="chrome"/> + <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="amOnAdminLoginPage"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml index 5e55b86263e6b..f649580554eaa 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml @@ -23,7 +23,8 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-23414"/> <group value="product"/> - <env value="firefox"/> + <env value="chrome"/> + <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml index f8ab2c472f7bf..5e97a6ab03b1b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml @@ -32,7 +32,8 @@ <severity value="CRITICAL"/> <testCaseId value="#"/> <group value="checkout"/> - <env value="firefox"/> + <env value="chrome"/> + <env value="headless"/> </annotations> <amOnPage mergeKey="s1" url="customer/account/login/"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml index 31a0546dd3503..fa441fd673784 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml @@ -30,7 +30,8 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72094"/> <group value="checkout"/> - <env value="firefox"/> + <env value="chrome"/> + <env value="headless"/> </annotations> <amOnPage url="{{StorefrontCategoryPage.url($$createCategory.name$$)}}" mergeKey="onCategoryPage"/> <waitForPageLoad mergeKey="waitForPageLoad1"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml index 328a8cd84d0da..e6dfb969fe218 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml @@ -24,7 +24,9 @@ <testCaseId value="MAGETWO-25580"/> <group value="cms"/> <group value="skip"/> + <env value="chrome"/> <env value="firefox"/> + <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> @@ -36,7 +38,7 @@ <fillField selector="{{CmsNewPagePageBasicFieldsSection.pageTitle}}" userInput="{{_defaultCmsPage.title}}" mergeKey="fillFieldTitle"/> <click selector="{{CmsNewPagePageContentSection.header}}" mergeKey="clickExpandContent"/> <fillField selector="{{CmsNewPagePageContentSection.contentHeading}}" userInput="{{_defaultCmsPage.content_heading}}" mergeKey="fillFieldContentHeading"/> - <!-- As of 2017/11/15, this test is failing to find the selector below (Jenkins only, works locally). See MQE-282. --> + <!-- As of 2017/11/15, this test is failing here (Jenkins only, works locally). See MQE-282. --> <fillField selector="{{CmsNewPagePageContentSection.content}}" userInput="{{_defaultCmsPage.content}}" mergeKey="fillFieldContent"/> <click selector="{{CmsNewPagePageSeoSection.header}}" mergeKey="clickExpandSearchEngineOptimisation"/> <fillField selector="{{CmsNewPagePageSeoSection.urlKey}}" userInput="{{_defaultCmsPage.identifier}}" mergeKey="fillFieldUrlKey"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml index 291ff8b45f55b..fbcc2581b4089 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml @@ -27,7 +27,7 @@ <testCaseId value="MAGETWO-26041"/> <group value="configurable"/> <group value="product"/> - <env value="firefox"/> + <env value="chrome"/> </annotations> <amOnPage url="{{AdminCategoryPage.url}}" mergeKey="amOnCategoryGridPage"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml index 94ce61a1f7f51..b577bca92e34f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml @@ -21,7 +21,8 @@ <testCaseId value="MAGETWO-72095"/> <group value="customer"/> <group value="create"/> - <env value="firefox"/> + <env value="chrome"/> + <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml index d8435ff1b84a1..37fe0017b8685 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml @@ -21,7 +21,9 @@ <testCaseId value="MAGETWO-23546"/> <group value="customer"/> <group value="create"/> + <env value="chrome"/> <env value="firefox"/> + <env value="headless"/> </annotations> <amOnPage mergeKey="amOnStorefrontPage" url="/"/> <click mergeKey="clickOnCreateAccountLink" selector="{{StorefrontPanelHeaderSection.createAnAccountLink}}"/> @@ -37,4 +39,4 @@ <see mergeKey="seeEmail" userInput="{{CustomerEntityOne.email}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> </test> </cest> -</config> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml index 8c1398851b4b8..2e039b51bf107 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml @@ -26,7 +26,10 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72103"/> <group value="customer"/> + <env value="chrome"/> <env value="firefox"/> + <env value="phantomjs"/> + <env value="headless"/> </annotations> <amOnPage mergeKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage.url}}"/> <fillField mergeKey="fillEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml index 606ba4c378419..c043fe298f767 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml @@ -27,7 +27,8 @@ <severity value="NORMAL"/> <testCaseId value="MAGETWO-72096"/> <group value="sales"/> - <env value="firefox"/> + <env value="chrome"/> + <env value="headless"/> </annotations> <!-- todo: Create an order via the api instead of driving the browser --> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml index 07da32b7e68f3..b1cfc787acbb7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml @@ -21,7 +21,10 @@ <title value="Minimum Test"/> <description value="Minimum Test"/> <group value="example"/> + <env value="chrome"/> <env value="firefox"/> + <env value="phantomjs"/> + <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml index 0aa79f7415084..7d80719a227ef 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml @@ -12,7 +12,10 @@ <features value="Update simple product by api test."/> <stories value="Update simple product by api test."/> <group value="example"/> + <env value="chrome"/> <env value="firefox"/> + <env value="phantomjs"/> + <env value="headless"/> </annotations> <before> <createData mergeKey="categoryHandle" entity="SimpleSubCategory"/> @@ -27,4 +30,4 @@ <test name="UpdateSimpleProductByApiTest"> </test> </cest> -</config> +</config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml index b933f7a7adab3..53692f3f41de6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml @@ -11,7 +11,9 @@ <annotations> <features value="Create a store group in admin"/> <stories value="Create a store group in admin"/> + <env value="chrome"/> <env value="firefox"/> + <env value="phantomjs"/> <group value="store"/> </annotations> <before> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml index 9ff95363e6f26..b1f452ac565be 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml @@ -11,7 +11,9 @@ <annotations> <features value="Delete a persist wishlist for a customer"/> <stories value="Delete a persist wishlist for a customer"/> + <env value="chrome"/> <env value="firefox"/> + <env value="phantomjs"/> <group value="wishlist"/> </annotations> <before> From c8be042fdb298d34ab34719e1f2886131f8ea98f Mon Sep 17 00:00:00 2001 From: Kevin Kozan <kkozan@magento.com> Date: Wed, 15 Nov 2017 21:34:42 +0200 Subject: [PATCH 347/653] MQE-497: Add useCaseId annotation - allure ignoreAnnotations change. --- dev/tests/acceptance/codeception.dist.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/tests/acceptance/codeception.dist.yml b/dev/tests/acceptance/codeception.dist.yml index 81fcd113db3d0..207671b27a153 100644 --- a/dev/tests/acceptance/codeception.dist.yml +++ b/dev/tests/acceptance/codeception.dist.yml @@ -22,6 +22,7 @@ extensions: ignoredAnnotations: - env - zephyrId + - useCaseId params: - .env modules: From c219a8fd5ae8ce03f1e01c394523b84f50a3fef1 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Thu, 16 Nov 2017 21:43:13 +0200 Subject: [PATCH 348/653] MQE-235: added sample cest for Codeception Asserts. --- .../SampleTests/Cest/AssertsCest.xml | 95 +++++++++++++++++++ .../SampleTests/Cest/SampleCest.xml | 61 ------------ 2 files changed, 95 insertions(+), 61 deletions(-) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AssertsCest.xml diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AssertsCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AssertsCest.xml new file mode 100644 index 0000000000000..23fc0a9a836ec --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AssertsCest.xml @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<!-- Test XML Example --> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> + <cest name="AssertCest"> + <annotations> + <features value="Test Asserts"/> + <group value="skip"/> + </annotations> + <before> + <createData entity="Simple_US_Customer" mergeKey="createData1"/> + </before> + <after> + <deleteData createDataKey="createData1" mergeKey="deleteData1"/> + </after> + <test name="AssertTest"> + <createData entity="Simple_US_Customer" mergeKey="createData2"/> + <amOnUrl url="http://magento3.loc/index.php/simplesubcategory5a05d3129ab3d2.html" mergeKey="amOnPage"/> + <grabTextFrom returnVariable="text" selector=".copyright>span" mergeKey="grabTextFrom1"/> + + <!-- asserts without variable replacement --> + <comment mergeKey="c1" userInput="asserts without variable replacement"/> + <assertArrayHasKey mergeKey="assertArrayHasKey" expected="apple" expectedType="string" actual="['orange' => 2, 'apple' => 1]" actualType="const" message="pass"/> + <assertArrayNotHasKey mergeKey="assertArrayNotHasKey" expected="kiwi" expectedType="string" actual="['orange' => 2, 'apple' => 1]" message="pass"/> + <assertArraySubset mergeKey="assertArraySubset" expected="[1, 2]" actual="[1, 2, 3, 5]" message="pass"/> + <assertContains mergeKey="assertContains" expected="ab" expectedType="string" actual="['item1' => 'a', 'item2' => 'ab']" message="pass"/> + <assertCount mergeKey="assertCount" expected="2" expectedType="int" actual="['a', 'b']" message="pass"/> + <assertEmpty mergeKey="assertEmpty" actual="[]" message="pass"/> + <assertEquals mergeKey="assertEquals1" expected="text" expectedType="variable" actual="Copyright © 2013-2017 Magento, Inc. All rights reserved." actualType="string" message="pass"/> + <assertEquals mergeKey="assertEquals2" expected="Copyright © 2013-2017 Magento, Inc. All rights reserved." expectedType="string" actual="text" actualType="variable" message="pass"/> + <assertFalse mergeKey="assertFalse1" actual="0" actualType="bool" message="pass"/> + <assertFileNotExists mergeKey="assertFileNotExists1" actual="/out.txt" actualType="string" message="pass"/> + <assertFileNotExists mergeKey="assertFileNotExists2" actual="text" actualType="variable" message="pass"/> + <assertGreaterOrEquals mergeKey="assertGreaterOrEquals" expected="2" expectedType="int" actual="5" actualType="int" message="pass"/> + <assertGreaterThan mergeKey="assertGreaterThan" expected="2" expectedType="int" actual="5" actualType="int" message="pass"/> + <assertGreaterThanOrEqual mergeKey="assertGreaterThanOrEqual" expected="2" expectedType="int" actual="5" actualType="int" message="pass"/> + <assertInternalType mergeKey="assertInternalType1" expected="string" expectedType="string" actual="xyz" actualType="string" message="pass"/> + <assertInternalType mergeKey="assertInternalType2" expected="int" expectedType="string" actual="21" actualType="int" message="pass"/> + <assertInternalType mergeKey="assertInternalType3" expected="string" expectedType="string" actual="text" actualType="variable" message="pass"/> + <assertLessOrEquals mergeKey="assertLessOrEquals" expected="5" expectedType="int" actual="2" actualType="int" message="pass"/> + <assertLessThan mergeKey="assertLessThan" expected="5" expectedType="int" actual="2" actualType="int" message="pass"/> + <assertLessThanOrEqual mergeKey="assertLessThanOrEqual" expected="5" expectedType="int" actual="2" actualType="int" message="pass"/> + <assertNotContains mergeKey="assertNotContains1" expected="bc" expectedType="string" actual="['item1' => 'a', 'item2' => 'ab']" message="pass"/> + <assertNotContains mergeKey="assertNotContains2" expected="bc" expectedType="string" actual="text" actualType="variable" message="pass"/> + <assertNotEmpty mergeKey="assertNotEmpty1" actual="[1, 2]" message="pass"/> + <assertNotEmpty mergeKey="assertNotEmpty2" actual="text" actualType="variable" message="pass"/> + <assertNotEquals mergeKey="assertNotEquals" expected="2" expectedType="int" actual="5" actualType="int" message="pass" delta=""/> + <assertNotNull mergeKey="assertNotNull1" actual="abc" actualType="string" message="pass"/> + <assertNotNull mergeKey="assertNotNull2" actual="text" actualType="variable" message="pass"/> + <assertNotRegExp mergeKey="assertNotRegExp" expected="/foo/" expectedType="string" actual="bar" actualType="string" message="pass"/> + <assertNotSame mergeKey="assertNotSame" expected="log" expectedType="string" actual="tag" actualType="string" message="pass"/> + <assertRegExp mergeKey="assertRegExp" expected="/foo/" expectedType="string" actual="foo" actualType="string" message="pass"/> + <assertSame mergeKey="assertSame" expected="bar" expectedType="string" actual="bar" actualType="string" message="pass"/> + <assertStringStartsNotWith mergeKey="assertStringStartsNotWith" expected="a" expectedType="string" actual="banana" actualType="string" message="pass"/> + <assertStringStartsWith mergeKey="assertStringStartsWith" expected="a" expectedType="string" actual="apple" actualType="string" message="pass"/> + <assertTrue mergeKey="assertTrue" actual="1" actualType="bool" message="pass"/> + + <!-- string type that use created data --> + <comment mergeKey="c2" userInput="string type that use created data"/> + <assertStringStartsWith mergeKey="assert1" expected="D" expectedType="string" actual="$$createData1.lastname$$, $$createData1.firstname$$" actualType="string" message="fail"/> + <assertStringStartsNotWith mergeKey="assert2" expected="W" expectedType="string" actual="$createData2.firstname$ $createData2.lastname$" actualType="string" message="pass"/> + <assertEquals mergeKey="assert5" expected="$$createData1.lastname$$" expectedType="string" actual="$$createData1.lastname$$" actualType="string" message="pass"/> + + <!-- array type that use created data --> + <comment mergeKey="c3" userInput="array type that use created data"/> + <assertArraySubset mergeKey="assert9" expected="[$$createData1.lastname$$, $$createData1.firstname$$]" expectedType="array" actual="[$$createData1.lastname$$, $$createData1.firstname$$, 1]" actualType="array" message="pass"/> + <assertArraySubset mergeKey="assert10" expected="[$createData2.firstname$, $createData2.lastname$]" expectedType="array" actual="[$createData2.firstname$, $createData2.lastname$, 1]" actualType="array" message="pass"/> + <assertArrayHasKey mergeKey="assert3" expected="lastname" expectedType="string" actual="['lastname' => $$createData1.lastname$$, 'firstname' => $$createData1.firstname$$]" actualType="array" message="pass"/> + <assertArrayHasKey mergeKey="assert4" expected="lastname" expectedType="string" actual="['lastname' => $createData2.lastname$, 'firstname' => $createData2.firstname$]" actualType="array" message="pass"/> + + <!-- comment this section before running this test --> + <comment mergeKey="c4" userInput="comment this section before running this test"/> + <assertInstanceOf mergeKey="assertInstanceOf" expected="User::class" actual="text" actualType="variable" message="pass"/> + <assertNotInstanceOf mergeKey="assertNotInstanceOf" expected="User::class" actual="21" actualType="int" message="pass"/> + <assertFileExists mergeKey="assertFileExists2" actual="text" actualType="variable" message="pass"/> + <assertFileExists mergeKey="assert6" actual="AssertCest.php" actualType="string" message="pass"/> + <assertIsEmpty mergeKey="assertIsEmpty" actual="text" actualType="variable" message="pass"/> + <assertNull mergeKey="assertNull" actual="text" actualType="variable" message="pass"/> + <expectException mergeKey="expectException" expected="new MyException('exception msg')" actual="function() {$this->doSomethingBad();}"/> + <fail mergeKey="fail" message="fail"/> + <fail mergeKey="assert7" message="$createData2.firstname$ $createData2.lastname$"/> + <fail mergeKey="assert8" message="$$createData1.firstname$$ $$createData1.lastname$$"/> + <!-- comment end --> + <comment mergeKey="c5" userInput="comment end"/> + + <deleteData createDataKey="createData2" mergeKey="deleteData2"/> + </test> + </cest> +</config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml index f00c27f7d19e4..b07e73bbbaa2b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml @@ -172,51 +172,6 @@ <waitForJS function="return $.active == 0;" time="30" mergeKey="waitForJS"/> <waitForText userInput="foo" time="30" mergeKey="waitForText1"/> <waitForText userInput="foo" selector=".title" time="30" mergeKey="waitForText2"/> - <!-- Codeception Assert --> - <assertArrayHasKey mergeKey="assertArrayHasKey" expected="apple" actualArray="[['orange' => 2], ['apple' => 1]" message="pass"/> - <assertArrayNotHasKey mergeKey="assertArrayNotHasKey" expected="kiwi" actualArray="[['orange' => 2], ['apple' => 1]" message="pass"/> - <assertArraySubset mergeKey="assertArraySubset" expectedArray="[1, 2]" actualArray="[5, 3, 2, 1]" message="pass"/> - <assertContains mergeKey="assertContains" expected="ab" actualArray="[['item1' => 'a'], ['item2' => 'ab']" message="pass"/> - <assertCount mergeKey="assertCount" expected="2" actualArray="['a', 'b']" message="pass"/> - <assertEmpty mergeKey="assertEmpty1" actual="''" message="pass"/> - <assertEmpty mergeKey="assertEmpty2" actual="[]" message="pass"/> - <assertEmpty mergeKey="assertEmpty3" actualVariable="value1" message="pass"/> - <assertEquals mergeKey="assertEquals1" expected="abc" actual="abc" message="pass"/> - <assertEquals mergeKey="assertEquals2" expected="2" actualVariable="value1" message="pass"/> - <assertFalse mergeKey="assertFalse" actualVariable="value1" message="pass"/> - <assertFileExists mergeKey="assertFileExists1" actual="/out.txt" message="pass"/> - <assertFileExists mergeKey="assertFileExists2" actualVariable="value1" message="pass"/> - <assertFileNotExists mergeKey="assertFileNotExists1" actual="/out.txt" message="pass"/> - <assertFileNotExists mergeKey="assertFileNotExists2" actual="file" message="pass"/> - <assertGreaterOrEquals mergeKey="assertGreaterOrEquals" expected="5" actual="2" message="pass"/> - <assertGreaterThan mergeKey="assertGreaterThan" expected="5" actual="2" message="pass"/> - <assertGreaterThanOrEqual mergeKey="assertGreaterThanOrEqual" expected="5" actual="2" message="pass"/> - <assertInstanceOf mergeKey="assertInstanceOf" class="User::class" actualVariable="value1" message="pass"/> - <assertInternalType mergeKey="assertInternalType1" expected="string" actual="xyz" message="pass"/> - <assertInternalType mergeKey="assertInternalType2" type="string" actual="xyz" message="pass"/> - <assertInternalType mergeKey="assertInternalType3" type="string" actualVariable="value1" message="pass"/> - <assertIsEmpty mergeKey="assertIsEmpty" actualVariable="value1" message="pass"/> - <assertLessOrEquals mergeKey="assertLessOrEquals" expected="2" actual="5" message="pass"/> - <assertLessThan mergeKey="assertLessThan" expected="2" actual="5" message="pass"/> - <assertLessThanOrEqual mergeKey="assertLessThanOrEqual" expected="2" actual="5" message="pass"/> - <assertNotContains mergeKey="assertNotContains1" expected="bc" actualArray="[['item1' => 'a'], ['item2' => 'ab']" message="pass"/> - <assertNotContains mergeKey="assertNotContains2" expected="bc" actualVariable="value1" message="pass"/> - <assertNotEmpty mergeKey="assertNotEmpty1" actual="[1, 2]" message="pass"/> - <assertNotEmpty mergeKey="assertNotEmpty2" actualVariable="value1" message="pass"/> - <assertNotEquals mergeKey="assertNotEquals" expected="2" actual="5" message="pass" delta=""/> - <assertNotInstanceOf mergeKey="assertNotInstanceOf" expected="RuntimeException::class" actual="21" message="pass"/> - <assertNotNull mergeKey="assertNotNull1" actual="abc" message="pass"/> - <assertNotNull mergeKey="assertNotNull2" actualVariable="value1" message="pass"/> - <assertNotRegExp mergeKey="assertNotRegExp" expected="/foo/" actual="bar" message="pass"/> - <assertNotSame mergeKey="assertNotSame" expected="log" actual="tag" message="pass"/> - <assertNull mergeKey="assertNull" actualVariable="value1" message="pass"/> - <assertRegExp mergeKey="assertRegExp" expected="/foo/" actual="foo" message="pass"/> - <assertSame mergeKey="assertSame" expected="bar" actual="bar" message="pass"/> - <assertStringStartsNotWith mergeKey="assertStringStartsNotWith" expected="a" actual="banana" message="pass"/> - <assertStringStartsWith mergeKey="assertStringStartsWith" expected="a" actual="apple" message="pass"/> - <assertTrue mergeKey="assertTrue" actual="true" message="pass"/> - <expectException mergeKey="expectException" class="new MyException('exception msg')" function="function() {$this->doSomethingBad();}"/> - <fail mergeKey="fail" message="fail"/> </test> <test name="AllCustomMethodsTest"> <annotations> @@ -334,22 +289,6 @@ <!-- userInput that uses created data --> <fillField selector="#sample" userInput="Hello $testScopeData.firstname$ $testScopeData.lastname$" mergeKey="f1"/> <fillField selector="#sample" userInput="Hello $$createData1.firstname$$ $$createData1.lastname$$" mergeKey="f2"/> - - <!-- expected, actual that use created data --> - <assertStringStartsNotWith mergeKey="assert1" expected="D" actual="$$createData2.lastname$$, $$createData2.firstname$$" message="fail"/> - <assertStringStartsWith mergeKey="assert2" expected="W" actual="$testScopeData2.firstname$ $testScopeData2.lastname$" message="pass"/> - <assertEquals mergeKey="assert5" expected="$$createData1.lastname$$" actual="$$createData1.lastname$$" message="pass"/> - <assertFileExists mergeKey="assert6" actual="../Data/SampleData.xml" message="pass"/> - - <!-- expectedArray, actualArray that use created data --> - <assertArraySubset mergeKey="assert9" expectedArray="[$$createData2.lastname$$, $$createData2.firstname$$]" actualArray="[$$createData2.lastname$$, $$createData2.firstname$$, 1]" message="pass"/> - <assertArraySubset mergeKey="assert10" expectedArray="[$testScopeData2.firstname$, $testScopeData2.lastname$]" actualArray="[$testScopeData2.firstname$, $testScopeData2.lastname$, 1]" message="pass"/> - <assertArrayHasKey mergeKey="assert3" expected="lastname" actualArray="[['lastname' => $$createData1.lastname$$], ['firstname' => $$createData1.firstname$$]" message="pass"/> - <assertArrayHasKey mergeKey="assert4" expected="lastname" actualArray="[['lastname' => $testScopeData.lastname$], ['firstname' => $testScopeData.firstname$]" message="pass"/> - - <!-- message that uses created data --> - <fail mergeKey="assert7" message="$testScopeData.firstname$ $testScopeData.lastname$"/> - <fail mergeKey="assert8" message="$$createData1.firstname$$ $$createData1.lastname$$"/> </test> </cest> </config> From 388f0fbe97592e7a744c0fa19ac309fcaf813e22 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Thu, 16 Nov 2017 22:37:04 +0200 Subject: [PATCH 349/653] MQE-235: added sample cest for Codeception Asserts (fixed sample url). --- .../FunctionalTest/SampleTests/Cest/AssertsCest.xml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AssertsCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AssertsCest.xml index 23fc0a9a836ec..e6b3f9b563112 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AssertsCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AssertsCest.xml @@ -21,8 +21,9 @@ </after> <test name="AssertTest"> <createData entity="Simple_US_Customer" mergeKey="createData2"/> - <amOnUrl url="http://magento3.loc/index.php/simplesubcategory5a05d3129ab3d2.html" mergeKey="amOnPage"/> - <grabTextFrom returnVariable="text" selector=".copyright>span" mergeKey="grabTextFrom1"/> + <amOnUrl url="https://www.yahoo.com" mergeKey="amOnPage"/> + <waitForElementVisible mergeKey="wait1" selector="#uh-logo" time="10"/> + <grabTextFrom returnVariable="text" selector="#uh-logo" mergeKey="grabTextFrom1"/> <!-- asserts without variable replacement --> <comment mergeKey="c1" userInput="asserts without variable replacement"/> @@ -32,8 +33,8 @@ <assertContains mergeKey="assertContains" expected="ab" expectedType="string" actual="['item1' => 'a', 'item2' => 'ab']" message="pass"/> <assertCount mergeKey="assertCount" expected="2" expectedType="int" actual="['a', 'b']" message="pass"/> <assertEmpty mergeKey="assertEmpty" actual="[]" message="pass"/> - <assertEquals mergeKey="assertEquals1" expected="text" expectedType="variable" actual="Copyright © 2013-2017 Magento, Inc. All rights reserved." actualType="string" message="pass"/> - <assertEquals mergeKey="assertEquals2" expected="Copyright © 2013-2017 Magento, Inc. All rights reserved." expectedType="string" actual="text" actualType="variable" message="pass"/> + <assertEquals mergeKey="assertEquals1" expected="text" expectedType="variable" actual="Yahoo" actualType="string" message="pass"/> + <assertEquals mergeKey="assertEquals2" expected="Yahoo" expectedType="string" actual="text" actualType="variable" message="pass"/> <assertFalse mergeKey="assertFalse1" actual="0" actualType="bool" message="pass"/> <assertFileNotExists mergeKey="assertFileNotExists1" actual="/out.txt" actualType="string" message="pass"/> <assertFileNotExists mergeKey="assertFileNotExists2" actual="text" actualType="variable" message="pass"/> From fd1b4922b02a171e5039a1a3ea4ed7e0f9656ea1 Mon Sep 17 00:00:00 2001 From: Oleksandr Iegorov <oiegorov@magento.com> Date: Tue, 21 Nov 2017 10:25:17 +0200 Subject: [PATCH 350/653] MAGETWO-84000: Undefined index: region_id is presented after save customer address --- app/code/Magento/Customer/Block/Address/Edit.php | 4 ++-- app/code/Magento/Customer/Model/AttributeChecker.php | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Customer/Block/Address/Edit.php b/app/code/Magento/Customer/Block/Address/Edit.php index e9e894b2bc130..5c260c87f736c 100644 --- a/app/code/Magento/Customer/Block/Address/Edit.php +++ b/app/code/Magento/Customer/Block/Address/Edit.php @@ -139,8 +139,8 @@ protected function _prepareLayout() if ($postedData = $this->_customerSession->getAddressFormData(true)) { $postedData['region'] = [ - 'region_id' => $postedData['region_id'], - 'region' => $postedData['region'], + 'region_id' => $postedData['region_id'] ?? null, + 'region' => $postedData['region'] ?? null, ]; $this->dataObjectHelper->populateWithArray( $this->_address, diff --git a/app/code/Magento/Customer/Model/AttributeChecker.php b/app/code/Magento/Customer/Model/AttributeChecker.php index 6cc27697ccff7..dcdd47691386e 100644 --- a/app/code/Magento/Customer/Model/AttributeChecker.php +++ b/app/code/Magento/Customer/Model/AttributeChecker.php @@ -8,7 +8,6 @@ use Magento\Customer\Api\AddressMetadataInterface; use Magento\Customer\Api\AddressMetadataManagementInterface; use Magento\Customer\Model\Metadata\AttributeResolver; -use Magento\Framework\App\Helper\Context; /** * Customer attribute checker. From ea8c6321af724386eab7ec6370a9af77c2d2fa68 Mon Sep 17 00:00:00 2001 From: Oleksandr Iegorov <oiegorov@magento.com> Date: Tue, 21 Nov 2017 12:57:06 +0200 Subject: [PATCH 351/653] MAGETWO-84000: Undefined index: region_id is presented after save customer address --- .../Magento/Customer/Block/Address/Edit.php | 4 ++- .../Test/Unit/Block/Address/EditTest.php | 25 +++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Customer/Block/Address/Edit.php b/app/code/Magento/Customer/Block/Address/Edit.php index 5c260c87f736c..6e21158651879 100644 --- a/app/code/Magento/Customer/Block/Address/Edit.php +++ b/app/code/Magento/Customer/Block/Address/Edit.php @@ -139,9 +139,11 @@ protected function _prepareLayout() if ($postedData = $this->_customerSession->getAddressFormData(true)) { $postedData['region'] = [ - 'region_id' => $postedData['region_id'] ?? null, 'region' => $postedData['region'] ?? null, ]; + if (!empty($postedData['region_id'])) { + $postedData['region']['region_id'] = $postedData['region_id']; + } $this->dataObjectHelper->populateWithArray( $this->_address, $postedData, diff --git a/app/code/Magento/Customer/Test/Unit/Block/Address/EditTest.php b/app/code/Magento/Customer/Test/Unit/Block/Address/EditTest.php index 0b142497d9577..d39ace54b5c47 100644 --- a/app/code/Magento/Customer/Test/Unit/Block/Address/EditTest.php +++ b/app/code/Magento/Customer/Test/Unit/Block/Address/EditTest.php @@ -101,15 +101,15 @@ protected function setUp() ); } - public function testSetLayoutWithOwnAddressAndPostedData() + /** + * @param array $postedData + * @dataProvider postedDataProvider + */ + public function testSetLayoutWithOwnAddressAndPostedData(array $postedData) { $addressId = 1; $customerId = 1; $title = __('Edit Address'); - $postedData = [ - 'region_id' => 1, - 'region' => 'region', - ]; $newPostedData = $postedData; $newPostedData['region'] = $postedData; @@ -169,6 +169,21 @@ public function testSetLayoutWithOwnAddressAndPostedData() $this->assertEquals($layoutMock, $this->model->getLayout()); } + /** + * @return array + */ + public function postedDataProvider() + { + return [ + [ + ['region_id' => 1, 'region' => 'region'] + ], + [ + ['region' => 'region without id'] + ] + ]; + } + /** * @throws \Magento\Framework\Exception\LocalizedException * @SuppressWarnings(PHPMD.ExcessiveMethodLength) From e83e22d6a0faa518a43a6761b7d4b34404a5c1b0 Mon Sep 17 00:00:00 2001 From: Volodymyr Zaets <vzaets@magento.com> Date: Fri, 24 Nov 2017 12:00:41 +0200 Subject: [PATCH 352/653] MAGETWO-84000: Undefined index: region_id is presented after save customer address --- .../Customer/view/frontend/templates/widget/telephone.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Customer/view/frontend/templates/widget/telephone.phtml b/app/code/Magento/Customer/view/frontend/templates/widget/telephone.phtml index 1b61dc45573b3..6367bf10bbade 100644 --- a/app/code/Magento/Customer/view/frontend/templates/widget/telephone.phtml +++ b/app/code/Magento/Customer/view/frontend/templates/widget/telephone.phtml @@ -19,7 +19,7 @@ <?php $_validationClass = $block->escapeHtmlAttr( $this->helper('Magento\Customer\Helper\Address') - ->getAttributeValidationClass('fax') + ->getAttributeValidationClass('telephone') ); ?> <input type="text" From aaa60b1b72bdc189b38492bd50b0ffb23101173e Mon Sep 17 00:00:00 2001 From: Dmytro Horytskyi <dhorytskyi@magento.com> Date: Wed, 22 Nov 2017 17:35:17 +0200 Subject: [PATCH 353/653] MAGETWO-84106: [2.2.1] Implementation (fix) of session locking mechanism in php-redis-session-abstract leads to 30 sec timeout --- .../Magento/Framework/Session/SessionManager.php | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/lib/internal/Magento/Framework/Session/SessionManager.php b/lib/internal/Magento/Framework/Session/SessionManager.php index 2cea02fa3b361..272d3d923c8a5 100644 --- a/lib/internal/Magento/Framework/Session/SessionManager.php +++ b/lib/internal/Magento/Framework/Session/SessionManager.php @@ -504,18 +504,8 @@ public function regenerateId() return $this; } - //@see http://php.net/manual/en/function.session-regenerate-id.php#53480 workaround if ($this->isSessionExists()) { - $oldSessionId = session_id(); - session_regenerate_id(); - $newSessionId = session_id(); - session_id($oldSessionId); - session_destroy(); - - $oldSession = $_SESSION; - session_id($newSessionId); - session_start(); - $_SESSION = $oldSession; + session_regenerate_id(true); } else { session_start(); } From 8aeb71b9c99b241ca1376f94e9adeb0338c0e7b1 Mon Sep 17 00:00:00 2001 From: David Manners <dmanners87@gmail.com> Date: Mon, 27 Nov 2017 14:32:42 +0000 Subject: [PATCH 354/653] Update image label values on product entity on admin product save --- .../Model/Product/Gallery/CreateHandler.php | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php b/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php index 03d418f3ba0d9..3be10de96ec12 100644 --- a/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php +++ b/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php @@ -167,8 +167,11 @@ public function execute($product, $arguments = []) if (empty($attrData) && empty($clearImages) && empty($newImages) && empty($existImages)) { continue; } + $resetLabel = false; if (in_array($attrData, $clearImages)) { $product->setData($mediaAttrCode, 'no_selection'); + $product->setData($mediaAttrCode . '_label', null); + $resetLabel = true; } if (in_array($attrData, array_keys($newImages))) { @@ -179,6 +182,11 @@ public function execute($product, $arguments = []) if (in_array($attrData, array_keys($existImages)) && isset($existImages[$attrData]['label'])) { $product->setData($mediaAttrCode . '_label', $existImages[$attrData]['label']); } + + if ($attrData === 'no_selection' && !empty($product->getData($mediaAttrCode . '_label'))) { + $product->setData($mediaAttrCode . '_label', null); + $resetLabel = true; + } if (!empty($product->getData($mediaAttrCode))) { $product->addAttributeUpdate( $mediaAttrCode, @@ -186,6 +194,19 @@ public function execute($product, $arguments = []) $product->getStoreId() ); } + if ( + in_array($mediaAttrCode, ['image', 'small_image', 'thumbnail']) + && ( + !empty($product->getData($mediaAttrCode . '_label')) + || $resetLabel === true + ) + ) { + $product->addAttributeUpdate( + $mediaAttrCode . '_label', + $product->getData($mediaAttrCode . '_label'), + $product->getStoreId() + ); + } } $product->setData($attrCode, $value); From 15113774593671c0c760d81140aa83969b9da143 Mon Sep 17 00:00:00 2001 From: David Manners <dmanners87@gmail.com> Date: Mon, 27 Nov 2017 14:44:41 +0000 Subject: [PATCH 355/653] Fix code style for empty label check if statement --- .../Magento/Catalog/Model/Product/Gallery/CreateHandler.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php b/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php index 3be10de96ec12..22340801c0a6a 100644 --- a/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php +++ b/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php @@ -194,9 +194,8 @@ public function execute($product, $arguments = []) $product->getStoreId() ); } - if ( - in_array($mediaAttrCode, ['image', 'small_image', 'thumbnail']) - && ( + if (in_array($mediaAttrCode, ['image', 'small_image', 'thumbnail']) && + ( !empty($product->getData($mediaAttrCode . '_label')) || $resetLabel === true ) From 8aa3da1ec3cd5204e0857f43e46abef824d4d13d Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Mon, 27 Nov 2017 18:14:39 +0200 Subject: [PATCH 356/653] 8255: Export Products action doesn't consider hide_for_product_page value. --- .../Model/Export/Product.php | 33 +++++-------------- .../_files/product_simple_multistore.php | 6 ++-- 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Export/Product.php b/app/code/Magento/CatalogImportExport/Model/Export/Product.php index 4174fbefd90ef..45530ed6d7bae 100644 --- a/app/code/Magento/CatalogImportExport/Model/Export/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Export/Product.php @@ -905,7 +905,7 @@ protected function getExportData() $dataRow = array_merge($dataRow, $stockItemRows[$productId]); } $this->appendMultirowData($dataRow, $multirawData); - if ($dataRow && !$this->skipRow($dataRow)) { + if ($dataRow) { $exportData[] = $dataRow; } } @@ -1169,14 +1169,17 @@ private function appendMultirowData(&$dataRow, $multiRawData) $productLinkId = $dataRow['product_link_id']; $storeId = $dataRow['store_id']; $sku = $dataRow[self::COL_SKU]; + $type = $dataRow[self::COL_TYPE]; + $attributeSet = $dataRow[self::COL_ATTR_SET]; unset($dataRow['product_id']); unset($dataRow['product_link_id']); unset($dataRow['store_id']); unset($dataRow[self::COL_SKU]); - + unset($dataRow[self::COL_STORE]); + unset($dataRow[self::COL_ATTR_SET]); + unset($dataRow[self::COL_TYPE]); if (Store::DEFAULT_STORE_ID == $storeId) { - unset($dataRow[self::COL_STORE]); $this->updateDataWithCategoryColumns($dataRow, $multiRawData['rowCategories'], $productId); if (!empty($multiRawData['rowWebsites'][$productId])) { $websiteCodes = []; @@ -1274,6 +1277,9 @@ private function appendMultirowData(&$dataRow, $multiRawData) $dataRow[self::COL_STORE] = $this->_storeIdToCode[$storeId]; } $dataRow[self::COL_SKU] = $sku; + $dataRow[self::COL_ATTR_SET] = $attributeSet; + $dataRow[self::COL_TYPE] = $type; + return $dataRow; } @@ -1512,25 +1518,4 @@ protected function getProductEntityLinkField() } return $this->productEntityLinkField; } - - /** - * Check if row has valuable information to export. - * - * @param array $dataRow - * @return bool - */ - private function skipRow(array $dataRow) - { - $baseInfo = [ - self::COL_STORE, - self::COL_ATTR_SET, - self::COL_TYPE, - self::COL_SKU, - 'store_id', - 'product_id', - 'product_link_id', - ]; - - return empty(array_diff(array_keys($dataRow), $baseInfo)); - } } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_multistore.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_multistore.php index 7829797c54e6c..4d4eb7fd8cdd7 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_multistore.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_multistore.php @@ -19,7 +19,8 @@ 1 )->setAttributeSetId( 4 -)->setStoreId( +)->setCustomAttribute( + 'tax_class_id', 1 )->setWebsiteIds( [1] @@ -42,8 +43,7 @@ )->save(); $product = $objectManager->create(\Magento\Catalog\Model\Product::class); -$product->setStoreId(1) - ->load(1) +$product->load(1) ->setStoreId($store->getId()) ->setName('StoreTitle') ->save(); From 6893c897d59004d881f2e70dac983e21725019c3 Mon Sep 17 00:00:00 2001 From: Michail Slabko <mslabko@magento.com> Date: Mon, 27 Nov 2017 17:59:31 +0200 Subject: [PATCH 357/653] MAGETWO-84544: Configurable product reindex too slow for big amount of options --- .../ResourceModel/Product/Indexer/Price/Configurable.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php index 487ab19de2063..a30ec81528dd3 100644 --- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php +++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php @@ -133,6 +133,10 @@ protected function _applyConfigurableOption() ['le' => $this->getTable('catalog_product_entity')], 'le.' . $linkField . ' = l.parent_id', ['parent_id' => 'entity_id'] + )->join( + ['i' => $this->_getDefaultFinalPriceTable()], + 'le.entity_id = i.entity_id', + [] ); $select = $connection->select(); From 03ac5b5b9f66dea7b50eccd4ee275579c50c5ebe Mon Sep 17 00:00:00 2001 From: Oscar Recio <osrecio@gmail.com> Date: Sun, 5 Nov 2017 13:23:21 +0100 Subject: [PATCH 358/653] Generate new FormKey and replace for oldRequestParams --- .../Model/Plugin/CustomerFlushFormKey.php | 53 +++++++++++++++++++ app/code/Magento/Customer/etc/di.xml | 3 ++ 2 files changed, 56 insertions(+) create mode 100644 app/code/Magento/Customer/Model/Plugin/CustomerFlushFormKey.php diff --git a/app/code/Magento/Customer/Model/Plugin/CustomerFlushFormKey.php b/app/code/Magento/Customer/Model/Plugin/CustomerFlushFormKey.php new file mode 100644 index 0000000000000..b7b462b3cc317 --- /dev/null +++ b/app/code/Magento/Customer/Model/Plugin/CustomerFlushFormKey.php @@ -0,0 +1,53 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Customer\Model\Plugin; + +use Magento\Customer\Model\Session; +use Magento\Framework\Data\Form\FormKey as DataFormKey; +use Magento\PageCache\Observer\FlushFormKey; + +class CustomerFlushFormKey +{ + /** + * @var Session + */ + private $session; + + /** + * @var DataFormKey + */ + private $dataFormKey; + + /** + * Initialize dependencies. + * + * @param Session $session + * @param DataFormKey $dataFormKey + */ + public function __construct(Session $session, DataFormKey $dataFormKey) + { + $this->session = $session; + $this->dataFormKey = $dataFormKey; + } + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @param FlushFormKey $subject + * @param callable $proceed + * @param $args + */ + public function aroundExecute(FlushFormKey $subject, callable $proceed, ...$args) + { + $currentFormKey = $this->dataFormKey->getFormKey(); + $proceed(...$args); + $beforeParams = $this->session->getBeforeRequestParams(); + if ($beforeParams['form_key'] == $currentFormKey) { + $beforeParams['form_key'] = $this->dataFormKey->getFormKey(); + $this->session->setBeforeRequestParams($beforeParams); + } + } +} diff --git a/app/code/Magento/Customer/etc/di.xml b/app/code/Magento/Customer/etc/di.xml index 6eea4e1582a97..40ef730120783 100644 --- a/app/code/Magento/Customer/etc/di.xml +++ b/app/code/Magento/Customer/etc/di.xml @@ -323,6 +323,9 @@ <type name="Magento\Framework\App\Action\AbstractAction"> <plugin name="customerNotification" type="Magento\Customer\Model\Plugin\CustomerNotification"/> </type> + <type name="Magento\PageCache\Observer\FlushFormKey"> + <plugin name="customerFlushFormKey" type="Magento\Customer\Model\Plugin\CustomerFlushFormKey"/> + </type> <type name="Magento\Customer\Model\Customer\NotificationStorage"> <arguments> <argument name="cache" xsi:type="object">Magento\Customer\Model\Cache\Type\Notification</argument> From 7edc2d46c69894d378bb35c7ced0d300f323a84c Mon Sep 17 00:00:00 2001 From: Oscar Recio <osrecio@gmail.com> Date: Mon, 27 Nov 2017 22:12:45 +0100 Subject: [PATCH 359/653] Add Test CustomerFlushFormKey Plugin --- .../Model/Plugin/CustomerFlushFormKeyTest.php | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 app/code/Magento/Customer/Test/Unit/Model/Plugin/CustomerFlushFormKeyTest.php diff --git a/app/code/Magento/Customer/Test/Unit/Model/Plugin/CustomerFlushFormKeyTest.php b/app/code/Magento/Customer/Test/Unit/Model/Plugin/CustomerFlushFormKeyTest.php new file mode 100644 index 0000000000000..c06805e94eade --- /dev/null +++ b/app/code/Magento/Customer/Test/Unit/Model/Plugin/CustomerFlushFormKeyTest.php @@ -0,0 +1,110 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Customer\Test\Unit\Model\Plugin; + +use Magento\Customer\Model\Plugin\CustomerFlushFormKey; +use Magento\Customer\Model\Session; +use Magento\Framework\App\PageCache\FormKey as CookieFormKey; +use Magento\Framework\Data\Form\FormKey as DataFormKey; +use Magento\PageCache\Observer\FlushFormKey; +use PHPUnit\Framework\TestCase; +use PHPUnit_Framework_MockObject_MockObject as MockObject; + +class CustomerFlushFormKeyTest extends TestCase +{ + const CLOSURE_VALUE = 'CLOSURE'; + + /** + * @var CookieFormKey | MockObject + */ + private $cookieFormKey; + + /** + * @var Session | MockObject + */ + private $customerSession; + + /** + * @var DataFormKey | MockObject + */ + private $dataFormKey; + + /** + * @var \Closure + */ + private $closure; + + protected function setUp() + { + + /** @var CookieFormKey | MockObject */ + $this->cookieFormKey = $this->getMockBuilder(CookieFormKey::class) + ->disableOriginalConstructor() + ->getMock(); + + /** @var DataFormKey | MockObject */ + $this->dataFormKey = $this->getMockBuilder(DataFormKey::class) + ->disableOriginalConstructor() + ->getMock(); + + /** @var Session | MockObject */ + $this->customerSession = $this->getMockBuilder(Session::class) + ->disableOriginalConstructor() + ->setMethods(['getBeforeRequestParams', 'setBeforeRequestParams']) + ->getMock(); + + $this->closure = function () { + return static::CLOSURE_VALUE; + }; + } + + /** + * @dataProvider aroundFlushFormKeyProvider + * @param $beforeFormKey + * @param $currentFormKey + * @param $getFormKeyTimes + * @param $setBeforeParamsTimes + */ + public function testAroundFlushFormKey( + $beforeFormKey, + $currentFormKey, + $getFormKeyTimes, + $setBeforeParamsTimes + ) { + $observer = new FlushFormKey($this->cookieFormKey, $this->dataFormKey); + $plugin = new CustomerFlushFormKey($this->customerSession, $this->dataFormKey); + + $beforeParams['form_key'] = $beforeFormKey; + + $this->dataFormKey->expects($this->exactly($getFormKeyTimes)) + ->method('getFormKey') + ->willReturn($currentFormKey); + + $this->customerSession->expects($this->once()) + ->method('getBeforeRequestParams') + ->willReturn($beforeParams); + + $this->customerSession->expects($this->exactly($setBeforeParamsTimes)) + ->method('setBeforeRequestParams') + ->with($beforeParams); + + $plugin->aroundExecute($observer, $this->closure, $observer); + } + + /** + * Data provider for testAroundFlushFormKey + * + * @return array + */ + public function aroundFlushFormKeyProvider() + { + return [ + ['form_key_value', 'form_key_value', 2, 1], + ['form_old_key_value', 'form_key_value', 1, 0], + [null, 'form_key_value', 1, 0] + ]; + } +} From 147f6380f77ce76d2616ae40bff278215ca8d27a Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Mon, 27 Nov 2017 15:07:37 +0200 Subject: [PATCH 360/653] 9742: Default welcome message returns after being deleted #9742 --- .../Theme/Model/Design/Config/Storage.php | 7 +++- .../Magento/Theme/Model/Design/ConfigTest.php | 40 +++++++++++++++++++ .../Magento/Theme/_files/config_data.php | 19 +++++++++ .../Theme/_files/config_data_rollback.php | 13 ++++++ 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Theme/Model/Design/ConfigTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Theme/_files/config_data.php create mode 100644 dev/tests/integration/testsuite/Magento/Theme/_files/config_data_rollback.php diff --git a/app/code/Magento/Theme/Model/Design/Config/Storage.php b/app/code/Magento/Theme/Model/Design/Config/Storage.php index a73f70efa0adf..c97114f963a09 100644 --- a/app/code/Magento/Theme/Model/Design/Config/Storage.php +++ b/app/code/Magento/Theme/Model/Design/Config/Storage.php @@ -87,10 +87,13 @@ public function load($scope, $scopeId) $scopeId, $fieldData->getFieldConfig() ); - if ($value !== null) { - $fieldData->setValue($value); + + if ($value === null) { + $value = ''; } + $fieldData->setValue($value); } + return $designConfig; } diff --git a/dev/tests/integration/testsuite/Magento/Theme/Model/Design/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Theme/Model/Design/ConfigTest.php new file mode 100644 index 0000000000000..0ff43a5fd41ca --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Theme/Model/Design/ConfigTest.php @@ -0,0 +1,40 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Theme\Model\Design; + +/** + * Test for \Magento\Theme\Model\Design\Config\Storage. + */ +class ConfigTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var \Magento\Theme\Model\Design\Config\Storage + */ + private $storage; + + protected function setUp() + { + $this->storage = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + \Magento\Theme\Model\Design\Config\Storage::class + ); + } + + /** + * Test design/header/welcome if it is saved in db as empty(null) it should be shown on backend as empty. + * + * @magentoDataFixture Magento/Theme/_files/config_data.php + */ + public function testLoad() + { + $data = $this->storage->load('stores', 1); + foreach ($data->getExtensionAttributes()->getDesignConfigData() as $configData) { + if ($configData->getPath() == 'design/header/welcome') { + $this->assertSame('', $configData->getValue()); + } + } + } +} diff --git a/dev/tests/integration/testsuite/Magento/Theme/_files/config_data.php b/dev/tests/integration/testsuite/Magento/Theme/_files/config_data.php new file mode 100644 index 0000000000000..b8cbebc1f67c1 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Theme/_files/config_data.php @@ -0,0 +1,19 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +use Magento\Config\Model\Config\Factory; +use Magento\TestFramework\Helper\Bootstrap; + +$objectManager = Bootstrap::getObjectManager(); + +/** @var Factory $configFactory */ +$configFactory = $objectManager->create(Factory::class); +/** @var \Magento\Config\Model\Config $config */ +$config = $configFactory->create(); +$config->setScope('stores'); +$config->setStore('default'); +$config->setDataByPath('design/header/welcome', null); +$config->save(); diff --git a/dev/tests/integration/testsuite/Magento/Theme/_files/config_data_rollback.php b/dev/tests/integration/testsuite/Magento/Theme/_files/config_data_rollback.php new file mode 100644 index 0000000000000..ac02e98b49373 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Theme/_files/config_data_rollback.php @@ -0,0 +1,13 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); +/** @var \Magento\Framework\App\ResourceConnection $resource */ +$resource = $objectManager->get(\Magento\Framework\App\ResourceConnection::class); +$connection = $resource->getConnection(); +$tableName = $resource->getTableName('core_config_data'); + +$connection->query("DELETE FROM $tableName WHERE path = 'design/header/welcome';"); From 62f6b4ca3741ccca07eebdf4e22b2c760a0a0bc1 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko <omiroshnichenko@magento.com> Date: Tue, 28 Nov 2017 12:21:31 +0200 Subject: [PATCH 361/653] MAGETWO-84321: Instant Purchase button displays only for one store view --- .../InstantPurchase/Model/PlaceOrder.php | 46 ++++++++++++++----- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/InstantPurchase/Model/PlaceOrder.php b/app/code/Magento/InstantPurchase/Model/PlaceOrder.php index 3129739ea0937..2ad56a8859cf3 100644 --- a/app/code/Magento/InstantPurchase/Model/PlaceOrder.php +++ b/app/code/Magento/InstantPurchase/Model/PlaceOrder.php @@ -13,7 +13,9 @@ use Magento\InstantPurchase\Model\QuoteManagement\QuoteCreation; use Magento\InstantPurchase\Model\QuoteManagement\QuoteFilling; use Magento\InstantPurchase\Model\QuoteManagement\ShippingConfiguration; +use Magento\Quote\Api\CartRepositoryInterface; use Magento\Store\Model\Store; +use \Throwable; /** * Place an order using instant purchase option. @@ -22,6 +24,11 @@ */ class PlaceOrder { + /** + * @var CartRepositoryInterface + */ + private $quoteRepository; + /** * @var QuoteCreation */ @@ -49,6 +56,7 @@ class PlaceOrder /** * PlaceOrder constructor. + * @param CartRepositoryInterface $quoteRepository * @param QuoteCreation $quoteCreation * @param QuoteFilling $quoteFilling * @param ShippingConfiguration $shippingConfiguration @@ -56,12 +64,14 @@ class PlaceOrder * @param Purchase $purchase */ public function __construct( + CartRepositoryInterface $quoteRepository, QuoteCreation $quoteCreation, QuoteFilling $quoteFilling, ShippingConfiguration $shippingConfiguration, PaymentConfiguration $paymentConfiguration, Purchase $purchase ) { + $this->quoteRepository = $quoteRepository; $this->quoteCreation = $quoteCreation; $this->quoteFilling = $quoteFilling; $this->shippingConfiguration = $shippingConfiguration; @@ -79,6 +89,7 @@ public function __construct( * @param array $productRequest * @return int order identifier * @throws LocalizedException if order can not be placed. + * @throws Throwable if unpredictable error occurred. */ public function placeOrder( Store $store, @@ -98,17 +109,28 @@ public function placeOrder( $product, $productRequest ); - $quote = $this->shippingConfiguration->configureShippingMethod( - $quote, - $instantPurchaseOption->getShippingMethod() - ); - $quote = $this->paymentConfiguration->configurePayment( - $quote, - $instantPurchaseOption->getPaymentToken() - ); - $orderId = $this->purchase->purchase( - $quote - ); - return $orderId; + + $quote->collectTotals(); + $this->quoteRepository->save($quote); + $quote = $this->quoteRepository->get($quote->getId()); + + try { + $quote = $this->shippingConfiguration->configureShippingMethod( + $quote, + $instantPurchaseOption->getShippingMethod() + ); + $quote = $this->paymentConfiguration->configurePayment( + $quote, + $instantPurchaseOption->getPaymentToken() + ); + $orderId = $this->purchase->purchase( + $quote + ); + return $orderId; + } catch (Throwable $e) { + $quote->setIsActive(false); + $this->quoteRepository->save($quote); + throw $e; + } } } From 0a6a2d9b80859261afc01c3027f06babdec878aa Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Tue, 28 Nov 2017 12:26:42 +0200 Subject: [PATCH 362/653] 8830: Can`t delete row in dynamicRows component --- .../view/adminhtml/web/template/form/element/action-delete.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/view/adminhtml/web/template/form/element/action-delete.html b/app/code/Magento/Catalog/view/adminhtml/web/template/form/element/action-delete.html index d4cfb02611416..9a52dcefa3042 100644 --- a/app/code/Magento/Catalog/view/adminhtml/web/template/form/element/action-delete.html +++ b/app/code/Magento/Catalog/view/adminhtml/web/template/form/element/action-delete.html @@ -7,7 +7,7 @@ <button class="action-delete" attr="{'data-action': 'remove_row'}" data-bind=" - click: function(){ $data.processingDeleteRecord($parents); }, + click: function(){ $parent.processingDeleteRecord($record().index, $record.recordId); }, attr: { title: $parent.deleteButtonLabel } From 399ebc7568c727c818b6d70a326dc37a7bb21148 Mon Sep 17 00:00:00 2001 From: Atish Goswami <atishgoswami@gmail.com> Date: Tue, 28 Nov 2017 16:29:16 +0530 Subject: [PATCH 363/653] Product item xtags not needed when display mode for category is static block only --- .../Magento/Catalog/Block/Product/ListProduct.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php index db592353da44a..33488ee1c93c4 100644 --- a/app/code/Magento/Catalog/Block/Product/ListProduct.php +++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php @@ -334,13 +334,21 @@ public function prepareSortableFieldsByCategory($category) public function getIdentities() { $identities = []; - foreach ($this->_getProductCollection() as $item) { - $identities = array_merge($identities, $item->getIdentities()); - } + $category = $this->getLayer()->getCurrentCategory(); if ($category) { $identities[] = Product::CACHE_PRODUCT_CATEGORY_TAG . '_' . $category->getId(); } + + //Check if category page shows only static block (No products) + if ($category->getData('display_mode') == Category::DM_PAGE) { + return $identities; + } + + foreach ($this->_getProductCollection() as $item) { + $identities = array_merge($identities, $item->getIdentities()); + } + return $identities; } From bea9012786145fc7fd031c08aa9939e9fd172b67 Mon Sep 17 00:00:00 2001 From: Atish Goswami <atishgoswami@gmail.com> Date: Tue, 28 Nov 2017 16:50:29 +0530 Subject: [PATCH 364/653] Addes fixes for xtags entities test case --- .../Magento/Catalog/Test/Unit/Block/Product/ListProductTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/ListProductTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/ListProductTest.php index b42357db89041..fe07f69e8046f 100644 --- a/app/code/Magento/Catalog/Test/Unit/Block/Product/ListProductTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/ListProductTest.php @@ -192,7 +192,7 @@ public function testGetIdentities() ->will($this->returnValue($this->toolbarMock)); $this->assertEquals( - [$productTag, $categoryTag], + [$categoryTag, $productTag], $this->block->getIdentities() ); $this->assertEquals( From 56802d3b79d8df232e3a3c303890db012943f4d2 Mon Sep 17 00:00:00 2001 From: Roman Chumak <chumakrom@gmail.com> Date: Tue, 28 Nov 2017 14:42:31 +0200 Subject: [PATCH 365/653] Added namespace to product videos fotorama events --- .../web/js/fotorama-add-video-events.js | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js index 1dfcc95a552c6..c0036b71ac86a 100644 --- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js +++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js @@ -175,10 +175,10 @@ define([ */ clearEvents: function () { this.fotoramaItem.off( - 'fotorama:show ' + - 'fotorama:showend ' + - 'fotorama:fullscreenenter ' + - 'fotorama:fullscreenexit' + 'fotorama:show.' + this.PV + + ' fotorama:showend.' + this.PV + + ' fotorama:fullscreenenter.' + this.PV + + ' fotorama:fullscreenexit.' + this.PV ); }, @@ -232,11 +232,11 @@ define([ * @private */ _listenForFullscreen: function () { - this.fotoramaItem.on('fotorama:fullscreenenter', $.proxy(function () { + this.fotoramaItem.on('fotorama:fullscreenenter.' + this.PV, $.proxy(function () { this.isFullscreen = true; }, this)); - this.fotoramaItem.on('fotorama:fullscreenexit', $.proxy(function () { + this.fotoramaItem.on('fotorama:fullscreenexit.' + this.PV, $.proxy(function () { this.isFullscreen = false; this._hideVideoArrows(); }, this)); @@ -468,7 +468,7 @@ define([ t; if (!fotorama.activeFrame.$navThumbFrame) { - this.fotoramaItem.on('fotorama:showend', $.proxy(function (evt, fotoramaData) { + this.fotoramaItem.on('fotorama:showend.' + this.PV, $.proxy(function (evt, fotoramaData) { $(fotoramaData.activeFrame.$stageFrame).removeAttr('href'); }, this)); @@ -486,7 +486,7 @@ define([ this._checkForVideo(e, fotorama, t + 1); } - this.fotoramaItem.on('fotorama:showend', $.proxy(function (evt, fotoramaData) { + this.fotoramaItem.on('fotorama:showend.' + this.PV, $.proxy(function (evt, fotoramaData) { $(fotoramaData.activeFrame.$stageFrame).removeAttr('href'); }, this)); }, @@ -528,15 +528,15 @@ define([ * @private */ _attachFotoramaEvents: function () { - this.fotoramaItem.on('fotorama:showend', $.proxy(function (e, fotorama) { + this.fotoramaItem.on('fotorama:showend.' + this.PV, $.proxy(function (e, fotorama) { this._startPrepareForPlayer(e, fotorama); }, this)); - this.fotoramaItem.on('fotorama:show', $.proxy(function (e, fotorama) { + this.fotoramaItem.on('fotorama:show.' + this.PV, $.proxy(function (e, fotorama) { this._unloadVideoPlayer(fotorama.activeFrame.$stageFrame.parent(), fotorama, true); }, this)); - this.fotoramaItem.on('fotorama:fullscreenexit', $.proxy(function (e, fotorama) { + this.fotoramaItem.on('fotorama:fullscreenexit.' + this.PV, $.proxy(function (e, fotorama) { fotorama.activeFrame.$stageFrame.find('.' + this.PV).remove(); this._startPrepareForPlayer(e, fotorama); }, this)); From cbbcc1ed356d0fa8aa193d912614352fc9e91aac Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Tue, 28 Nov 2017 15:30:53 +0200 Subject: [PATCH 366/653] 11882: It's not possible to enable "log to file" (debugging) in production mode. Psr logger debug method does not work by the default in developer mode. --- .../Backend/Test/Block/System/Config/Form.php | 50 +++++++++++++++---- .../AssertDeveloperSectionVisibility.php | 43 +++++++++++++--- 2 files changed, 75 insertions(+), 18 deletions(-) diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/Form.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/Form.php index 61a39a441c973..31fadc2cf4f85 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/Form.php +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/Form.php @@ -60,17 +60,7 @@ class Form extends Block */ public function getGroup($tabName, $groupName) { - $this->baseUrl = $this->getBrowserUrl(); - if (substr($this->baseUrl, -1) !== '/') { - $this->baseUrl = $this->baseUrl . '/'; - } - - $tabUrl = $this->getTabUrl($tabName); - - if ($this->getBrowserUrl() !== $tabUrl) { - $this->browser->open($tabUrl); - } - $this->waitForElementNotVisible($this->tabReadiness); + $this->openTab($tabName); $groupElement = $this->_rootElement->find( sprintf($this->groupBlock, $tabName, $groupName), @@ -95,6 +85,24 @@ public function getGroup($tabName, $groupName) return $blockFactory->getMagentoBackendSystemConfigFormGroup($groupElement); } + /** + * Check whether specified group presented on page. + * + * @param string $tabName + * @param string $groupName + * + * @return bool + */ + public function isGroupVisible(string $tabName, string $groupName) + { + $this->openTab($tabName); + + return $this->_rootElement->find( + sprintf($this->groupBlockLink, $tabName, $groupName), + Locator::SELECTOR_CSS + )->isVisible(); + } + /** * Retrieve url associated with the form. */ @@ -137,4 +145,24 @@ private function getTabUrl($tabName) return $tabUrl; } + + /** + * Open specified tab. + * + * @param string $tabName + * @return void + */ + private function openTab(string $tabName) + { + $this->baseUrl = $this->getBrowserUrl(); + if (substr($this->baseUrl, -1) !== '/') { + $this->baseUrl = $this->baseUrl . '/'; + } + $tabUrl = $this->getTabUrl($tabName); + + if ($this->getBrowserUrl() !== $tabUrl) { + $this->browser->open($tabUrl); + } + $this->waitForElementNotVisible($this->tabReadiness); + } } diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertDeveloperSectionVisibility.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertDeveloperSectionVisibility.php index 1e73bb4867e2e..5e2982c1ce3ac 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertDeveloperSectionVisibility.php +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertDeveloperSectionVisibility.php @@ -9,12 +9,29 @@ use Magento\Backend\Test\Page\Adminhtml\SystemConfigEdit; /** - * Assert that Developer section is not present in production mode. + * Assert that all groups in Developer section is not present in production mode except debug group "Log to File" field. */ class AssertDeveloperSectionVisibility extends AbstractConstraint { /** - * Assert Developer section is not present in production mode. + * List of groups not visible in production mode. + * + * @var array + */ + private $groups = [ + 'front_end_development_workflow', + 'restrict', + 'template', + 'translate_inline', + 'js', + 'css', + 'image', + 'static', + 'grid', + ]; + + /** + * Assert all groups in Developer section is not present in production mode except debug group "Log to File" field. * * @param SystemConfigEdit $configEdit * @return void @@ -22,14 +39,26 @@ class AssertDeveloperSectionVisibility extends AbstractConstraint public function processAssert(SystemConfigEdit $configEdit) { if ($_ENV['mage_mode'] === 'production') { - \PHPUnit_Framework_Assert::assertFalse( - in_array('Developer', $configEdit->getTabs()->getSubTabsNames('Advanced')), - 'Developer section should be hidden in production mode.' + foreach ($this->groups as $group) { + \PHPUnit_Framework_Assert::assertFalse( + $configEdit->getForm()->isGroupVisible('dev', $group), + sprintf('%s group should be hidden in production mode.', $group) + ); + } + \PHPUnit_Framework_Assert::assertTrue( + $configEdit->getForm()->getGroup('dev', 'debug')->isFieldVisible('dev', 'debug_debug', 'logging'), + '"Log to File" should be presented in production mode.' ); } else { + foreach ($this->groups as $group) { + \PHPUnit_Framework_Assert::assertTrue( + $configEdit->getForm()->isGroupVisible('dev', $group), + sprintf('%s group should be visible in developer mode.', $group) + ); + } \PHPUnit_Framework_Assert::assertTrue( - in_array('Developer', $configEdit->getTabs()->getSubTabsNames('Advanced')), - 'Developer section should be not hidden in developer or default mode.' + $configEdit->getForm()->isGroupVisible('dev', 'debug'), + 'Debug group should be visible in developer mode.' ); } } From a22d2233be0773e0297bd49e97db05068161d964 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Tue, 28 Nov 2017 16:07:25 +0200 Subject: [PATCH 367/653] 8255: Export Products action doesn't consider hide_for_product_page value. --- .../Model/Import/Product/MediaGalleryProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php index 045f0942021bc..d45881b88c630 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php @@ -110,7 +110,7 @@ public function saveMediaGallery(array $mediaGalleryData) { $this->initMediaGalleryResources(); $mediaGalleryData = $this->restoreDisabledImage($mediaGalleryData); - $mediaGalleryDataGlobal = array_merge(...$mediaGalleryData); + $mediaGalleryDataGlobal = array_replace_recursive(...$mediaGalleryData); $imageNames = []; $multiInsertData = []; $valueToProductId = []; From f95a421d4841d831972126cd07881e6e08138eb4 Mon Sep 17 00:00:00 2001 From: Oleksandr Iegorov <oiegorov@magento.com> Date: Tue, 28 Nov 2017 17:12:37 +0200 Subject: [PATCH 368/653] MAGETWO-84646: Cron jobs incorrect behavior when running job terminated --- .../Cron/Model/ResourceModel/Schedule.php | 3 +- app/code/Magento/Cron/Setup/Recurring.php | 52 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 app/code/Magento/Cron/Setup/Recurring.php diff --git a/app/code/Magento/Cron/Model/ResourceModel/Schedule.php b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php index a47227bb60598..481ef1733ce83 100644 --- a/app/code/Magento/Cron/Model/ResourceModel/Schedule.php +++ b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php @@ -75,7 +75,8 @@ public function trySetJobUniqueStatusAtomic($scheduleId, $newStatus, $currentSta ) ->where('current.schedule_id = ?', $scheduleId) ->where('current.status = ?', $currentStatus) - ->where('existing.schedule_id IS NULL'); + ->where('existing.schedule_id IS NULL') + ->where('existing.executed_at > UTC_TIMESTAMP() - INTERVAL 1 DAY'); //hotfix $update = $connection->updateFromSelect($selectIfUnlocked, ['current' => $this->getTable('cron_schedule')]); $result = $connection->query($update)->rowCount(); diff --git a/app/code/Magento/Cron/Setup/Recurring.php b/app/code/Magento/Cron/Setup/Recurring.php new file mode 100644 index 0000000000000..0faf843592405 --- /dev/null +++ b/app/code/Magento/Cron/Setup/Recurring.php @@ -0,0 +1,52 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Cron\Setup; + + +use Magento\Framework\Setup\InstallSchemaInterface; +use Magento\Framework\Setup\ModuleContextInterface; +use Magento\Framework\Setup\SchemaSetupInterface; + +/** + * @codeCoverageIgnore + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class Recurring implements InstallSchemaInterface +{ + /** + * @var \Magento\Cron\Model\ResourceModel\Schedule + */ + private $schedule; + + /** + * Recurring constructor. + * @param \Magento\Cron\Model\ResourceModel\Schedule $schedule + */ + public function __construct( + \Magento\Cron\Model\ResourceModel\Schedule $schedule + ) { + + $this->schedule = $schedule; + } + + /** + * {@inheritdoc} + */ + public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) + { + + $connection = $this->schedule->getConnection(); + $connection->update( + $this->schedule->getMainTable(), + [ + 'status' => \Magento\Cron\Model\Schedule::STATUS_ERROR, + 'messages' => 'The job is terminated due to system upgrade' + ], + $connection->quoteInto('status = ?', \Magento\Cron\Model\Schedule::STATUS_RUNNING) + ); + } +} From e23f3ee25b06ae85ebd2889b7cf49fa1d2a3867c Mon Sep 17 00:00:00 2001 From: Oleksandr Iegorov <oiegorov@magento.com> Date: Tue, 28 Nov 2017 17:36:11 +0200 Subject: [PATCH 369/653] MAGETWO-84646: Cron jobs incorrect behavior when running job terminated --- app/code/Magento/Cron/Setup/Recurring.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/code/Magento/Cron/Setup/Recurring.php b/app/code/Magento/Cron/Setup/Recurring.php index 0faf843592405..d044f8468f9bf 100644 --- a/app/code/Magento/Cron/Setup/Recurring.php +++ b/app/code/Magento/Cron/Setup/Recurring.php @@ -6,7 +6,6 @@ namespace Magento\Cron\Setup; - use Magento\Framework\Setup\InstallSchemaInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\SchemaSetupInterface; @@ -29,7 +28,6 @@ class Recurring implements InstallSchemaInterface public function __construct( \Magento\Cron\Model\ResourceModel\Schedule $schedule ) { - $this->schedule = $schedule; } @@ -38,7 +36,6 @@ public function __construct( */ public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) { - $connection = $this->schedule->getConnection(); $connection->update( $this->schedule->getMainTable(), From 78bf670a4ea3a9731c559220e56d69120209940d Mon Sep 17 00:00:00 2001 From: Oleksandr Iegorov <oiegorov@magento.com> Date: Tue, 28 Nov 2017 18:29:48 +0200 Subject: [PATCH 370/653] MAGETWO-84646: Cron jobs incorrect behavior when running job terminated --- app/code/Magento/Cron/Model/ResourceModel/Schedule.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Cron/Model/ResourceModel/Schedule.php b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php index 481ef1733ce83..71543293eb47a 100644 --- a/app/code/Magento/Cron/Model/ResourceModel/Schedule.php +++ b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php @@ -76,7 +76,7 @@ public function trySetJobUniqueStatusAtomic($scheduleId, $newStatus, $currentSta ->where('current.schedule_id = ?', $scheduleId) ->where('current.status = ?', $currentStatus) ->where('existing.schedule_id IS NULL') - ->where('existing.executed_at > UTC_TIMESTAMP() - INTERVAL 1 DAY'); //hotfix + ->where('existing.executed_at IS NULL'); //hotfix $update = $connection->updateFromSelect($selectIfUnlocked, ['current' => $this->getTable('cron_schedule')]); $result = $connection->query($update)->rowCount(); From 907552be9e6f0359110c235c523a9910ae8d764b Mon Sep 17 00:00:00 2001 From: rossbrandon <rbrandon@magento.com> Date: Tue, 28 Nov 2017 10:58:29 -0600 Subject: [PATCH 371/653] MAGETWO-84650: Missing periods in Release Notification modal --- .../Magento/ReleaseNotification/i18n/en_US.csv | 16 ++++++++-------- .../ui_component/release_notification.xml | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/ReleaseNotification/i18n/en_US.csv b/app/code/Magento/ReleaseNotification/i18n/en_US.csv index 0f4a1f87b8b4e..4a3cd02782b9c 100644 --- a/app/code/Magento/ReleaseNotification/i18n/en_US.csv +++ b/app/code/Magento/ReleaseNotification/i18n/en_US.csv @@ -15,7 +15,7 @@ payment and shipping information to skip tedious checkout steps.</p> </div> <div class=""email-marketing-highlight""> - <h3>Email Marketing Automation</span></h3> + <h3>Email Marketing Automation</h3> <p>Send smarter, faster email campaigns with marketing automation from dotmailer, powered by your Magento store's live data.</p> </div> @@ -34,7 +34,7 @@ payment and shipping information to skip tedious checkout steps.</p> </div> <div class=""email-marketing-highlight""> - <h3>Email Marketing Automation</span></h3> + <h3>Email Marketing Automation</h3> <p>Send smarter, faster email campaigns with marketing automation from dotmailer, powered by your Magento store's live data.</p> </div> @@ -65,26 +65,26 @@ features include: </p> <ul> - <li><span>Configurable “Instant Purchase” button to place orders</span></li> + <li><span>Configurable “Instant Purchase” button to place orders.</span></li> <li><span>Support for all payment solutions using Braintree Vault, including Braintree Credit Card, Braintree PayPal, and PayPal Payflow Pro.</span></li> <li><span>Shipping to the customer’s default address using the lowest cost, available shipping - method</span></li> + method.</span></li> <li><span>Ability for developers to customize the Instant Purchase business logic to meet - merchant needs</span></li> + merchant needs.</span></li> </ul>","<p>Now you can deliver an Amazon-like experience with a new, streamlined checkout option. Logged-in customers can use previously-stored payment credentials and shipping information to skip steps, making the process faster and easier, especially for mobile shoppers. Key features include: </p> <ul> - <li><span>Configurable “Instant Purchase” button to place orders</span></li> + <li><span>Configurable “Instant Purchase” button to place orders.</span></li> <li><span>Support for all payment solutions using Braintree Vault, including Braintree Credit Card, Braintree PayPal, and PayPal Payflow Pro.</span></li> <li><span>Shipping to the customer’s default address using the lowest cost, available shipping - method</span></li> + method.</span></li> <li><span>Ability for developers to customize the Instant Purchase business logic to meet - merchant needs</span></li> + merchant needs.</span></li> </ul>" "Email Marketing Automation","Email Marketing Automation" "<p>Unlock an unparalleled level of insight and control of your eCommerce marketing with diff --git a/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml b/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml index 1ddfde5cafb9c..0364750d56a38 100644 --- a/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml +++ b/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml @@ -73,7 +73,7 @@ payment and shipping information to skip tedious checkout steps.</p> </div> <div class="email-marketing-highlight"> - <h3>Email Marketing Automation</span></h3> + <h3>Email Marketing Automation</h3> <p>Send smarter, faster email campaigns with marketing automation from dotmailer, powered by your Magento store's live data.</p> </div> @@ -226,13 +226,13 @@ features include: </p> <ul> - <li><span>Configurable “Instant Purchase” button to place orders</span></li> + <li><span>Configurable “Instant Purchase” button to place orders.</span></li> <li><span>Support for all payment solutions using Braintree Vault, including Braintree Credit Card, Braintree PayPal, and PayPal Payflow Pro.</span></li> <li><span>Shipping to the customer’s default address using the lowest cost, available shipping - method</span></li> + method.</span></li> <li><span>Ability for developers to customize the Instant Purchase business logic to meet - merchant needs</span></li> + merchant needs.</span></li> </ul>]]> </item> </item> From 88420db665ce1e5cf0cf02fc29443bccba0b0202 Mon Sep 17 00:00:00 2001 From: Oleksandr Iegorov <oiegorov@magento.com> Date: Tue, 28 Nov 2017 19:28:19 +0200 Subject: [PATCH 372/653] MAGETWO-84646: Cron jobs incorrect behavior when running job terminated --- app/code/Magento/Cron/Model/ResourceModel/Schedule.php | 2 +- app/code/Magento/Cron/Setup/Recurring.php | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Cron/Model/ResourceModel/Schedule.php b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php index 71543293eb47a..91acd5a8a7326 100644 --- a/app/code/Magento/Cron/Model/ResourceModel/Schedule.php +++ b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php @@ -76,7 +76,7 @@ public function trySetJobUniqueStatusAtomic($scheduleId, $newStatus, $currentSta ->where('current.schedule_id = ?', $scheduleId) ->where('current.status = ?', $currentStatus) ->where('existing.schedule_id IS NULL') - ->where('existing.executed_at IS NULL'); //hotfix + ->where('existing.executed_at IS NULL'); $update = $connection->updateFromSelect($selectIfUnlocked, ['current' => $this->getTable('cron_schedule')]); $result = $connection->query($update)->rowCount(); diff --git a/app/code/Magento/Cron/Setup/Recurring.php b/app/code/Magento/Cron/Setup/Recurring.php index d044f8468f9bf..38c9122783bd9 100644 --- a/app/code/Magento/Cron/Setup/Recurring.php +++ b/app/code/Magento/Cron/Setup/Recurring.php @@ -11,8 +11,7 @@ use Magento\Framework\Setup\SchemaSetupInterface; /** - * @codeCoverageIgnore - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * Cron recurring setup */ class Recurring implements InstallSchemaInterface { From 3236d16a48e0ea49cf1124f9931f02398ccd2abb Mon Sep 17 00:00:00 2001 From: rossbrandon <rbrandon@magento.com> Date: Tue, 28 Nov 2017 10:58:29 -0600 Subject: [PATCH 373/653] MAGETWO-84650: Missing periods in Release Notification modal (cherry picked from commit 907552be9e6f0359110c235c523a9910ae8d764b) --- .../Magento/ReleaseNotification/i18n/en_US.csv | 16 ++++++++-------- .../ui_component/release_notification.xml | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/ReleaseNotification/i18n/en_US.csv b/app/code/Magento/ReleaseNotification/i18n/en_US.csv index 0f4a1f87b8b4e..4a3cd02782b9c 100644 --- a/app/code/Magento/ReleaseNotification/i18n/en_US.csv +++ b/app/code/Magento/ReleaseNotification/i18n/en_US.csv @@ -15,7 +15,7 @@ payment and shipping information to skip tedious checkout steps.</p> </div> <div class=""email-marketing-highlight""> - <h3>Email Marketing Automation</span></h3> + <h3>Email Marketing Automation</h3> <p>Send smarter, faster email campaigns with marketing automation from dotmailer, powered by your Magento store's live data.</p> </div> @@ -34,7 +34,7 @@ payment and shipping information to skip tedious checkout steps.</p> </div> <div class=""email-marketing-highlight""> - <h3>Email Marketing Automation</span></h3> + <h3>Email Marketing Automation</h3> <p>Send smarter, faster email campaigns with marketing automation from dotmailer, powered by your Magento store's live data.</p> </div> @@ -65,26 +65,26 @@ features include: </p> <ul> - <li><span>Configurable “Instant Purchase” button to place orders</span></li> + <li><span>Configurable “Instant Purchase” button to place orders.</span></li> <li><span>Support for all payment solutions using Braintree Vault, including Braintree Credit Card, Braintree PayPal, and PayPal Payflow Pro.</span></li> <li><span>Shipping to the customer’s default address using the lowest cost, available shipping - method</span></li> + method.</span></li> <li><span>Ability for developers to customize the Instant Purchase business logic to meet - merchant needs</span></li> + merchant needs.</span></li> </ul>","<p>Now you can deliver an Amazon-like experience with a new, streamlined checkout option. Logged-in customers can use previously-stored payment credentials and shipping information to skip steps, making the process faster and easier, especially for mobile shoppers. Key features include: </p> <ul> - <li><span>Configurable “Instant Purchase” button to place orders</span></li> + <li><span>Configurable “Instant Purchase” button to place orders.</span></li> <li><span>Support for all payment solutions using Braintree Vault, including Braintree Credit Card, Braintree PayPal, and PayPal Payflow Pro.</span></li> <li><span>Shipping to the customer’s default address using the lowest cost, available shipping - method</span></li> + method.</span></li> <li><span>Ability for developers to customize the Instant Purchase business logic to meet - merchant needs</span></li> + merchant needs.</span></li> </ul>" "Email Marketing Automation","Email Marketing Automation" "<p>Unlock an unparalleled level of insight and control of your eCommerce marketing with diff --git a/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml b/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml index 1ddfde5cafb9c..0364750d56a38 100644 --- a/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml +++ b/app/code/Magento/ReleaseNotification/view/adminhtml/ui_component/release_notification.xml @@ -73,7 +73,7 @@ payment and shipping information to skip tedious checkout steps.</p> </div> <div class="email-marketing-highlight"> - <h3>Email Marketing Automation</span></h3> + <h3>Email Marketing Automation</h3> <p>Send smarter, faster email campaigns with marketing automation from dotmailer, powered by your Magento store's live data.</p> </div> @@ -226,13 +226,13 @@ features include: </p> <ul> - <li><span>Configurable “Instant Purchase” button to place orders</span></li> + <li><span>Configurable “Instant Purchase” button to place orders.</span></li> <li><span>Support for all payment solutions using Braintree Vault, including Braintree Credit Card, Braintree PayPal, and PayPal Payflow Pro.</span></li> <li><span>Shipping to the customer’s default address using the lowest cost, available shipping - method</span></li> + method.</span></li> <li><span>Ability for developers to customize the Instant Purchase business logic to meet - merchant needs</span></li> + merchant needs.</span></li> </ul>]]> </item> </item> From 5206728775e3bdee11511acc4ccd1492e1e8b882 Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko <okorshenko@magento.com> Date: Tue, 28 Nov 2017 13:35:51 -0600 Subject: [PATCH 374/653] =?UTF-8?q?MAGETWO-82949:=20do=20the=20stock=20che?= =?UTF-8?q?ck=20on=20default=20level=20because=20the=20stock=20on=20websit?= =?UTF-8?q?e=20leve=E2=80=A6=20#11485?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - fixed unit tests --- .../Product/StockStatusBaseSelectProcessorTest.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/ResourceModel/Product/StockStatusBaseSelectProcessorTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/ResourceModel/Product/StockStatusBaseSelectProcessorTest.php index 9a46dc99ee008..0598fe7e9fe71 100644 --- a/app/code/Magento/CatalogInventory/Test/Unit/Model/ResourceModel/Product/StockStatusBaseSelectProcessorTest.php +++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/ResourceModel/Product/StockStatusBaseSelectProcessorTest.php @@ -56,9 +56,13 @@ public function testProcess() [] ) ->willReturnSelf(); - $this->select->expects($this->once()) + + $this->select->expects($this->exactly(2)) ->method('where') - ->with('stock.stock_status = ?', Stock::STOCK_IN_STOCK) + ->withConsecutive( + ['stock.stock_status = ?', Stock::STOCK_IN_STOCK, null], + ['stock.website_id = ?', 0, null] + ) ->willReturnSelf(); $this->stockStatusBaseSelectProcessor->process($this->select); From 97735bbca7cbe4224dce5fe91fecf6757a14e60e Mon Sep 17 00:00:00 2001 From: "Kristof Ringleff, Fooman" <kristof@fooman.co.nz> Date: Wed, 29 Nov 2017 13:07:42 +1300 Subject: [PATCH 375/653] Skipping stock deploy, adding new command. --- .../Console/Command/DeployMarker.php | 59 +++++++++++++++++++ .../Model/Cron/ReportNewRelicCron.php | 1 - .../Model/ServiceShellUser.php | 22 +++++++ .../Model/Cron/ReportNewRelicCronTest.php | 28 --------- app/code/Magento/NewRelicReporting/etc/di.xml | 8 +++ 5 files changed, 89 insertions(+), 29 deletions(-) create mode 100644 app/code/Magento/NewRelicReporting/Console/Command/DeployMarker.php create mode 100644 app/code/Magento/NewRelicReporting/Model/ServiceShellUser.php diff --git a/app/code/Magento/NewRelicReporting/Console/Command/DeployMarker.php b/app/code/Magento/NewRelicReporting/Console/Command/DeployMarker.php new file mode 100644 index 0000000000000..272b7592cbd15 --- /dev/null +++ b/app/code/Magento/NewRelicReporting/Console/Command/DeployMarker.php @@ -0,0 +1,59 @@ +<?php + +namespace Magento\NewRelicReporting\Console\Command; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Input\InputArgument; + +use Magento\NewRelicReporting\Model\Apm\DeploymentsFactory; +use Magento\NewRelicReporting\Model\ServiceShellUser; + +class DeployMarker extends Command +{ + protected $deploymentsFactory; + protected $serviceShellUser; + + public function __construct( + DeploymentsFactory $deploymentsFactory, + ServiceShellUser $serviceShellUser, + $name = null + ) { + $this->deploymentsFactory = $deploymentsFactory; + $this->serviceShellUser = $serviceShellUser; + parent::__construct($name); + } + + protected function configure() + { + $this->setName("newrelic:create:deploy-marker"); + $this->setDescription("Check the deploy queue for entries and create an appropriate deploy marker.") + ->addArgument( + 'message', + InputArgument::REQUIRED, + 'Deploy Message?' + ) + ->addArgument( + 'changelog', + InputArgument::REQUIRED, + 'Change Log?' + ) + ->addArgument( + 'user', + InputArgument::OPTIONAL, + 'Deployment User' + ); + parent::configure(); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $this->deploymentsFactory->create()->setDeployment( + $input->getArgument('message'), + $input->getArgument('changelog'), + $this->serviceShellUser->get($input->getArgument('user')) + ); + $output->writeln('<info>NewRelic deployment information sent</info>'); + } +} diff --git a/app/code/Magento/NewRelicReporting/Model/Cron/ReportNewRelicCron.php b/app/code/Magento/NewRelicReporting/Model/Cron/ReportNewRelicCron.php index a4a7d30b44f5b..6b2bd50dc456b 100644 --- a/app/code/Magento/NewRelicReporting/Model/Cron/ReportNewRelicCron.php +++ b/app/code/Magento/NewRelicReporting/Model/Cron/ReportNewRelicCron.php @@ -175,7 +175,6 @@ protected function reportCounts() public function report() { if ($this->config->isNewRelicEnabled()) { - $this->reportModules(); $this->reportCounts(); } diff --git a/app/code/Magento/NewRelicReporting/Model/ServiceShellUser.php b/app/code/Magento/NewRelicReporting/Model/ServiceShellUser.php new file mode 100644 index 0000000000000..8262428d9bf2b --- /dev/null +++ b/app/code/Magento/NewRelicReporting/Model/ServiceShellUser.php @@ -0,0 +1,22 @@ +<?php + +namespace Magento\NewRelicReporting\Model; + +class ServiceShellUser +{ + const DEFAULT_USER = 'cron'; + + public function get($userFromArgument = false) + { + if ($userFromArgument) { + return $userFromArgument; + } + + $user = `echo \$USER`; + if ($user) { + return $user; + } + + return self::DEFAULT_USER; + } +} diff --git a/app/code/Magento/NewRelicReporting/Test/Unit/Model/Cron/ReportNewRelicCronTest.php b/app/code/Magento/NewRelicReporting/Test/Unit/Model/Cron/ReportNewRelicCronTest.php index 70fdcd0b6191c..400bcefa9828b 100644 --- a/app/code/Magento/NewRelicReporting/Test/Unit/Model/Cron/ReportNewRelicCronTest.php +++ b/app/code/Magento/NewRelicReporting/Test/Unit/Model/Cron/ReportNewRelicCronTest.php @@ -144,24 +144,10 @@ public function testReportNewRelicCronModuleDisabledFromConfig() */ public function testReportNewRelicCron() { - $testModuleData = [ - 'changes' => [ - ['name' => 'name', 'setup_version' => '2.0.0', 'type' => 'enabled'], - ['name' => 'name', 'setup_version' => '2.0.0', 'type' => 'disabled'], - ['name' => 'name', 'setup_version' => '2.0.0', 'type' => 'installed'], - ['name' => 'name', 'setup_version' => '2.0.0', 'type' => 'uninstalled'], - ], - 'enabled' => 1, - 'disabled' => 1, - 'installed' => 1, - ]; $this->config->expects($this->once()) ->method('isNewRelicEnabled') ->willReturn(true); - $this->collect->expects($this->once()) - ->method('getModuleData') - ->willReturn($testModuleData); $this->counter->expects($this->once()) ->method('getAllProductsCount'); $this->counter->expects($this->once()) @@ -198,24 +184,10 @@ public function testReportNewRelicCron() */ public function testReportNewRelicCronRequestFailed() { - $testModuleData = [ - 'changes' => [ - ['name' => 'name', 'setup_version' => '2.0.0', 'type' => 'enabled'], - ['name' => 'name', 'setup_version' => '2.0.0', 'type' => 'disabled'], - ['name' => 'name', 'setup_version' => '2.0.0', 'type' => 'installed'], - ['name' => 'name', 'setup_version' => '2.0.0', 'type' => 'uninstalled'], - ], - 'enabled' => 1, - 'disabled' => 1, - 'installed' => 1, - ]; $this->config->expects($this->once()) ->method('isNewRelicEnabled') ->willReturn(true); - $this->collect->expects($this->once()) - ->method('getModuleData') - ->willReturn($testModuleData); $this->counter->expects($this->once()) ->method('getAllProductsCount'); $this->counter->expects($this->once()) diff --git a/app/code/Magento/NewRelicReporting/etc/di.xml b/app/code/Magento/NewRelicReporting/etc/di.xml index cba92f91cd4bb..9cfe909571a96 100644 --- a/app/code/Magento/NewRelicReporting/etc/di.xml +++ b/app/code/Magento/NewRelicReporting/etc/di.xml @@ -30,4 +30,12 @@ <type name="Magento\Framework\App\Http"> <plugin name="framework-http-newrelic" type="Magento\NewRelicReporting\Plugin\HttpPlugin"/> </type> + <type name="Magento\Framework\Console\CommandList"> + <arguments> + <argument name="commands" xsi:type="array"> + <item name="magento_new_relic_reporting_command_deploy_marker" + xsi:type="object">Magento\NewRelicReporting\Console\Command\DeployMarker</item> + </argument> + </arguments> + </type> </config> From 3e8619710a566877da8e023ab5c7ad2579426bd8 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Wed, 29 Nov 2017 11:10:48 +0200 Subject: [PATCH 376/653] 11882: It's not possible to enable "log to file" (debugging) in production mode. Psr logger debug method does not work by the default in developer mode. --- .../Backend/Test/Constraint/AssertDeveloperSectionVisibility.php | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertDeveloperSectionVisibility.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertDeveloperSectionVisibility.php index 5e2982c1ce3ac..e443ef5a205e4 100644 --- a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertDeveloperSectionVisibility.php +++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertDeveloperSectionVisibility.php @@ -38,6 +38,7 @@ class AssertDeveloperSectionVisibility extends AbstractConstraint */ public function processAssert(SystemConfigEdit $configEdit) { + $configEdit->open(); if ($_ENV['mage_mode'] === 'production') { foreach ($this->groups as $group) { \PHPUnit_Framework_Assert::assertFalse( From d3168e37b2346330314593f34cdec6b02807d14e Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Wed, 29 Nov 2017 10:58:43 +0100 Subject: [PATCH 377/653] 12178 Fix integration tests The "getOption" method was called more often than before, so we had to adjust that. --- .../Model/Logger/Handler/DebugTest.php | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php b/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php index 4291ac18e1b10..3bef48d8801f7 100644 --- a/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php +++ b/dev/tests/integration/testsuite/Magento/Developer/Model/Logger/Handler/DebugTest.php @@ -113,22 +113,24 @@ private function enableDebugging() ->getMockForAbstractClass(); $this->outputMock = $this->getMockBuilder(OutputInterface::class) ->getMockForAbstractClass(); - $this->inputMock->expects($this->exactly(2)) - ->method('getArgument') - ->withConsecutive([ConfigSetCommand::ARG_PATH], [ConfigSetCommand::ARG_VALUE]) - ->willReturnOnConsecutiveCalls('dev/debug/debug_logging', 1); - $this->inputMock->expects($this->exactly(3)) + $this->inputMock->expects($this->exactly(4)) ->method('getOption') ->withConsecutive( + [ConfigSetCommand::OPTION_LOCK_ENV], + [ConfigSetCommand::OPTION_LOCK_CONFIG], [ConfigSetCommand::OPTION_SCOPE], - [ConfigSetCommand::OPTION_SCOPE_CODE], - [ConfigSetCommand::OPTION_LOCK_ENV] + [ConfigSetCommand::OPTION_SCOPE_CODE] ) ->willReturnOnConsecutiveCalls( + true, + false, ScopeConfigInterface::SCOPE_TYPE_DEFAULT, - null, - true + null ); + $this->inputMock->expects($this->exactly(2)) + ->method('getArgument') + ->withConsecutive([ConfigSetCommand::ARG_PATH], [ConfigSetCommand::ARG_VALUE]) + ->willReturnOnConsecutiveCalls('dev/debug/debug_logging', 1); $this->outputMock->expects($this->once()) ->method('writeln') ->with('<info>Value was saved in app/etc/env.php and locked.</info>'); From bab1a384116544e3ef346dd377a791d6c51f84f4 Mon Sep 17 00:00:00 2001 From: David Manners <dmanners87@gmail.com> Date: Wed, 29 Nov 2017 10:09:12 +0000 Subject: [PATCH 378/653] Extract image and lavel processing for media attributes into their own method --- .../Model/Product/Gallery/CreateHandler.php | 110 +++++++++++------- 1 file changed, 71 insertions(+), 39 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php b/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php index 22340801c0a6a..528ebd6632188 100644 --- a/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php +++ b/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php @@ -167,45 +167,13 @@ public function execute($product, $arguments = []) if (empty($attrData) && empty($clearImages) && empty($newImages) && empty($existImages)) { continue; } - $resetLabel = false; - if (in_array($attrData, $clearImages)) { - $product->setData($mediaAttrCode, 'no_selection'); - $product->setData($mediaAttrCode . '_label', null); - $resetLabel = true; - } - - if (in_array($attrData, array_keys($newImages))) { - $product->setData($mediaAttrCode, $newImages[$attrData]['new_file']); - $product->setData($mediaAttrCode . '_label', $newImages[$attrData]['label']); - } - - if (in_array($attrData, array_keys($existImages)) && isset($existImages[$attrData]['label'])) { - $product->setData($mediaAttrCode . '_label', $existImages[$attrData]['label']); - } - - if ($attrData === 'no_selection' && !empty($product->getData($mediaAttrCode . '_label'))) { - $product->setData($mediaAttrCode . '_label', null); - $resetLabel = true; - } - if (!empty($product->getData($mediaAttrCode))) { - $product->addAttributeUpdate( - $mediaAttrCode, - $product->getData($mediaAttrCode), - $product->getStoreId() - ); - } - if (in_array($mediaAttrCode, ['image', 'small_image', 'thumbnail']) && - ( - !empty($product->getData($mediaAttrCode . '_label')) - || $resetLabel === true - ) - ) { - $product->addAttributeUpdate( - $mediaAttrCode . '_label', - $product->getData($mediaAttrCode . '_label'), - $product->getStoreId() - ); - } + $this->processMediaAttribute( + $product, + $mediaAttrCode, + $clearImages, + $newImages, + $existImages + ); } $product->setData($attrCode, $value); @@ -468,4 +436,68 @@ private function getMediaAttributeCodes() } return $this->mediaAttributeCodes; } + + /** + * @param \Magento\Catalog\Model\Product $product + * @param $attrData + * @param array $clearImages + * @param $mediaAttrCode + * @param array $newImages + * @param array $existImages + */ + /** + * @param \Magento\Catalog\Model\Product $product + * @param $mediaAttrCode + * @param array $clearImages + * @param array $newImages + * @param array $existImages + */ + private function processMediaAttribute( + \Magento\Catalog\Model\Product $product, + $mediaAttrCode, + array $clearImages, + array $newImages, + array $existImages + ) { + $resetLabel = false; + $attrData = $product->getData($mediaAttrCode); + if (in_array($attrData, $clearImages)) { + $product->setData($mediaAttrCode, 'no_selection'); + $product->setData($mediaAttrCode . '_label', null); + $resetLabel = true; + } + + if (in_array($attrData, array_keys($newImages))) { + $product->setData($mediaAttrCode, $newImages[$attrData]['new_file']); + $product->setData($mediaAttrCode . '_label', $newImages[$attrData]['label']); + } + + if (in_array($attrData, array_keys($existImages)) && isset($existImages[$attrData]['label'])) { + $product->setData($mediaAttrCode . '_label', $existImages[$attrData]['label']); + } + + if ($attrData === 'no_selection' && !empty($product->getData($mediaAttrCode . '_label'))) { + $product->setData($mediaAttrCode . '_label', null); + $resetLabel = true; + } + if (in_array($mediaAttrCode, ['image', 'small_image', 'thumbnail']) && + ( + !empty($product->getData($mediaAttrCode . '_label')) + || $resetLabel === true + ) + ) { + $product->addAttributeUpdate( + $mediaAttrCode . '_label', + $product->getData($mediaAttrCode . '_label'), + $product->getStoreId() + ); + } + if (!empty($product->getData($mediaAttrCode))) { + $product->addAttributeUpdate( + $mediaAttrCode, + $product->getData($mediaAttrCode), + $product->getStoreId() + ); + } + } } From 6c2e6e25892d6570f76960006edb12b2067d07b8 Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Wed, 29 Nov 2017 11:50:51 +0100 Subject: [PATCH 379/653] 12178 Code style optimizations to prevent CodeSniffer errors --- .../Magento/Config/Console/Command/ConfigSetCommand.php | 7 +++++-- .../Console/Command/ConfigSet/DefaultProcessorTest.php | 2 ++ .../Console/Command/ConfigSet/ProcessorFacadeTest.php | 9 ++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Config/Console/Command/ConfigSetCommand.php b/app/code/Magento/Config/Console/Command/ConfigSetCommand.php index b257041ac8259..3962aab01b463 100644 --- a/app/code/Magento/Config/Console/Command/ConfigSetCommand.php +++ b/app/code/Magento/Config/Console/Command/ConfigSetCommand.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Config\Console\Command; use Magento\Config\App\Config\Type\System; @@ -74,7 +75,8 @@ public function __construct( ChangeDetector $changeDetector, ProcessorFacadeFactory $processorFacadeFactory, DeploymentConfig $deploymentConfig - ) { + ) + { $this->emulatedAreaProcessor = $emulatedAreaProcessor; $this->changeDetector = $changeDetector; $this->processorFacadeFactory = $processorFacadeFactory; @@ -121,7 +123,8 @@ protected function configure() static::OPTION_LOCK_CONFIG, 'lc', InputOption::VALUE_NONE, - 'Lock and share value with other installations, prevents modification in the Admin (will be saved in app/etc/config.php)' + 'Lock and share value with other installations, prevents modification in the Admin ' + . '(will be saved in app/etc/config.php)' ), new InputOption( static::OPTION_LOCK, diff --git a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/DefaultProcessorTest.php b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/DefaultProcessorTest.php index c4550a4e5ad3c..984e0fe842687 100644 --- a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/DefaultProcessorTest.php +++ b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/DefaultProcessorTest.php @@ -166,7 +166,9 @@ private function configMockForProcessTest($path, $scope, $scopeCode) /** * @expectedException \Magento\Framework\Exception\LocalizedException + * @codingStandardsIgnoreStart * @expectedExceptionMessage The value you set has already been locked. To change the value, use the --lock-env option. + * @codingStandardsIgnoreEnd */ public function testProcessLockedValue() { diff --git a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php index 6f7cbbef2ce18..c14cc4110a0b4 100644 --- a/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php +++ b/app/code/Magento/Config/Test/Unit/Console/Command/ConfigSet/ProcessorFacadeTest.php @@ -240,7 +240,14 @@ public function testExecuteLockConfig() $this->assertSame( 'Value was saved in app/etc/config.php and locked.', - $this->model->process('test/test/test', 'test', ScopeConfigInterface::SCOPE_TYPE_DEFAULT, null, true, ConfigFilePool::APP_CONFIG) + $this->model->process( + 'test/test/test', + 'test', + ScopeConfigInterface::SCOPE_TYPE_DEFAULT, + null, + true, + ConfigFilePool::APP_CONFIG + ) ); } } From 813f57d4eaf1d0ba370c7995c0e82aab497bbd59 Mon Sep 17 00:00:00 2001 From: Andrii Dimov <adimov@magento.com> Date: Wed, 29 Nov 2017 12:51:35 +0200 Subject: [PATCH 380/653] MAGETWO-83826: Fix path for additional unit tests --- dev/tests/unit/phpunit.xml.dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/unit/phpunit.xml.dist b/dev/tests/unit/phpunit.xml.dist index a9fa9787c07dc..b35b53a68b780 100644 --- a/dev/tests/unit/phpunit.xml.dist +++ b/dev/tests/unit/phpunit.xml.dist @@ -19,7 +19,7 @@ <directory suffix="Test.php">../../../vendor/*/module-*/Test/Unit</directory> <directory suffix="Test.php">../../../vendor/*/framework/Test/Unit</directory> <directory suffix="Test.php">../../../vendor/*/framework/*/Test/Unit</directory> - <directory suffix="Test.php">../../tests/unit/*/*/Test/Unit</directory> + <directory suffix="Test.php">./*/*/Test/Unit</directory> </testsuite> <php> <ini name="date.timezone" value="America/Los_Angeles"/> From 2d72ea0c7866f260a65e2fa57970232a7508e8c5 Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Wed, 29 Nov 2017 12:06:53 +0100 Subject: [PATCH 381/653] 12178 More code style optimizations to prevent CodeSniffer errors --- app/code/Magento/Config/Console/Command/ConfigSetCommand.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/code/Magento/Config/Console/Command/ConfigSetCommand.php b/app/code/Magento/Config/Console/Command/ConfigSetCommand.php index 3962aab01b463..23592aff7bfd0 100644 --- a/app/code/Magento/Config/Console/Command/ConfigSetCommand.php +++ b/app/code/Magento/Config/Console/Command/ConfigSetCommand.php @@ -75,8 +75,7 @@ public function __construct( ChangeDetector $changeDetector, ProcessorFacadeFactory $processorFacadeFactory, DeploymentConfig $deploymentConfig - ) - { + ) { $this->emulatedAreaProcessor = $emulatedAreaProcessor; $this->changeDetector = $changeDetector; $this->processorFacadeFactory = $processorFacadeFactory; From d6fa9dbdfc1c54802df495aed1ec085813198470 Mon Sep 17 00:00:00 2001 From: David Manners <dmanners87@gmail.com> Date: Wed, 29 Nov 2017 11:27:48 +0000 Subject: [PATCH 382/653] Solve some complexity issues with the save handler --- .../Model/Product/Gallery/CreateHandler.php | 56 ++++++++++++------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php b/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php index 528ebd6632188..976e9e2448a3e 100644 --- a/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php +++ b/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php @@ -171,9 +171,17 @@ public function execute($product, $arguments = []) $product, $mediaAttrCode, $clearImages, - $newImages, - $existImages + $newImages ); + if (in_array($mediaAttrCode, ['image', 'small_image', 'thumbnail'])) { + $this->processMediaAttributeLabel( + $product, + $mediaAttrCode, + $clearImages, + $newImages, + $existImages + ); + } } $product->setData($attrCode, $value); @@ -439,12 +447,32 @@ private function getMediaAttributeCodes() /** * @param \Magento\Catalog\Model\Product $product - * @param $attrData - * @param array $clearImages * @param $mediaAttrCode + * @param array $clearImages * @param array $newImages - * @param array $existImages */ + private function processMediaAttribute( + \Magento\Catalog\Model\Product $product, + $mediaAttrCode, + array $clearImages, + array $newImages + ) { + $attrData = $product->getData($mediaAttrCode); + if (in_array($attrData, $clearImages)) { + $product->setData($mediaAttrCode, 'no_selection'); + } + + if (in_array($attrData, array_keys($newImages))) { + $product->setData($mediaAttrCode, $newImages[$attrData]['new_file']); + } + if (!empty($product->getData($mediaAttrCode))) { + $product->addAttributeUpdate( + $mediaAttrCode, + $product->getData($mediaAttrCode), + $product->getStoreId() + ); + } + } /** * @param \Magento\Catalog\Model\Product $product * @param $mediaAttrCode @@ -452,7 +480,7 @@ private function getMediaAttributeCodes() * @param array $newImages * @param array $existImages */ - private function processMediaAttribute( + private function processMediaAttributeLabel( \Magento\Catalog\Model\Product $product, $mediaAttrCode, array $clearImages, @@ -462,13 +490,11 @@ private function processMediaAttribute( $resetLabel = false; $attrData = $product->getData($mediaAttrCode); if (in_array($attrData, $clearImages)) { - $product->setData($mediaAttrCode, 'no_selection'); $product->setData($mediaAttrCode . '_label', null); $resetLabel = true; } if (in_array($attrData, array_keys($newImages))) { - $product->setData($mediaAttrCode, $newImages[$attrData]['new_file']); $product->setData($mediaAttrCode . '_label', $newImages[$attrData]['label']); } @@ -480,11 +506,8 @@ private function processMediaAttribute( $product->setData($mediaAttrCode . '_label', null); $resetLabel = true; } - if (in_array($mediaAttrCode, ['image', 'small_image', 'thumbnail']) && - ( - !empty($product->getData($mediaAttrCode . '_label')) - || $resetLabel === true - ) + if (!empty($product->getData($mediaAttrCode . '_label')) + || $resetLabel === true ) { $product->addAttributeUpdate( $mediaAttrCode . '_label', @@ -492,12 +515,5 @@ private function processMediaAttribute( $product->getStoreId() ); } - if (!empty($product->getData($mediaAttrCode))) { - $product->addAttributeUpdate( - $mediaAttrCode, - $product->getData($mediaAttrCode), - $product->getStoreId() - ); - } } } From ae5454a71ff3b01545f3e8a090d472a391f3449b Mon Sep 17 00:00:00 2001 From: David Manners <dmanners87@gmail.com> Date: Wed, 29 Nov 2017 11:31:34 +0000 Subject: [PATCH 383/653] Make sure there is a space between the two new methods --- app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php b/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php index 976e9e2448a3e..cb045aee20899 100644 --- a/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php +++ b/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php @@ -473,6 +473,7 @@ private function processMediaAttribute( ); } } + /** * @param \Magento\Catalog\Model\Product $product * @param $mediaAttrCode From 2bbb26abaa5acae57f275238e741e0a37bdc3e69 Mon Sep 17 00:00:00 2001 From: Oleksandr Iegorov <oiegorov@magento.com> Date: Wed, 29 Nov 2017 14:08:29 +0200 Subject: [PATCH 384/653] MAGETWO-84646: Cron jobs incorrect behavior when running job terminated --- .../Cron/Model/ResourceModel/Schedule.php | 12 +++++++--- .../Magento/Cron/Model/ScheduleTest.php | 24 ++++++++++++++++++- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Cron/Model/ResourceModel/Schedule.php b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php index 91acd5a8a7326..25dd02c207f4e 100644 --- a/app/code/Magento/Cron/Model/ResourceModel/Schedule.php +++ b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php @@ -66,7 +66,14 @@ public function trySetJobUniqueStatusAtomic($scheduleId, $newStatus, $currentSta { $connection = $this->getConnection(); - $match = $connection->quoteInto('existing.job_code = current.job_code AND existing.status = ?', $newStatus); + // this condition added to avoid cron jobs locking after incorrect termination of running job + $match = $connection->quoteInto( + 'existing.job_code = current.job_code ' . + 'AND (existing.executed_at > UTC_TIMESTAMP() - INTERVAL 1 DAY OR existing.executed_at IS NULL) ' . + 'AND existing.status = ?', + $newStatus + ); + $selectIfUnlocked = $connection->select() ->joinLeft( ['existing' => $this->getTable('cron_schedule')], @@ -75,8 +82,7 @@ public function trySetJobUniqueStatusAtomic($scheduleId, $newStatus, $currentSta ) ->where('current.schedule_id = ?', $scheduleId) ->where('current.status = ?', $currentStatus) - ->where('existing.schedule_id IS NULL') - ->where('existing.executed_at IS NULL'); + ->where('existing.schedule_id IS NULL'); $update = $connection->updateFromSelect($selectIfUnlocked, ['current' => $this->getTable('cron_schedule')]); $result = $connection->query($update)->rowCount(); diff --git a/dev/tests/integration/testsuite/Magento/Cron/Model/ScheduleTest.php b/dev/tests/integration/testsuite/Magento/Cron/Model/ScheduleTest.php index 4e31ea1f18a3a..d61a7de59939b 100644 --- a/dev/tests/integration/testsuite/Magento/Cron/Model/ScheduleTest.php +++ b/dev/tests/integration/testsuite/Magento/Cron/Model/ScheduleTest.php @@ -54,6 +54,27 @@ public function testTryLockJobAlreadyLockedFails() $this->assertFalse($schedule->tryLockJob()); } + /** + * If the job is already locked but lock time less than 1 day ago, attempting to lock it again should fail + */ + public function testTryLockJobAlreadyLockedSucceeds() + { + $offsetInThePast = 2*24*60*60; + + $oldSchedule = $this->scheduleFactory->create() + ->setCronExpr("* * * * *") + ->setJobCode("test_job") + ->setStatus(Schedule::STATUS_RUNNING) + ->setCreatedAt(strftime('%Y-%m-%d %H:%M:%S', $this->dateTime->gmtTimestamp() - $offsetInThePast)) + ->setScheduledAt(strftime('%Y-%m-%d %H:%M', $this->dateTime->gmtTimestamp() - $offsetInThePast + 60)) + ->setExecutedAt(strftime('%Y-%m-%d %H:%M', $this->dateTime->gmtTimestamp() - $offsetInThePast + 61)); + $oldSchedule->save(); + + $schedule = $this->createSchedule("test_job", Schedule::STATUS_PENDING); + + $this->assertTrue($schedule->tryLockJob()); + } + /** * If there's a job already locked, should not be able to lock another job */ @@ -82,9 +103,10 @@ public function testTryLockJobDifferentJobLocked() * @param string $jobCode * @param string $status * @param int $timeOffset + * @param int $executionTimeOffset * @return Schedule */ - private function createSchedule($jobCode, $status, $timeOffset = 0) + private function createSchedule($jobCode, $status, $timeOffset = 0, $executionTimeOffset = 0) { $schedule = $this->scheduleFactory->create() ->setCronExpr("* * * * *") From d02fd00bc608fa4372dfe68f5ef0445ac161144d Mon Sep 17 00:00:00 2001 From: Oleksandr Iegorov <oiegorov@magento.com> Date: Wed, 29 Nov 2017 14:30:16 +0200 Subject: [PATCH 385/653] MAGETWO-84646: Cron jobs incorrect behavior when running job terminated --- .../integration/testsuite/Magento/Cron/Model/ScheduleTest.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Cron/Model/ScheduleTest.php b/dev/tests/integration/testsuite/Magento/Cron/Model/ScheduleTest.php index d61a7de59939b..7b64eb36050f6 100644 --- a/dev/tests/integration/testsuite/Magento/Cron/Model/ScheduleTest.php +++ b/dev/tests/integration/testsuite/Magento/Cron/Model/ScheduleTest.php @@ -103,10 +103,9 @@ public function testTryLockJobDifferentJobLocked() * @param string $jobCode * @param string $status * @param int $timeOffset - * @param int $executionTimeOffset * @return Schedule */ - private function createSchedule($jobCode, $status, $timeOffset = 0, $executionTimeOffset = 0) + private function createSchedule($jobCode, $status, $timeOffset = 0) { $schedule = $this->scheduleFactory->create() ->setCronExpr("* * * * *") From e46c8fdd6a28f422bf4e008924af21dbfd3ffffb Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Wed, 29 Nov 2017 17:27:09 +0200 Subject: [PATCH 386/653] 8255: Export Products action doesn't consider hide_for_product_page value. --- .../Model/Import/Product.php | 19 ++-------- .../Import/Product/MediaGalleryProcessor.php | 38 +------------------ .../Model/Import/ProductTest.php | 2 +- 3 files changed, 6 insertions(+), 53 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php index 43d39b92978cd..9dbeaeaba6938 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php @@ -1670,17 +1670,10 @@ protected function _saveProducts() $disabledImages = array_flip( explode($this->getMultipleValueSeparator(), $rowData['_media_is_disabled']) ); - foreach ($disabledImages as $disabledImage => $position) { - $uploadedFile = $this->uploadMediaFiles($disabledImage, true); - $uploadedFile = $uploadedFile ?: $this->getSystemFile($disabledImage); - $mediaGallery[$storeId][$rowSku][$uploadedFile] = [ - 'attribute_id' => $this->getMediaGalleryAttributeId(), - 'label' => $rowLabels[self::COL_MEDIA_IMAGE][$position] ?? '', - 'position' => $position, - 'disabled' => 1, - 'value' => $disabledImage, - 'store_id' => $storeId, - ]; + if (empty($rowImages)) { + foreach (array_keys($disabledImages) as $disabledImage) { + $rowImages[self::COL_MEDIA_IMAGE][] = $disabledImage; + } } } $rowData[self::COL_MEDIA_IMAGE] = []; @@ -1740,10 +1733,6 @@ protected function _saveProducts() } } - //Add images to restore "hide from product page" value for specified store and product. - if (empty($mediaGallery[$storeId][$rowSku])) { - $mediaGallery[$storeId][$rowSku]['all'] = ['restore' => true]; - } // 6. Attributes phase $rowStore = (self::SCOPE_STORE == $rowScope) ? $this->storeResolver->getStoreCodeToId($rowData[self::COL_STORE]) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php index d45881b88c630..ec7c6a1172996 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/MediaGalleryProcessor.php @@ -109,7 +109,6 @@ public function __construct( public function saveMediaGallery(array $mediaGalleryData) { $this->initMediaGalleryResources(); - $mediaGalleryData = $this->restoreDisabledImage($mediaGalleryData); $mediaGalleryDataGlobal = array_replace_recursive(...$mediaGalleryData); $imageNames = []; $multiInsertData = []; @@ -134,9 +133,7 @@ public function saveMediaGallery(array $mediaGalleryData) $this->connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value']) ->where('value IN (?)', $imageNames) ); - if (!empty($multiInsertData)) { - $this->connection->insertOnDuplicate($this->mediaGalleryTableName, $multiInsertData); - } + $this->connection->insertOnDuplicate($this->mediaGalleryTableName, $multiInsertData); $newMediaSelect = $this->connection->select()->from($this->mediaGalleryTableName, ['value_id', 'value']) ->where('value IN (?)', $imageNames); if (array_keys($oldMediaValues)) { @@ -263,39 +260,6 @@ private function initMediaGalleryResources() } } - /** - * Set product images 'disable' = 0 for specified store. - * - * @param array $mediaGalleryData - * @return array - */ - private function restoreDisabledImage(array $mediaGalleryData) - { - $restoreData = []; - foreach (array_keys($mediaGalleryData) as $storeId) { - foreach ($mediaGalleryData[$storeId] as $productSku => $mediaGalleryRows) { - $productId = $this->skuProcessor->getNewSku($productSku)[$this->getProductEntityLinkField()]; - $restoreData[] = sprintf( - 'store_id = %s and %s = %s', - $storeId, - $this->getProductEntityLinkField(), - $productId - ); - if (isset($mediaGalleryRows['all']['restore'])) { - unset($mediaGalleryData[$storeId][$productSku]); - } - } - } - - $this->connection->update( - $this->mediaGalleryValueTableName, - ['disabled' => 0], - new \Zend_Db_Expr(implode(' or ', $restoreData)) - ); - - return $mediaGalleryData; - } - /** * Save media gallery data per store. * diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php index 3d4dd7c9cf8b9..6c673ad4712a1 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/ProductTest.php @@ -1983,7 +1983,7 @@ public function testImportImageForNonDefaultStore() $product = $this->getProductBySku('simple_with_images'); $mediaGallery = $product->getData('media_gallery'); foreach ($mediaGallery['images'] as $image) { - $image['file'] === 'magento_image.jpg' + $image['file'] === '/m/a/magento_image.jpg' ? self::assertSame('1', $image['disabled']) : self::assertSame('0', $image['disabled']); } From 617b57fdfec249641b297aa1621e39b401a4a645 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Wed, 29 Nov 2017 18:01:22 +0200 Subject: [PATCH 387/653] 12468: Sort by Price not working on CatalogSearch Page in Magento 2 --- .../Catalog/view/frontend/web/js/product/list/toolbar.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js b/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js index 88be03a04e71a..c620675a31a26 100644 --- a/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js +++ b/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js @@ -99,9 +99,6 @@ define([ } paramData[paramName] = paramValue; - if (paramValue == defaultValue) { //eslint-disable-line eqeqeq - delete paramData[paramName]; - } paramData = $.param(paramData); location.href = baseUrl + (paramData.length ? '?' + paramData : ''); From 2e14441b0e3629b8c6d4034834501475750f120d Mon Sep 17 00:00:00 2001 From: rossbrandon <rbrandon@magento.com> Date: Wed, 29 Nov 2017 12:38:21 -0600 Subject: [PATCH 388/653] MAGETWO-84649: Add Cloud deployment support for Advanced Reporting configurations --- app/code/Magento/Analytics/etc/di.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/code/Magento/Analytics/etc/di.xml b/app/code/Magento/Analytics/etc/di.xml index 56657b58475d3..b9bb9cc9ff00c 100644 --- a/app/code/Magento/Analytics/etc/di.xml +++ b/app/code/Magento/Analytics/etc/di.xml @@ -254,4 +254,22 @@ <argument name="responseResolver" xsi:type="object">NotifyDataChangedResponseResolver</argument> </arguments> </type> + <type name="Magento\Config\Model\Config\TypePool"> + <arguments> + <argument name="sensitive" xsi:type="array"> + <item name="analytics/url/signup" xsi:type="string">1</item> + <item name="analytics/url/update" xsi:type="string">1</item> + <item name="analytics/url/bi_essentials" xsi:type="string">1</item> + <item name="analytics/url/otp" xsi:type="string">1</item> + <item name="analytics/url/report" xsi:type="string">1</item> + <item name="analytics/url/notify_data_changed" xsi:type="string">1</item> + <item name="analytics/general/token" xsi:type="string">1</item> + </argument> + <argument name="environment" xsi:type="array"> + <item name="crontab/default/jobs/analytics_collect_data/schedule/cron_expr" xsi:type="string">1</item> + <item name="crontab/default/jobs/analytics_update/schedule/cron_expr" xsi:type="string">1</item> + <item name="crontab/default/jobs/analytics_subscribe/schedule/cron_expr" xsi:type="string">1</item> + </argument> + </arguments> + </type> </config> From 110c14240f65e4c6b7df488454d1616a64f386bd Mon Sep 17 00:00:00 2001 From: rossbrandon <rbrandon@magento.com> Date: Wed, 29 Nov 2017 14:40:26 -0600 Subject: [PATCH 389/653] MAGETWO-84649: Add Cloud deployment support for Advanced Reporting configurations --- app/code/Magento/Analytics/etc/di.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/code/Magento/Analytics/etc/di.xml b/app/code/Magento/Analytics/etc/di.xml index 56657b58475d3..b9bb9cc9ff00c 100644 --- a/app/code/Magento/Analytics/etc/di.xml +++ b/app/code/Magento/Analytics/etc/di.xml @@ -254,4 +254,22 @@ <argument name="responseResolver" xsi:type="object">NotifyDataChangedResponseResolver</argument> </arguments> </type> + <type name="Magento\Config\Model\Config\TypePool"> + <arguments> + <argument name="sensitive" xsi:type="array"> + <item name="analytics/url/signup" xsi:type="string">1</item> + <item name="analytics/url/update" xsi:type="string">1</item> + <item name="analytics/url/bi_essentials" xsi:type="string">1</item> + <item name="analytics/url/otp" xsi:type="string">1</item> + <item name="analytics/url/report" xsi:type="string">1</item> + <item name="analytics/url/notify_data_changed" xsi:type="string">1</item> + <item name="analytics/general/token" xsi:type="string">1</item> + </argument> + <argument name="environment" xsi:type="array"> + <item name="crontab/default/jobs/analytics_collect_data/schedule/cron_expr" xsi:type="string">1</item> + <item name="crontab/default/jobs/analytics_update/schedule/cron_expr" xsi:type="string">1</item> + <item name="crontab/default/jobs/analytics_subscribe/schedule/cron_expr" xsi:type="string">1</item> + </argument> + </arguments> + </type> </config> From fe7e75f59b9950866956d4e7299aef4b252cc88e Mon Sep 17 00:00:00 2001 From: Cy Kirsch <cykirsch@gmail.com> Date: Wed, 29 Nov 2017 22:27:49 -0600 Subject: [PATCH 390/653] Format generated config files using the short array syntax --- .../DeploymentConfig/Writer/PhpFormatter.php | 27 ++++++++++++++++++- .../Writer/PhpFormatterTest.php | 26 +++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php b/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php index b419b3827e5ff..c1e7d557479f8 100644 --- a/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php +++ b/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php @@ -11,6 +11,8 @@ */ class PhpFormatter implements FormatterInterface { + const INDENT = ' '; + /** * Format deployment configuration. * If $comments is present, each item will be added @@ -23,7 +25,7 @@ public function format($data, array $comments = []) if (!empty($comments) && is_array($data)) { return "<?php\nreturn array (\n" . $this->formatData($data, $comments) . "\n);\n"; } - return "<?php\nreturn " . var_export($data, true) . ";\n"; + return "<?php\nreturn " . $this->varExportShort($data, true) . ";\n"; } /** @@ -65,4 +67,27 @@ private function formatData($data, $comments = [], $prefix = ' ') return var_export($data, true); } + + /** + * If variable to export is an array, format with the php >= 5.4 short array syntax. Otherwise use + * default var_export functionality. + * + * @param mixed $var + * @param integer $depth + * @return string + */ + private function varExportShort($var, $depth=0) { + if (gettype($var) === 'array') { + $indexed = array_keys($var) === range(0, count($var) - 1); + $r = []; + foreach ($var as $key => $value) { + $r[] = str_repeat(self::INDENT, $depth) + . ($indexed ? '' : $this->varExportShort($key) . ' => ') + . $this->varExportShort($value, $depth + 1); + } + return sprintf("[\n%s\n%s]", implode(",\n", $r), str_repeat(self::INDENT, $depth - 1)); + } + + return var_export($var, TRUE); + } } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/DeploymentConfig/Writer/PhpFormatterTest.php b/lib/internal/Magento/Framework/App/Test/Unit/DeploymentConfig/Writer/PhpFormatterTest.php index a1fdedc701e8c..7e6ad7b02fcd9 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/DeploymentConfig/Writer/PhpFormatterTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/DeploymentConfig/Writer/PhpFormatterTest.php @@ -129,13 +129,37 @@ public function formatWithCommentDataProvider() 'ns4' => 'just text', ); +TEXT; + + $expectedResult3 = <<<TEXT +<?php +return [ + 'ns1' => [ + 's1' => [ + 's11', + 's12' + ], + 's2' => [ + 's21', + 's22' + ] + ], + 'ns2' => [ + 's1' => [ + 's11' + ] + ], + 'ns3' => 'just text', + 'ns4' => 'just text' +]; + TEXT; return [ ['string', [], "<?php\nreturn 'string';\n"], ['string', ['comment'], "<?php\nreturn 'string';\n"], - [$array, [], "<?php\nreturn " . var_export($array, true) . ";\n"], [$array, $comments1, $expectedResult1], [$array, $comments2, $expectedResult2], + [$array, [], $expectedResult3], ]; } } From d5188385a449b4a14db73b11ff79ed5e4e8618b4 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Thu, 30 Nov 2017 10:54:54 +0200 Subject: [PATCH 391/653] 12468: Sort by Price not working on CatalogSearch Page in Magento 2 --- .../Catalog/view/frontend/web/js/product/list/toolbar.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js b/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js index c620675a31a26..259ca979206e9 100644 --- a/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js +++ b/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js @@ -78,6 +78,7 @@ define([ ); }, + /*eslint-disable no-unused-vars*/ /** * @param {String} paramName * @param {*} paramValue @@ -105,5 +106,7 @@ define([ } }); + /*eslint-enable no-unused-vars*/ + return $.mage.productListToolbarForm; }); From fe3033e36ff583598e443cb85aa53b031c2551a4 Mon Sep 17 00:00:00 2001 From: Vova Yatsyuk <vova.yatsyuk@gmail.com> Date: Thu, 30 Nov 2017 13:24:06 +0200 Subject: [PATCH 392/653] Fixed invalid parameter type in phpdoc block --- app/code/Magento/Theme/Block/Html/Topmenu.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Theme/Block/Html/Topmenu.php b/app/code/Magento/Theme/Block/Html/Topmenu.php index b1b22e06d7172..1052eb604f62a 100644 --- a/app/code/Magento/Theme/Block/Html/Topmenu.php +++ b/app/code/Magento/Theme/Block/Html/Topmenu.php @@ -331,7 +331,7 @@ protected function _getMenuItemClasses(\Magento\Framework\Data\Tree\Node $item) /** * Add identity * - * @param array $identity + * @param string $identity * @return void */ public function addIdentity($identity) From 8e426fe9a0b4e5dcaba084224d0b0a98c82e5e07 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Thu, 30 Nov 2017 14:24:59 +0200 Subject: [PATCH 393/653] 12482: Sitemap image links in MultiStore --- app/code/Magento/Sitemap/Model/Sitemap.php | 1 + app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/app/code/Magento/Sitemap/Model/Sitemap.php b/app/code/Magento/Sitemap/Model/Sitemap.php index f6a5f029eafca..cad8023bd2794 100644 --- a/app/code/Magento/Sitemap/Model/Sitemap.php +++ b/app/code/Magento/Sitemap/Model/Sitemap.php @@ -273,6 +273,7 @@ public function collectSitemapItems() /** @var $helper \Magento\Sitemap\Helper\Data */ $helper = $this->_sitemapData; $storeId = $this->getStoreId(); + $this->_storeManager->setCurrentStore($storeId); $this->addSitemapItem(new DataObject( [ diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php index 83210c5789776..4f55653fad311 100644 --- a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php +++ b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php @@ -253,6 +253,8 @@ public function testGenerateXml($maxLines, $maxFileSize, $expectedFile, $expecte $expectedWrites, null ); + $this->storeManagerMock->expects($this->once())->method('setCurrentStore')->with(1); + $model->generateXml(); $this->assertCount(count($expectedFile), $actualData, 'Number of generated files is incorrect'); @@ -360,6 +362,8 @@ public function testAddSitemapToRobotsTxt($maxLines, $maxFileSize, $expectedFile $expectedWrites, $robotsInfo ); + $this->storeManagerMock->expects($this->once())->method('setCurrentStore')->with(1); + $model->generateXml(); } From c8ddf6ba9c0b3095db46ee1243f708891817af10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Mateos?= <raumatbel@gmail.com> Date: Sat, 21 Oct 2017 14:28:30 +0200 Subject: [PATCH 394/653] Fix re saving product attribute --- .../Adminhtml/Product/Attribute/Save.php | 146 +++++++++++------- .../Adminhtml/Product/AttributeTest.php | 4 +- 2 files changed, 93 insertions(+), 57 deletions(-) diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php index f2803c2399474..98d5182bbadb2 100644 --- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php +++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php @@ -5,79 +5,95 @@ * See COPYING.txt for license details. */ -// @codingStandardsIgnoreFile - namespace Magento\Catalog\Controller\Adminhtml\Product\Attribute; +use Magento\Backend\App\Action\Context; +use Magento\Backend\Model\View\Result\Redirect; +use Magento\Catalog\Controller\Adminhtml\Product\Attribute; +use Magento\Catalog\Model\Product\AttributeSet\BuildFactory; +use Magento\Catalog\Helper\Product; +use Magento\Catalog\Api\Data\ProductAttributeInterface; +use Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory; +use Magento\Eav\Model\Entity\Attribute\Set; +use Magento\Eav\Model\Adminhtml\System\Config\Source\Inputtype\Validator; +use Magento\Eav\Model\Adminhtml\System\Config\Source\Inputtype\ValidatorFactory; +use Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory; +use Magento\Framework\Cache\FrontendInterface; use Magento\Framework\Controller\ResultFactory; +use Magento\Framework\Controller\Result\Json; use Magento\Framework\Exception\AlreadyExistsException; +use Magento\Framework\Exception\LocalizedException; +use Magento\Framework\Filter\FilterManager; +use Magento\Framework\Registry; +use Magento\Framework\View\LayoutFactory; +use Magento\Framework\View\Result\PageFactory; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ -class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute +class Save extends Attribute { /** - * @var \Magento\Catalog\Model\Product\AttributeSet\BuildFactory + * @var BuildFactory */ protected $buildFactory; /** - * @var \Magento\Framework\Filter\FilterManager + * @var FilterManager */ protected $filterManager; /** - * @var \Magento\Catalog\Helper\Product + * @var Product */ protected $productHelper; /** - * @var \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory + * @var AttributeFactory */ protected $attributeFactory; /** - * @var \Magento\Eav\Model\Adminhtml\System\Config\Source\Inputtype\ValidatorFactory + * @var ValidatorFactory */ protected $validatorFactory; /** - * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory + * @var CollectionFactory */ protected $groupCollectionFactory; /** - * @var \Magento\Framework\View\LayoutFactory + * @var LayoutFactory */ private $layoutFactory; /** - * @param \Magento\Backend\App\Action\Context $context - * @param \Magento\Framework\Cache\FrontendInterface $attributeLabelCache - * @param \Magento\Framework\Registry $coreRegistry - * @param \Magento\Catalog\Model\Product\AttributeSet\BuildFactory $buildFactory - * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory - * @param \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory $attributeFactory - * @param \Magento\Eav\Model\Adminhtml\System\Config\Source\Inputtype\ValidatorFactory $validatorFactory - * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $groupCollectionFactory - * @param \Magento\Framework\Filter\FilterManager $filterManager - * @param \Magento\Catalog\Helper\Product $productHelper - * @param \Magento\Framework\View\LayoutFactory $layoutFactory + * @param Context $context + * @param FrontendInterface $attributeLabelCache + * @param Registry $coreRegistry + * @param BuildFactory $buildFactory + * @param PageFactory $resultPageFactory + * @param AttributeFactory $attributeFactory + * @param ValidatorFactory $validatorFactory + * @param CollectionFactory $groupCollectionFactory + * @param FilterManager $filterManager + * @param Product $productHelper + * @param LayoutFactory $layoutFactory * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( - \Magento\Backend\App\Action\Context $context, - \Magento\Framework\Cache\FrontendInterface $attributeLabelCache, - \Magento\Framework\Registry $coreRegistry, - \Magento\Framework\View\Result\PageFactory $resultPageFactory, - \Magento\Catalog\Model\Product\AttributeSet\BuildFactory $buildFactory, - \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory $attributeFactory, - \Magento\Eav\Model\Adminhtml\System\Config\Source\Inputtype\ValidatorFactory $validatorFactory, - \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $groupCollectionFactory, - \Magento\Framework\Filter\FilterManager $filterManager, - \Magento\Catalog\Helper\Product $productHelper, - \Magento\Framework\View\LayoutFactory $layoutFactory + Context $context, + FrontendInterface $attributeLabelCache, + Registry $coreRegistry, + PageFactory $resultPageFactory, + BuildFactory $buildFactory, + AttributeFactory $attributeFactory, + ValidatorFactory $validatorFactory, + CollectionFactory $groupCollectionFactory, + FilterManager $filterManager, + Product $productHelper, + LayoutFactory $layoutFactory ) { parent::__construct($context, $attributeLabelCache, $coreRegistry, $resultPageFactory); $this->buildFactory = $buildFactory; @@ -90,7 +106,7 @@ public function __construct( } /** - * @return \Magento\Backend\Model\View\Result\Redirect + * @return Redirect * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) @@ -107,36 +123,51 @@ public function execute() $name = trim($name); try { - /** @var $attributeSet \Magento\Eav\Model\Entity\Attribute\Set */ + /** @var $attributeSet Set */ $attributeSet = $this->buildFactory->create() ->setEntityTypeId($this->_entityTypeId) ->setSkeletonId($setId) ->setName($name) ->getAttributeSet(); } catch (AlreadyExistsException $alreadyExists) { - $this->messageManager->addError(__('An attribute set named \'%1\' already exists.', $name)); + $this->messageManager->addErrorMessage(__('An attribute set named \'%1\' already exists.', $name)); $this->_session->setAttributeData($data); + return $this->returnResult('catalog/*/edit', ['_current' => true], ['error' => true]); - } catch (\Magento\Framework\Exception\LocalizedException $e) { - $this->messageManager->addError($e->getMessage()); + } catch (LocalizedException $e) { + $this->messageManager->addErrorMessage($e->getMessage()); } catch (\Exception $e) { - $this->messageManager->addException($e, __('Something went wrong while saving the attribute.')); + $this->messageManager->addExceptionMessage( + $e, + __('Something went wrong while saving the attribute.') + ); } } $attributeId = $this->getRequest()->getParam('attribute_id'); - $attributeCode = $this->getRequest()->getParam('attribute_code') - ?: $this->generateCode($this->getRequest()->getParam('frontend_label')[0]); + + /** @var $model ProductAttributeInterface */ + $model = $this->attributeFactory->create(); + if ($attributeId) { + $model->load($attributeId); + } + $attributeCode = $model && $model->getId() + ? $model->getAttributeCode() + : $this->getRequest()->getParam('attribute_code'); + $attributeCode = $attributeCode ?: $this->generateCode($this->getRequest()->getParam('frontend_label')[0]); if (strlen($attributeCode) > 0) { - $validatorAttrCode = new \Zend_Validate_Regex(['pattern' => '/^[a-z\x{600}-\x{6FF}][a-z\x{600}-\x{6FF}_0-9]{0,30}$/u']); + $validatorAttrCode = new \Zend_Validate_Regex( + ['pattern' => '/^[a-z\x{600}-\x{6FF}][a-z\x{600}-\x{6FF}_0-9]{0,30}$/u'] + ); if (!$validatorAttrCode->isValid($attributeCode)) { - $this->messageManager->addError( + $this->messageManager->addErrorMessage( __( 'Attribute code "%1" is invalid. Please use only letters (a-z), ' . 'numbers (0-9) or underscore(_) in this field, first character should be a letter.', $attributeCode ) ); + return $this->returnResult( 'catalog/*/edit', ['attribute_id' => $attributeId, '_current' => true], @@ -148,12 +179,13 @@ public function execute() //validate frontend_input if (isset($data['frontend_input'])) { - /** @var $inputType \Magento\Eav\Model\Adminhtml\System\Config\Source\Inputtype\Validator */ + /** @var $inputType Validator */ $inputType = $this->validatorFactory->create(); if (!$inputType->isValid($data['frontend_input'])) { foreach ($inputType->getMessages() as $message) { - $this->messageManager->addError($message); + $this->messageManager->addErrorMessage($message); } + return $this->returnResult( 'catalog/*/edit', ['attribute_id' => $attributeId, '_current' => true], @@ -162,19 +194,17 @@ public function execute() } } - /* @var $model \Magento\Catalog\Model\ResourceModel\Eav\Attribute */ - $model = $this->attributeFactory->create(); - if ($attributeId) { - $model->load($attributeId); if (!$model->getId()) { - $this->messageManager->addError(__('This attribute no longer exists.')); + $this->messageManager->addErrorMessage(__('This attribute no longer exists.')); + return $this->returnResult('catalog/*/', [], ['error' => true]); } // entity type check if ($model->getEntityTypeId() != $this->_entityTypeId) { - $this->messageManager->addError(__('We can\'t update the attribute.')); + $this->messageManager->addErrorMessage(__('We can\'t update the attribute.')); $this->_session->setAttributeData($data); + return $this->returnResult('catalog/*/', [], ['error' => true]); } @@ -195,7 +225,7 @@ public function execute() $data += ['is_filterable' => 0, 'is_filterable_in_search' => 0]; - if (is_null($model->getIsUserDefined()) || $model->getIsUserDefined() != 0) { + if ($model->getIsUserDefined() === null || $model->getIsUserDefined() != 0) { $data['backend_type'] = $model->getBackendTypeByInput($data['frontend_input']); } @@ -241,7 +271,7 @@ public function execute() try { $model->save(); - $this->messageManager->addSuccess(__('You saved the product attribute.')); + $this->messageManager->addSuccessMessage(__('You saved the product attribute.')); $this->_attributeLabelCache->clean(); $this->_session->setAttributeData(false); @@ -252,9 +282,10 @@ public function execute() '_current' => true, 'product_tab' => $this->getRequest()->getParam('product_tab'), ]; - if (!is_null($attributeSet)) { + if ($attributeSet !== null) { $requestParams['new_attribute_set_id'] = $attributeSet->getId(); } + return $this->returnResult('catalog/product/addAttribute', $requestParams, ['error' => false]); } elseif ($this->getRequest()->getParam('back', false)) { return $this->returnResult( @@ -263,10 +294,12 @@ public function execute() ['error' => false] ); } + return $this->returnResult('catalog/*/', [], ['error' => false]); } catch (\Exception $e) { - $this->messageManager->addError($e->getMessage()); + $this->messageManager->addErrorMessage($e->getMessage()); $this->_session->setAttributeData($data); + return $this->returnResult( 'catalog/*/edit', ['attribute_id' => $attributeId, '_current' => true], @@ -274,6 +307,7 @@ public function execute() ); } } + return $this->returnResult('catalog/*/', [], ['error' => true]); } @@ -281,7 +315,7 @@ public function execute() * @param string $path * @param array $params * @param array $response - * @return \Magento\Framework\Controller\Result\Json|\Magento\Backend\Model\View\Result\Redirect + * @return Json|Redirect */ private function returnResult($path = '', array $params = [], array $response = []) { @@ -291,8 +325,10 @@ private function returnResult($path = '', array $params = [], array $response = $response['messages'] = [$layout->getMessagesBlock()->getGroupedHtml()]; $response['params'] = $params; + return $this->resultFactory->create(ResultFactory::TYPE_JSON)->setData($response); } + return $this->resultFactory->create(ResultFactory::TYPE_REDIRECT)->setPath($path, $params); } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php index 48928b4c5c9ac..6e93f61c1eb3a 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php @@ -128,12 +128,12 @@ public function testAttributeWithoutId() */ public function testWrongAttributeCode() { - $postData = $this->_getAttributeData() + ['attribute_id' => '2', 'attribute_code' => '_()&&&?']; + $postData = $this->_getAttributeData() + ['attribute_code' => '_()&&&?']; $this->getRequest()->setPostValue($postData); $this->dispatch('backend/catalog/product_attribute/save'); $this->assertEquals(302, $this->getResponse()->getHttpResponseCode()); $this->assertContains( - 'catalog/product_attribute/edit/attribute_id/2', + 'catalog/product_attribute/edit', $this->getResponse()->getHeader('Location')->getFieldValue() ); /** @var \Magento\Framework\Message\Collection $messages */ From 80520c5b7d5579603a514e5c45e47ec2cce40000 Mon Sep 17 00:00:00 2001 From: Vova Yatsyuk <vovayatsyuk@users.noreply.github.com> Date: Thu, 30 Nov 2017 15:56:52 +0200 Subject: [PATCH 395/653] Add array type, as it is allowed to use too --- app/code/Magento/Theme/Block/Html/Topmenu.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Theme/Block/Html/Topmenu.php b/app/code/Magento/Theme/Block/Html/Topmenu.php index 1052eb604f62a..7747576988077 100644 --- a/app/code/Magento/Theme/Block/Html/Topmenu.php +++ b/app/code/Magento/Theme/Block/Html/Topmenu.php @@ -331,7 +331,7 @@ protected function _getMenuItemClasses(\Magento\Framework\Data\Tree\Node $item) /** * Add identity * - * @param string $identity + * @param string|array $identity * @return void */ public function addIdentity($identity) From 4597c4fd70f35966405b03a5292276256eba0091 Mon Sep 17 00:00:00 2001 From: Cy Kirsch <cykirsch@gmail.com> Date: Thu, 30 Nov 2017 09:30:25 -0600 Subject: [PATCH 396/653] Fix the config formatter scenarios with $comments to also use short array syntax --- .../DeploymentConfig/Writer/PhpFormatter.php | 10 ++-- .../Writer/PhpFormatterTest.php | 48 +++++++++---------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php b/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php index c1e7d557479f8..ef0b3a5d29092 100644 --- a/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php +++ b/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php @@ -23,7 +23,7 @@ class PhpFormatter implements FormatterInterface public function format($data, array $comments = []) { if (!empty($comments) && is_array($data)) { - return "<?php\nreturn array (\n" . $this->formatData($data, $comments) . "\n);\n"; + return "<?php\nreturn [\n" . $this->formatData($data, $comments) . "\n];\n"; } return "<?php\nreturn " . $this->varExportShort($data, true) . ";\n"; } @@ -53,13 +53,13 @@ private function formatData($data, $comments = [], $prefix = ' ') $elements[] = $prefix . " */"; } - $elements[] = $prefix . var_export($key, true) . ' => ' . - (!is_array($value) ? var_export($value, true) . ',' : ''); + $elements[] = $prefix . $this->varExportShort($key) . ' => ' . + (!is_array($value) ? $this->varExportShort($value) . ',' : ''); if (is_array($value)) { - $elements[] = $prefix . 'array ('; + $elements[] = $prefix . '['; $elements[] = $this->formatData($value, [], ' ' . $prefix); - $elements[] = $prefix . '),'; + $elements[] = $prefix . '],'; } } return implode("\n", $elements); diff --git a/lib/internal/Magento/Framework/App/Test/Unit/DeploymentConfig/Writer/PhpFormatterTest.php b/lib/internal/Magento/Framework/App/Test/Unit/DeploymentConfig/Writer/PhpFormatterTest.php index 7e6ad7b02fcd9..cc673e084c3b2 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/DeploymentConfig/Writer/PhpFormatterTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/DeploymentConfig/Writer/PhpFormatterTest.php @@ -55,68 +55,68 @@ public function formatWithCommentDataProvider() ]; $expectedResult1 = <<<TEXT <?php -return array ( +return [ 'ns1' => - array ( + [ 's1' => - array ( + [ 0 => 's11', 1 => 's12', - ), + ], 's2' => - array ( + [ 0 => 's21', 1 => 's22', - ), - ), + ], + ], /** * For the section: ns2 * comment for namespace 2 */ 'ns2' => - array ( + [ 's1' => - array ( + [ 0 => 's11', - ), - ), + ], + ], 'ns3' => 'just text', 'ns4' => 'just text', -); +]; TEXT; $expectedResult2 = <<<TEXT <?php -return array ( +return [ /** * For the section: ns1 * comment for' namespace 1 */ 'ns1' => - array ( + [ 's1' => - array ( + [ 0 => 's11', 1 => 's12', - ), + ], 's2' => - array ( + [ 0 => 's21', 1 => 's22', - ), - ), + ], + ], /** * For the section: ns2 * comment for namespace 2. * Next comment for' namespace 2 */ 'ns2' => - array ( + [ 's1' => - array ( + [ 0 => 's11', - ), - ), + ], + ], /** * For the section: ns3 * comment for" namespace 3 @@ -127,7 +127,7 @@ public function formatWithCommentDataProvider() * comment for namespace 4 */ 'ns4' => 'just text', -); +]; TEXT; From b1b604e8afec254d5d82fcd96a6c5cf9010fa442 Mon Sep 17 00:00:00 2001 From: Volodymyr Kublytskyi <vkublytskyi@magento.com> Date: Thu, 30 Nov 2017 18:31:42 +0200 Subject: [PATCH 397/653] MAGETWO-80111: Keep maintenance mode on if it was previously enabled #11052 - revert backward incompatible changes - fix temporal coupling in \Magento\Framework\App\Console\MaintenanceModeEnabler - cover maintenance mode with unit test - revert changes in unit test to ensure code have same behavior after refactoring --- app/code/Magento/Deploy/Model/Mode.php | 54 ++++---- .../Deploy/Test/Unit/Model/ModeTest.php | 8 +- .../Console/Command/ThemeUninstallCommand.php | 69 ++++++---- .../Command/ThemeUninstallCommandTest.php | 16 ++- .../App/Console/MaintenanceModeEnabler.php | 30 ++++- .../Console/MaintenanceModeEnablerTest.php | 122 ++++++++++++++++++ .../Setup/Console/Command/BackupCommand.php | 88 +++++++------ .../Command/ModuleUninstallCommand.php | 92 +++++++------ .../Setup/Console/Command/RollbackCommand.php | 71 +++++----- .../Console/Command/BackupCommandTest.php | 19 ++- .../Command/ModuleUninstallCommandTest.php | 8 +- .../Console/Command/RollbackCommandTest.php | 22 ++-- 12 files changed, 405 insertions(+), 194 deletions(-) create mode 100644 lib/internal/Magento/Framework/App/Test/Unit/Console/MaintenanceModeEnablerTest.php diff --git a/app/code/Magento/Deploy/Model/Mode.php b/app/code/Magento/Deploy/Model/Mode.php index 58ffad17fd25b..2aca266dcef63 100644 --- a/app/code/Magento/Deploy/Model/Mode.php +++ b/app/code/Magento/Deploy/Model/Mode.php @@ -12,6 +12,7 @@ use Magento\Framework\App\DeploymentConfig\Reader; use Magento\Framework\App\DeploymentConfig\Writer; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\App\MaintenanceMode; use Magento\Framework\App\State; use Magento\Framework\Config\File\ConfigFilePool; use Symfony\Component\Console\Input\InputInterface; @@ -49,11 +50,6 @@ class Mode */ private $reader; - /** - * @var MaintenanceModeEnabler - */ - private $maintenanceMode; - /** * @var Filesystem */ @@ -78,33 +74,41 @@ class Mode */ private $emulatedAreaProcessor; + /** + * @var MaintenanceModeEnabler + */ + private $maintenanceModeEnabler; + /** * @param InputInterface $input * @param OutputInterface $output * @param Writer $writer * @param Reader $reader - * @param MaintenanceModeEnabler $maintenanceMode + * @param MaintenanceMode $maintenanceMode deprecated, use $maintenanceModeEnabler instead * @param Filesystem $filesystem * @param ConfigProvider $configProvider * @param ProcessorFacadeFactory $processorFacadeFactory * @param EmulatedAdminhtmlAreaProcessor $emulatedAreaProcessor + * @param MaintenanceModeEnabler $maintenanceModeEnabler + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( InputInterface $input, OutputInterface $output, Writer $writer, Reader $reader, - MaintenanceModeEnabler $maintenanceMode, + MaintenanceMode $maintenanceMode, Filesystem $filesystem, ConfigProvider $configProvider = null, ProcessorFacadeFactory $processorFacadeFactory = null, - EmulatedAdminhtmlAreaProcessor $emulatedAreaProcessor = null + EmulatedAdminhtmlAreaProcessor $emulatedAreaProcessor = null, + MaintenanceModeEnabler $maintenanceModeEnabler = null ) { $this->input = $input; $this->output = $output; $this->writer = $writer; $this->reader = $reader; - $this->maintenanceMode = $maintenanceMode; $this->filesystem = $filesystem; $this->configProvider = @@ -113,6 +117,8 @@ public function __construct( $processorFacadeFactory ?: ObjectManager::getInstance()->get(ProcessorFacadeFactory::class); $this->emulatedAreaProcessor = $emulatedAreaProcessor ?: ObjectManager::getInstance()->get(EmulatedAdminhtmlAreaProcessor::class); + $this->maintenanceModeEnabler = + $maintenanceModeEnabler ?: ObjectManager::getInstance()->get(MaintenanceModeEnabler::class); } /** @@ -123,19 +129,23 @@ public function __construct( */ public function enableProductionMode() { - $this->maintenanceMode->enableMaintenanceMode($this->output); - $previousMode = $this->getMode(); - try { - // We have to turn on production mode before generation. - // We need this to enable generation of the "min" files. - $this->setStoreMode(State::MODE_PRODUCTION); - $this->filesystem->regenerateStatic($this->output); - } catch (LocalizedException $e) { - // We have to return store mode to previous state in case of error. - $this->setStoreMode($previousMode); - throw $e; - } - $this->maintenanceMode->disableMaintenanceMode($this->output); + $this->maintenanceModeEnabler->executeInMaintenanceMode( + function () { + $previousMode = $this->getMode(); + try { + // We have to turn on production mode before generation. + // We need this to enable generation of the "min" files. + $this->setStoreMode(State::MODE_PRODUCTION); + $this->filesystem->regenerateStatic($this->output); + } catch (LocalizedException $e) { + // We have to return store mode to previous state in case of error. + $this->setStoreMode($previousMode); + throw $e; + } + }, + $this->output, + false + ); } /** diff --git a/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php b/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php index 3a171228a88f9..a108153d65e11 100644 --- a/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php +++ b/app/code/Magento/Deploy/Test/Unit/Model/ModeTest.php @@ -15,6 +15,7 @@ use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig\Reader; use Magento\Framework\App\DeploymentConfig\Writer; +use Magento\Framework\App\MaintenanceMode; use Magento\Framework\App\State; use PHPUnit_Framework_MockObject_MockObject as Mock; use Symfony\Component\Console\Input\InputInterface; @@ -54,7 +55,7 @@ class ModeTest extends \PHPUnit\Framework\TestCase private $writerMock; /** - * @var MaintenanceModeEnabler|Mock + * @var MaintenanceMode|Mock */ private $maintenanceMock; @@ -95,7 +96,7 @@ protected function setUp() $this->readerMock = $this->getMockBuilder(Reader::class) ->disableOriginalConstructor() ->getMock(); - $this->maintenanceMock = $this->getMockBuilder(MaintenanceModeEnabler::class) + $this->maintenanceMock = $this->getMockBuilder(MaintenanceMode::class) ->disableOriginalConstructor() ->getMock(); $this->filesystemMock = $this->getMockBuilder(Filesystem::class) @@ -124,7 +125,8 @@ protected function setUp() $this->filesystemMock, $this->configProvider, $this->processorFacadeFactory, - $this->emulatedAreaProcessor + $this->emulatedAreaProcessor, + new MaintenanceModeEnabler($this->maintenanceMock) ); } diff --git a/app/code/Magento/Theme/Console/Command/ThemeUninstallCommand.php b/app/code/Magento/Theme/Console/Command/ThemeUninstallCommand.php index def73c33e8a8a..540fd962a4f2e 100644 --- a/app/code/Magento/Theme/Console/Command/ThemeUninstallCommand.php +++ b/app/code/Magento/Theme/Console/Command/ThemeUninstallCommand.php @@ -6,9 +6,10 @@ namespace Magento\Theme\Console\Command; -use Magento\Framework\App\Area; use Magento\Framework\App\Cache; +use Magento\Framework\App\MaintenanceMode; use Magento\Framework\App\Console\MaintenanceModeEnabler; +use Magento\Framework\App\ObjectManager; use Magento\Framework\App\State\CleanupFiles; use Magento\Framework\Composer\ComposerInformation; use Magento\Framework\Composer\DependencyChecker; @@ -39,11 +40,6 @@ class ThemeUninstallCommand extends Command const INPUT_KEY_THEMES = 'theme'; const INPUT_KEY_CLEAR_STATIC_CONTENT = 'clear-static-content'; - /** - * @var MaintenanceModeEnabler - */ - private $maintenanceMode; - /** * Composer general dependency checker * @@ -114,13 +110,18 @@ class ThemeUninstallCommand extends Command */ private $themeDependencyChecker; + /** + * @var MaintenanceModeEnabler + */ + private $maintenanceModeEnabler; + /** * Constructor * * @param Cache $cache * @param CleanupFiles $cleanupFiles * @param ComposerInformation $composer - * @param MaintenanceModeEnabler $maintenanceMode + * @param MaintenanceMode $maintenanceMode deprecated, use $maintenanceModeEnabler instead * @param DependencyChecker $dependencyChecker * @param Collection $themeCollection * @param BackupRollbackFactory $backupRollbackFactory @@ -128,24 +129,27 @@ class ThemeUninstallCommand extends Command * @param ThemePackageInfo $themePackageInfo * @param ThemeUninstaller $themeUninstaller * @param ThemeDependencyChecker $themeDependencyChecker + * @param MaintenanceModeEnabler $maintenanceModeEnabler + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( Cache $cache, CleanupFiles $cleanupFiles, ComposerInformation $composer, - MaintenanceModeEnabler $maintenanceMode, + MaintenanceMode $maintenanceMode, DependencyChecker $dependencyChecker, Collection $themeCollection, BackupRollbackFactory $backupRollbackFactory, ThemeValidator $themeValidator, ThemePackageInfo $themePackageInfo, ThemeUninstaller $themeUninstaller, - ThemeDependencyChecker $themeDependencyChecker + ThemeDependencyChecker $themeDependencyChecker, + MaintenanceModeEnabler $maintenanceModeEnabler = null ) { $this->cache = $cache; $this->cleanupFiles = $cleanupFiles; $this->composer = $composer; - $this->maintenanceMode = $maintenanceMode; $this->dependencyChecker = $dependencyChecker; $this->themeCollection = $themeCollection; $this->backupRollbackFactory = $backupRollbackFactory; @@ -153,6 +157,8 @@ public function __construct( $this->themePackageInfo = $themePackageInfo; $this->themeUninstaller = $themeUninstaller; $this->themeDependencyChecker = $themeDependencyChecker; + $this->maintenanceModeEnabler = + $maintenanceModeEnabler ?: ObjectManager::getInstance()->get(MaintenanceModeEnabler::class); parent::__construct(); } @@ -212,25 +218,32 @@ protected function execute(InputInterface $input, OutputInterface $output) return \Magento\Framework\Console\Cli::RETURN_FAILURE; } - try { - $this->maintenanceMode->enableMaintenanceMode($output); - if ($input->getOption(self::INPUT_KEY_BACKUP_CODE)) { - $time = time(); - $codeBackup = $this->backupRollbackFactory->create($output); - $codeBackup->codeBackup($time); - } - - $this->themeUninstaller->uninstallRegistry($output, $themePaths); - $this->themeUninstaller->uninstallCode($output, $themePaths); + $result = $this->maintenanceModeEnabler->executeInMaintenanceMode( + function () use ($input, $output, $themePaths) { + try { + if ($input->getOption(self::INPUT_KEY_BACKUP_CODE)) { + $time = time(); + $codeBackup = $this->backupRollbackFactory->create($output); + $codeBackup->codeBackup($time); + } + + $this->themeUninstaller->uninstallRegistry($output, $themePaths); + $this->themeUninstaller->uninstallCode($output, $themePaths); + + $this->cleanup($input, $output); + return \Magento\Framework\Console\Cli::RETURN_SUCCESS; + } catch (\Exception $e) { + $output->writeln('<error>' . $e->getMessage() . '</error>'); + $output->writeln('<error>Please disable maintenance mode after you resolved above issues</error>'); + // we must have an exit code higher than zero to indicate something was wrong + return \Magento\Framework\Console\Cli::RETURN_FAILURE; + } + }, + $output, + true + ); - $this->cleanup($input, $output); - $this->maintenanceMode->disableMaintenanceMode($output); - } catch (\Exception $e) { - $output->writeln('<error>' . $e->getMessage() . '</error>'); - $output->writeln('<error>Please disable maintenance mode after you resolved above issues</error>'); - // we must have an exit code higher than zero to indicate something was wrong - return \Magento\Framework\Console\Cli::RETURN_FAILURE; - } + return $result; } /** diff --git a/app/code/Magento/Theme/Test/Unit/Console/Command/ThemeUninstallCommandTest.php b/app/code/Magento/Theme/Test/Unit/Console/Command/ThemeUninstallCommandTest.php index ff6a040948784..2ae889e69bb12 100644 --- a/app/code/Magento/Theme/Test/Unit/Console/Command/ThemeUninstallCommandTest.php +++ b/app/code/Magento/Theme/Test/Unit/Console/Command/ThemeUninstallCommandTest.php @@ -6,6 +6,7 @@ namespace Magento\Theme\Test\Unit\Console\Command; +use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Theme\Console\Command\ThemeUninstallCommand; use Magento\Theme\Model\Theme\themePackageInfo; use Magento\Theme\Model\Theme\ThemeUninstaller; @@ -19,7 +20,7 @@ class ThemeUninstallCommandTest extends \PHPUnit\Framework\TestCase { /** - * @var \Magento\Framework\App\Console\MaintenanceModeEnabler|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\App\Console\MaintenanceMode|\PHPUnit_Framework_MockObject_MockObject */ private $maintenanceMode; @@ -82,7 +83,7 @@ class ThemeUninstallCommandTest extends \PHPUnit\Framework\TestCase protected function setUp() { - $this->maintenanceMode = $this->createMock(\Magento\Framework\App\Console\MaintenanceModeEnabler::class); + $this->maintenanceMode = $this->createMock(\Magento\Framework\App\MaintenanceMode::class); $composerInformation = $this->createMock(\Magento\Framework\Composer\ComposerInformation::class); $composerInformation->expects($this->any()) ->method('getRootRequiredPackages') @@ -107,7 +108,8 @@ protected function setUp() $this->themeValidator, $this->themePackageInfo, $this->themeUninstaller, - $this->themeDependencyChecker + $this->themeDependencyChecker, + new MaintenanceModeEnabler($this->maintenanceMode) ); $this->tester = new CommandTester($this->command); } @@ -304,9 +306,9 @@ public function testExecute() { $this->setUpExecute(); $this->cleanupFiles->expects($this->never())->method('clearMaterializedViewFiles'); - $this->maintenanceMode->expects($this->once())->method('enableMaintenanceMode'); - $this->maintenanceMode->expects($this->once())->method('disableMaintenanceMode'); $this->tester->execute(['theme' => ['area/vendor/test']]); + $this->assertContains('Enabling maintenance mode', $this->tester->getDisplay()); + $this->assertContains('Disabling maintenance mode', $this->tester->getDisplay()); $this->assertContains('Alert: Generated static view files were not cleared.', $this->tester->getDisplay()); $this->assertNotContains('Generated static view files cleared successfully', $this->tester->getDisplay()); } @@ -315,9 +317,9 @@ public function testExecuteCleanStaticFiles() { $this->setUpExecute(); $this->cleanupFiles->expects($this->once())->method('clearMaterializedViewFiles'); - $this->maintenanceMode->expects($this->once())->method('enableMaintenanceMode'); - $this->maintenanceMode->expects($this->once())->method('disableMaintenanceMode'); $this->tester->execute(['theme' => ['area/vendor/test'], '-c' => true]); + $this->assertContains('Enabling maintenance mode', $this->tester->getDisplay()); + $this->assertContains('Disabling maintenance mode', $this->tester->getDisplay()); $this->assertNotContains('Alert: Generated static view files were not cleared.', $this->tester->getDisplay()); $this->assertContains('Generated static view files cleared successfully', $this->tester->getDisplay()); } diff --git a/lib/internal/Magento/Framework/App/Console/MaintenanceModeEnabler.php b/lib/internal/Magento/Framework/App/Console/MaintenanceModeEnabler.php index f2d106c5d3644..6f834d50c51f7 100644 --- a/lib/internal/Magento/Framework/App/Console/MaintenanceModeEnabler.php +++ b/lib/internal/Magento/Framework/App/Console/MaintenanceModeEnabler.php @@ -38,7 +38,7 @@ public function __construct(MaintenanceMode $maintenanceMode) * @param OutputInterface $output * @return void */ - public function enableMaintenanceMode(OutputInterface $output) + private function enableMaintenanceMode(OutputInterface $output) { if ($this->maintenanceMode->isOn()) { $this->skipDisableMaintenanceMode = true; @@ -57,7 +57,7 @@ public function enableMaintenanceMode(OutputInterface $output) * @param OutputInterface $output * @return void */ - public function disableMaintenanceMode(OutputInterface $output) + private function disableMaintenanceMode(OutputInterface $output) { if ($this->skipDisableMaintenanceMode) { $output->writeln('<info>Skipped disabling maintenance mode</info>'); @@ -67,4 +67,30 @@ public function disableMaintenanceMode(OutputInterface $output) $this->maintenanceMode->set(false); $output->writeln('<info>Disabling maintenance mode</info>'); } + + /** + * Run task in maintenance mode + * + * @param callable $task + * @param OutputInterface $output + * @param bool $holdMaintenanceOnFailure + * @return mixed + * @throws \Throwable if error occurred + */ + public function executeInMaintenanceMode(callable $task, OutputInterface $output, bool $holdMaintenanceOnFailure) + { + $this->enableMaintenanceMode($output); + + try { + $result = call_user_func($task); + } catch (\Throwable $e) { + if (!$holdMaintenanceOnFailure) { + $this->disableMaintenanceMode($output); + } + throw $e; + } + + $this->disableMaintenanceMode($output); + return $result; + } } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Console/MaintenanceModeEnablerTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Console/MaintenanceModeEnablerTest.php new file mode 100644 index 0000000000000..ebd47c0dc8936 --- /dev/null +++ b/lib/internal/Magento/Framework/App/Test/Unit/Console/MaintenanceModeEnablerTest.php @@ -0,0 +1,122 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Framework\App\Test\Unit\Console; + +use Magento\Framework\App\Console\MaintenanceModeEnabler; +use Magento\Framework\App\MaintenanceMode; +use PHPUnit\Framework\TestCase; +use Symfony\Component\Console\Output\OutputInterface; + +class MaintenanceModeEnablerTest extends TestCase +{ + /** + * @dataProvider initialAppStateProvider + */ + public function testSuccessfulTask(bool $maintenanceModeEnabledInitially) + { + $maintenanceMode = $this->createMaintenanceMode($maintenanceModeEnabledInitially); + $enabler = new MaintenanceModeEnabler($maintenanceMode); + $successTask = function () { + // do nothing + }; + + $enabler->executeInMaintenanceMode( + $successTask, + $this->createOutput(), + true + ); + + $this->assertEquals( + $maintenanceModeEnabledInitially, + $maintenanceMode->isOn(), + 'Initial state is not restored' + ); + } + + /** + * @dataProvider initialAppStateProvider + */ + public function testFailedTaskWithMaintenanceModeOnFailure(bool $maintenanceModeEnabledInitially) + { + $maintenanceMode = $this->createMaintenanceMode($maintenanceModeEnabledInitially); + $enabler = new MaintenanceModeEnabler($maintenanceMode); + $failedTask = function () { + throw new \Exception('Woops!'); + }; + + try { + $enabler->executeInMaintenanceMode( + $failedTask, + $this->createOutput(), + true + ); + } catch (\Exception $e) { + $this->assertEquals( + true, + $maintenanceMode->isOn(), + 'Maintenance mode is not active after failure' + ); + } + } + + /** + * @dataProvider initialAppStateProvider + */ + public function testFailedTaskWithRestoredModeOnFailure(bool $maintenanceModeEnabledInitially) + { + $maintenanceMode = $this->createMaintenanceMode($maintenanceModeEnabledInitially); + $enabler = new MaintenanceModeEnabler($maintenanceMode); + $failedTask = function () { + throw new \Exception('Woops!'); + }; + + try { + $enabler->executeInMaintenanceMode( + $failedTask, + $this->createOutput(), + false + ); + } catch (\Exception $e) { + $this->assertEquals( + $maintenanceModeEnabledInitially, + $maintenanceMode->isOn(), + 'Initial state is not restored' + ); + } + } + + public function initialAppStateProvider() + { + return [ + 'Maintenance mode disabled initially' => [false], + 'Maintenance mode enabled initially' => [true], + ]; + } + + private function createMaintenanceMode(bool $isOn): MaintenanceMode + { + $maintenanceMode = $this->getMockBuilder(MaintenanceMode::class) + ->disableOriginalConstructor() + ->getMock(); + + $maintenanceMode->method('isOn')->willReturnCallback(function () use (&$isOn) { + return $isOn; + }); + $maintenanceMode->method('set')->willReturnCallback(function ($newValue) use (&$isOn) { + $isOn = (bool)$newValue; + return true; + }); + + return $maintenanceMode; + } + + private function createOutput(): OutputInterface + { + $output = $this->getMockBuilder(OutputInterface::class) + ->getMockForAbstractClass(); + return $output; + } +} diff --git a/setup/src/Magento/Setup/Console/Command/BackupCommand.php b/setup/src/Magento/Setup/Console/Command/BackupCommand.php index 88164f9606588..0c65d3db1f7ba 100644 --- a/setup/src/Magento/Setup/Console/Command/BackupCommand.php +++ b/setup/src/Magento/Setup/Console/Command/BackupCommand.php @@ -7,6 +7,7 @@ use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig; +use Magento\Framework\App\MaintenanceMode; use Magento\Framework\Backup\Factory; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Setup\BackupRollbackFactory; @@ -36,11 +37,6 @@ class BackupCommand extends AbstractSetupCommand */ private $objectManager; - /** - * @var MaintenanceModeEnabler - */ - private $maintenanceMode; - /** * Factory for BackupRollback * @@ -55,22 +51,32 @@ class BackupCommand extends AbstractSetupCommand */ private $deploymentConfig; + /** + * @var MaintenanceModeEnabler + */ + private $maintenanceModeEnabler; + /** * Constructor * * @param ObjectManagerProvider $objectManagerProvider - * @param MaintenanceModeEnabler $maintenanceMode + * @param MaintenanceMode $maintenanceMode deprecated, use $maintenanceModeEnabler instead * @param DeploymentConfig $deploymentConfig + * @param MaintenanceModeEnabler $maintenanceModeEnabler + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( ObjectManagerProvider $objectManagerProvider, - MaintenanceModeEnabler $maintenanceMode, - DeploymentConfig $deploymentConfig + MaintenanceMode $maintenanceMode, + DeploymentConfig $deploymentConfig, + MaintenanceModeEnabler $maintenanceModeEnabler = null ) { $this->objectManager = $objectManagerProvider->get(); - $this->maintenanceMode = $maintenanceMode; $this->backupRollbackFactory = $this->objectManager->get(\Magento\Framework\Setup\BackupRollbackFactory::class); $this->deploymentConfig = $deploymentConfig; + $this->maintenanceModeEnabler = + $maintenanceModeEnabler ?: $this->objectManager->get(MaintenanceModeEnabler::class); parent::__construct(); } @@ -117,36 +123,40 @@ protected function execute(InputInterface $input, OutputInterface $output) // We need exit code higher than 0 here as an indication return \Magento\Framework\Console\Cli::RETURN_FAILURE; } - $returnValue = \Magento\Framework\Console\Cli::RETURN_SUCCESS; - try { - $inputOptionProvided = false; - $this->maintenanceMode->enableMaintenanceMode($output); - $time = time(); - $backupHandler = $this->backupRollbackFactory->create($output); - if ($input->getOption(self::INPUT_KEY_CODE)) { - $backupHandler->codeBackup($time); - $inputOptionProvided = true; - } - if ($input->getOption(self::INPUT_KEY_MEDIA)) { - $backupHandler->codeBackup($time, Factory::TYPE_MEDIA); - $inputOptionProvided = true; - } - if ($input->getOption(self::INPUT_KEY_DB)) { - $this->setAreaCode(); - $backupHandler->dbBackup($time); - $inputOptionProvided = true; - } - if (!$inputOptionProvided) { - throw new \InvalidArgumentException( - 'Not enough information provided to take backup.' - ); - } - } catch (\Exception $e) { - $output->writeln('<error>' . $e->getMessage() . '</error>'); - $returnValue = \Magento\Framework\Console\Cli::RETURN_FAILURE; - } finally { - $this->maintenanceMode->disableMaintenanceMode($output); - } + + $returnValue = $this->maintenanceModeEnabler->executeInMaintenanceMode( + function () use ($input, $output) { + try { + $inputOptionProvided = false; + $time = time(); + $backupHandler = $this->backupRollbackFactory->create($output); + if ($input->getOption(self::INPUT_KEY_CODE)) { + $backupHandler->codeBackup($time); + $inputOptionProvided = true; + } + if ($input->getOption(self::INPUT_KEY_MEDIA)) { + $backupHandler->codeBackup($time, Factory::TYPE_MEDIA); + $inputOptionProvided = true; + } + if ($input->getOption(self::INPUT_KEY_DB)) { + $this->setAreaCode(); + $backupHandler->dbBackup($time); + $inputOptionProvided = true; + } + if (!$inputOptionProvided) { + throw new \InvalidArgumentException( + 'Not enough information provided to take backup.' + ); + } + return \Magento\Framework\Console\Cli::RETURN_SUCCESS; + } catch (\Exception $e) { + $output->writeln('<error>' . $e->getMessage() . '</error>'); + return \Magento\Framework\Console\Cli::RETURN_FAILURE; + } + }, + $output, + false + ); return $returnValue; } diff --git a/setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php b/setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php index 15dee6e2ee355..9740efa1a7457 100644 --- a/setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php +++ b/setup/src/Magento/Setup/Console/Command/ModuleUninstallCommand.php @@ -7,6 +7,7 @@ use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig; +use Magento\Framework\App\MaintenanceMode; use Magento\Framework\Backup\Factory; use Magento\Framework\Composer\ComposerInformation; use Magento\Framework\Module\DependencyChecker; @@ -38,11 +39,6 @@ class ModuleUninstallCommand extends AbstractModuleCommand const INPUT_KEY_BACKUP_MEDIA = 'backup-media'; const INPUT_KEY_BACKUP_DB = 'backup-db'; - /** - * @var MaintenanceModeEnabler - */ - private $maintenanceMode; - /** * Deployment Configuration * @@ -106,32 +102,40 @@ class ModuleUninstallCommand extends AbstractModuleCommand */ private $moduleRegistryUninstaller; + /** + * @var MaintenanceModeEnabler + */ + private $maintenanceModeEnabler; + /** * Constructor * * @param ComposerInformation $composer * @param DeploymentConfig $deploymentConfig * @param FullModuleList $fullModuleList - * @param MaintenanceModeEnabler $maintenanceMode + * @param MaintenanceMode $maintenanceMode deprecated, use $maintenanceModeEnabler instead * @param ObjectManagerProvider $objectManagerProvider * @param UninstallCollector $collector * @param ModuleUninstaller $moduleUninstaller * @param ModuleRegistryUninstaller $moduleRegistryUninstaller + * @param MaintenanceModeEnabler $maintenanceModeEnabler + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( ComposerInformation $composer, DeploymentConfig $deploymentConfig, FullModuleList $fullModuleList, - MaintenanceModeEnabler $maintenanceMode, + MaintenanceMode $maintenanceMode, ObjectManagerProvider $objectManagerProvider, UninstallCollector $collector, ModuleUninstaller $moduleUninstaller, - ModuleRegistryUninstaller $moduleRegistryUninstaller + ModuleRegistryUninstaller $moduleRegistryUninstaller, + MaintenanceModeEnabler $maintenanceModeEnabler = null ) { parent::__construct($objectManagerProvider); $this->composer = $composer; $this->deploymentConfig = $deploymentConfig; - $this->maintenanceMode = $maintenanceMode; $this->fullModuleList = $fullModuleList; $this->packageInfo = $this->objectManager->get(\Magento\Framework\Module\PackageInfoFactory::class)->create(); $this->collector = $collector; @@ -139,6 +143,8 @@ public function __construct( $this->backupRollbackFactory = $this->objectManager->get(\Magento\Framework\Setup\BackupRollbackFactory::class); $this->moduleUninstaller = $moduleUninstaller; $this->moduleRegistryUninstaller = $moduleRegistryUninstaller; + $this->maintenanceModeEnabler = + $maintenanceModeEnabler ?: $this->objectManager->get(MaintenanceModeEnabler::class); } /** @@ -225,39 +231,47 @@ protected function execute(InputInterface $input, OutputInterface $output) if (!$helper->ask($input, $output, $question) && $input->isInteractive()) { return \Magento\Framework\Console\Cli::RETURN_FAILURE; } - try { - $this->maintenanceMode->enableMaintenanceMode($output); - $this->takeBackup($input, $output); - $dbBackupOption = $input->getOption(self::INPUT_KEY_BACKUP_DB); - if ($input->getOption(self::INPUT_KEY_REMOVE_DATA)) { - $this->removeData($modules, $output, $dbBackupOption); - } else { - if (!empty($this->collector->collectUninstall())) { - $question = new ConfirmationQuestion( - 'You are about to remove a module(s) that might have database data. ' - . 'Do you want to remove the data from database?[y/N]', - false - ); - if ($helper->ask($input, $output, $question) || !$input->isInteractive()) { + + $result = $this->maintenanceModeEnabler->executeInMaintenanceMode( + function () use ($input, $output, $modules, $helper) { + try { + $this->takeBackup($input, $output); + $dbBackupOption = $input->getOption(self::INPUT_KEY_BACKUP_DB); + if ($input->getOption(self::INPUT_KEY_REMOVE_DATA)) { $this->removeData($modules, $output, $dbBackupOption); + } else { + if (!empty($this->collector->collectUninstall())) { + $question = new ConfirmationQuestion( + 'You are about to remove a module(s) that might have database data. ' + . 'Do you want to remove the data from database?[y/N]', + false + ); + if ($helper->ask($input, $output, $question) || !$input->isInteractive()) { + $this->removeData($modules, $output, $dbBackupOption); + } + } else { + $output->writeln( + '<info>You are about to remove a module(s) that might have database data. ' + . 'Remove the database data manually after uninstalling, if desired.</info>' + ); + } } - } else { - $output->writeln( - '<info>You are about to remove a module(s) that might have database data. ' - . 'Remove the database data manually after uninstalling, if desired.</info>' - ); + $this->moduleRegistryUninstaller->removeModulesFromDb($output, $modules); + $this->moduleRegistryUninstaller->removeModulesFromDeploymentConfig($output, $modules); + $this->moduleUninstaller->uninstallCode($output, $modules); + $this->cleanup($input, $output); + return \Magento\Framework\Console\Cli::RETURN_SUCCESS; + } catch (\Exception $e) { + $output->writeln('<error>' . $e->getMessage() . '</error>'); + $output->writeln('<error>Please disable maintenance mode after you resolved above issues</error>'); + return \Magento\Framework\Console\Cli::RETURN_FAILURE; } - } - $this->moduleRegistryUninstaller->removeModulesFromDb($output, $modules); - $this->moduleRegistryUninstaller->removeModulesFromDeploymentConfig($output, $modules); - $this->moduleUninstaller->uninstallCode($output, $modules); - $this->cleanup($input, $output); - $this->maintenanceMode->disableMaintenanceMode($output); - } catch (\Exception $e) { - $output->writeln('<error>' . $e->getMessage() . '</error>'); - $output->writeln('<error>Please disable maintenance mode after you resolved above issues</error>'); - return \Magento\Framework\Console\Cli::RETURN_FAILURE; - } + }, + $output, + true + ); + + return $result; } /** diff --git a/setup/src/Magento/Setup/Console/Command/RollbackCommand.php b/setup/src/Magento/Setup/Console/Command/RollbackCommand.php index afe433d55c18c..d67e7f0a53796 100644 --- a/setup/src/Magento/Setup/Console/Command/RollbackCommand.php +++ b/setup/src/Magento/Setup/Console/Command/RollbackCommand.php @@ -7,6 +7,7 @@ use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig; +use Magento\Framework\App\MaintenanceMode; use Magento\Framework\Backup\Factory; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Setup\BackupRollbackFactory; @@ -37,11 +38,6 @@ class RollbackCommand extends AbstractSetupCommand */ private $objectManager; - /** - * @var MaintenanceModeEnabler - */ - private $maintenanceMode; - /** * @var BackupRollbackFactory */ @@ -54,22 +50,33 @@ class RollbackCommand extends AbstractSetupCommand */ private $deploymentConfig; + /** + * @var MaintenanceModeEnabler + */ + private $maintenanceModeEnabler; + /** * Constructor * * @param ObjectManagerProvider $objectManagerProvider - * @param MaintenanceModeEnabler $maintenanceMode + * @param MaintenanceMode $maintenanceMode deprecated, use $maintenanceModeEnabler instead * @param DeploymentConfig $deploymentConfig + * @param MaintenanceModeEnabler $maintenanceModeEnabler + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( ObjectManagerProvider $objectManagerProvider, - MaintenanceModeEnabler $maintenanceMode, - DeploymentConfig $deploymentConfig + MaintenanceMode $maintenanceMode, + DeploymentConfig $deploymentConfig, + MaintenanceModeEnabler $maintenanceModeEnabler = null ) { $this->objectManager = $objectManagerProvider->get(); - $this->maintenanceMode = $maintenanceMode; + $this->maintenanceModeEnabler = $maintenanceMode; $this->backupRollbackFactory = $this->objectManager->get(\Magento\Framework\Setup\BackupRollbackFactory::class); $this->deploymentConfig = $deploymentConfig; + $this->maintenanceModeEnabler = + $maintenanceModeEnabler ?: $this->objectManager->get(MaintenanceModeEnabler::class); parent::__construct(); } @@ -115,26 +122,32 @@ protected function execute(InputInterface $input, OutputInterface $output) // we must have an exit code higher than zero to indicate something was wrong return \Magento\Framework\Console\Cli::RETURN_FAILURE; } - $returnValue = \Magento\Framework\Console\Cli::RETURN_SUCCESS; - try { - $this->maintenanceMode->enableMaintenanceMode($output); - $helper = $this->getHelper('question'); - $question = new ConfirmationQuestion( - '<info>You are about to remove current code and/or database tables. Are you sure?[y/N]<info>', - false - ); - if (!$helper->ask($input, $output, $question) && $input->isInteractive()) { - return \Magento\Framework\Console\Cli::RETURN_FAILURE; - } - $this->doRollback($input, $output); - $output->writeln('<info>Please set file permission of bin/magento to executable</info>'); - } catch (\Exception $e) { - $output->writeln('<error>' . $e->getMessage() . '</error>'); - // we must have an exit code higher than zero to indicate something was wrong - $returnValue = \Magento\Framework\Console\Cli::RETURN_FAILURE; - } finally { - $this->maintenanceMode->disableMaintenanceMode($output); - } + + $returnValue = $this->maintenanceModeEnabler->executeInMaintenanceMode( + function () use ($input, $output, &$returnValue) { + try { + $helper = $this->getHelper('question'); + $question = new ConfirmationQuestion( + '<info>You are about to remove current code and/or database tables. Are you sure?[y/N]<info>', + false + ); + if (!$helper->ask($input, $output, $question) && $input->isInteractive()) { + return \Magento\Framework\Console\Cli::RETURN_FAILURE; + } + $this->doRollback($input, $output); + $output->writeln('<info>Please set file permission of bin/magento to executable</info>'); + + return \Magento\Framework\Console\Cli::RETURN_SUCCESS; + } catch (\Exception $e) { + $output->writeln('<error>' . $e->getMessage() . '</error>'); + // we must have an exit code higher than zero to indicate something was wrong + return \Magento\Framework\Console\Cli::RETURN_FAILURE; + } + }, + $output, + false + ); + return $returnValue; } diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php index f28d7756f7d37..e8179cff4a94e 100644 --- a/setup/src/Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php @@ -5,6 +5,7 @@ */ namespace Magento\Setup\Test\Unit\Console\Command; +use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Setup\Console\Command\BackupCommand; use Symfony\Component\Console\Tester\CommandTester; @@ -35,14 +36,9 @@ class BackupCommandTest extends \PHPUnit\Framework\TestCase */ private $deploymentConfig; - /** - * @var \Magento\Framework\App\Console\MaintenanceModeEnabler|\PHPUnit_Framework_MockObject_MockObject - */ - private $maintenanceMode; - public function setUp() { - $this->maintenanceMode = $this->createMock(\Magento\Framework\App\Console\MaintenanceModeEnabler::class); + $maintenanceMode = $this->createMock(\Magento\Framework\App\MaintenanceMode::class); $objectManagerProvider = $this->createMock(\Magento\Setup\Model\ObjectManagerProvider::class); $this->objectManager = $this->getMockForAbstractClass( \Magento\Framework\ObjectManagerInterface::class, @@ -77,8 +73,9 @@ public function setUp() ); $command = new BackupCommand( $objectManagerProvider, - $this->maintenanceMode, - $this->deploymentConfig + $maintenanceMode, + $this->deploymentConfig, + new MaintenanceModeEnabler($maintenanceMode) ); $this->tester = new CommandTester($command); } @@ -133,10 +130,10 @@ public function testExecuteNoOptions() $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->will($this->returnValue(false)); - $this->maintenanceMode->expects($this->once())->method('enableMaintenanceMode'); - $this->maintenanceMode->expects($this->once())->method('disableMaintenanceMode'); $this->tester->execute([]); - $expected = 'Not enough information provided to take backup.' . PHP_EOL; + $expected = 'Enabling maintenance mode' . PHP_EOL + . 'Not enough information provided to take backup.' . PHP_EOL + . 'Disabling maintenance mode' . PHP_EOL; $this->assertSame($expected, $this->tester->getDisplay()); } } diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/ModuleUninstallCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/ModuleUninstallCommandTest.php index 50bdce4e425b4..b6674c9aac986 100644 --- a/setup/src/Magento/Setup/Test/Unit/Console/Command/ModuleUninstallCommandTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/ModuleUninstallCommandTest.php @@ -5,6 +5,7 @@ */ namespace Magento\Setup\Test\Unit\Console\Command; +use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Setup\Console\Command\ModuleUninstallCommand; use Magento\Setup\Model\ModuleUninstaller; use Symfony\Component\Console\Tester\CommandTester; @@ -26,7 +27,7 @@ class ModuleUninstallCommandTest extends \PHPUnit\Framework\TestCase private $fullModuleList; /** - * @var \Magento\Framework\App\Console\MaintenanceModeEnabler|\PHPUnit_Framework_MockObject_MockObject + * @var \Magento\Framework\App\MaintenanceMode|\PHPUnit_Framework_MockObject_MockObject */ private $maintenanceMode; @@ -102,7 +103,7 @@ public function setUp() { $this->deploymentConfig = $this->createMock(\Magento\Framework\App\DeploymentConfig::class); $this->fullModuleList = $this->createMock(\Magento\Framework\Module\FullModuleList::class); - $this->maintenanceMode = $this->createMock(\Magento\Framework\App\Console\MaintenanceModeEnabler::class); + $this->maintenanceMode = $this->createMock(\Magento\Framework\App\MaintenanceMode::class); $objectManagerProvider = $this->createMock(\Magento\Setup\Model\ObjectManagerProvider::class); $objectManager = $this->getMockForAbstractClass( \Magento\Framework\ObjectManagerInterface::class, @@ -158,7 +159,8 @@ public function setUp() $objectManagerProvider, $this->uninstallCollector, $this->moduleUninstaller, - $this->moduleRegistryUninstaller + $this->moduleRegistryUninstaller, + new MaintenanceModeEnabler($this->maintenanceMode) ); $this->question = $this->createMock(\Symfony\Component\Console\Helper\QuestionHelper::class); $this->question diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php index 300caaa0333f1..9ced38c316636 100644 --- a/setup/src/Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php @@ -5,9 +5,13 @@ */ namespace Magento\Setup\Test\Unit\Console\Command; +use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Setup\Console\Command\RollbackCommand; use Symfony\Component\Console\Tester\CommandTester; +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class RollbackCommandTest extends \PHPUnit\Framework\TestCase { /** @@ -50,15 +54,10 @@ class RollbackCommandTest extends \PHPUnit\Framework\TestCase */ private $command; - /** - * @var \Magento\Framework\App\Console\MaintenanceModeEnabler|\PHPUnit_Framework_MockObject_MockObject - */ - private $maintenanceMode; - public function setUp() { $this->deploymentConfig = $this->createMock(\Magento\Framework\App\DeploymentConfig::class); - $this->maintenanceMode = $this->createMock(\Magento\Framework\App\Console\MaintenanceModeEnabler::class); + $maintenanceMode = $this->createMock(\Magento\Framework\App\MaintenanceMode::class); $this->objectManager = $this->getMockForAbstractClass( \Magento\Framework\ObjectManagerInterface::class, [], @@ -100,8 +99,9 @@ public function setUp() ->will($this->returnValue($this->question)); $this->command = new RollbackCommand( $objectManagerProvider, - $this->maintenanceMode, - $this->deploymentConfig + $maintenanceMode, + $this->deploymentConfig, + new MaintenanceModeEnabler($maintenanceMode) ); $this->command->setHelperSet($this->helperSet); $this->tester = new CommandTester($this->command); @@ -157,10 +157,10 @@ public function testExecuteNoOptions() $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->will($this->returnValue(true)); - $this->maintenanceMode->expects($this->once())->method('enableMaintenanceMode'); - $this->maintenanceMode->expects($this->once())->method('disableMaintenanceMode'); $this->tester->execute([]); - $expected = 'Not enough information provided to roll back.' . PHP_EOL; + $expected = 'Enabling maintenance mode' . PHP_EOL + . 'Not enough information provided to roll back.' . PHP_EOL + . 'Disabling maintenance mode' . PHP_EOL; $this->assertSame($expected, $this->tester->getDisplay()); } From ed2886fe1bf7b93761266f718322e940e27eaa77 Mon Sep 17 00:00:00 2001 From: Cy Kirsch <cykirsch@gmail.com> Date: Thu, 30 Nov 2017 11:48:13 -0600 Subject: [PATCH 398/653] Fix code style issues --- .../Framework/App/DeploymentConfig/Writer/PhpFormatter.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php b/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php index ef0b3a5d29092..6556a0472f9d8 100644 --- a/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php +++ b/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php @@ -76,7 +76,8 @@ private function formatData($data, $comments = [], $prefix = ' ') * @param integer $depth * @return string */ - private function varExportShort($var, $depth=0) { + private function varExportShort($var, $depth = 0) + { if (gettype($var) === 'array') { $indexed = array_keys($var) === range(0, count($var) - 1); $r = []; @@ -88,6 +89,6 @@ private function varExportShort($var, $depth=0) { return sprintf("[\n%s\n%s]", implode(",\n", $r), str_repeat(self::INDENT, $depth - 1)); } - return var_export($var, TRUE); + return var_export($var, true); } } From 519b805c2853f895d804c49e08bd7a23b108c38c Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Fri, 1 Dec 2017 08:52:44 +0100 Subject: [PATCH 399/653] 7241 Change syntax of @see annotation for depracated method --- app/code/Magento/Customer/Model/Options.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Customer/Model/Options.php b/app/code/Magento/Customer/Model/Options.php index 23a8c87a84ba4..b074adf39004f 100644 --- a/app/code/Magento/Customer/Model/Options.php +++ b/app/code/Magento/Customer/Model/Options.php @@ -68,7 +68,8 @@ public function getNameSuffixOptions($store = null) * @param bool $isOptional * @return array|bool * - * @deprecated See prepareNamePrefixSuffixOptions + * @deprecated + * @see prepareNamePrefixSuffixOptions() */ protected function _prepareNamePrefixSuffixOptions($options, $isOptional = false) { From eb79b38beb6b79411fe95d30e324d7d094ab5874 Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Fri, 1 Dec 2017 08:56:59 +0100 Subject: [PATCH 400/653] 7241 Undo creation of constants due to @api reasons See https://github.com/magento/magento2/pull/11462#pullrequestreview-76828329 --- .../Magento/Config/Model/Config/Source/Nooptreq.php | 10 +++------- app/code/Magento/Customer/Model/Options.php | 4 ++-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/app/code/Magento/Config/Model/Config/Source/Nooptreq.php b/app/code/Magento/Config/Model/Config/Source/Nooptreq.php index 1c9eb801dfec7..03fe5ca2abccc 100644 --- a/app/code/Magento/Config/Model/Config/Source/Nooptreq.php +++ b/app/code/Magento/Config/Model/Config/Source/Nooptreq.php @@ -11,19 +11,15 @@ */ class Nooptreq implements \Magento\Framework\Option\ArrayInterface { - const VALUE_NO = ''; - const VALUE_OPTIONAL = 'opt'; - const VALUE_REQUIRED = 'req'; - /** * @return array */ public function toOptionArray() { return [ - ['value' => self::VALUE_NO, 'label' => __('No')], - ['value' => self::VALUE_OPTIONAL, 'label' => __('Optional')], - ['value' => self::VALUE_REQUIRED, 'label' => __('Required')] + ['value' => '', 'label' => __('No')], + ['value' => 'opt', 'label' => __('Optional')], + ['value' => 'req', 'label' => __('Required')] ]; } } diff --git a/app/code/Magento/Customer/Model/Options.php b/app/code/Magento/Customer/Model/Options.php index b074adf39004f..b034e4fcf590d 100644 --- a/app/code/Magento/Customer/Model/Options.php +++ b/app/code/Magento/Customer/Model/Options.php @@ -45,7 +45,7 @@ public function getNamePrefixOptions($store = null) { return $this->prepareNamePrefixSuffixOptions( $this->addressHelper->getConfig('prefix_options', $store), - $this->addressHelper->getConfig('prefix_show', $store) == NooptreqSource::VALUE_OPTIONAL + $this->addressHelper->getConfig('prefix_show', $store) == 'opt' ); } @@ -59,7 +59,7 @@ public function getNameSuffixOptions($store = null) { return $this->prepareNamePrefixSuffixOptions( $this->addressHelper->getConfig('suffix_options', $store), - $this->addressHelper->getConfig('suffix_show', $store) == NooptreqSource::VALUE_OPTIONAL + $this->addressHelper->getConfig('suffix_show', $store) == 'opt' ); } From 9c5420fb378d2de46be4fdcd842e514e7206dfbc Mon Sep 17 00:00:00 2001 From: Pascal Brouwers <pascal@h-o.nl> Date: Fri, 1 Dec 2017 10:31:29 +0100 Subject: [PATCH 401/653] Issue 12506: Fixup typo getDispretionPath -> getDispersionPath --- app/code/Magento/Catalog/Model/Product/Gallery/Processor.php | 2 +- .../Catalog/Model/Product/Option/Type/File/ValidatorFile.php | 2 +- app/code/Magento/Customer/Model/FileProcessor.php | 2 +- .../Controller/Adminhtml/Product/Gallery/RetrieveImage.php | 4 ++-- lib/internal/Magento/Framework/File/Uploader.php | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Gallery/Processor.php b/app/code/Magento/Catalog/Model/Product/Gallery/Processor.php index 31e322f4e38f2..ac2a01f9c5a84 100644 --- a/app/code/Magento/Catalog/Model/Product/Gallery/Processor.php +++ b/app/code/Magento/Catalog/Model/Product/Gallery/Processor.php @@ -149,7 +149,7 @@ public function addImage( } $fileName = \Magento\MediaStorage\Model\File\Uploader::getCorrectFileName($pathinfo['basename']); - $dispretionPath = \Magento\MediaStorage\Model\File\Uploader::getDispretionPath($fileName); + $dispretionPath = \Magento\MediaStorage\Model\File\Uploader::getDispersionPath($fileName); $fileName = $dispretionPath . '/' . $fileName; $fileName = $this->getNotDuplicatedFilename($fileName, $dispretionPath); diff --git a/app/code/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFile.php b/app/code/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFile.php index af6c4dba784f0..b54c66d75a058 100644 --- a/app/code/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFile.php +++ b/app/code/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFile.php @@ -150,7 +150,7 @@ public function validate($processingParams, $option) $extension = pathinfo(strtolower($fileInfo['name']), PATHINFO_EXTENSION); $fileName = \Magento\MediaStorage\Model\File\Uploader::getCorrectFileName($fileInfo['name']); - $dispersion = \Magento\MediaStorage\Model\File\Uploader::getDispretionPath($fileName); + $dispersion = \Magento\MediaStorage\Model\File\Uploader::getDispersionPath($fileName); $filePath = $dispersion; diff --git a/app/code/Magento/Customer/Model/FileProcessor.php b/app/code/Magento/Customer/Model/FileProcessor.php index 2d6917efdaf56..6a8472758c169 100644 --- a/app/code/Magento/Customer/Model/FileProcessor.php +++ b/app/code/Magento/Customer/Model/FileProcessor.php @@ -202,7 +202,7 @@ public function moveTemporaryFile($fileName) { $fileName = ltrim($fileName, '/'); - $dispersionPath = \Magento\MediaStorage\Model\File\Uploader::getDispretionPath($fileName); + $dispersionPath = \Magento\MediaStorage\Model\File\Uploader::getDispersionPath($fileName); $destinationPath = $this->entityTypeCode . $dispersionPath; if (!$this->mediaDirectory->create($destinationPath)) { diff --git a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php index 3658e36a82ec3..9950526182e3e 100644 --- a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php +++ b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php @@ -110,7 +110,7 @@ public function execute() $remoteFileUrl = $this->getRequest()->getParam('remote_image'); $this->validateRemoteFile($remoteFileUrl); $localFileName = Uploader::getCorrectFileName(basename($remoteFileUrl)); - $localTmpFileName = Uploader::getDispretionPath($localFileName) . DIRECTORY_SEPARATOR . $localFileName; + $localTmpFileName = Uploader::getDispersionPath($localFileName) . DIRECTORY_SEPARATOR . $localFileName; $localFilePath = $baseTmpMediaPath . ($localTmpFileName); $localUniqFilePath = $this->appendNewFileName($localFilePath); $this->validateRemoteFileExtensions($localUniqFilePath); @@ -174,7 +174,7 @@ private function validateRemoteFileExtensions($filePath) protected function appendResultSaveRemoteImage($fileName) { $fileInfo = pathinfo($fileName); - $tmpFileName = Uploader::getDispretionPath($fileInfo['basename']) . DIRECTORY_SEPARATOR . $fileInfo['basename']; + $tmpFileName = Uploader::getDispersionPath($fileInfo['basename']) . DIRECTORY_SEPARATOR . $fileInfo['basename']; $result['name'] = $fileInfo['basename']; $result['type'] = $this->imageAdapter->getMimeType(); $result['error'] = 0; diff --git a/lib/internal/Magento/Framework/File/Uploader.php b/lib/internal/Magento/Framework/File/Uploader.php index c3316db7be016..e86277b905ba7 100644 --- a/lib/internal/Magento/Framework/File/Uploader.php +++ b/lib/internal/Magento/Framework/File/Uploader.php @@ -201,7 +201,7 @@ public function save($destinationFolder, $newFileName = null) if ($this->_enableFilesDispersion) { $fileName = $this->correctFileNameCase($fileName); $this->setAllowCreateFolders(true); - $this->_dispretionPath = self::getDispretionPath($fileName); + $this->_dispretionPath = self::getDispersionPath($fileName); $destinationFile .= $this->_dispretionPath; $this->_createDestinationFolder($destinationFile); } @@ -611,7 +611,7 @@ public static function getNewFileName($destinationFile) * @param string $fileName * @return string */ - public static function getDispretionPath($fileName) + public static function getDispersionPath($fileName) { $char = 0; $dispertionPath = ''; From 88f218d372f4654cebbe248f8e0a014e916c68ab Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Fri, 1 Dec 2017 11:50:19 +0200 Subject: [PATCH 402/653] 12110: Missing cascade into attribute set deletion. --- .../RemoveProducts.php} | 42 ++++--------------- .../Magento/Catalog/Setup/UpgradeSchema.php | 22 ++++++++++ .../RemoveProductsTest.php} | 38 ++++------------- app/code/Magento/Catalog/etc/adminhtml/di.xml | 3 ++ app/code/Magento/Catalog/etc/module.xml | 2 +- .../CatalogUrlRewrite/etc/adminhtml/di.xml | 3 -- .../RemoveProductsTest.php} | 20 ++++++--- .../_files/attribute_set_with_product.php | 0 .../attribute_set_with_product_rollback.php | 0 9 files changed, 57 insertions(+), 73 deletions(-) rename app/code/Magento/{CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php => Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php} (50%) rename app/code/Magento/{CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php => Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php} (65%) rename dev/tests/integration/testsuite/Magento/{CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php => Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php} (67%) rename dev/tests/integration/testsuite/Magento/{CatalogUrlRewrite => Catalog}/_files/attribute_set_with_product.php (100%) rename dev/tests/integration/testsuite/Magento/{CatalogUrlRewrite => Catalog}/_files/attribute_set_with_product_rollback.php (100%) diff --git a/app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php b/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php similarity index 50% rename from app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php rename to app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php index 82a25531757a2..bc6de17f90cfe 100644 --- a/app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php +++ b/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php @@ -4,50 +4,37 @@ * See COPYING.txt for license details. */ -namespace Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository; +namespace Magento\Catalog\Plugin\Model\AttributeSetRepository; use Magento\Catalog\Model\ResourceModel\Product\Collection; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; -use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator; use Magento\Eav\Api\AttributeSetRepositoryInterface; use Magento\Eav\Api\Data\AttributeSetInterface; -use Magento\UrlRewrite\Model\UrlPersistInterface; -use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; /** - * Remove url rewrites for products with given attribute set. + * Delete related products after attribute set successfully removed. */ -class RemoveProductUrlRewrite +class RemoveProducts { /** - * @var int - */ - private $chunkSize = 1000; - - /** - * @var UrlPersistInterface - */ - private $urlPersist; - - /** + * Retrieve products related to specific attribute set. + * * @var CollectionFactory */ private $collectionFactory; /** - * ProductUrlRewriteProcessor constructor. + * RemoveProducts constructor. * - * @param UrlPersistInterface $urlPersist * @param CollectionFactory $collectionFactory */ - public function __construct(UrlPersistInterface $urlPersist, CollectionFactory $collectionFactory) + public function __construct(CollectionFactory $collectionFactory) { - $this->urlPersist = $urlPersist; $this->collectionFactory = $collectionFactory; } /** - * Remove url rewrites for products with given attribute set. + * Delete related to specific attribute set products, if attribute set was removed successfully. * * @param AttributeSetRepositoryInterface $subject * @param \Closure $proceed @@ -64,19 +51,8 @@ public function aroundDelete( /** @var Collection $productCollection */ $productCollection = $this->collectionFactory->create(); $productCollection->addFieldToFilter('attribute_set_id', ['eq' => $attributeSet->getId()]); - $productIds = $productCollection->getAllIds(); $result = $proceed($attributeSet); - if (!empty($productIds)) { - $productIds = array_chunk($productIds, $this->chunkSize); - foreach ($productIds as $ids) { - $this->urlPersist->deleteByData( - [ - UrlRewrite::ENTITY_ID => $ids, - UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE, - ] - ); - } - } + $productCollection->delete(); return $result; } diff --git a/app/code/Magento/Catalog/Setup/UpgradeSchema.php b/app/code/Magento/Catalog/Setup/UpgradeSchema.php index 616bee43de00e..ae09ff1113608 100755 --- a/app/code/Magento/Catalog/Setup/UpgradeSchema.php +++ b/app/code/Magento/Catalog/Setup/UpgradeSchema.php @@ -126,6 +126,10 @@ public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $con $this->fixCustomerGroupIdColumn($setup); } + if (version_compare($context->getVersion(), '2.2.4', '<')) { + $this->removeAttributeSetRelation($setup); + } + $setup->endSetup(); } @@ -699,4 +703,22 @@ private function addReplicaTable(SchemaSetupInterface $setup, $existingTable, $r ); $setup->getConnection()->query($sql); } + + /** + * Remove foreign key between catalog_product_entity and eav_attribute_set tables. + * Drop foreign key to delegate cascade on delete to plugin. + * @see \Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts + * + * @param SchemaSetupInterface $setup + * @return void + */ + private function removeAttributeSetRelation(SchemaSetupInterface $setup) + { + $productTable = $setup->getTable('catalog_product_entity'); + $attributeSetTable = $setup->getTable('eav_attribute_set'); + $setup->getConnection()->dropForeignKey( + $productTable, + $setup->getFkName($productTable, 'attribute_set_id', $attributeSetTable, 'attribute_set_id') + ); + } } diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php similarity index 65% rename from app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php rename to app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php index cf2337bf7c76c..a8eb757646e74 100644 --- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php @@ -4,26 +4,23 @@ * See COPYING.txt for license details. */ -namespace Magento\CatalogUrlRewrite\Test\Unit\Plugin\Eav\AttributeSetRepository; +namespace Magento\Catalog\Test\Unit\Plugin\Model\AttributeSetRepository; use Magento\Catalog\Model\ResourceModel\Product\Collection; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; -use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator; -use Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository\RemoveProductUrlRewrite; +use Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts; use Magento\Eav\Api\AttributeSetRepositoryInterface; use Magento\Eav\Api\Data\AttributeSetInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; -use Magento\UrlRewrite\Model\UrlPersistInterface; -use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; use PHPUnit\Framework\TestCase; /** - * Provide tests for RemoveProductUrlRewrite plugin. + * Provide tests for RemoveProducts plugin. */ -class RemoveProductUrlRewriteTest extends TestCase +class RemoveProductsTest extends TestCase { /** - * @var RemoveProductUrlRewrite + * @var RemoveProducts */ private $testSubject; @@ -32,11 +29,6 @@ class RemoveProductUrlRewriteTest extends TestCase */ private $collectionFactory; - /** - * @var UrlPersistInterface|\PHPUnit_Framework_MockObject_MockObject - */ - private $urlPersist; - /** * @inheritdoc */ @@ -47,25 +39,20 @@ protected function setUp() ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); - $this->urlPersist = $this->getMockBuilder(UrlPersistInterface::class) - ->disableOriginalConstructor() - ->getMockForAbstractClass(); $this->testSubject = $objectManager->getObject( - RemoveProductUrlRewrite::class, + RemoveProducts::class, [ 'collectionFactory' => $this->collectionFactory, - 'urlPersist' => $this->urlPersist, ] ); } /** - * Test plugin will delete all url rewrites for products with given attribute set. + * Test plugin will delete all related products for given attribute set. */ public function testAroundDelete() { $attributeSetId = '1'; - $productId = '1'; /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collection */ $collection = $this->getMockBuilder(Collection::class) @@ -75,21 +62,12 @@ public function testAroundDelete() ->method('addFieldToFilter') ->with(self::identicalTo('attribute_set_id'), self::identicalTo(['eq' => $attributeSetId])); $collection->expects(self::once()) - ->method('getAllIds') - ->willReturn([$productId]); + ->method('delete'); $this->collectionFactory->expects(self::once()) ->method('create') ->willReturn($collection); - $this->urlPersist->expects(self::once()) - ->method('deleteByData') - ->with(self::identicalTo( - [ - UrlRewrite::ENTITY_ID => [$productId], - UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE, - ] - )); /** @var AttributeSetRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject $attributeSetRepository */ $attributeSetRepository = $this->getMockBuilder(AttributeSetRepositoryInterface::class) ->disableOriginalConstructor() diff --git a/app/code/Magento/Catalog/etc/adminhtml/di.xml b/app/code/Magento/Catalog/etc/adminhtml/di.xml index b97e6fc1aa318..34d089580906f 100644 --- a/app/code/Magento/Catalog/etc/adminhtml/di.xml +++ b/app/code/Magento/Catalog/etc/adminhtml/di.xml @@ -184,4 +184,7 @@ <argument name="scopeOverriddenValue" xsi:type="object">Magento\Catalog\Model\Attribute\ScopeOverriddenValue</argument> </arguments> </type> + <type name="Magento\Eav\Api\AttributeSetRepositoryInterface"> + <plugin name="remove_products" type="Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts"/> + </type> </config> diff --git a/app/code/Magento/Catalog/etc/module.xml b/app/code/Magento/Catalog/etc/module.xml index 18671a32bb4fb..26ed173420adb 100644 --- a/app/code/Magento/Catalog/etc/module.xml +++ b/app/code/Magento/Catalog/etc/module.xml @@ -6,7 +6,7 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> - <module name="Magento_Catalog" setup_version="2.2.3"> + <module name="Magento_Catalog" setup_version="2.2.4"> <sequence> <module name="Magento_Eav"/> <module name="Magento_Cms"/> diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml index ebac217df5fcb..32ecc97d0f85f 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml @@ -25,9 +25,6 @@ <type name="Magento\Catalog\Model\Category\DataProvider"> <plugin name="category_ui_form_url_key_plugin" type="Magento\CatalogUrlRewrite\Plugin\Catalog\Block\Adminhtml\Category\Tab\Attributes"/> </type> - <type name="Magento\Eav\Api\AttributeSetRepositoryInterface"> - <plugin name="attribute_set_delete_plugin" type="Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository\RemoveProductUrlRewrite"/> - </type> <virtualType name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Pool"> <arguments> <argument name="modifiers" xsi:type="array"> diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php similarity index 67% rename from dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php rename to dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php index da189b85932c7..724e2e62f230d 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php @@ -7,6 +7,8 @@ namespace Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository; use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; +use Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts; use Magento\Eav\Api\AttributeSetRepositoryInterface; use Magento\Eav\Model\Entity\Attribute\Set; use Magento\TestFramework\Helper\Bootstrap; @@ -15,25 +17,25 @@ use PHPUnit\Framework\TestCase; /** - * Provide tests for RemoveProductUrlRewrite plugin. + * Provide tests for RemoveProducts plugin. * @magentoAppArea adminhtml */ -class RemoveProductUrlRewriteTest extends TestCase +class RemoveProductsTest extends TestCase { /** * @return void */ - public function testRemoveProductUrlRewriteIsRegistered() + public function testRemoveProductsIsRegistered() { $pluginInfo = Bootstrap::getObjectManager()->get(PluginList::class) ->get(AttributeSetRepositoryInterface::class, []); - self::assertSame(RemoveProductUrlRewrite::class, $pluginInfo['attribute_set_delete_plugin']['instance']); + self::assertSame(RemoveProducts::class, $pluginInfo['remove_products']['instance']); } /** - * Test url rewrite will be removed for product with given attribute set, if one will be deleted. + * Test related to given attribute set products will be removed, if attribute set will be deleted. * - * @magentoDataFixture Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php + * @magentoDataFixture Magento/Catalog/_files/attribute_set_with_product.php * @magentoDbIsolation enabled */ public function testAroundDelete() @@ -44,19 +46,25 @@ public function testAroundDelete() $productRepository = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class); $product = $productRepository->get('simple'); + $productCollection = Bootstrap::getObjectManager()->get(CollectionFactory::class)->create(); + $productCollection->addIdFilter($product->getId()); $urlRewriteCollection = Bootstrap::getObjectManager()->get(UrlRewriteCollectionFactory::class)->create(); $urlRewriteCollection->addFieldToFilter('entity_type', 'product'); $urlRewriteCollection->addFieldToFilter('entity_id', $product->getId()); self::assertSame(1, $urlRewriteCollection->getSize()); + self::assertSame(1, $productCollection->getSize()); $attributeSetRepository = Bootstrap::getObjectManager()->get(AttributeSetRepositoryInterface::class); $attributeSetRepository->deleteById($attributeSet->getAttributeSetId()); + $productCollection = Bootstrap::getObjectManager()->get(CollectionFactory::class)->create(); + $productCollection->addIdFilter($product->getId()); $urlRewriteCollection = Bootstrap::getObjectManager()->get(UrlRewriteCollectionFactory::class)->create(); $urlRewriteCollection->addFieldToFilter('entity_type', 'product'); $urlRewriteCollection->addFieldToFilter('entity_id', $product->getId()); self::assertSame(0, $urlRewriteCollection->getSize()); + self::assertSame(0, $productCollection->getSize()); } } diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_product.php similarity index 100% rename from dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php rename to dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_product.php diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_product_rollback.php similarity index 100% rename from dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php rename to dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_product_rollback.php From fce3afe6390be6c0eb2d5fcdb2f76108d6a44e77 Mon Sep 17 00:00:00 2001 From: Andreas von Studnitz <avs@integer-net.de> Date: Fri, 1 Dec 2017 10:55:17 +0100 Subject: [PATCH 403/653] 7241 Revert commit eb79b38 and re-add constants See https://github.com/magento/magento2/pull/11462#issuecomment-348441645 --- .../Magento/Config/Model/Config/Source/Nooptreq.php | 10 +++++++--- app/code/Magento/Customer/Model/Options.php | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Config/Model/Config/Source/Nooptreq.php b/app/code/Magento/Config/Model/Config/Source/Nooptreq.php index 03fe5ca2abccc..1c9eb801dfec7 100644 --- a/app/code/Magento/Config/Model/Config/Source/Nooptreq.php +++ b/app/code/Magento/Config/Model/Config/Source/Nooptreq.php @@ -11,15 +11,19 @@ */ class Nooptreq implements \Magento\Framework\Option\ArrayInterface { + const VALUE_NO = ''; + const VALUE_OPTIONAL = 'opt'; + const VALUE_REQUIRED = 'req'; + /** * @return array */ public function toOptionArray() { return [ - ['value' => '', 'label' => __('No')], - ['value' => 'opt', 'label' => __('Optional')], - ['value' => 'req', 'label' => __('Required')] + ['value' => self::VALUE_NO, 'label' => __('No')], + ['value' => self::VALUE_OPTIONAL, 'label' => __('Optional')], + ['value' => self::VALUE_REQUIRED, 'label' => __('Required')] ]; } } diff --git a/app/code/Magento/Customer/Model/Options.php b/app/code/Magento/Customer/Model/Options.php index b034e4fcf590d..b074adf39004f 100644 --- a/app/code/Magento/Customer/Model/Options.php +++ b/app/code/Magento/Customer/Model/Options.php @@ -45,7 +45,7 @@ public function getNamePrefixOptions($store = null) { return $this->prepareNamePrefixSuffixOptions( $this->addressHelper->getConfig('prefix_options', $store), - $this->addressHelper->getConfig('prefix_show', $store) == 'opt' + $this->addressHelper->getConfig('prefix_show', $store) == NooptreqSource::VALUE_OPTIONAL ); } @@ -59,7 +59,7 @@ public function getNameSuffixOptions($store = null) { return $this->prepareNamePrefixSuffixOptions( $this->addressHelper->getConfig('suffix_options', $store), - $this->addressHelper->getConfig('suffix_show', $store) == 'opt' + $this->addressHelper->getConfig('suffix_show', $store) == NooptreqSource::VALUE_OPTIONAL ); } From d06190d360a44b3fe8c854a6ffe5975194eb023e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Mart=C3=ADnez?= <adrian.martinez@interactiv4.com> Date: Fri, 13 Oct 2017 17:24:58 +0200 Subject: [PATCH 404/653] Too many password reset requests even when disabled in settings #11409 --- app/code/Magento/Security/Model/Config.php | 11 +++- .../Model/Plugin/AccountManagement.php | 26 ++++++-- .../Security/Test/Unit/Model/ConfigTest.php | 2 +- .../Model/Plugin/AccountManagementTest.php | 65 ++++++++++++++----- .../Magento/Security/etc/adminhtml/di.xml | 2 +- .../Customer/Api/AccountManagementTest.php | 18 ++--- .../Adminhtml/Index/ResetPasswordTest.php | 63 +++++++++++++++--- 7 files changed, 141 insertions(+), 46 deletions(-) diff --git a/app/code/Magento/Security/Model/Config.php b/app/code/Magento/Security/Model/Config.php index 100f4630a45a6..2135b81eb82b5 100644 --- a/app/code/Magento/Security/Model/Config.php +++ b/app/code/Magento/Security/Model/Config.php @@ -24,10 +24,17 @@ class Config implements ConfigInterface */ const XML_PATH_ADMIN_AREA = 'admin/security/'; + /** + * Configuration path to frontend area + */ + const XML_PATH_FRONTEND_AREA = 'customer/password/'; + /** * Configuration path to fronted area + * @deprecated + * @see \Magento\Security\Model\Config::XML_PATH_FRONTEND_AREA */ - const XML_PATH_FRONTED_AREA = 'customer/password/'; + const XML_PATH_FRONTED_AREA = self::XML_PATH_FRONTEND_AREA; /** * Configuration path to admin account sharing @@ -134,7 +141,7 @@ protected function getXmlPathPrefix() if ($this->scope->getCurrentScope() == \Magento\Framework\App\Area::AREA_ADMINHTML) { return self::XML_PATH_ADMIN_AREA; } - return self::XML_PATH_FRONTED_AREA; + return self::XML_PATH_FRONTEND_AREA; } /** diff --git a/app/code/Magento/Security/Model/Plugin/AccountManagement.php b/app/code/Magento/Security/Model/Plugin/AccountManagement.php index dea54b194880d..9476bf46df338 100644 --- a/app/code/Magento/Security/Model/Plugin/AccountManagement.php +++ b/app/code/Magento/Security/Model/Plugin/AccountManagement.php @@ -5,10 +5,12 @@ */ namespace Magento\Security\Model\Plugin; -use Magento\Security\Model\SecurityManager; use Magento\Customer\Model\AccountManagement as AccountManagementOriginal; +use Magento\Framework\App\ObjectManager; +use Magento\Framework\Config\ScopeInterface; use Magento\Framework\Exception\SecurityViolationException; use Magento\Security\Model\PasswordResetRequestEvent; +use Magento\Security\Model\SecurityManager; /** * Magento\Customer\Model\AccountManagement decorator @@ -30,21 +32,29 @@ class AccountManagement */ protected $passwordRequestEvent; + /** + * @var ScopeInterface + */ + private $scope; + /** * AccountManagement constructor. * * @param \Magento\Framework\App\RequestInterface $request * @param SecurityManager $securityManager * @param int $passwordRequestEvent + * @param ScopeInterface $scope */ public function __construct( \Magento\Framework\App\RequestInterface $request, \Magento\Security\Model\SecurityManager $securityManager, - $passwordRequestEvent = PasswordResetRequestEvent::CUSTOMER_PASSWORD_RESET_REQUEST + $passwordRequestEvent = PasswordResetRequestEvent::CUSTOMER_PASSWORD_RESET_REQUEST, + ScopeInterface $scope = null ) { $this->request = $request; $this->securityManager = $securityManager; $this->passwordRequestEvent = $passwordRequestEvent; + $this->scope = $scope ?: ObjectManager::getInstance()->get(ScopeInterface::class); } /** @@ -63,10 +73,14 @@ public function beforeInitiatePasswordReset( $template, $websiteId = null ) { - $this->securityManager->performSecurityCheck( - $this->passwordRequestEvent, - $email - ); + if ($this->scope->getCurrentScope() == \Magento\Framework\App\Area::AREA_FRONTEND + || $this->passwordRequestEvent == PasswordResetRequestEvent::ADMIN_PASSWORD_RESET_REQUEST) { + $this->securityManager->performSecurityCheck( + $this->passwordRequestEvent, + $email + ); + } + return [$email, $template, $websiteId]; } } diff --git a/app/code/Magento/Security/Test/Unit/Model/ConfigTest.php b/app/code/Magento/Security/Test/Unit/Model/ConfigTest.php index 7186502df73b5..3ef8655539b5a 100644 --- a/app/code/Magento/Security/Test/Unit/Model/ConfigTest.php +++ b/app/code/Magento/Security/Test/Unit/Model/ConfigTest.php @@ -167,7 +167,7 @@ protected function getXmlPathPrefix($scope) if ($scope == \Magento\Framework\App\Area::AREA_ADMINHTML) { return \Magento\Security\Model\Config::XML_PATH_ADMIN_AREA; } - return \Magento\Security\Model\Config::XML_PATH_FRONTED_AREA; + return \Magento\Security\Model\Config::XML_PATH_FRONTEND_AREA; } /** diff --git a/app/code/Magento/Security/Test/Unit/Model/Plugin/AccountManagementTest.php b/app/code/Magento/Security/Test/Unit/Model/Plugin/AccountManagementTest.php index 0935dc003d5b3..8f8128d395a0c 100644 --- a/app/code/Magento/Security/Test/Unit/Model/Plugin/AccountManagementTest.php +++ b/app/code/Magento/Security/Test/Unit/Model/Plugin/AccountManagementTest.php @@ -6,7 +6,11 @@ namespace Magento\Security\Test\Unit\Model\Plugin; +use Magento\Customer\Model\AccountManagement; +use Magento\Framework\App\Area; +use Magento\Framework\Config\ScopeInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use Magento\Security\Model\PasswordResetRequestEvent; /** * Test class for \Magento\Security\Model\Plugin\AccountManagement testing @@ -19,20 +23,25 @@ class AccountManagementTest extends \PHPUnit\Framework\TestCase protected $model; /** - * @var \Magento\Framework\App\RequestInterface + * @var \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $request; /** - * @var \Magento\Security\Model\SecurityManager + * @var \Magento\Security\Model\SecurityManager|\PHPUnit_Framework_MockObject_MockObject */ protected $securityManager; /** - * @var \Magento\Customer\Model\AccountManagement + * @var AccountManagement|\PHPUnit_Framework_MockObject_MockObject */ protected $accountManagement; + /** + * @var ScopeInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $scope; + /** * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager */ @@ -46,35 +55,45 @@ public function setUp() { $this->objectManager = new ObjectManager($this); - $this->request = $this->createMock(\Magento\Framework\App\RequestInterface::class); + $this->request = $this->createMock(\Magento\Framework\App\RequestInterface::class); $this->securityManager = $this->createPartialMock( \Magento\Security\Model\SecurityManager::class, ['performSecurityCheck'] ); - $this->accountManagement = $this->createMock(\Magento\Customer\Model\AccountManagement::class); + $this->accountManagement = $this->createMock(AccountManagement::class); + $this->scope = $this->createMock(ScopeInterface::class); + } + + /** + * @param $area + * @param $passwordRequestEvent + * @param $expectedTimes + * @dataProvider beforeInitiatePasswordResetDataProvider + */ + public function testBeforeInitiatePasswordReset($area, $passwordRequestEvent, $expectedTimes) + { + $email = 'test@example.com'; + $template = AccountManagement::EMAIL_RESET; $this->model = $this->objectManager->getObject( \Magento\Security\Model\Plugin\AccountManagement::class, [ + 'passwordRequestEvent' => $passwordRequestEvent, 'request' => $this->request, - 'securityManager' => $this->securityManager + 'securityManager' => $this->securityManager, + 'scope' => $this->scope ] ); - } - /** - * @return void - */ - public function testBeforeInitiatePasswordReset() - { - $email = 'test@example.com'; - $template = \Magento\Customer\Model\AccountManagement::EMAIL_RESET; + $this->scope->expects($this->once()) + ->method('getCurrentScope') + ->willReturn($area); - $this->securityManager->expects($this->once()) + $this->securityManager->expects($this->exactly($expectedTimes)) ->method('performSecurityCheck') - ->with(\Magento\Security\Model\PasswordResetRequestEvent::CUSTOMER_PASSWORD_RESET_REQUEST, $email) + ->with($passwordRequestEvent, $email) ->willReturnSelf(); $this->model->beforeInitiatePasswordReset( @@ -83,4 +102,18 @@ public function testBeforeInitiatePasswordReset() $template ); } + + /** + * @return array + */ + public function beforeInitiatePasswordResetDataProvider() + { + return [ + [Area::AREA_ADMINHTML, PasswordResetRequestEvent::CUSTOMER_PASSWORD_RESET_REQUEST, 0], + [Area::AREA_ADMINHTML, PasswordResetRequestEvent::ADMIN_PASSWORD_RESET_REQUEST, 1], + [Area::AREA_FRONTEND, PasswordResetRequestEvent::CUSTOMER_PASSWORD_RESET_REQUEST, 1], + // This should never happen, but let's cover it with tests + [Area::AREA_FRONTEND, PasswordResetRequestEvent::ADMIN_PASSWORD_RESET_REQUEST, 1], + ]; + } } diff --git a/app/code/Magento/Security/etc/adminhtml/di.xml b/app/code/Magento/Security/etc/adminhtml/di.xml index 6f07fb580490e..c1188c2d405cf 100644 --- a/app/code/Magento/Security/etc/adminhtml/di.xml +++ b/app/code/Magento/Security/etc/adminhtml/di.xml @@ -17,7 +17,7 @@ </type> <type name="Magento\Security\Model\Plugin\AccountManagement"> <arguments> - <argument name="passwordRequestEvent" xsi:type="const">Magento\Security\Model\PasswordResetRequestEvent::ADMIN_PASSWORD_RESET_REQUEST</argument> + <argument name="passwordRequestEvent" xsi:type="const">Magento\Security\Model\PasswordResetRequestEvent::CUSTOMER_PASSWORD_RESET_REQUEST</argument> </arguments> </type> <type name="Magento\Security\Model\SecurityManager"> diff --git a/dev/tests/api-functional/testsuite/Magento/Customer/Api/AccountManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Customer/Api/AccountManagementTest.php index 48cc8b8384d74..452a59d7e702c 100644 --- a/dev/tests/api-functional/testsuite/Magento/Customer/Api/AccountManagementTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Customer/Api/AccountManagementTest.php @@ -8,16 +8,12 @@ use Magento\Customer\Api\Data\CustomerInterface as Customer; use Magento\Customer\Model\AccountManagement; use Magento\Framework\Exception\InputException; -use Magento\Framework\Exception\NoSuchEntityException; +use Magento\Framework\Webapi\Exception as HTTPExceptionCodes; +use Magento\Newsletter\Model\Subscriber; +use Magento\Security\Model\Config; use Magento\TestFramework\Helper\Bootstrap; use Magento\TestFramework\Helper\Customer as CustomerHelper; use Magento\TestFramework\TestCase\WebapiAbstract; -use Magento\Framework\Webapi\Exception as HTTPExceptionCodes; -use Magento\Security\Model\Config; -use Magento\Newsletter\Model\Plugin\CustomerPlugin; -use Magento\Framework\Webapi\Rest\Request as RestRequest; -use Magento\Newsletter\Model\Subscriber; -use Magento\Customer\Model\Data\Customer as CustomerData; /** * Test class for Magento\Customer\Api\AccountManagementInterface @@ -112,16 +108,16 @@ public function setUp() $this->initSubscriber(); if ($this->config->getConfigDataValue( - Config::XML_PATH_FRONTED_AREA . + Config::XML_PATH_FRONTEND_AREA . Config::XML_PATH_PASSWORD_RESET_PROTECTION_TYPE ) != 0) { $this->configValue = $this->config ->getConfigDataValue( - Config::XML_PATH_FRONTED_AREA . + Config::XML_PATH_FRONTEND_AREA . Config::XML_PATH_PASSWORD_RESET_PROTECTION_TYPE ); $this->config->setDataByPath( - Config::XML_PATH_FRONTED_AREA . Config::XML_PATH_PASSWORD_RESET_PROTECTION_TYPE, + Config::XML_PATH_FRONTEND_AREA . Config::XML_PATH_PASSWORD_RESET_PROTECTION_TYPE, 0 ); $this->config->save(); @@ -150,7 +146,7 @@ public function tearDown() } } $this->config->setDataByPath( - Config::XML_PATH_FRONTED_AREA . Config::XML_PATH_PASSWORD_RESET_PROTECTION_TYPE, + Config::XML_PATH_FRONTEND_AREA . Config::XML_PATH_PASSWORD_RESET_PROTECTION_TYPE, $this->configValue ); $this->config->save(); diff --git a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/Index/ResetPasswordTest.php b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/Index/ResetPasswordTest.php index fcbe7c5106617..b5ca783d68cf2 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/Index/ResetPasswordTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/Index/ResetPasswordTest.php @@ -20,10 +20,11 @@ class ResetPasswordTest extends \Magento\TestFramework\TestCase\AbstractBackendC protected $baseControllerUrl = 'http://localhost/index.php/backend/customer/index/'; /** - * Checks reset password functionality with default settings and customer reset request event. + * Checks reset password functionality with no restrictive settings and customer reset request event. + * Admin is not affected by this security check, so reset password email must be sent. * - * @magentoConfigFixture current_store admin/security/limit_password_reset_requests_method 1 - * @magentoConfigFixture current_store admin/security/min_time_between_password_reset_requests 10 + * @magentoConfigFixture current_store customer/password/limit_password_reset_requests_method 0 + * @magentoConfigFixture current_store customer/password/min_time_between_password_reset_requests 0 * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testResetPasswordSuccess() @@ -40,11 +41,57 @@ public function testResetPasswordSuccess() $this->assertRedirect($this->stringStartsWith($this->baseControllerUrl . 'edit')); } + /** + * Checks reset password functionality with default restrictive min time between + * password reset requests and customer reset request event. + * Admin is not affected by this security check, so reset password email must be sent. + * + * @magentoConfigFixture current_store customer/password/max_number_password_reset_requests 0 + * @magentoConfigFixture current_store customer/password/min_time_between_password_reset_requests 10 + * @magentoDataFixture Magento/Customer/_files/customer.php + */ + public function testResetPasswordMinTimeError() + { + $this->passwordResetRequestEventCreate( + \Magento\Security\Model\PasswordResetRequestEvent::CUSTOMER_PASSWORD_RESET_REQUEST + ); + $this->getRequest()->setPostValue(['customer_id' => '1']); + $this->dispatch('backend/customer/index/resetPassword'); + $this->assertSessionMessages( + $this->equalTo(['The customer will receive an email with a link to reset password.']), + \Magento\Framework\Message\MessageInterface::TYPE_SUCCESS + ); + $this->assertRedirect($this->stringStartsWith($this->baseControllerUrl . 'edit')); + } + + /** + * Checks reset password functionality with default restrictive limited number + * password reset requests and customer reset request event. + * Admin is not affected by this security check, so reset password email must be sent. + * + * @magentoConfigFixture current_store customer/password/max_number_password_reset_requests 1 + * @magentoConfigFixture current_store customer/password/min_time_between_password_reset_requests 0 + * @magentoDataFixture Magento/Customer/_files/customer.php + */ + public function testResetPasswordLimitError() + { + $this->passwordResetRequestEventCreate( + \Magento\Security\Model\PasswordResetRequestEvent::CUSTOMER_PASSWORD_RESET_REQUEST + ); + $this->getRequest()->setPostValue(['customer_id' => '1']); + $this->dispatch('backend/customer/index/resetPassword'); + $this->assertSessionMessages( + $this->equalTo(['The customer will receive an email with a link to reset password.']), + \Magento\Framework\Message\MessageInterface::TYPE_SUCCESS + ); + $this->assertRedirect($this->stringStartsWith($this->baseControllerUrl . 'edit')); + } + /** * Checks reset password functionality with default settings, customer and admin reset request events. * - * @magentoConfigFixture current_store admin/security/limit_password_reset_requests_method 1 - * @magentoConfigFixture current_store admin/security/min_time_between_password_reset_requests 10 + * @magentoConfigFixture current_store customer/password/limit_password_reset_requests_method 1 + * @magentoConfigFixture current_store customer/password/min_time_between_password_reset_requests 10 * @magentoConfigFixture current_store contact/email/recipient_email hello@example.com * @magentoDataFixture Magento/Customer/_files/customer.php */ @@ -59,10 +106,8 @@ public function testResetPasswordWithSecurityViolationException() $this->getRequest()->setPostValue(['customer_id' => '1']); $this->dispatch('backend/customer/index/resetPassword'); $this->assertSessionMessages( - $this->equalTo( - ['Too many password reset requests. Please wait and try again or contact hello@example.com.'] - ), - \Magento\Framework\Message\MessageInterface::TYPE_ERROR + $this->equalTo(['The customer will receive an email with a link to reset password.']), + \Magento\Framework\Message\MessageInterface::TYPE_SUCCESS ); $this->assertRedirect($this->stringStartsWith($this->baseControllerUrl . 'edit')); } From daee4a8905ab50c6009f3baf304596644bc40d46 Mon Sep 17 00:00:00 2001 From: Pascal Brouwers <pascal@h-o.nl> Date: Fri, 1 Dec 2017 12:25:03 +0100 Subject: [PATCH 405/653] issue 12506: added PR changes --- lib/internal/Magento/Framework/File/Uploader.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/internal/Magento/Framework/File/Uploader.php b/lib/internal/Magento/Framework/File/Uploader.php index e86277b905ba7..07de9941271c3 100644 --- a/lib/internal/Magento/Framework/File/Uploader.php +++ b/lib/internal/Magento/Framework/File/Uploader.php @@ -605,6 +605,18 @@ public static function getNewFileName($destinationFile) return $destFileName; } + /** + * Get dispertion path + * + * @param string $fileName + * @return string + * @deprecated + */ + public static function getDispretionPath($fileName) + { + return self::getDispersionPath($fileName); + } + /** * Get dispertion path * From 6c6ca61e7831e544bf4d46feaba3640cf5138072 Mon Sep 17 00:00:00 2001 From: "Leandro F. L" <leandro.luvisotto@empiricus.com.br> Date: Fri, 1 Dec 2017 11:48:57 -0200 Subject: [PATCH 406/653] Duplicate array key --- .../Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php | 1 - app/code/Magento/Downloadable/Helper/File.php | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php index 15808c9dd170d..0e21e566d5e75 100644 --- a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php +++ b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes/Extend.php @@ -142,7 +142,6 @@ public function getExtendedElement($switchAttributeCode) [ 'name' => "product[{$switchAttributeCode}]", 'values' => $this->getOptions(), - 'value' => $switchAttributeCode, 'class' => 'required-entry next-toinput', 'no_span' => true, 'disabled' => $this->isDisabledField(), diff --git a/app/code/Magento/Downloadable/Helper/File.php b/app/code/Magento/Downloadable/Helper/File.php index 6c248404d1911..10ee9ff405ec8 100644 --- a/app/code/Magento/Downloadable/Helper/File.php +++ b/app/code/Magento/Downloadable/Helper/File.php @@ -766,7 +766,6 @@ public function getAllMineTypes() 'xxyz' => 'chemical/x-xyz', 'xzaz' => 'application/vnd.zzazz.deck+xml', 'xzip' => 'application/zip', - 'xzmm' => 'application/vnd.handheld-entertainment+xml', - 'xodt' => 'application/x-vnd.oasis.opendocument.spreadsheet', + 'xzmm' => 'application/vnd.handheld-entertainment+xml' ]; } From e66bea87c061a16ffa70cdbb2f26d06e3b66cd04 Mon Sep 17 00:00:00 2001 From: Cy Kirsch <cykirsch@gmail.com> Date: Fri, 1 Dec 2017 08:28:32 -0600 Subject: [PATCH 407/653] Fixes per ishakhsuvarov code review: - const documenation - reverse condition for readability - better variable name - type and return hints --- .../DeploymentConfig/Writer/PhpFormatter.php | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php b/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php index 6556a0472f9d8..09f2bc888e347 100644 --- a/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php +++ b/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php @@ -11,6 +11,9 @@ */ class PhpFormatter implements FormatterInterface { + /** + * 2 space indentation for array formatting + */ const INDENT = ' '; /** @@ -76,19 +79,20 @@ private function formatData($data, $comments = [], $prefix = ' ') * @param integer $depth * @return string */ - private function varExportShort($var, $depth = 0) + private function varExportShort($var, int $depth = 0): string { - if (gettype($var) === 'array') { - $indexed = array_keys($var) === range(0, count($var) - 1); - $r = []; - foreach ($var as $key => $value) { - $r[] = str_repeat(self::INDENT, $depth) - . ($indexed ? '' : $this->varExportShort($key) . ' => ') - . $this->varExportShort($value, $depth + 1); - } - return sprintf("[\n%s\n%s]", implode(",\n", $r), str_repeat(self::INDENT, $depth - 1)); + if (!is_array($var)) { + return var_export($var, true); + } + + $indexed = array_keys($var) === range(0, count($var) - 1); + $expanded = []; + foreach ($var as $key => $value) { + $expanded[] = str_repeat(self::INDENT, $depth) + . ($indexed ? '' : $this->varExportShort($key) . ' => ') + . $this->varExportShort($value, $depth + 1); } - return var_export($var, true); + return sprintf("[\n%s\n%s]", implode(",\n", $expanded), str_repeat(self::INDENT, $depth - 1)); } } From fe9221f2c75b66c981aaa7b385f52cf9133de5ff Mon Sep 17 00:00:00 2001 From: "Leandro F. L" <leandro.luvisotto@empiricus.com.br> Date: Fri, 1 Dec 2017 12:34:31 -0200 Subject: [PATCH 408/653] The left and the right parts of assignment are equal --- app/code/Magento/Variable/Block/System/Variable/Edit.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/code/Magento/Variable/Block/System/Variable/Edit.php b/app/code/Magento/Variable/Block/System/Variable/Edit.php index be68814ea27e2..cf9a7489f3d53 100644 --- a/app/code/Magento/Variable/Block/System/Variable/Edit.php +++ b/app/code/Magento/Variable/Block/System/Variable/Edit.php @@ -91,9 +91,7 @@ protected function _preparelayout() public function getFormHtml() { $formHtml = parent::getFormHtml(); - if (!$this->_storeManager->isSingleStoreMode() && $this->getVariable()->getId()) { - $formHtml = $formHtml; - } + return $formHtml; } From 702d7fe27916ed66dbb72af5bd59d07c58d546bf Mon Sep 17 00:00:00 2001 From: "Leandro F. L" <leandro.luvisotto@empiricus.com.br> Date: Fri, 1 Dec 2017 12:43:53 -0200 Subject: [PATCH 409/653] Case mismatch --- .../Model/Import/AdvancedPricing.php | 2 +- .../AdvancedPricing/Validator/WebsiteTest.php | 2 +- .../Block/System/Store/Edit/AbstractForm.php | 2 +- .../Controller/Adminhtml/System/Account/Save.php | 6 +++--- .../Unit/Block/Widget/Grid/ColumnSetTest.php | 2 +- .../Test/Unit/Block/Widget/Grid/ColumnTest.php | 2 +- .../view/adminhtml/templates/page/header.phtml | 4 ++-- .../view/adminhtml/templates/system/search.phtml | 8 ++++---- .../templates/widget/grid/extended.phtml | 8 ++++---- .../Block/Product/View/Options/Type/Select.php | 4 ++-- .../Backend/GroupPrice/AbstractTest.php | 2 +- .../catalog/product/tab/inventory.phtml | 16 ++++++++-------- app/code/Magento/Cms/Helper/Wysiwyg/Images.php | 2 +- .../Cms/Test/Unit/Helper/Wysiwyg/ImagesTest.php | 2 +- .../Structure/ElementVisibilityCompositeTest.php | 2 +- .../Model/Product/Cache/Tag/ConfigurableTest.php | 2 +- .../Block/Adminhtml/Edit/Tab/Newsletter.php | 2 +- .../DeploymentConfig/ImporterFactoryTest.php | 2 +- .../DeploymentConfig/ValidatorFactoryTest.php | 2 +- .../Downloadable/Model/LinkRepository.php | 2 +- .../Downloadable/Model/SampleRepository.php | 2 +- .../Product/Form/Modifier/CompositeTest.php | 2 +- .../Magento/Eav/Model/Entity/AbstractEntity.php | 2 +- .../Unit/Block/Adminhtml/Template/EditTest.php | 2 +- .../Model/Observer/ReportConcurrentAdmins.php | 4 ++-- .../ReportConcurrentAdminsToNewRelic.php | 4 ++-- .../ReportSystemCacheFlushToNewRelic.php | 4 ++-- .../Model/ResourceModel/Carrier/Tablerate.php | 4 ++-- .../Block/Adminhtml/Form/Field/ExportTest.php | 2 +- .../Model/ResourceModel/Report/Settlement.php | 2 +- .../Payflow/Service/Response/TransactionTest.php | 2 +- .../Review/Model/ResourceModel/Rating/Option.php | 2 +- .../Model/ResourceModel/AbstractResource.php | 2 +- .../Block/Adminhtml/Items/AbstractItemsTest.php | 2 +- .../Unit/Block/Adminhtml/Items/AbstractTest.php | 2 +- .../Test/Unit/Model/Order/Payment/InfoTest.php | 2 +- .../Test/Unit/Model/Order/Pdf/AbstractTest.php | 2 +- .../Unit/Model/Order/Pdf/Config/ReaderTest.php | 2 +- .../RowBaseAndTotalBaseCalculatorTestCase.php | 2 +- .../Magento/Ui/Config/Converter/HtmlContent.php | 2 +- .../Magento/User/Model/ResourceModel/User.php | 2 +- app/code/Magento/User/Model/User.php | 6 +++--- .../Magento/User/Test/Unit/Model/UserTest.php | 10 +++++----- app/code/Magento/Webapi/Model/Soap/Fault.php | 2 +- .../Test/Unit/Model/Config/FileResolverTest.php | 6 +++--- 45 files changed, 74 insertions(+), 74 deletions(-) diff --git a/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing.php b/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing.php index 23829d3725119..0e8acb37104e6 100644 --- a/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing.php +++ b/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing.php @@ -394,7 +394,7 @@ protected function saveAndReplaceAdvancedPrices() ? $rowData[self::COL_TIER_PRICE] : 0, 'percentage_value' => $rowData[self::COL_TIER_PRICE_TYPE] === self::TIER_PRICE_TYPE_PERCENT ? $rowData[self::COL_TIER_PRICE] : null, - 'website_id' => $this->getWebsiteId($rowData[self::COL_TIER_PRICE_WEBSITE]) + 'website_id' => $this->getWebSiteId($rowData[self::COL_TIER_PRICE_WEBSITE]) ]; } } diff --git a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/WebsiteTest.php b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/WebsiteTest.php index 5111b4932d7a8..9a380ff75da24 100644 --- a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/WebsiteTest.php +++ b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/WebsiteTest.php @@ -27,7 +27,7 @@ class WebsiteTest extends \PHPUnit\Framework\TestCase protected function setUp() { - $this->webSiteModel = $this->getMockBuilder(\Magento\Store\Model\WebSite::class) + $this->webSiteModel = $this->getMockBuilder(\Magento\Store\Model\Website::class) ->setMethods(['getBaseCurrency']) ->disableOriginalConstructor() ->getMock(); diff --git a/app/code/Magento/Backend/Block/System/Store/Edit/AbstractForm.php b/app/code/Magento/Backend/Block/System/Store/Edit/AbstractForm.php index f19799d2e4939..034887c67d1ee 100644 --- a/app/code/Magento/Backend/Block/System/Store/Edit/AbstractForm.php +++ b/app/code/Magento/Backend/Block/System/Store/Edit/AbstractForm.php @@ -37,7 +37,7 @@ protected function _prepareForm() ['data' => ['id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post']] ); - $this->_prepareStoreFieldSet($form); + $this->_prepareStoreFieldset($form); $form->addField( 'store_type', diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Save.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Save.php index c9bce1cbf3888..421885a0c32a3 100644 --- a/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Save.php +++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Save.php @@ -54,9 +54,9 @@ public function execute() $user = $this->_objectManager->create(\Magento\User\Model\User::class)->load($userId); $user->setId($userId) - ->setUsername($this->getRequest()->getParam('username', false)) - ->setFirstname($this->getRequest()->getParam('firstname', false)) - ->setLastname($this->getRequest()->getParam('lastname', false)) + ->setUserName($this->getRequest()->getParam('username', false)) + ->setFirstName($this->getRequest()->getParam('firstname', false)) + ->setLastName($this->getRequest()->getParam('lastname', false)) ->setEmail(strtolower($this->getRequest()->getParam('email', false))); if ($this->_objectManager->get(\Magento\Framework\Validator\Locale::class)->isValid($interfaceLocale)) { diff --git a/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/ColumnSetTest.php b/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/ColumnSetTest.php index be171a8ed40bf..df242a4cf6129 100644 --- a/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/ColumnSetTest.php +++ b/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/ColumnSetTest.php @@ -117,7 +117,7 @@ public function testSetFilterTypePropagatesFilterTypeToColumns() public function testGetRowUrlIfUrlPathNotSet() { - $this->assertEquals('#', $this->_block->getRowUrl(new \StdClass())); + $this->assertEquals('#', $this->_block->getRowUrl(new \stdClass())); } public function testGetRowUrl() diff --git a/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/ColumnTest.php b/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/ColumnTest.php index da13af87b71ea..c5c56fd75fbe7 100644 --- a/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/ColumnTest.php +++ b/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/ColumnTest.php @@ -351,7 +351,7 @@ public function testSetGetGrid() $this->_block->setFilter('StdClass'); - $grid = new \StdClass(); + $grid = new \stdClass(); $this->_block->setGrid($grid); $this->assertEquals($grid, $this->_block->getGrid()); } diff --git a/app/code/Magento/Backend/view/adminhtml/templates/page/header.phtml b/app/code/Magento/Backend/view/adminhtml/templates/page/header.phtml index 40b7173f47417..8feccc9cf1b8f 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/page/header.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/page/header.phtml @@ -29,7 +29,7 @@ data-mage-init='{"dropdown":{}}' data-toggle="dropdown"> <span class="admin__action-dropdown-text"> - <span class="admin-user-account-text"><?= $block->escapeHtml($block->getUser()->getUsername()) ?></span> + <span class="admin-user-account-text"><?= $block->escapeHtml($block->getUser()->getUserName()) ?></span> </span> </a> <ul class="admin__action-dropdown-menu"> @@ -39,7 +39,7 @@ href="<?= /* @escapeNotVerified */ $block->getUrl('adminhtml/system_account/index') ?>" <?= /* @escapeNotVerified */ $block->getUiId('user', 'account', 'settings') ?> title="<?= $block->escapeHtml(__('Account Setting')) ?>"> - <?= /* @escapeNotVerified */ __('Account Setting') ?> (<span class="admin-user-name"><?= $block->escapeHtml($block->getUser()->getUsername()) ?></span>) + <?= /* @escapeNotVerified */ __('Account Setting') ?> (<span class="admin-user-name"><?= $block->escapeHtml($block->getUser()->getUserName()) ?></span>) </a> </li> <?php endif; ?> diff --git a/app/code/Magento/Backend/view/adminhtml/templates/system/search.phtml b/app/code/Magento/Backend/view/adminhtml/templates/system/search.phtml index a528133b2bc3a..b50183ced29b4 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/system/search.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/system/search.phtml @@ -28,16 +28,16 @@ <script data-template="search-suggest" type="text/x-magento-template"> <ul class="search-global-menu"> <li class="item"> - <a id="searchPreviewProducts" href="<?= /* @escapeNotVerified */ $block->getURL('catalog/product/index/') ?>?search=<%- data.term%>" class="title">"<%- data.term%>" in Products</a> + <a id="searchPreviewProducts" href="<?= /* @escapeNotVerified */ $block->getUrl('catalog/product/index/') ?>?search=<%- data.term%>" class="title">"<%- data.term%>" in Products</a> </li> <li class="item"> - <a id="searchPreviewOrders" href="<?= /* @escapeNotVerified */ $block->getURL('sales/order/index/') ?>?search=<%- data.term%>" class="title">"<%- data.term%>" in Orders</a> + <a id="searchPreviewOrders" href="<?= /* @escapeNotVerified */ $block->getUrl('sales/order/index/') ?>?search=<%- data.term%>" class="title">"<%- data.term%>" in Orders</a> </li> <li class="item"> - <a id="searchPreviewCustomers" href="<?= /* @escapeNotVerified */ $block->getURL('customer/index/index/') ?>?search=<%- data.term%>" class="title">"<%- data.term%>" in Customers</a> + <a id="searchPreviewCustomers" href="<?= /* @escapeNotVerified */ $block->getUrl('customer/index/index/') ?>?search=<%- data.term%>" class="title">"<%- data.term%>" in Customers</a> </li> <li class="item"> - <a id="searchPreviewPages" href="<?= /* @escapeNotVerified */ $block->getURL('cms/page/index/') ?>?search=<%- data.term%>" class="title">"<%- data.term%>" in Pages</a> + <a id="searchPreviewPages" href="<?= /* @escapeNotVerified */ $block->getUrl('cms/page/index/') ?>?search=<%- data.term%>" class="title">"<%- data.term%>" in Pages</a> </li> <% if (data.items.length) { %> <% _.each(data.items, function(value){ %> diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/extended.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/extended.phtml index a31bf4d23abaa..f97db4ad993b1 100644 --- a/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/extended.phtml +++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/extended.phtml @@ -72,7 +72,7 @@ $numColumns = sizeof($block->getColumns()); <?php if ($block->getPagerVisibility()): ?> <div class="admin__data-grid-pager-wrap"> <select name="<?= /* @escapeNotVerified */ $block->getVarNameLimit() ?>" - id="<?= $block->escapeHTML($block->getHtmlId()) ?>_page-limit" + id="<?= $block->escapeHtml($block->getHtmlId()) ?>_page-limit" onchange="<?= /* @escapeNotVerified */ $block->getJsObjectName() ?>.loadByElement(this)" class="admin__control-select"> <option value="20"<?php if ($block->getCollection()->getPageSize() == 20): ?> @@ -91,7 +91,7 @@ $numColumns = sizeof($block->getColumns()); selected="selected"<?php endif; ?>>200 </option> </select> - <label for="<?= $block->escapeHTML($block->getHtmlId()) ?><?= $block->escapeHTML($block->getHtmlId()) ?>_page-limit" + <label for="<?= $block->escapeHtml($block->getHtmlId()) ?><?= $block->escapeHtml($block->getHtmlId()) ?>_page-limit" class="admin__control-support-text"><?= /* @escapeNotVerified */ __('per page') ?></label> <div class="admin__data-grid-pager"> @@ -107,12 +107,12 @@ $numColumns = sizeof($block->getColumns()); <button type="button" class="action-previous disabled"><span><?= /* @escapeNotVerified */ __('Previous page') ?></span></button> <?php endif; ?> <input type="text" - id="<?= $block->escapeHTML($block->getHtmlId()) ?>_page-current" + id="<?= $block->escapeHtml($block->getHtmlId()) ?>_page-current" name="<?= /* @escapeNotVerified */ $block->getVarNamePage() ?>" value="<?= /* @escapeNotVerified */ $_curPage ?>" class="admin__control-text" onkeypress="<?= /* @escapeNotVerified */ $block->getJsObjectName() ?>.inputPage(event, '<?= /* @escapeNotVerified */ $_lastPage ?>')" <?= /* @escapeNotVerified */ $block->getUiId('current-page') ?> /> - <label class="admin__control-support-text" for="<?= $block->escapeHTML($block->getHtmlId()) ?>_page-current"> + <label class="admin__control-support-text" for="<?= $block->escapeHtml($block->getHtmlId()) ?>_page-current"> <?= /* @escapeNotVerified */ __('of %1', '<span>' . $block->getCollection()->getLastPageNumber() . '</span>') ?> </label> <?php if ($_curPage < $_lastPage): ?> diff --git a/app/code/Magento/Catalog/Block/Product/View/Options/Type/Select.php b/app/code/Magento/Catalog/Block/Product/View/Options/Type/Select.php index d546ef483132b..7df9b972e1501 100644 --- a/app/code/Magento/Catalog/Block/Product/View/Options/Type/Select.php +++ b/app/code/Magento/Catalog/Block/Product/View/Options/Type/Select.php @@ -44,9 +44,9 @@ public function getValuesHtml() ] ); if ($_option->getType() == \Magento\Catalog\Api\Data\ProductCustomOptionInterface::OPTION_TYPE_DROP_DOWN) { - $select->setName('options[' . $_option->getid() . ']')->addOption('', __('-- Please Select --')); + $select->setName('options[' . $_option->getId() . ']')->addOption('', __('-- Please Select --')); } else { - $select->setName('options[' . $_option->getid() . '][]'); + $select->setName('options[' . $_option->getId() . '][]'); $select->setClass('multiselect admin__control-multiselect' . $require . ' product-custom-option'); } foreach ($_option->getValues() as $_value) { diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/GroupPrice/AbstractTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/GroupPrice/AbstractTest.php index 5963d8b161633..3003c2f8085e4 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/GroupPrice/AbstractTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/GroupPrice/AbstractTest.php @@ -47,7 +47,7 @@ protected function setUp() 'scopeOverriddenValue' => $scopeOverriddenValue ] ); - $resource = $this->createPartialMock(\StdClass::class, ['getMainTable']); + $resource = $this->createPartialMock(\stdClass::class, ['getMainTable']); $resource->expects($this->any())->method('getMainTable')->will($this->returnValue('table')); $this->_model->expects($this->any())->method('_getResource')->will($this->returnValue($resource)); diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/tab/inventory.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/tab/inventory.phtml index 15c33c56e3ac6..2c62bbf8db3e9 100644 --- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/tab/inventory.phtml +++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/tab/inventory.phtml @@ -27,7 +27,7 @@ <option value="0"<?php if ($block->getFieldValue('manage_stock') == 0): ?> selected="selected"<?php endif; ?>><?= /* @escapeNotVerified */ __('No') ?></option> </select> <input type="hidden" id="inventory_manage_stock_default" value="<?= /* @escapeNotVerified */ $block->getDefaultConfigValue('manage_stock') ?>"> - <?php $_checked = ($block->getFieldValue('use_config_manage_stock') || $block->IsNew()) ? 'checked="checked"' : '' ?> + <?php $_checked = ($block->getFieldValue('use_config_manage_stock') || $block->isNew()) ? 'checked="checked"' : '' ?> <input type="checkbox" id="inventory_use_config_manage_stock" name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][use_config_manage_stock]" value="1" <?= /* @escapeNotVerified */ $_checked ?> onclick="toggleValueElements(this, this.parentNode);" <?= /* @escapeNotVerified */ $_readonly ?>> <label for="inventory_use_config_manage_stock"><?= /* @escapeNotVerified */ __('Use Config Settings') ?></label> <?php if (!$block->isReadonly()): ?> @@ -67,7 +67,7 @@ toggleValueElements($('inventory_use_config_manage_stock'), $('inventory_use_con <input type="text" class="input-text validate-number" id="inventory_min_qty" name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][min_qty]" value="<?= /* @escapeNotVerified */ $block->getFieldValue('min_qty') * 1 ?>" <?= /* @escapeNotVerified */ $_readonly ?>> <div class="control-inner-wrap"> - <?php $_checked = ($block->getFieldValue('use_config_min_qty') || $block->IsNew()) ? 'checked="checked"' : '' ?> + <?php $_checked = ($block->getFieldValue('use_config_min_qty') || $block->isNew()) ? 'checked="checked"' : '' ?> <input type="checkbox" id="inventory_use_config_min_qty" name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][use_config_min_qty]" value="1" <?= /* @escapeNotVerified */ $_checked ?> onclick="toggleValueElements(this, this.parentNode);" <?= /* @escapeNotVerified */ $_readonly ?>> <label for="inventory_use_config_min_qty"><?= /* @escapeNotVerified */ __('Use Config Settings') ?></label> </div> @@ -94,7 +94,7 @@ toggleValueElements($('inventory_use_config_min_qty'), $('inventory_use_config_m name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][min_sale_qty]" value="<?= /* @escapeNotVerified */ $block->getFieldValue('min_sale_qty') * 1 ?>" <?= /* @escapeNotVerified */ $_readonly ?>> <div class="control-inner-wrap"> - <?php $_checked = ($block->getFieldValue('use_config_min_sale_qty') || $block->IsNew()) ? 'checked="checked"' : '' ?> + <?php $_checked = ($block->getFieldValue('use_config_min_sale_qty') || $block->isNew()) ? 'checked="checked"' : '' ?> <input type="checkbox" id="inventory_use_config_min_sale_qty" name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][use_config_min_sale_qty]" value="1" <?= /* @escapeNotVerified */ $_checked ?> onclick="toggleValueElements(this, this.parentNode);" class="checkbox" <?= /* @escapeNotVerified */ $_readonly ?>> <label for="inventory_use_config_min_sale_qty"><?= /* @escapeNotVerified */ __('Use Config Settings') ?></label> </div> @@ -117,7 +117,7 @@ toggleValueElements($('inventory_use_config_min_sale_qty'), $('inventory_use_con </label> <div class="control"> <input type="text" class="input-text validate-number" id="inventory_max_sale_qty" name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][max_sale_qty]" value="<?= /* @escapeNotVerified */ $block->getFieldValue('max_sale_qty') * 1 ?>" <?= /* @escapeNotVerified */ $_readonly ?>> - <?php $_checked = ($block->getFieldValue('use_config_max_sale_qty') || $block->IsNew()) ? 'checked="checked"' : '' ?> + <?php $_checked = ($block->getFieldValue('use_config_max_sale_qty') || $block->isNew()) ? 'checked="checked"' : '' ?> <div class="control-inner-wrap"> <input type="checkbox" id="inventory_use_config_max_sale_qty" name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][use_config_max_sale_qty]" value="1" <?= /* @escapeNotVerified */ $_checked ?> onclick="toggleValueElements(this, this.parentNode);" class="checkbox" <?= /* @escapeNotVerified */ $_readonly ?>> <label for="inventory_use_config_max_sale_qty"><?= /* @escapeNotVerified */ __('Use Config Settings') ?></label> @@ -182,7 +182,7 @@ toggleValueElements($('inventory_use_config_max_sale_qty'), $('inventory_use_con </select> <div class="control-inner-wrap"> - <?php $_checked = ($block->getFieldValue('use_config_backorders') || $block->IsNew()) ? 'checked="checked"' : '' ?> + <?php $_checked = ($block->getFieldValue('use_config_backorders') || $block->isNew()) ? 'checked="checked"' : '' ?> <input type="checkbox" id="inventory_use_config_backorders" name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][use_config_backorders]" value="1" <?= /* @escapeNotVerified */ $_checked ?> onclick="toggleValueElements(this, this.parentNode);" <?= /* @escapeNotVerified */ $_readonly ?>> <label for="inventory_use_config_backorders"><?= /* @escapeNotVerified */ __('Use Config Settings') ?></label> </div> @@ -207,7 +207,7 @@ toggleValueElements($('inventory_use_config_backorders'), $('inventory_use_confi <input type="text" class="input-text validate-number" id="inventory_notify_stock_qty" name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][notify_stock_qty]" value="<?= /* @escapeNotVerified */ $block->getFieldValue('notify_stock_qty') * 1 ?>" <?= /* @escapeNotVerified */ $_readonly ?>> <div class="control-inner-wrap"> - <?php $_checked = ($block->getFieldValue('use_config_notify_stock_qty') || $block->IsNew()) ? 'checked="checked"' : '' ?> + <?php $_checked = ($block->getFieldValue('use_config_notify_stock_qty') || $block->isNew()) ? 'checked="checked"' : '' ?> <input type="checkbox" id="inventory_use_config_notify_stock_qty" name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][use_config_notify_stock_qty]" value="1" <?= /* @escapeNotVerified */ $_checked ?> onclick="toggleValueElements(this, this.parentNode);" <?= /* @escapeNotVerified */ $_readonly ?>> <label for="inventory_use_config_notify_stock_qty"><?= /* @escapeNotVerified */ __('Use Config Settings') ?></label> </div> @@ -238,7 +238,7 @@ toggleValueElements($('inventory_use_config_notify_stock_qty'), $('inventory_use <input type="hidden" id="inventory_enable_qty_increments_default" value="<?= /* @escapeNotVerified */ $block->getDefaultConfigValue('enable_qty_increments') ?>"> <div class="control-inner-wrap"> - <?php $_checked = ($block->getFieldValue('use_config_enable_qty_inc') || $block->IsNew()) ? 'checked="checked"' : '' ?> + <?php $_checked = ($block->getFieldValue('use_config_enable_qty_inc') || $block->isNew()) ? 'checked="checked"' : '' ?> <input type="checkbox" id="inventory_use_config_enable_qty_increments" name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][use_config_enable_qty_increments]" value="1" <?= /* @escapeNotVerified */ $_checked ?> onclick="toggleValueElements(this, this.parentNode);" <?= /* @escapeNotVerified */ $_readonly ?>> <label for="inventory_use_config_enable_qty_increments"><?= /* @escapeNotVerified */ __('Use Config Settings') ?></label> </div> @@ -262,7 +262,7 @@ toggleValueElements($('inventory_use_config_enable_qty_increments'), $('inventor <div class="control"> <input type="text" class="input-text validate-digits" id="inventory_qty_increments" name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][qty_increments]" value="<?= /* @escapeNotVerified */ $block->getFieldValue('qty_increments') * 1 ?>" <?= /* @escapeNotVerified */ $_readonly ?>> <div class="control-inner-wrap"> - <?php $_checked = ($block->getFieldValue('use_config_qty_increments') || $block->IsNew()) ? 'checked="checked"' : '' ?> + <?php $_checked = ($block->getFieldValue('use_config_qty_increments') || $block->isNew()) ? 'checked="checked"' : '' ?> <input type="checkbox" id="inventory_use_config_qty_increments" name="<?= /* @escapeNotVerified */ $block->getFieldSuffix() ?>[stock_data][use_config_qty_increments]" value="1" <?= /* @escapeNotVerified */ $_checked ?> onclick="toggleValueElements(this, this.parentNode);" <?= /* @escapeNotVerified */ $_readonly ?>> <label for="inventory_use_config_qty_increments"><?= /* @escapeNotVerified */ __('Use Config Settings') ?></label> </div> diff --git a/app/code/Magento/Cms/Helper/Wysiwyg/Images.php b/app/code/Magento/Cms/Helper/Wysiwyg/Images.php index a557e045c5ef2..d8a43d92f6d44 100644 --- a/app/code/Magento/Cms/Helper/Wysiwyg/Images.php +++ b/app/code/Magento/Cms/Helper/Wysiwyg/Images.php @@ -148,7 +148,7 @@ public function convertIdToPath($id) */ public function isUsingStaticUrlsAllowed() { - $checkResult = new \StdClass(); + $checkResult = new \stdClass(); $checkResult->isAllowed = false; $this->_eventManager->dispatch( 'cms_wysiwyg_images_static_urls_allowed', diff --git a/app/code/Magento/Cms/Test/Unit/Helper/Wysiwyg/ImagesTest.php b/app/code/Magento/Cms/Test/Unit/Helper/Wysiwyg/ImagesTest.php index 05dad459f064e..67401797502ce 100644 --- a/app/code/Magento/Cms/Test/Unit/Helper/Wysiwyg/ImagesTest.php +++ b/app/code/Magento/Cms/Test/Unit/Helper/Wysiwyg/ImagesTest.php @@ -293,7 +293,7 @@ protected function generalSettingsIsUsingStaticUrlsAllowed($allowedValue) { $storeId = 1; $this->imagesHelper->setStoreId($storeId); - $checkResult = new \StdClass(); + $checkResult = new \stdClass(); $checkResult->isAllowed = false; $this->eventManagerMock->expects($this->any()) ->method('dispatch') diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/ElementVisibilityCompositeTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/ElementVisibilityCompositeTest.php index a3bdb6f008f1d..b779c29c93155 100644 --- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/ElementVisibilityCompositeTest.php +++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/ElementVisibilityCompositeTest.php @@ -44,7 +44,7 @@ protected function setUp() public function testException() { $visibility = [ - 'stdClass' => new \StdClass() + 'stdClass' => new \stdClass() ]; new ElementVisibilityComposite($visibility); diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Cache/Tag/ConfigurableTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Cache/Tag/ConfigurableTest.php index 519288a50c858..5b4a8d5b8a975 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Cache/Tag/ConfigurableTest.php +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Cache/Tag/ConfigurableTest.php @@ -39,7 +39,7 @@ public function testGetWithScalar() public function testGetTagsWithObject() { $this->expectException(\InvalidArgumentException::class, 'Provided argument must be a product'); - $this->model->getTags(new \StdClass()); + $this->model->getTags(new \stdClass()); } public function testGetTagsWithVariation() diff --git a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/Newsletter.php b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/Newsletter.php index 8506defbf9005..032d1ae5d732f 100644 --- a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/Newsletter.php +++ b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/Newsletter.php @@ -160,7 +160,7 @@ public function initForm() ] ); - if ($this->customerAccountManagement->isReadOnly($customerId)) { + if ($this->customerAccountManagement->isReadonly($customerId)) { $form->getElement('subscription')->setReadonly(true, true); } $isSubscribed = $subscriber->isSubscribed(); diff --git a/app/code/Magento/Deploy/Test/Unit/Model/DeploymentConfig/ImporterFactoryTest.php b/app/code/Magento/Deploy/Test/Unit/Model/DeploymentConfig/ImporterFactoryTest.php index c9e101ed3a9e8..8a0284eb4f775 100644 --- a/app/code/Magento/Deploy/Test/Unit/Model/DeploymentConfig/ImporterFactoryTest.php +++ b/app/code/Magento/Deploy/Test/Unit/Model/DeploymentConfig/ImporterFactoryTest.php @@ -55,7 +55,7 @@ public function testCreateWithInvalidArgumentException() $className = 'some/class/name'; /** @var \StdClass|\PHPUnit_Framework_MockObject_MockObject $importerMock */ - $importerMock = $this->getMockBuilder(\StdClass::class) + $importerMock = $this->getMockBuilder(\stdClass::class) ->disableOriginalConstructor() ->getMock(); diff --git a/app/code/Magento/Deploy/Test/Unit/Model/DeploymentConfig/ValidatorFactoryTest.php b/app/code/Magento/Deploy/Test/Unit/Model/DeploymentConfig/ValidatorFactoryTest.php index 1da524b37ca15..50960808781ab 100644 --- a/app/code/Magento/Deploy/Test/Unit/Model/DeploymentConfig/ValidatorFactoryTest.php +++ b/app/code/Magento/Deploy/Test/Unit/Model/DeploymentConfig/ValidatorFactoryTest.php @@ -56,7 +56,7 @@ public function testCreateWrongImplementation() { $className = 'className'; - $stdMock = $this->getMockBuilder(\StdClass::class) + $stdMock = $this->getMockBuilder(\stdClass::class) ->disableOriginalConstructor() ->getMock(); $this->objectManagerMock->expects($this->once()) diff --git a/app/code/Magento/Downloadable/Model/LinkRepository.php b/app/code/Magento/Downloadable/Model/LinkRepository.php index 65239ad353c3f..b84a8284c9083 100644 --- a/app/code/Magento/Downloadable/Model/LinkRepository.php +++ b/app/code/Magento/Downloadable/Model/LinkRepository.php @@ -207,7 +207,7 @@ protected function saveLink( $isGlobalScopeContent ) { $linkData = [ - 'link_id' => (int)$link->getid(), + 'link_id' => (int)$link->getId(), 'is_delete' => 0, 'type' => $link->getLinkType(), 'sort_order' => $link->getSortOrder(), diff --git a/app/code/Magento/Downloadable/Model/SampleRepository.php b/app/code/Magento/Downloadable/Model/SampleRepository.php index 633243ac2eb86..5b9e8e784b9f3 100644 --- a/app/code/Magento/Downloadable/Model/SampleRepository.php +++ b/app/code/Magento/Downloadable/Model/SampleRepository.php @@ -215,7 +215,7 @@ protected function saveSample( $isGlobalScopeContent ) { $sampleData = [ - 'sample_id' => (int)$sample->getid(), + 'sample_id' => (int)$sample->getId(), 'is_delete' => 0, 'type' => $sample->getSampleType(), 'sort_order' => $sample->getSortOrder(), diff --git a/app/code/Magento/Downloadable/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CompositeTest.php b/app/code/Magento/Downloadable/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CompositeTest.php index 155f95874eeeb..5b04c83f4ffb7 100644 --- a/app/code/Magento/Downloadable/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CompositeTest.php +++ b/app/code/Magento/Downloadable/Test/Unit/Ui/DataProvider/Product/Form/Modifier/CompositeTest.php @@ -156,7 +156,7 @@ protected function canShowDownloadablePanel($typeId) */ protected function initModifiers() { - $this->modifierMock = $this->getMockBuilder(\StdClass::class) + $this->modifierMock = $this->getMockBuilder(\stdClass::class) ->setMethods(['modifyData', 'modifyMeta']) ->getMock(); $this->modifierFactoryMock->expects($this->once()) diff --git a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php index 105bc0a0becf5..0c74b84457d40 100644 --- a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php +++ b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php @@ -1656,7 +1656,7 @@ public function saveAttribute(\Magento\Framework\DataObject $object, $attributeC $this->_processAttributeValues(); $connection->commit(); } catch (\Exception $e) { - $connection->rollback(); + $connection->rollBack(); throw $e; } diff --git a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/EditTest.php b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/EditTest.php index aa531e8189cea..9a333e2d01a88 100644 --- a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/EditTest.php +++ b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/EditTest.php @@ -66,7 +66,7 @@ protected function setUp() ['getFilesystem', '__wakeup', 'getPath', 'getDirectoryRead'] ); - $viewFilesystem = $this->getMockBuilder(\Magento\Framework\View\Filesystem::class) + $viewFilesystem = $this->getMockBuilder(\Magento\Framework\View\FileSystem::class) ->setMethods(['getTemplateFileName']) ->disableOriginalConstructor() ->getMock(); diff --git a/app/code/Magento/NewRelicReporting/Model/Observer/ReportConcurrentAdmins.php b/app/code/Magento/NewRelicReporting/Model/Observer/ReportConcurrentAdmins.php index 615c80633cb0f..9dfd0e1e3319a 100644 --- a/app/code/Magento/NewRelicReporting/Model/Observer/ReportConcurrentAdmins.php +++ b/app/code/Magento/NewRelicReporting/Model/Observer/ReportConcurrentAdmins.php @@ -66,8 +66,8 @@ public function execute(Observer $observer) $user = $this->backendAuthSession->getUser(); $jsonData = [ 'id' => $user->getId(), - 'username' => $user->getUsername(), - 'name' => $user->getFirstname() . ' ' . $user->getLastname(), + 'username' => $user->getUserName(), + 'name' => $user->getFirstName() . ' ' . $user->getLastName(), ]; $modelData = [ diff --git a/app/code/Magento/NewRelicReporting/Model/Observer/ReportConcurrentAdminsToNewRelic.php b/app/code/Magento/NewRelicReporting/Model/Observer/ReportConcurrentAdminsToNewRelic.php index cff1b159d481d..2f142f6ac8124 100644 --- a/app/code/Magento/NewRelicReporting/Model/Observer/ReportConcurrentAdminsToNewRelic.php +++ b/app/code/Magento/NewRelicReporting/Model/Observer/ReportConcurrentAdminsToNewRelic.php @@ -58,10 +58,10 @@ public function execute(Observer $observer) if ($this->backendAuthSession->isLoggedIn()) { $user = $this->backendAuthSession->getUser(); $this->newRelicWrapper->addCustomParameter(Config::ADMIN_USER_ID, $user->getId()); - $this->newRelicWrapper->addCustomParameter(Config::ADMIN_USER, $user->getUsername()); + $this->newRelicWrapper->addCustomParameter(Config::ADMIN_USER, $user->getUserName()); $this->newRelicWrapper->addCustomParameter( Config::ADMIN_NAME, - $user->getFirstname() . ' ' . $user->getLastname() + $user->getFirstName() . ' ' . $user->getLastName() ); } } diff --git a/app/code/Magento/NewRelicReporting/Model/Observer/ReportSystemCacheFlushToNewRelic.php b/app/code/Magento/NewRelicReporting/Model/Observer/ReportSystemCacheFlushToNewRelic.php index 0e3ad1605f948..5500aba195936 100644 --- a/app/code/Magento/NewRelicReporting/Model/Observer/ReportSystemCacheFlushToNewRelic.php +++ b/app/code/Magento/NewRelicReporting/Model/Observer/ReportSystemCacheFlushToNewRelic.php @@ -58,8 +58,8 @@ public function execute(Observer $observer) if ($user->getId()) { $this->deploymentsFactory->create()->setDeployment( 'Cache Flush', - $user->getUsername() . ' flushed the cache.', - $user->getUsername() + $user->getUserName() . ' flushed the cache.', + $user->getUserName() ); } } diff --git a/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php index 500ab253f2a18..961958a54ac1b 100644 --- a/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php +++ b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php @@ -232,10 +232,10 @@ private function importData(array $fields, array $values) $this->_importedRows += count($values); } } catch (\Magento\Framework\Exception\LocalizedException $e) { - $connection->rollback(); + $connection->rollBack(); throw new \Magento\Framework\Exception\LocalizedException(__('Unable to import data'), $e); } catch (\Exception $e) { - $connection->rollback(); + $connection->rollBack(); $this->logger->critical($e); throw new \Magento\Framework\Exception\LocalizedException( __('Something went wrong while importing table rates.') diff --git a/app/code/Magento/OfflineShipping/Test/Unit/Block/Adminhtml/Form/Field/ExportTest.php b/app/code/Magento/OfflineShipping/Test/Unit/Block/Adminhtml/Form/Field/ExportTest.php index cc164e504b665..3e2c7df9087da 100644 --- a/app/code/Magento/OfflineShipping/Test/Unit/Block/Adminhtml/Form/Field/ExportTest.php +++ b/app/code/Magento/OfflineShipping/Test/Unit/Block/Adminhtml/Form/Field/ExportTest.php @@ -37,7 +37,7 @@ public function testGetElementHtml() $requestMock = $this->createMock(\Magento\Framework\App\RequestInterface::class); $requestMock->expects($this->once())->method('getParam')->with('website')->will($this->returnValue(1)); - $mockData = $this->createPartialMock(\StdClass::class, ['toHtml']); + $mockData = $this->createPartialMock(\stdClass::class, ['toHtml']); $mockData->expects($this->once())->method('toHtml')->will($this->returnValue($expected)); $blockMock->expects($this->once())->method('getRequest')->will($this->returnValue($requestMock)); diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php index 0796c22db98bf..d4019c6c4a7e0 100644 --- a/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php +++ b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php @@ -90,7 +90,7 @@ protected function _afterSave(\Magento\Framework\Model\AbstractModel $object) } $connection->commit(); } catch (\Exception $e) { - $connection->rollback(); + $connection->rollBack(); } } diff --git a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/TransactionTest.php b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/TransactionTest.php index f5c9ab9a3d9f1..93a1072782448 100644 --- a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/TransactionTest.php +++ b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/Service/Response/TransactionTest.php @@ -67,7 +67,7 @@ public function gatewayResponseInvariants() { return [ "Input data is a string" => ['testInput'], - "Input data is an object" => [new \StdClass], + "Input data is an object" => [new \stdClass], "Input data is an array" => [['test' => 'input']] ]; } diff --git a/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php index 6f68000a1efff..ef4acb6c90cb8 100644 --- a/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php +++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php @@ -154,7 +154,7 @@ public function addVote($option) } $connection->commit(); } catch (\Exception $e) { - $connection->rollback(); + $connection->rollBack(); throw new \Exception($e->getMessage()); } return $this; diff --git a/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php b/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php index 2fdb960521a97..6e685a9a9b978 100644 --- a/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php +++ b/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php @@ -81,7 +81,7 @@ public function bindRuleToEntity($ruleIds, $entityIds, $entityType) try { $this->_multiplyBunchInsert($ruleIds, $entityIds, $entityType); } catch (\Exception $e) { - $this->getConnection()->rollback(); + $this->getConnection()->rollBack(); throw $e; } diff --git a/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Items/AbstractItemsTest.php b/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Items/AbstractItemsTest.php index 20f7a7061b6b0..a390c43276085 100644 --- a/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Items/AbstractItemsTest.php +++ b/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Items/AbstractItemsTest.php @@ -84,7 +84,7 @@ public function testGetItemRenderer() */ public function testGetItemRendererThrowsExceptionForNonexistentRenderer() { - $renderer = $this->createMock(\StdClass::class); + $renderer = $this->createMock(\stdClass::class); $layout = $this->createPartialMock( \Magento\Framework\View\Layout::class, ['getChildName', 'getBlock', '__wakeup'] diff --git a/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Items/AbstractTest.php b/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Items/AbstractTest.php index 311e5f697675b..a34373f516c42 100644 --- a/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Items/AbstractTest.php +++ b/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Items/AbstractTest.php @@ -62,7 +62,7 @@ public function testGetItemRenderer() */ public function testGetItemRendererThrowsExceptionForNonexistentRenderer() { - $renderer = $this->createMock(\StdClass::class); + $renderer = $this->createMock(\stdClass::class); $layout = $this->createPartialMock( \Magento\Framework\View\Layout::class, ['getChildName', 'getBlock', '__wakeup'] diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Payment/InfoTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Payment/InfoTest.php index 70e5ad127e44c..293c2eea1231d 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/Payment/InfoTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Payment/InfoTest.php @@ -179,7 +179,7 @@ public function testDecrypt() */ public function testSetAdditionalInformationException() { - $this->info->setAdditionalInformation('object', new \StdClass()); + $this->info->setAdditionalInformation('object', new \stdClass()); } /** diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/AbstractTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/AbstractTest.php index c91d4edb155a4..0761b5abb5d45 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/AbstractTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/AbstractTest.php @@ -19,7 +19,7 @@ public function testInsertTotals() // Setup parameters, that will be passed to the tested model method $page = $this->createMock(\Zend_Pdf_Page::class); - $order = new \StdClass(); + $order = new \stdClass(); $source = $this->createMock(\Magento\Sales\Model\Order\Invoice::class); $source->expects($this->any())->method('getOrder')->will($this->returnValue($order)); diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/Config/ReaderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/Config/ReaderTest.php index b1b51c3f12330..b808a4139e84e 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/Config/ReaderTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/Config/ReaderTest.php @@ -87,7 +87,7 @@ protected function setUp() public function testRead() { $expectedResult = new \stdClass(); - $constraint = function (\DOMDOcument $actual) { + $constraint = function (\DOMDocument $actual) { try { $expected = __DIR__ . '/_files/pdf_merged.xml'; \PHPUnit\Framework\Assert::assertXmlStringEqualsXmlFile($expected, $actual->saveXML()); diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php index abb8c49015962..89800e3be872e 100644 --- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php +++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php @@ -9,7 +9,7 @@ namespace Magento\Tax\Test\Unit\Model\Calculation; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; -use Magento\Tax\Model\Calculation\RowbaseCalculator; +use Magento\Tax\Model\Calculation\RowBaseCalculator; use Magento\Tax\Model\Calculation\TotalBaseCalculator; /** diff --git a/app/code/Magento/Ui/Config/Converter/HtmlContent.php b/app/code/Magento/Ui/Config/Converter/HtmlContent.php index f77b4a5285d5a..db874a302bd50 100644 --- a/app/code/Magento/Ui/Config/Converter/HtmlContent.php +++ b/app/code/Magento/Ui/Config/Converter/HtmlContent.php @@ -23,7 +23,7 @@ public function convert(\DOMNode $node, array $data) if ($node->nodeType == XML_ELEMENT_NODE) { $xml = '<?xml version="1.0"?>' . "\n" . '<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' . "\n" - . $node->ownerDocument->saveXml($node) . "\n" + . $node->ownerDocument->saveXML($node) . "\n" . '</layout>'; $items['layout']['xsi:type'] = 'string'; $items['layout']['name'] = 'layout'; diff --git a/app/code/Magento/User/Model/ResourceModel/User.php b/app/code/Magento/User/Model/ResourceModel/User.php index 880dec93fc91b..b3e4936266a3f 100644 --- a/app/code/Magento/User/Model/ResourceModel/User.php +++ b/app/code/Magento/User/Model/ResourceModel/User.php @@ -222,7 +222,7 @@ protected function _createUserRole($parentId, ModelUser $user) 'role_type' => RoleUser::ROLE_TYPE, 'user_id' => $user->getId(), 'user_type' => UserContextInterface::USER_TYPE_ADMIN, - 'role_name' => $user->getFirstname(), + 'role_name' => $user->getFirstName(), ] ); diff --git a/app/code/Magento/User/Model/User.php b/app/code/Magento/User/Model/User.php index b1b655dddd0a3..2a7d43008f2ad 100644 --- a/app/code/Magento/User/Model/User.php +++ b/app/code/Magento/User/Model/User.php @@ -467,7 +467,7 @@ protected function createChangesDescriptionString() $changes[] = __('password'); } - if ($this->getUsername() != $this->getOrigData('username') && $this->getOrigData('username')) { + if ($this->getUserName() != $this->getOrigData('username') && $this->getOrigData('username')) { $changes[] = __('username'); } @@ -515,7 +515,7 @@ protected function sendUserNotificationEmail($changes, $email = null) */ public function getName($separator = ' ') { - return $this->getFirstname() . $separator . $this->getLastname(); + return $this->getFirstName() . $separator . $this->getLastName(); } /** @@ -547,7 +547,7 @@ public function authenticate($username, $password) ['username' => $username, 'user' => $this] ); $this->loadByUsername($username); - $sensitive = $config ? $username == $this->getUsername() : true; + $sensitive = $config ? $username == $this->getUserName() : true; if ($sensitive && $this->getId()) { $result = $this->verifyIdentity($password); } diff --git a/app/code/Magento/User/Test/Unit/Model/UserTest.php b/app/code/Magento/User/Test/Unit/Model/UserTest.php index 3f02cedd32e65..5e0a9a14c2b16 100644 --- a/app/code/Magento/User/Test/Unit/Model/UserTest.php +++ b/app/code/Magento/User/Test/Unit/Model/UserTest.php @@ -183,11 +183,11 @@ public function testSendNotificationEmailsIfRequired() $this->model->setPassword($password); $this->model->setOrigData('password', $origPassword); - $this->model->setUsername($username); + $this->model->setUserName($username); $this->model->setOrigData('username', $origUsername); - $this->model->setFirstname($firstName); - $this->model->setLastname($lastName); + $this->model->setFirstName($firstName); + $this->model->setLastName($lastName); $this->configMock->expects($this->exactly(4)) ->method('getValue') @@ -255,8 +255,8 @@ public function testSendPasswordResetConfirmationEmail() $lastName = 'Bar'; $this->model->setEmail($email); - $this->model->setFirstname($firstName); - $this->model->setLastname($lastName); + $this->model->setFirstName($firstName); + $this->model->setLastName($lastName); $this->configMock->expects($this->at(0)) ->method('getValue') diff --git a/app/code/Magento/Webapi/Model/Soap/Fault.php b/app/code/Magento/Webapi/Model/Soap/Fault.php index ee9c194e7c55a..b8ddf4e47d451 100644 --- a/app/code/Magento/Webapi/Model/Soap/Fault.php +++ b/app/code/Magento/Webapi/Model/Soap/Fault.php @@ -355,7 +355,7 @@ protected function _getWrappedErrorsXml($wrappedErrors) $errorsXml = ''; foreach ($wrappedErrors as $error) { - $errorsXml .= $this->_generateErrorNodeXml($error); + $errorsXml .= $this->_generateErrorNodeXML($error); } if (!empty($errorsXml)) { $wrappedErrorsNode = self::NODE_DETAIL_WRAPPED_ERRORS; diff --git a/app/code/Magento/Widget/Test/Unit/Model/Config/FileResolverTest.php b/app/code/Magento/Widget/Test/Unit/Model/Config/FileResolverTest.php index 65e45b73d88eb..301869a50a713 100644 --- a/app/code/Magento/Widget/Test/Unit/Model/Config/FileResolverTest.php +++ b/app/code/Magento/Widget/Test/Unit/Model/Config/FileResolverTest.php @@ -41,7 +41,7 @@ protected function setUp() public function testGetGlobal() { - $expected = new \StdClass(); + $expected = new \stdClass(); $this->moduleReader ->expects($this->once()) ->method('getConfigurationFiles') @@ -52,7 +52,7 @@ public function testGetGlobal() public function testGetDesign() { - $expected = new \StdClass(); + $expected = new \stdClass(); $this->componentDirSearch->expects($this->once()) ->method('collectFiles') ->with(ComponentRegistrar::THEME, 'etc/file') @@ -63,7 +63,7 @@ public function testGetDesign() public function testGetDefault() { - $expected = new \StdClass(); + $expected = new \stdClass(); $this->factory->expects($this->once())->method('create')->with([])->willReturn($expected); $this->assertSame($expected, $this->object->get('file', 'unknown')); } From a3ed399935e9b1582c0aa387cfd3fabd20b571e9 Mon Sep 17 00:00:00 2001 From: "Leandro F. L" <leandro.luvisotto@empiricus.com.br> Date: Fri, 1 Dec 2017 12:45:09 -0200 Subject: [PATCH 410/653] The left and the right parts of assignment are equal --- app/code/Magento/Variable/Block/System/Variable/Edit.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/code/Magento/Variable/Block/System/Variable/Edit.php b/app/code/Magento/Variable/Block/System/Variable/Edit.php index cf9a7489f3d53..ea119b88fa795 100644 --- a/app/code/Magento/Variable/Block/System/Variable/Edit.php +++ b/app/code/Magento/Variable/Block/System/Variable/Edit.php @@ -90,9 +90,7 @@ protected function _preparelayout() */ public function getFormHtml() { - $formHtml = parent::getFormHtml(); - - return $formHtml; + return parent::getFormHtml(); } /** From 04a1c77802fb41ced137f274b2aceb03a3f3aa26 Mon Sep 17 00:00:00 2001 From: Volodymyr Kublytskyi <vkublytskyi@magento.com> Date: Fri, 1 Dec 2017 16:55:07 +0200 Subject: [PATCH 411/653] MAGETWO-83287: #11825: Generate new FormKey and replace for oldRequestParams Wishlist #12038 - fixed unit test --- .../Model/Plugin/CustomerFlushFormKeyTest.php | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/Customer/Test/Unit/Model/Plugin/CustomerFlushFormKeyTest.php b/app/code/Magento/Customer/Test/Unit/Model/Plugin/CustomerFlushFormKeyTest.php index c06805e94eade..1b30fb5c60e9c 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/Plugin/CustomerFlushFormKeyTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/Plugin/CustomerFlushFormKeyTest.php @@ -9,14 +9,13 @@ use Magento\Customer\Model\Session; use Magento\Framework\App\PageCache\FormKey as CookieFormKey; use Magento\Framework\Data\Form\FormKey as DataFormKey; +use Magento\Framework\Event\Observer; use Magento\PageCache\Observer\FlushFormKey; use PHPUnit\Framework\TestCase; use PHPUnit_Framework_MockObject_MockObject as MockObject; class CustomerFlushFormKeyTest extends TestCase { - const CLOSURE_VALUE = 'CLOSURE'; - /** * @var CookieFormKey | MockObject */ @@ -32,11 +31,6 @@ class CustomerFlushFormKeyTest extends TestCase */ private $dataFormKey; - /** - * @var \Closure - */ - private $closure; - protected function setUp() { @@ -55,10 +49,6 @@ protected function setUp() ->disableOriginalConstructor() ->setMethods(['getBeforeRequestParams', 'setBeforeRequestParams']) ->getMock(); - - $this->closure = function () { - return static::CLOSURE_VALUE; - }; } /** @@ -74,6 +64,7 @@ public function testAroundFlushFormKey( $getFormKeyTimes, $setBeforeParamsTimes ) { + $observerDto = new Observer(); $observer = new FlushFormKey($this->cookieFormKey, $this->dataFormKey); $plugin = new CustomerFlushFormKey($this->customerSession, $this->dataFormKey); @@ -91,7 +82,11 @@ public function testAroundFlushFormKey( ->method('setBeforeRequestParams') ->with($beforeParams); - $plugin->aroundExecute($observer, $this->closure, $observer); + $proceed = function ($observerDto) use ($observer) { + return $observer->execute($observerDto); + }; + + $plugin->aroundExecute($observer, $proceed, $observerDto); } /** From 66556661476c7727af7e7a2b75c2e37519aafc49 Mon Sep 17 00:00:00 2001 From: "Leandro F. L" <leandro.luvisotto@empiricus.com.br> Date: Fri, 1 Dec 2017 12:57:47 -0200 Subject: [PATCH 412/653] Case mismatch --- .../Magento/Framework/Api/ExtensionAttributesFactory.php | 2 +- lib/internal/Magento/Framework/App/State/CleanupFiles.php | 2 +- .../Framework/App/Test/Unit/Cache/Tag/ResolverTest.php | 2 +- .../App/Test/Unit/Cache/Tag/Strategy/DummyTest.php | 2 +- .../App/Test/Unit/Cache/Tag/Strategy/FactoryTest.php | 2 +- .../App/Test/Unit/Cache/Tag/Strategy/IdentifierTest.php | 2 +- .../Magento/Framework/App/Test/Unit/Request/HttpTest.php | 4 ++-- .../Test/Unit/Reader/_files/ClassesForArgumentsReader.php | 6 +++--- .../Framework/Data/Test/Unit/Tree/Node/CollectionTest.php | 2 +- lib/internal/Magento/Framework/Xml/Security.php | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/internal/Magento/Framework/Api/ExtensionAttributesFactory.php b/lib/internal/Magento/Framework/Api/ExtensionAttributesFactory.php index d7a92460a7f4d..dab0650fc7f6e 100644 --- a/lib/internal/Magento/Framework/Api/ExtensionAttributesFactory.php +++ b/lib/internal/Magento/Framework/Api/ExtensionAttributesFactory.php @@ -97,7 +97,7 @@ public function getExtensibleInterfaceName($extensibleClassName) } $modelReflection = new \ReflectionClass($extensibleClassName); if ($modelReflection->isInterface() - && $modelReflection->isSubClassOf(self::EXTENSIBLE_INTERFACE_NAME) + && $modelReflection->isSubclassOf(self::EXTENSIBLE_INTERFACE_NAME) && $modelReflection->hasMethod('getExtensionAttributes') ) { $this->classInterfaceMap[$extensibleClassName] = $extensibleClassName; diff --git a/lib/internal/Magento/Framework/App/State/CleanupFiles.php b/lib/internal/Magento/Framework/App/State/CleanupFiles.php index 4202fd8883ec0..c95caf8310b77 100644 --- a/lib/internal/Magento/Framework/App/State/CleanupFiles.php +++ b/lib/internal/Magento/Framework/App/State/CleanupFiles.php @@ -106,7 +106,7 @@ private function emptyDir($code, $subPath = null) $messages[] = $dirPath . $path; try { $dir->delete($path); - } catch (FilesystemException $e) { + } catch (FileSystemException $e) { $messages[] = $e->getMessage(); } } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/ResolverTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/ResolverTest.php index 4348177ef326f..f4560ed31ae49 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/ResolverTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/ResolverTest.php @@ -47,7 +47,7 @@ public function testGetTagsForNotObject() public function testGetTagsForObject() { $strategyReturnValue = ['test tag']; - $object = new \StdClass; + $object = new \stdClass; $this->strategy->expects($this->once()) ->method('getTags') ->with($object) diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/DummyTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/DummyTest.php index e8c76048f4eac..ad04326064587 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/DummyTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/DummyTest.php @@ -28,7 +28,7 @@ public function testGetTagsWithObject() { $emptyArray = []; - $this->assertEquals($emptyArray, $this->model->getTags(new \StdClass)); + $this->assertEquals($emptyArray, $this->model->getTags(new \stdClass)); $identityInterface = $this->getMockForAbstractClass(\Magento\Framework\DataObject\IdentityInterface::class); $this->assertEquals($emptyArray, $this->model->getTags($identityInterface)); diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/FactoryTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/FactoryTest.php index 7f570d9f13523..8964bd70f0ba8 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/FactoryTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/FactoryTest.php @@ -55,7 +55,7 @@ public function testGetStrategyWithScalar() public function testGetStrategyWithObject() { - $this->assertEquals($this->dummyStrategy, $this->model->getStrategy(new \StdClass)); + $this->assertEquals($this->dummyStrategy, $this->model->getStrategy(new \stdClass)); } public function testGetStrategyWithIdentityInterface() diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/IdentifierTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/IdentifierTest.php index e2039c0517c53..d0fcf9d8a739d 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/IdentifierTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/IdentifierTest.php @@ -28,7 +28,7 @@ public function testGetWithScalar() public function testGetTagsWithObject() { - $this->assertEquals([], $this->model->getTags(new \StdClass)); + $this->assertEquals([], $this->model->getTags(new \stdClass)); } public function testGetTagsWithIdentityInterface() diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Request/HttpTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Request/HttpTest.php index 450e1ed0b3a00..66eee671e17d3 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/Request/HttpTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/Request/HttpTest.php @@ -363,7 +363,7 @@ public function testIsSafeMethodTrue($httpMethod) { $this->_model = $this->getModel(); $_SERVER['REQUEST_METHOD'] = $httpMethod; - $this->assertEquals(true, $this->_model->IsSafeMethod()); + $this->assertEquals(true, $this->_model->isSafeMethod()); } /** @@ -375,7 +375,7 @@ public function testIsSafeMethodFalse($httpMethod) { $this->_model = $this->getModel(); $_SERVER['REQUEST_METHOD'] = $httpMethod; - $this->assertEquals(false, $this->_model->IsSafeMethod()); + $this->assertEquals(false, $this->_model->isSafeMethod()); } public function httpSafeMethodProvider() diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Reader/_files/ClassesForArgumentsReader.php b/lib/internal/Magento/Framework/Code/Test/Unit/Reader/_files/ClassesForArgumentsReader.php index 4508bccf54cdc..7fc2b13442bc2 100644 --- a/lib/internal/Magento/Framework/Code/Test/Unit/Reader/_files/ClassesForArgumentsReader.php +++ b/lib/internal/Magento/Framework/Code/Test/Unit/Reader/_files/ClassesForArgumentsReader.php @@ -132,7 +132,7 @@ public function __construct( $this->_arrayVariable = $arrayVariable; } } -class ThirdClassForParentCall extends firstClassForParentCall +class ThirdClassForParentCall extends FirstClassForParentCall { /** * @var stdClass @@ -155,7 +155,7 @@ public function __construct(\stdClass $stdClassObject, \ClassExtendsDefaultPhpTy $this->_secondClass = $secondClass; } } -class WrongArgumentsOrder extends firstClassForParentCall +class WrongArgumentsOrder extends FirstClassForParentCall { /** * @var stdClass @@ -178,7 +178,7 @@ public function __construct(\stdClass $stdClassObject, \ClassExtendsDefaultPhpTy $this->_secondClass = $secondClass; } } -class ArgumentsOnSeparateLines extends firstClassForParentCall +class ArgumentsOnSeparateLines extends FirstClassForParentCall { /** * @var stdClass diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Tree/Node/CollectionTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Tree/Node/CollectionTest.php index 58e6378759010..e91ec72dae112 100644 --- a/lib/internal/Magento/Framework/Data/Test/Unit/Tree/Node/CollectionTest.php +++ b/lib/internal/Magento/Framework/Data/Test/Unit/Tree/Node/CollectionTest.php @@ -40,7 +40,7 @@ public function testOffsets() $this->assertSame($this->collection->offsetExists('node1'), true); $this->collection->offsetSet('node1', 'Hello'); $this->assertSame($this->collection->offsetExists('node1'), true); - $this->assertSame($this->collection->offsetget('node1'), 'Hello'); + $this->assertSame($this->collection->offsetGet('node1'), 'Hello'); $this->collection->offsetUnset('node1'); $this->assertSame($this->collection->offsetExists('node1'), false); } diff --git a/lib/internal/Magento/Framework/Xml/Security.php b/lib/internal/Magento/Framework/Xml/Security.php index 72af506a3294e..e502429e4511a 100644 --- a/lib/internal/Magento/Framework/Xml/Security.php +++ b/lib/internal/Magento/Framework/Xml/Security.php @@ -72,7 +72,7 @@ function ($errno, $errstr) { E_WARNING ); - $result = (bool)$document->loadXml($xmlContent, LIBXML_NONET); + $result = (bool)$document->loadXML($xmlContent, LIBXML_NONET); restore_error_handler(); // Entity load to previous setting libxml_disable_entity_loader($loadEntities); From 2003c04cd35375964e7a3bb16ca1dc613bc8f2c0 Mon Sep 17 00:00:00 2001 From: Andrii Lugovyi <alugovyi@magento.com> Date: Fri, 10 Nov 2017 10:05:30 +0200 Subject: [PATCH 413/653] MAGETWO-83365: Stabilize Frontend Pool for multi thread run --- .../Catalog/Block/Product/ImageBuilder.php | 11 ++++++--- .../Magento/Catalog/Model/Product/Image.php | 24 ++++++++++++++----- .../Image/NotLoadInfoImageException.php | 16 +++++++++++++ .../Product/Listing/Collector/Image.php | 8 ++++++- .../Wishlist/CustomerData/Wishlist.php | 11 ++++++--- 5 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 app/code/Magento/Catalog/Model/Product/Image/NotLoadInfoImageException.php diff --git a/app/code/Magento/Catalog/Block/Product/ImageBuilder.php b/app/code/Magento/Catalog/Block/Product/ImageBuilder.php index d47218db37142..04d30270cbb62 100644 --- a/app/code/Magento/Catalog/Block/Product/ImageBuilder.php +++ b/app/code/Magento/Catalog/Block/Product/ImageBuilder.php @@ -6,6 +6,7 @@ namespace Magento\Catalog\Block\Product; use Magento\Catalog\Helper\ImageFactory as HelperFactory; +use Magento\Catalog\Model\Product\Image\NotLoadInfoImageException; class ImageBuilder { @@ -129,7 +130,11 @@ public function create() ? 'Magento_Catalog::product/image.phtml' : 'Magento_Catalog::product/image_with_borders.phtml'; - $imagesize = $helper->getResizedImageInfo(); + try { + $imagesize = $helper->getResizedImageInfo(); + } catch (NotLoadInfoImageException $exception) { + $imagesize = [$helper->getWidth(), $helper->getHeight()]; + } $data = [ 'data' => [ @@ -140,8 +145,8 @@ public function create() 'label' => $helper->getLabel(), 'ratio' => $this->getRatio($helper), 'custom_attributes' => $this->getCustomAttributes(), - 'resized_image_width' => !empty($imagesize[0]) ? $imagesize[0] : $helper->getWidth(), - 'resized_image_height' => !empty($imagesize[1]) ? $imagesize[1] : $helper->getHeight(), + 'resized_image_width' => $imagesize[0], + 'resized_image_height' => $imagesize[1], ], ]; diff --git a/app/code/Magento/Catalog/Model/Product/Image.php b/app/code/Magento/Catalog/Model/Product/Image.php index abd28ed3bf1ec..c17254f99bfb4 100644 --- a/app/code/Magento/Catalog/Model/Product/Image.php +++ b/app/code/Magento/Catalog/Model/Product/Image.php @@ -5,6 +5,7 @@ */ namespace Magento\Catalog\Model\Product; +use Magento\Catalog\Model\Product\Image\NotLoadInfoImageException; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\ObjectManager; use Magento\Framework\Image as MagentoImage; @@ -877,17 +878,28 @@ protected function _fileExists($filename) /** * Return resized product image information - * * @return array + * @throws NotLoadInfoImageException */ public function getResizedImageInfo() { - if ($this->isBaseFilePlaceholder() == true) { - $image = $this->imageAsset->getSourceFile(); - } else { - $image = $this->imageAsset->getPath(); + $errorMessage = 'Can\'t get information about the picture: '; + try { + if ($this->isBaseFilePlaceholder() == true) { + $image = $this->imageAsset->getSourceFile(); + } else { + $image = $this->imageAsset->getPath(); + } + + $imageProperties = getimagesize($image); + + return $imageProperties; + + } finally { + if (empty($imageProperties)) { + throw new NotLoadInfoImageException(__($errorMessage . $image)); + } } - return getimagesize($image); } /** diff --git a/app/code/Magento/Catalog/Model/Product/Image/NotLoadInfoImageException.php b/app/code/Magento/Catalog/Model/Product/Image/NotLoadInfoImageException.php new file mode 100644 index 0000000000000..6d6aab32ccd11 --- /dev/null +++ b/app/code/Magento/Catalog/Model/Product/Image/NotLoadInfoImageException.php @@ -0,0 +1,16 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Catalog\Model\Product\Image; + +use Magento\Framework\Exception\LocalizedException; + +/** + * @api + * @since 102.0.0 + */ +class NotLoadInfoImageException extends LocalizedException +{ +} diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Listing/Collector/Image.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Listing/Collector/Image.php index 2fc9ef76aa00d..216bc16968fcb 100644 --- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Listing/Collector/Image.php +++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Listing/Collector/Image.php @@ -11,6 +11,7 @@ use Magento\Catalog\Api\Data\ProductRender\ImageInterfaceFactory; use Magento\Catalog\Api\Data\ProductRenderInterface; use Magento\Catalog\Helper\ImageFactory; +use Magento\Catalog\Model\Product\Image\NotLoadInfoImageException; use Magento\Catalog\Ui\DataProvider\Product\ProductRenderCollectorInterface; use Magento\Framework\App\State; use Magento\Framework\View\DesignInterface; @@ -102,7 +103,12 @@ public function collect(ProductInterface $product, ProductRenderInterface $produ [$this, "emulateImageCreating"], [$product, $imageCode, (int) $productRender->getStoreId(), $image] ); - $resizedInfo = $helper->getResizedImageInfo(); + + try { + $resizedInfo = $helper->getResizedImageInfo(); + } catch (NotLoadInfoImageException $exception) { + $resizedInfo = [$helper->getWidth(), $helper->getHeight()]; + } $image->setCode($imageCode); $image->setHeight($helper->getHeight()); diff --git a/app/code/Magento/Wishlist/CustomerData/Wishlist.php b/app/code/Magento/Wishlist/CustomerData/Wishlist.php index a81b3d6537dfd..6933efc2aa540 100644 --- a/app/code/Magento/Wishlist/CustomerData/Wishlist.php +++ b/app/code/Magento/Wishlist/CustomerData/Wishlist.php @@ -5,6 +5,7 @@ */ namespace Magento\Wishlist\CustomerData; +use Magento\Catalog\Model\Product\Image\NotLoadInfoImageException; use Magento\Customer\CustomerData\SectionSourceInterface; /** @@ -154,15 +155,19 @@ protected function getImageData($product) ? 'Magento_Catalog/product/image' : 'Magento_Catalog/product/image_with_borders'; - $imagesize = $helper->getResizedImageInfo(); + try { + $imagesize = $helper->getResizedImageInfo(); + } catch (NotLoadInfoImageException $exception) { + $imagesize = [$helper->getWidth(), $helper->getHeight()]; + } $width = $helper->getFrame() ? $helper->getWidth() - : (!empty($imagesize[0]) ? $imagesize[0] : $helper->getWidth()); + : $imagesize[0]; $height = $helper->getFrame() ? $helper->getHeight() - : (!empty($imagesize[1]) ? $imagesize[1] : $helper->getHeight()); + : $imagesize[1]; return [ 'template' => $template, From c8aa113a302f2c2f9c5168133818073827863123 Mon Sep 17 00:00:00 2001 From: Andrii Voskoboinikov <avoskoboinikov@magento.com> Date: Tue, 28 Nov 2017 14:34:38 +0200 Subject: [PATCH 414/653] MAGETWO-81090: Run benchmark in multithread mode --- .../Command/GenerateFixturesCommand.php | 32 +++++++++++-------- .../Setup/Fixtures/ConfigsApplyFixture.php | 7 +++- .../Magento/Setup/Fixtures/FixtureModel.php | 29 +++++++++++++++++ .../Fixtures/IndexersStatesApplyFixture.php | 12 +++++-- 4 files changed, 64 insertions(+), 16 deletions(-) diff --git a/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php b/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php index eb0efd3983fa2..5caaee480d5d2 100644 --- a/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php +++ b/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php @@ -83,35 +83,31 @@ protected function execute(InputInterface $input, OutputInterface $output) $fixture->printInfo($output); } + /** @var \Magento\Setup\Fixtures\ConfigsApplyFixture $configFixture */ + $configFixture = $fixtureModel->getConfigurationFixture(); + $configFixture && $this->executeFixture($configFixture, $output); + /** @var $config \Magento\Indexer\Model\Config */ $config = $fixtureModel->getObjectManager()->get(\Magento\Indexer\Model\Config::class); $indexerListIds = $config->getIndexers(); /** @var $indexerRegistry \Magento\Framework\Indexer\IndexerRegistry */ $indexerRegistry = $fixtureModel->getObjectManager() ->create(\Magento\Framework\Indexer\IndexerRegistry::class); - $indexersState = []; + foreach ($indexerListIds as $indexerId) { $indexer = $indexerRegistry->get($indexerId['indexer_id']); - $indexersState[$indexerId['indexer_id']] = $indexer->isScheduled(); $indexer->setScheduled(true); } foreach ($fixtureModel->getFixtures() as $fixture) { - $output->write('<info>' . $fixture->getActionTitle() . '... </info>'); - $startTime = microtime(true); - $fixture->execute($output); - $endTime = microtime(true); - $resultTime = $endTime - $startTime; - $output->writeln('<info> done in ' . gmdate('H:i:s', $resultTime) . '</info>'); + $this->executeFixture($fixture, $output); } $this->clearChangelog(); - foreach ($indexerListIds as $indexerId) { - /** @var $indexer \Magento\Indexer\Model\Indexer */ - $indexer = $indexerRegistry->get($indexerId['indexer_id']); - $indexer->setScheduled($indexersState[$indexerId['indexer_id']]); - } + /** @var \Magento\Setup\Fixtures\IndexersStatesApplyFixture $indexerFixture */ + $indexerFixture = $this->fixtureModel->getIndexerFixture(); + $indexerFixture && $this->executeFixture($indexerFixture, $output); if (!$input->getOption(self::SKIP_REINDEX_OPTION)) { $fixtureModel->reindex($output); @@ -148,4 +144,14 @@ private function clearChangelog() } } } + + private function executeFixture(\Magento\Setup\Fixtures\Fixture $fixture, OutputInterface $output) + { + $output->write('<info>' . $fixture->getActionTitle() . '... </info>'); + $startTime = microtime(true); + $fixture->execute($output); + $endTime = microtime(true); + $resultTime = $endTime - $startTime; + $output->writeln('<info> done in ' . gmdate('H:i:s', $resultTime) . '</info>'); + } } diff --git a/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php b/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php index d65441f878cc5..144ac5d7625fa 100644 --- a/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php +++ b/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php @@ -41,8 +41,13 @@ public function execute() ->setValue($config['value']) ->save(); } - $this->fixtureModel->getObjectManager()->get(\Magento\Framework\App\CacheInterface::class) + $this->fixtureModel->getObjectManager() + ->get(\Magento\Framework\App\CacheInterface::class) ->clean([\Magento\Framework\App\Config::CACHE_TAG]); + + $this->fixtureModel->getObjectManager() + ->get(\Magento\Config\App\Config\Type\System::class) + ->clean(); } /** diff --git a/setup/src/Magento/Setup/Fixtures/FixtureModel.php b/setup/src/Magento/Setup/Fixtures/FixtureModel.php index 6466bf73310d7..f9a1482f2db9e 100644 --- a/setup/src/Magento/Setup/Fixtures/FixtureModel.php +++ b/setup/src/Magento/Setup/Fixtures/FixtureModel.php @@ -65,6 +65,14 @@ class FixtureModel */ private $config; + private $configurationFixtureInstanceClassName = 'Magento\Setup\Fixtures\ConfigsApplyFixture'; + + private $configurationFixture; + + private $indexerFixtureInstanceClassName = 'Magento\Setup\Fixtures\IndexersStatesApplyFixture'; + + private $indexerFixture; + /** * Constructor * @@ -109,6 +117,17 @@ public function loadFixtures() 'fixtureModel' => $this, ] ); + + if ($fixture instanceof $this->configurationFixtureInstanceClassName) { + $this->configurationFixture = $fixture; + continue; + } + + if ($fixture instanceof $this->indexerFixtureInstanceClassName) { + $this->indexerFixture = $fixture; + continue; + } + if (isset($this->fixtures[$fixture->getPriority()])) { throw new \InvalidArgumentException( sprintf('Duplicate priority %d in fixture %s', $fixture->getPriority(), $type) @@ -142,6 +161,16 @@ public function getFixtures() return $this->fixtures; } + public function getConfigurationFixture() + { + return $this->configurationFixture; + } + + public function getIndexerFixture() + { + return $this->indexerFixture; + } + /** * Get object manager * diff --git a/setup/src/Magento/Setup/Fixtures/IndexersStatesApplyFixture.php b/setup/src/Magento/Setup/Fixtures/IndexersStatesApplyFixture.php index 7b5bd92663008..949bd8a24f51e 100644 --- a/setup/src/Magento/Setup/Fixtures/IndexersStatesApplyFixture.php +++ b/setup/src/Magento/Setup/Fixtures/IndexersStatesApplyFixture.php @@ -25,10 +25,18 @@ public function execute() if (!isset($indexers["indexer"]) || empty($indexers["indexer"])) { return; } + $this->fixtureModel->resetObjectManager(); - foreach ($indexers["indexer"] as $indexer) { - $this->fixtureModel->indexersStates[$indexer['id']] = ($indexer['set_scheduled'] == "true"); + + /** @var $indexerRegistry \Magento\Framework\Indexer\IndexerRegistry */ + $indexerRegistry = $this->fixtureModel->getObjectManager() + ->create(\Magento\Framework\Indexer\IndexerRegistry::class); + + foreach ($indexers["indexer"] as $indexerConfig) { + $indexer = $indexerRegistry->get($indexerConfig['id']); + $indexer->setScheduled($indexerConfig['set_scheduled'] == "true"); } + $this->fixtureModel->getObjectManager()->get(\Magento\Framework\App\CacheInterface::class) ->clean([\Magento\Framework\App\Config::CACHE_TAG]); } From aa08c78543b6bbe5376be2728ea7f41a465d6922 Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov <ishakhsuvarov@magento.com> Date: Fri, 1 Dec 2017 17:59:29 +0200 Subject: [PATCH 415/653] magento/magento2#12499: Format generated config files using the short array syntax - minor coding style improvement --- .../Framework/App/DeploymentConfig/Writer/PhpFormatter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php b/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php index 09f2bc888e347..ef7b654b66a1d 100644 --- a/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php +++ b/lib/internal/Magento/Framework/App/DeploymentConfig/Writer/PhpFormatter.php @@ -75,8 +75,8 @@ private function formatData($data, $comments = [], $prefix = ' ') * If variable to export is an array, format with the php >= 5.4 short array syntax. Otherwise use * default var_export functionality. * - * @param mixed $var - * @param integer $depth + * @param mixed $var + * @param int $depth * @return string */ private function varExportShort($var, int $depth = 0): string From c2c8ea2bc5c261096ab75f75e9fcc46675a32a1c Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko <omiroshnichenko@magento.com> Date: Fri, 1 Dec 2017 18:17:26 +0200 Subject: [PATCH 416/653] MAGETWO-84882: Information in "Instant Purhase button" is not correct --- .../view/frontend/web/js/view/instant-purchase.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/InstantPurchase/view/frontend/web/js/view/instant-purchase.js b/app/code/Magento/InstantPurchase/view/frontend/web/js/view/instant-purchase.js index 7c5397c1f8e5b..533cd8ea90e3e 100644 --- a/app/code/Magento/InstantPurchase/view/frontend/web/js/view/instant-purchase.js +++ b/app/code/Magento/InstantPurchase/view/frontend/web/js/view/instant-purchase.js @@ -34,7 +34,7 @@ define([ shippingAddressTitle: $t('Shipping Address'), billingAddressTitle: $t('Billing Address'), paymentMethodTitle: $t('Payment Method'), - shippingMethodTitle: $t('Shipping Address') + shippingMethodTitle: $t('Shipping Method') } }, From deee2fbd356b6b8312c84a048854f95bb0fe1c97 Mon Sep 17 00:00:00 2001 From: Andrii Lugovyi <alugovyi@magento.com> Date: Fri, 10 Nov 2017 10:05:30 +0200 Subject: [PATCH 417/653] MAGETWO-83365: Stabilize Frontend Pool for multi thread run --- .../Catalog/Block/Product/ImageBuilder.php | 11 ++++++--- .../Magento/Catalog/Model/Product/Image.php | 24 ++++++++++++++----- .../Image/NotLoadInfoImageException.php | 16 +++++++++++++ .../Product/Listing/Collector/Image.php | 8 ++++++- .../Wishlist/CustomerData/Wishlist.php | 11 ++++++--- 5 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 app/code/Magento/Catalog/Model/Product/Image/NotLoadInfoImageException.php diff --git a/app/code/Magento/Catalog/Block/Product/ImageBuilder.php b/app/code/Magento/Catalog/Block/Product/ImageBuilder.php index d47218db37142..04d30270cbb62 100644 --- a/app/code/Magento/Catalog/Block/Product/ImageBuilder.php +++ b/app/code/Magento/Catalog/Block/Product/ImageBuilder.php @@ -6,6 +6,7 @@ namespace Magento\Catalog\Block\Product; use Magento\Catalog\Helper\ImageFactory as HelperFactory; +use Magento\Catalog\Model\Product\Image\NotLoadInfoImageException; class ImageBuilder { @@ -129,7 +130,11 @@ public function create() ? 'Magento_Catalog::product/image.phtml' : 'Magento_Catalog::product/image_with_borders.phtml'; - $imagesize = $helper->getResizedImageInfo(); + try { + $imagesize = $helper->getResizedImageInfo(); + } catch (NotLoadInfoImageException $exception) { + $imagesize = [$helper->getWidth(), $helper->getHeight()]; + } $data = [ 'data' => [ @@ -140,8 +145,8 @@ public function create() 'label' => $helper->getLabel(), 'ratio' => $this->getRatio($helper), 'custom_attributes' => $this->getCustomAttributes(), - 'resized_image_width' => !empty($imagesize[0]) ? $imagesize[0] : $helper->getWidth(), - 'resized_image_height' => !empty($imagesize[1]) ? $imagesize[1] : $helper->getHeight(), + 'resized_image_width' => $imagesize[0], + 'resized_image_height' => $imagesize[1], ], ]; diff --git a/app/code/Magento/Catalog/Model/Product/Image.php b/app/code/Magento/Catalog/Model/Product/Image.php index abd28ed3bf1ec..c17254f99bfb4 100644 --- a/app/code/Magento/Catalog/Model/Product/Image.php +++ b/app/code/Magento/Catalog/Model/Product/Image.php @@ -5,6 +5,7 @@ */ namespace Magento\Catalog\Model\Product; +use Magento\Catalog\Model\Product\Image\NotLoadInfoImageException; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\ObjectManager; use Magento\Framework\Image as MagentoImage; @@ -877,17 +878,28 @@ protected function _fileExists($filename) /** * Return resized product image information - * * @return array + * @throws NotLoadInfoImageException */ public function getResizedImageInfo() { - if ($this->isBaseFilePlaceholder() == true) { - $image = $this->imageAsset->getSourceFile(); - } else { - $image = $this->imageAsset->getPath(); + $errorMessage = 'Can\'t get information about the picture: '; + try { + if ($this->isBaseFilePlaceholder() == true) { + $image = $this->imageAsset->getSourceFile(); + } else { + $image = $this->imageAsset->getPath(); + } + + $imageProperties = getimagesize($image); + + return $imageProperties; + + } finally { + if (empty($imageProperties)) { + throw new NotLoadInfoImageException(__($errorMessage . $image)); + } } - return getimagesize($image); } /** diff --git a/app/code/Magento/Catalog/Model/Product/Image/NotLoadInfoImageException.php b/app/code/Magento/Catalog/Model/Product/Image/NotLoadInfoImageException.php new file mode 100644 index 0000000000000..6d6aab32ccd11 --- /dev/null +++ b/app/code/Magento/Catalog/Model/Product/Image/NotLoadInfoImageException.php @@ -0,0 +1,16 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Catalog\Model\Product\Image; + +use Magento\Framework\Exception\LocalizedException; + +/** + * @api + * @since 102.0.0 + */ +class NotLoadInfoImageException extends LocalizedException +{ +} diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Listing/Collector/Image.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Listing/Collector/Image.php index 2fc9ef76aa00d..216bc16968fcb 100644 --- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Listing/Collector/Image.php +++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Listing/Collector/Image.php @@ -11,6 +11,7 @@ use Magento\Catalog\Api\Data\ProductRender\ImageInterfaceFactory; use Magento\Catalog\Api\Data\ProductRenderInterface; use Magento\Catalog\Helper\ImageFactory; +use Magento\Catalog\Model\Product\Image\NotLoadInfoImageException; use Magento\Catalog\Ui\DataProvider\Product\ProductRenderCollectorInterface; use Magento\Framework\App\State; use Magento\Framework\View\DesignInterface; @@ -102,7 +103,12 @@ public function collect(ProductInterface $product, ProductRenderInterface $produ [$this, "emulateImageCreating"], [$product, $imageCode, (int) $productRender->getStoreId(), $image] ); - $resizedInfo = $helper->getResizedImageInfo(); + + try { + $resizedInfo = $helper->getResizedImageInfo(); + } catch (NotLoadInfoImageException $exception) { + $resizedInfo = [$helper->getWidth(), $helper->getHeight()]; + } $image->setCode($imageCode); $image->setHeight($helper->getHeight()); diff --git a/app/code/Magento/Wishlist/CustomerData/Wishlist.php b/app/code/Magento/Wishlist/CustomerData/Wishlist.php index a81b3d6537dfd..6933efc2aa540 100644 --- a/app/code/Magento/Wishlist/CustomerData/Wishlist.php +++ b/app/code/Magento/Wishlist/CustomerData/Wishlist.php @@ -5,6 +5,7 @@ */ namespace Magento\Wishlist\CustomerData; +use Magento\Catalog\Model\Product\Image\NotLoadInfoImageException; use Magento\Customer\CustomerData\SectionSourceInterface; /** @@ -154,15 +155,19 @@ protected function getImageData($product) ? 'Magento_Catalog/product/image' : 'Magento_Catalog/product/image_with_borders'; - $imagesize = $helper->getResizedImageInfo(); + try { + $imagesize = $helper->getResizedImageInfo(); + } catch (NotLoadInfoImageException $exception) { + $imagesize = [$helper->getWidth(), $helper->getHeight()]; + } $width = $helper->getFrame() ? $helper->getWidth() - : (!empty($imagesize[0]) ? $imagesize[0] : $helper->getWidth()); + : $imagesize[0]; $height = $helper->getFrame() ? $helper->getHeight() - : (!empty($imagesize[1]) ? $imagesize[1] : $helper->getHeight()); + : $imagesize[1]; return [ 'template' => $template, From 53681de1f7099e21fc133d4e3b2c7efe98267f14 Mon Sep 17 00:00:00 2001 From: Andrii Voskoboinikov <avoskoboinikov@magento.com> Date: Tue, 28 Nov 2017 14:34:38 +0200 Subject: [PATCH 418/653] MAGETWO-83366: Stabilize Admin Pool for multi thread run --- .../Command/GenerateFixturesCommand.php | 32 +++++++++++-------- .../Setup/Fixtures/ConfigsApplyFixture.php | 7 +++- .../Magento/Setup/Fixtures/FixtureModel.php | 29 +++++++++++++++++ .../Fixtures/IndexersStatesApplyFixture.php | 12 +++++-- 4 files changed, 64 insertions(+), 16 deletions(-) diff --git a/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php b/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php index eb0efd3983fa2..5caaee480d5d2 100644 --- a/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php +++ b/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php @@ -83,35 +83,31 @@ protected function execute(InputInterface $input, OutputInterface $output) $fixture->printInfo($output); } + /** @var \Magento\Setup\Fixtures\ConfigsApplyFixture $configFixture */ + $configFixture = $fixtureModel->getConfigurationFixture(); + $configFixture && $this->executeFixture($configFixture, $output); + /** @var $config \Magento\Indexer\Model\Config */ $config = $fixtureModel->getObjectManager()->get(\Magento\Indexer\Model\Config::class); $indexerListIds = $config->getIndexers(); /** @var $indexerRegistry \Magento\Framework\Indexer\IndexerRegistry */ $indexerRegistry = $fixtureModel->getObjectManager() ->create(\Magento\Framework\Indexer\IndexerRegistry::class); - $indexersState = []; + foreach ($indexerListIds as $indexerId) { $indexer = $indexerRegistry->get($indexerId['indexer_id']); - $indexersState[$indexerId['indexer_id']] = $indexer->isScheduled(); $indexer->setScheduled(true); } foreach ($fixtureModel->getFixtures() as $fixture) { - $output->write('<info>' . $fixture->getActionTitle() . '... </info>'); - $startTime = microtime(true); - $fixture->execute($output); - $endTime = microtime(true); - $resultTime = $endTime - $startTime; - $output->writeln('<info> done in ' . gmdate('H:i:s', $resultTime) . '</info>'); + $this->executeFixture($fixture, $output); } $this->clearChangelog(); - foreach ($indexerListIds as $indexerId) { - /** @var $indexer \Magento\Indexer\Model\Indexer */ - $indexer = $indexerRegistry->get($indexerId['indexer_id']); - $indexer->setScheduled($indexersState[$indexerId['indexer_id']]); - } + /** @var \Magento\Setup\Fixtures\IndexersStatesApplyFixture $indexerFixture */ + $indexerFixture = $this->fixtureModel->getIndexerFixture(); + $indexerFixture && $this->executeFixture($indexerFixture, $output); if (!$input->getOption(self::SKIP_REINDEX_OPTION)) { $fixtureModel->reindex($output); @@ -148,4 +144,14 @@ private function clearChangelog() } } } + + private function executeFixture(\Magento\Setup\Fixtures\Fixture $fixture, OutputInterface $output) + { + $output->write('<info>' . $fixture->getActionTitle() . '... </info>'); + $startTime = microtime(true); + $fixture->execute($output); + $endTime = microtime(true); + $resultTime = $endTime - $startTime; + $output->writeln('<info> done in ' . gmdate('H:i:s', $resultTime) . '</info>'); + } } diff --git a/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php b/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php index d65441f878cc5..144ac5d7625fa 100644 --- a/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php +++ b/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php @@ -41,8 +41,13 @@ public function execute() ->setValue($config['value']) ->save(); } - $this->fixtureModel->getObjectManager()->get(\Magento\Framework\App\CacheInterface::class) + $this->fixtureModel->getObjectManager() + ->get(\Magento\Framework\App\CacheInterface::class) ->clean([\Magento\Framework\App\Config::CACHE_TAG]); + + $this->fixtureModel->getObjectManager() + ->get(\Magento\Config\App\Config\Type\System::class) + ->clean(); } /** diff --git a/setup/src/Magento/Setup/Fixtures/FixtureModel.php b/setup/src/Magento/Setup/Fixtures/FixtureModel.php index 6466bf73310d7..f9a1482f2db9e 100644 --- a/setup/src/Magento/Setup/Fixtures/FixtureModel.php +++ b/setup/src/Magento/Setup/Fixtures/FixtureModel.php @@ -65,6 +65,14 @@ class FixtureModel */ private $config; + private $configurationFixtureInstanceClassName = 'Magento\Setup\Fixtures\ConfigsApplyFixture'; + + private $configurationFixture; + + private $indexerFixtureInstanceClassName = 'Magento\Setup\Fixtures\IndexersStatesApplyFixture'; + + private $indexerFixture; + /** * Constructor * @@ -109,6 +117,17 @@ public function loadFixtures() 'fixtureModel' => $this, ] ); + + if ($fixture instanceof $this->configurationFixtureInstanceClassName) { + $this->configurationFixture = $fixture; + continue; + } + + if ($fixture instanceof $this->indexerFixtureInstanceClassName) { + $this->indexerFixture = $fixture; + continue; + } + if (isset($this->fixtures[$fixture->getPriority()])) { throw new \InvalidArgumentException( sprintf('Duplicate priority %d in fixture %s', $fixture->getPriority(), $type) @@ -142,6 +161,16 @@ public function getFixtures() return $this->fixtures; } + public function getConfigurationFixture() + { + return $this->configurationFixture; + } + + public function getIndexerFixture() + { + return $this->indexerFixture; + } + /** * Get object manager * diff --git a/setup/src/Magento/Setup/Fixtures/IndexersStatesApplyFixture.php b/setup/src/Magento/Setup/Fixtures/IndexersStatesApplyFixture.php index 7b5bd92663008..949bd8a24f51e 100644 --- a/setup/src/Magento/Setup/Fixtures/IndexersStatesApplyFixture.php +++ b/setup/src/Magento/Setup/Fixtures/IndexersStatesApplyFixture.php @@ -25,10 +25,18 @@ public function execute() if (!isset($indexers["indexer"]) || empty($indexers["indexer"])) { return; } + $this->fixtureModel->resetObjectManager(); - foreach ($indexers["indexer"] as $indexer) { - $this->fixtureModel->indexersStates[$indexer['id']] = ($indexer['set_scheduled'] == "true"); + + /** @var $indexerRegistry \Magento\Framework\Indexer\IndexerRegistry */ + $indexerRegistry = $this->fixtureModel->getObjectManager() + ->create(\Magento\Framework\Indexer\IndexerRegistry::class); + + foreach ($indexers["indexer"] as $indexerConfig) { + $indexer = $indexerRegistry->get($indexerConfig['id']); + $indexer->setScheduled($indexerConfig['set_scheduled'] == "true"); } + $this->fixtureModel->getObjectManager()->get(\Magento\Framework\App\CacheInterface::class) ->clean([\Magento\Framework\App\Config::CACHE_TAG]); } From fefb3f696cffdcc815fbbf01dd5cd04b76c77833 Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko <okorshenko@magento.com> Date: Fri, 1 Dec 2017 14:24:16 -0600 Subject: [PATCH 419/653] MAGETWO-84764: NewRelic: Disables Module Deployments, Creates new Deploy Marker Command #12477 - fixed code style - added copyright - fixed di configuration --- .../Console/Command/DeployMarker.php | 26 +++++++++++++++++-- .../Model/ServiceShellUser.php | 14 +++++++++- app/code/Magento/NewRelicReporting/etc/di.xml | 5 ++-- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/NewRelicReporting/Console/Command/DeployMarker.php b/app/code/Magento/NewRelicReporting/Console/Command/DeployMarker.php index 272b7592cbd15..9b19cc957ae70 100644 --- a/app/code/Magento/NewRelicReporting/Console/Command/DeployMarker.php +++ b/app/code/Magento/NewRelicReporting/Console/Command/DeployMarker.php @@ -1,20 +1,36 @@ <?php - +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ namespace Magento\NewRelicReporting\Console\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputArgument; - use Magento\NewRelicReporting\Model\Apm\DeploymentsFactory; use Magento\NewRelicReporting\Model\ServiceShellUser; class DeployMarker extends Command { + /** + * @var DeploymentsFactory + */ protected $deploymentsFactory; + + /** + * @var ServiceShellUser + */ protected $serviceShellUser; + /** + * Initialize dependencies. + * + * @param DeploymentsFactory $deploymentsFactory + * @param ServiceShellUser $serviceShellUser + * @param null $name + */ public function __construct( DeploymentsFactory $deploymentsFactory, ServiceShellUser $serviceShellUser, @@ -25,6 +41,9 @@ public function __construct( parent::__construct($name); } + /** + * {@inheritdoc} + */ protected function configure() { $this->setName("newrelic:create:deploy-marker"); @@ -47,6 +66,9 @@ protected function configure() parent::configure(); } + /** + * {@inheritdoc} + */ protected function execute(InputInterface $input, OutputInterface $output) { $this->deploymentsFactory->create()->setDeployment( diff --git a/app/code/Magento/NewRelicReporting/Model/ServiceShellUser.php b/app/code/Magento/NewRelicReporting/Model/ServiceShellUser.php index 8262428d9bf2b..c038be4fb2a76 100644 --- a/app/code/Magento/NewRelicReporting/Model/ServiceShellUser.php +++ b/app/code/Magento/NewRelicReporting/Model/ServiceShellUser.php @@ -1,11 +1,23 @@ <?php - +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ namespace Magento\NewRelicReporting\Model; class ServiceShellUser { + /** + * Default user name; + */ const DEFAULT_USER = 'cron'; + /** + * Get use name. + * + * @param bool $userFromArgument + * @return string + */ public function get($userFromArgument = false) { if ($userFromArgument) { diff --git a/app/code/Magento/NewRelicReporting/etc/di.xml b/app/code/Magento/NewRelicReporting/etc/di.xml index 9cfe909571a96..2dccc45c1129b 100644 --- a/app/code/Magento/NewRelicReporting/etc/di.xml +++ b/app/code/Magento/NewRelicReporting/etc/di.xml @@ -30,11 +30,10 @@ <type name="Magento\Framework\App\Http"> <plugin name="framework-http-newrelic" type="Magento\NewRelicReporting\Plugin\HttpPlugin"/> </type> - <type name="Magento\Framework\Console\CommandList"> + <type name="Magento\Framework\Console\CommandListInterface"> <arguments> <argument name="commands" xsi:type="array"> - <item name="magento_new_relic_reporting_command_deploy_marker" - xsi:type="object">Magento\NewRelicReporting\Console\Command\DeployMarker</item> + <item name="newrelicreporting_deploy_marker" xsi:type="object">Magento\NewRelicReporting\Console\Command\DeployMarker</item> </argument> </arguments> </type> From 63ec3f762bc64680fb4cd52169c453711defc06d Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Sun, 3 Dec 2017 12:21:01 +0000 Subject: [PATCH 420/653] Remove indexer:status:mview command --- .../Command/IndexerStatusMviewCommand.php | 98 ------- .../Command/IndexerStatusMviewCommandTest.php | 262 ------------------ 2 files changed, 360 deletions(-) delete mode 100644 app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php delete mode 100644 app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php diff --git a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php deleted file mode 100644 index 37caabc613e66..0000000000000 --- a/app/code/Magento/Indexer/Console/Command/IndexerStatusMviewCommand.php +++ /dev/null @@ -1,98 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Indexer\Console\Command; - -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Command\Command; -use Magento\Framework\Mview\View; -use Magento\Framework\Mview\View\CollectionFactory; -use Magento\Framework\Console\Cli; - -/** - * Command for displaying status of mview indexers. - */ -class IndexerStatusMviewCommand extends Command -{ - /** @var \Magento\Framework\Mview\View\CollectionInterface $mviewCollection */ - private $mviewCollection; - - public function __construct( - CollectionFactory $collectionFactory - ) { - $this->mviewCollection = $collectionFactory->create(); - - parent::__construct(); - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - $this->setName('indexer:status:mview') - ->setDescription('Shows status of Mview Indexers and their queue status'); - - parent::configure(); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - try { - $table = $this->getHelperSet()->get('table'); - $table->setHeaders(['ID', 'Mode', 'Status', 'Updated', 'Version ID', 'Backlog']); - - $rows = []; - - /** @var \Magento\Framework\Mview\View $view */ - foreach ($this->mviewCollection as $view) { - $state = $view->getState(); - $changelog = $view->getChangelog(); - - try { - $currentVersionId = $changelog->getVersion(); - } catch (View\ChangelogTableNotExistsException $e) { - continue; - } - - $pendingCount = $changelog->getListSize($state->getVersionId(), $currentVersionId); - - $pendingString = "<error>$pendingCount</error>"; - if ($pendingCount <= 0) { - $pendingString = "<info>$pendingCount</info>"; - } - - $rows[] = [ - $view->getId(), - $state->getMode(), - $state->getStatus(), - $state->getUpdated(), - $state->getVersionId(), - $pendingString, - ]; - } - - usort($rows, function ($comp1, $comp2) { - return strcmp($comp1[0], $comp2[0]); - }); - - $table->addRows($rows); - $table->render($output); - - return Cli::RETURN_SUCCESS; - } catch (\Exception $e) { - $output->writeln('<error>' . $e->getMessage() . '</error>'); - if ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) { - $output->writeln($e->getTraceAsString()); - } - - return Cli::RETURN_FAILURE; - } - } -} diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php deleted file mode 100644 index 4ae3ca83870e7..0000000000000 --- a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusMviewCommandTest.php +++ /dev/null @@ -1,262 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Indexer\Test\Unit\Console\Command; - -use \Magento\Framework\Mview; -use Magento\Indexer\Console\Command\IndexerStatusMviewCommand; -use Symfony\Component\Console\Tester\CommandTester; -use Symfony\Component\Console\Helper\HelperSet; -use Symfony\Component\Console\Helper\TableHelper; -use Magento\Store\Model\Website; -use Magento\Framework\Console\Cli; -use Magento\Framework\Mview\View\CollectionFactory; - -/** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - */ -class IndexerStatusMviewCommandTest extends \PHPUnit\Framework\TestCase -{ - /** - * @var IndexerStatusMviewCommand - */ - private $command; - - /** - * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager - */ - private $objectManager; - - /** - * @var \Magento\Framework\Mview\View\Collection - */ - private $collection; - - protected function setUp() - { - $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); - - /** @var \Magento\Framework\Mview\View\Collection $collection */ - $this->collection = $this->objectManager->getObject(Mview\View\Collection::class); - - $reflectedCollection = new \ReflectionObject($this->collection); - $isLoadedProperty = $reflectedCollection->getProperty('_isCollectionLoaded'); - $isLoadedProperty->setAccessible(true); - $isLoadedProperty->setValue($this->collection, true); - - $collectionFactory = $this->getMockBuilder(CollectionFactory::class) - ->disableOriginalConstructor() - ->getMock(); - $collectionFactory->method('create') - ->willReturn($this->collection); - - $this->command = $this->objectManager->getObject( - IndexerStatusMviewCommand::class, - ['collectionFactory' => $collectionFactory] - ); - - /** @var HelperSet $helperSet */ - $helperSet = $this->objectManager->getObject( - HelperSet::class, - ['helpers' => [$this->objectManager->getObject(TableHelper::class)]] - ); - - //Inject table helper for output - $this->command->setHelperSet($helperSet); - } - - public function testExecute() - { - $mviews = [ - [ - 'view' => [ - 'view_id' => 'catalog_category_product', - ], - 'state' => [ - 'mode' => 'enabled', - 'status' => 'idle', - 'updated' => '2017-01-01 11:11:11', - 'version_id' => 100, - ], - 'changelog' => [ - 'version_id' => 110 - ], - ], - [ - 'view' => [ - 'view_id' => 'catalog_product_category', - ], - 'state' => [ - 'mode' => 'disabled', - 'status' => 'idle', - 'updated' => '2017-01-01 11:11:11', - 'version_id' => 100, - ], - 'changelog' => [ - 'version_id' => 200 - ], - ], - [ - 'view' => [ - 'view_id' => 'catalog_product_attribute', - ], - 'state' => [ - 'mode' => 'enabled', - 'status' => 'idle', - 'updated' => '2017-01-01 11:11:11', - 'version_id' => 100, - ], - 'changelog' => [ - 'version_id' => 100 - ], - ], - ]; - - foreach ($mviews as $data) { - $this->collection->addItem($this->generateMviewStub($data['view'], $data['changelog'], $data['state'])); - } - $this->collection->addItem($this->getNeverEnabledMviewIndexerWithNoTable()); - - $tester = new CommandTester($this->command); - $this->assertEquals(Cli::RETURN_SUCCESS, $tester->execute([])); - - $linesOutput = array_filter(explode(PHP_EOL, $tester->getDisplay())); - $this->assertCount(7, $linesOutput, 'There should be 7 lines output. 3 Spacers, 1 header, 3 content.'); - $this->assertEquals($linesOutput[0], $linesOutput[2], "Lines 0, 2, 7 should be spacer lines"); - $this->assertEquals($linesOutput[2], $linesOutput[6], "Lines 0, 2, 6 should be spacer lines"); - - $headerValues = array_values(array_filter(explode('|', $linesOutput[1]))); - $this->assertEquals('ID', trim($headerValues[0])); - $this->assertEquals('Mode', trim($headerValues[1])); - $this->assertEquals('Status', trim($headerValues[2])); - $this->assertEquals('Updated', trim($headerValues[3])); - $this->assertEquals('Version ID', trim($headerValues[4])); - $this->assertEquals('Backlog', trim($headerValues[5])); - - $categoryProduct = array_values(array_filter(explode('|', $linesOutput[3]))); - $this->assertEquals('catalog_category_product', trim($categoryProduct[0])); - $this->assertEquals('enabled', trim($categoryProduct[1])); - $this->assertEquals('idle', trim($categoryProduct[2])); - $this->assertEquals('2017-01-01 11:11:11', trim($categoryProduct[3])); - $this->assertEquals('100', trim($categoryProduct[4])); - $this->assertEquals('10', trim($categoryProduct[5])); - unset($categoryProduct); - - $productAttribute = array_values(array_filter(explode('|', $linesOutput[4]))); - $this->assertEquals('catalog_product_attribute', trim($productAttribute[0])); - $this->assertEquals('enabled', trim($productAttribute[1])); - $this->assertEquals('idle', trim($productAttribute[2])); - $this->assertEquals('2017-01-01 11:11:11', trim($productAttribute[3])); - $this->assertEquals('100', trim($productAttribute[4])); - $this->assertEquals('0', trim($productAttribute[5])); - unset($productAttribute); - - $productCategory = array_values(array_filter(explode('|', $linesOutput[5]))); - $this->assertEquals('catalog_product_category', trim($productCategory[0])); - $this->assertEquals('disabled', trim($productCategory[1])); - $this->assertEquals('idle', trim($productCategory[2])); - $this->assertEquals('2017-01-01 11:11:11', trim($productCategory[3])); - $this->assertEquals('100', trim($productCategory[4])); - $this->assertEquals('100', trim($productCategory[5])); - unset($productCategory); - } - - /** - * @param array $viewData - * @param array $changelogData - * @param array $stateData - * @return Mview\View|Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject - */ - protected function generateMviewStub(array $viewData, array $changelogData, array $stateData) - { - /** @var Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject $stub */ - $changelog = $this->getMockBuilder(\Magento\Framework\Mview\View\Changelog::class) - ->disableOriginalConstructor() - ->getMock(); - - $listSize = $changelogData['version_id'] - $stateData['version_id']; - - $changelog->expects($this->any()) - ->method('getListSize') - ->willReturn($listSize); - - $changelog->expects($this->any()) - ->method('getVersion') - ->willReturn($changelogData['version_id']); - - /** @var \Magento\Indexer\Model\Mview\View\State|\PHPUnit_Framework_MockObject_MockObject $stub */ - $state = $this->getMockBuilder(\Magento\Indexer\Model\Mview\View\State::class) - ->disableOriginalConstructor() - ->setMethods(['loadByView']) - ->getMock(); - - $state->setData($stateData); - - /** @var Mview\View|\PHPUnit_Framework_MockObject_MockObject $stub */ - $stub = $this->getMockBuilder(\Magento\Framework\Mview\View::class) - ->disableOriginalConstructor() - ->setMethods(['getChangelog', 'getState']) - ->getMock(); - - $stub->expects($this->any()) - ->method('getChangelog') - ->willReturn($changelog); - - $stub->expects($this->any()) - ->method('getState') - ->willReturn($state); - - $stub->setData($viewData); - - return $stub; - } - - /** - * @return Mview\View|\PHPUnit_Framework_MockObject_MockObject - */ - protected function getNeverEnabledMviewIndexerWithNoTable() - { - /** @var Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject $stub */ - $changelog = $this->getMockBuilder(\Magento\Framework\Mview\View\Changelog::class) - ->disableOriginalConstructor() - ->getMock(); - - $changelog->expects($this->any()) - ->method('getVersion') - ->willThrowException( - new Mview\View\ChangelogTableNotExistsException(new \Magento\Framework\Phrase("Do not render")) - ); - - /** @var Mview\View|\PHPUnit_Framework_MockObject_MockObject $notInitiatedMview */ - $notInitiatedMview = $this->getMockBuilder(\Magento\Framework\Mview\View::class) - ->disableOriginalConstructor() - ->getMock(); - - $notInitiatedMview->expects($this->any()) - ->method('getChangelog') - ->willReturn($changelog); - - return $notInitiatedMview; - } - - public function testExecuteExceptionNoVerbosity() - { - /** @var \Magento\Framework\Mview\View|\PHPUnit_Framework_MockObject_MockObject $stub */ - $stub = $this->getMockBuilder(Mview\View::class) - ->disableOriginalConstructor() - ->getMock(); - - $stub->expects($this->any()) - ->method('getChangelog') - ->willThrowException(new \Exception("Dummy test exception")); - - $this->collection->addItem($stub); - - $tester = new CommandTester($this->command); - $this->assertEquals(Cli::RETURN_FAILURE, $tester->execute([])); - $linesOutput = array_filter(explode(PHP_EOL, $tester->getDisplay())); - $this->assertEquals('Dummy test exception', $linesOutput[0]); - } -} From d3d300b33430353946f3373a4d64cac578715010 Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Sun, 3 Dec 2017 12:21:58 +0000 Subject: [PATCH 421/653] Update indexer:status to display schedule backlog --- .../Console/Command/IndexerStatusCommand.php | 89 +++++++-- .../Command/IndexerStatusCommandTest.php | 177 ++++++++++++++++-- 2 files changed, 234 insertions(+), 32 deletions(-) diff --git a/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php index 6590f6e0af99d..2d9c4bd3ccb28 100644 --- a/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php +++ b/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php @@ -7,6 +7,8 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Magento\Framework\Indexer; +use Magento\Framework\Mview; /** * Command for displaying status of indexers. @@ -30,21 +32,84 @@ protected function configure() */ protected function execute(InputInterface $input, OutputInterface $output) { + $table = $this->getHelperSet()->get('table'); + $table->setHeaders(['Title', 'Status', 'Update On', 'Schedule Status', 'Schedule Updated']); + + $rows = []; + $indexers = $this->getIndexers($input); foreach ($indexers as $indexer) { - $status = 'unknown'; - switch ($indexer->getStatus()) { - case \Magento\Framework\Indexer\StateInterface::STATUS_VALID: - $status = 'Ready'; - break; - case \Magento\Framework\Indexer\StateInterface::STATUS_INVALID: - $status = 'Reindex required'; - break; - case \Magento\Framework\Indexer\StateInterface::STATUS_WORKING: - $status = 'Processing'; - break; + $view = $indexer->getView(); + + $rowData = [ + 'Title' => $indexer->getTitle(), + 'Status' => $this->getStatus($indexer), + 'Update On' => $indexer->isScheduled() ? 'Schedule' : 'Save', + 'Schedule Status' => '', + 'Updated' => '', + ]; + + if ($indexer->isScheduled()) { + $state = $view->getState(); + $rowData['Schedule Status'] = "{$state->getStatus()} ({$this->getPendingCount($view)} in backlog)"; + $rowData['Updated'] = $state->getUpdated(); } - $output->writeln(sprintf('%-50s ', $indexer->getTitle() . ':') . $status); + + $rows[] = $rowData; + } + + usort($rows, function ($comp1, $comp2) { + return strcmp($comp1['Title'], $comp2['Title']); + }); + + $table->addRows($rows); + $table->render($output); + } + + /** + * @param Indexer\IndexerInterface $indexer + * @return string + */ + protected function getStatus(Indexer\IndexerInterface $indexer) + { + $status = 'unknown'; + switch ($indexer->getStatus()) { + case \Magento\Framework\Indexer\StateInterface::STATUS_VALID: + $status = 'Ready'; + break; + case \Magento\Framework\Indexer\StateInterface::STATUS_INVALID: + $status = 'Reindex required'; + break; + case \Magento\Framework\Indexer\StateInterface::STATUS_WORKING: + $status = 'Processing'; + break; } + return $status; + } + + /** + * @param Mview\ViewInterface $view + * @return string + */ + protected function getPendingCount(Mview\ViewInterface $view) + { + $changelog = $view->getChangelog(); + + try { + $currentVersionId = $changelog->getVersion(); + } catch (Mview\View\ChangelogTableNotExistsException $e) { + return ''; + } + + $state = $view->getState(); + + $pendingCount = $changelog->getListSize($state->getVersionId(), $currentVersionId); + + $pendingString = "<error>$pendingCount</error>"; + if ($pendingCount <= 0) { + $pendingString = "<info>$pendingCount</info>"; + } + + return $pendingString; } } diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php index 6eb7f7562b9cc..58a0a5b750709 100644 --- a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php +++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php @@ -8,6 +8,8 @@ use Magento\Framework\Indexer\StateInterface; use Magento\Indexer\Console\Command\IndexerStatusCommand; use Symfony\Component\Console\Tester\CommandTester; +use Symfony\Component\Console\Helper\HelperSet; +use Symfony\Component\Console\Helper\TableHelper; class IndexerStatusCommandTest extends AbstractIndexerCommandCommonSetup { @@ -18,35 +20,132 @@ class IndexerStatusCommandTest extends AbstractIndexerCommandCommonSetup */ private $command; + /** + * @param \PHPUnit_Framework_MockObject_MockObject $indexerMock + * @param array $data + * @return mixed + */ + protected function attachViewToIndexerMock($indexerMock, array $data) + { + /** @var \Magento\Framework\Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject $stub */ + $changelog = $this->getMockBuilder(\Magento\Framework\Mview\View\Changelog::class) + ->disableOriginalConstructor() + ->getMock(); + + $changelog->expects($this->any()) + ->method('getListSize') + ->willReturn($data['view']['changelog']['list_size']); + + /** @var \Magento\Indexer\Model\Mview\View\State|\PHPUnit_Framework_MockObject_MockObject $stateMock */ + $stateMock = $this->getMockBuilder(\Magento\Indexer\Model\Mview\View\State::class) + ->disableOriginalConstructor() + ->setMethods(null) + ->getMock(); + + $stateMock->addData($data['view']['state']); + + /** @var \Magento\Framework\Mview\View|\PHPUnit_Framework_MockObject_MockObject $viewMock */ + $viewMock = $this->getMockBuilder(\Magento\Framework\Mview\View::class) + ->disableOriginalConstructor() + ->setMethods(['getChangelog', 'getState']) + ->getMock(); + + $viewMock->expects($this->any()) + ->method('getState') + ->willReturn($stateMock); + $viewMock->expects($this->any()) + ->method('getChangelog') + ->willReturn($changelog); + + $indexerMock->method('getView') + ->willReturn($viewMock); + + return $indexerMock; + } + /** * @param array $indexers - * @param array $statuses + * * @dataProvider executeAllDataProvider */ - public function testExecuteAll(array $indexers, array $statuses) + public function testExecuteAll(array $indexers) { $this->configureAdminArea(); $indexerMocks = []; foreach ($indexers as $indexerData) { $indexerMock = $this->getIndexerMock( - ['getStatus'], + ['getStatus', 'isScheduled', 'getState', 'getView'], $indexerData ); + $indexerMock->method('getStatus') - ->willReturn($statuses[$indexerData['indexer_id']]); + ->willReturn($indexerData['status']); + $indexerMock->method('isScheduled') + ->willReturn($indexerData['is_scheduled']); + + if ($indexerData['is_scheduled']) { + $this->attachViewToIndexerMock($indexerMock, $indexerData); + } + $indexerMocks[] = $indexerMock; + } $this->initIndexerCollectionByItems($indexerMocks); $this->command = new IndexerStatusCommand($this->objectManagerFactory); + + $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + + $this->command->setHelperSet( + $objectManager->getObject( + HelperSet::class, + ['helpers' => [$objectManager->getObject(TableHelper::class)]] + ) + ); + + $commandTester = new CommandTester($this->command); $commandTester->execute([]); - $actualValue = $commandTester->getDisplay(); - $expectedValue = sprintf('%-50s ', 'Title_indexerOne' . ':') . 'Ready' . PHP_EOL - . sprintf('%-50s ', 'Title_indexerTwo' . ':') . 'Reindex required' . PHP_EOL - . sprintf('%-50s ', 'Title_indexerThree' . ':') . 'Processing' . PHP_EOL - . sprintf('%-50s ', 'Title_indexerFour' . ':') . 'unknown' . PHP_EOL; - $this->assertStringStartsWith($expectedValue, $actualValue); + $linesOutput = array_filter(explode(PHP_EOL, $commandTester->getDisplay())); + + $this->assertCount(8, $linesOutput, 'There should be 8 lines output. 3 Spacers, 1 header, 4 content.'); + $this->assertEquals($linesOutput[0], $linesOutput[2], "Lines 0, 2, 7 should be spacer lines"); + $this->assertEquals($linesOutput[2], $linesOutput[7], "Lines 0, 2, 6 should be spacer lines"); + + $headerValues = array_values(array_filter(explode('|', $linesOutput[1]))); + $this->assertEquals('Title', trim($headerValues[0])); + $this->assertEquals('Status', trim($headerValues[1])); + $this->assertEquals('Update On', trim($headerValues[2])); + $this->assertEquals('Schedule Status', trim($headerValues[3])); + $this->assertEquals('Schedule Updated', trim($headerValues[4])); + + $indexer1 = array_values(array_filter(explode('|', $linesOutput[3]))); + $this->assertEquals('Title_indexer1', trim($indexer1[0])); + $this->assertEquals('Ready', trim($indexer1[1])); + $this->assertEquals('Schedule', trim($indexer1[2])); + $this->assertEquals('idle (10 in backlog)', trim($indexer1[3])); + $this->assertEquals('2017-01-01 11:11:11', trim($indexer1[4])); + + $indexer2 = array_values(array_filter(explode('|', $linesOutput[4]))); + $this->assertEquals('Title_indexer2', trim($indexer2[0])); + $this->assertEquals('Reindex required', trim($indexer2[1])); + $this->assertEquals('Save', trim($indexer2[2])); + $this->assertEquals('', trim($indexer2[3])); + $this->assertEquals('', trim($indexer2[4])); + + $indexer3 = array_values(array_filter(explode('|', $linesOutput[5]))); + $this->assertEquals('Title_indexer3', trim($indexer3[0])); + $this->assertEquals('Processing', trim($indexer3[1])); + $this->assertEquals('Schedule', trim($indexer3[2])); + $this->assertEquals('idle (100 in backlog)', trim($indexer3[3])); + $this->assertEquals('2017-01-01 11:11:11', trim($indexer3[4])); + + $indexer4 = array_values(array_filter(explode('|', $linesOutput[6]))); + $this->assertEquals('Title_indexer4', trim($indexer4[0])); + $this->assertEquals('unknown', trim($indexer4[1])); + $this->assertEquals('Schedule', trim($indexer4[2])); + $this->assertEquals('running (20 in backlog)', trim($indexer4[3])); + $this->assertEquals('2017-01-01 11:11:11', trim($indexer4[4])); } /** @@ -59,27 +158,65 @@ public function executeAllDataProvider() 'indexers' => [ 'indexer_1' => [ 'indexer_id' => 'indexer_1', - 'title' => 'Title_indexerOne' + 'title' => 'Title_indexer1', + 'status' => StateInterface::STATUS_VALID, + 'is_scheduled' => true, + 'view' => [ + 'state' => [ + 'status' => 'idle', + 'updated' => '2017-01-01 11:11:11', + ], + 'changelog' => [ + 'list_size' => 10 + ] + ] ], 'indexer_2' => [ 'indexer_id' => 'indexer_2', - 'title' => 'Title_indexerTwo' + 'title' => 'Title_indexer2', + 'status' => StateInterface::STATUS_INVALID, + 'is_scheduled' => false, + 'view' => [ + 'state' => [ + 'status' => 'idle', + 'updated' => '2017-01-01 11:11:11', + ], + 'changelog' => [ + 'list_size' => 99999999 + ] + ] ], 'indexer_3' => [ 'indexer_id' => 'indexer_3', - 'title' => 'Title_indexerThree' + 'title' => 'Title_indexer3', + 'status' => StateInterface::STATUS_WORKING, + 'is_scheduled' => true, + 'view' => [ + 'state' => [ + 'status' => 'idle', + 'updated' => '2017-01-01 11:11:11', + ], + 'changelog' => [ + 'list_size' => 100 + ] + ] ], 'indexer_4' => [ 'indexer_id' => 'indexer_4', - 'title' => 'Title_indexerFour' + 'title' => 'Title_indexer4', + 'status' => null, + 'is_scheduled' => true, + 'view' => [ + 'state' => [ + 'status' => 'running', + 'updated' => '2017-01-01 11:11:11', + ], + 'changelog' => [ + 'list_size' => 20 + ] + ] ], ], - 'Statuses' => [ - 'indexer_1' => StateInterface::STATUS_VALID, - 'indexer_2' => StateInterface::STATUS_INVALID, - 'indexer_3' => StateInterface::STATUS_WORKING, - 'indexer_4' => null, - ] ], ]; } From c63330fad61b636b213db99cb7aaf619ec46bfd2 Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Sun, 3 Dec 2017 12:23:43 +0000 Subject: [PATCH 422/653] Remove status-mview from di.xml --- app/code/Magento/Indexer/etc/di.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/Indexer/etc/di.xml b/app/code/Magento/Indexer/etc/di.xml index 266cf72c50dbf..610f08fac3a05 100644 --- a/app/code/Magento/Indexer/etc/di.xml +++ b/app/code/Magento/Indexer/etc/di.xml @@ -51,7 +51,6 @@ <item name="set-mode" xsi:type="object">Magento\Indexer\Console\Command\IndexerSetModeCommand</item> <item name="show-mode" xsi:type="object">Magento\Indexer\Console\Command\IndexerShowModeCommand</item> <item name="status" xsi:type="object">Magento\Indexer\Console\Command\IndexerStatusCommand</item> - <item name="status-mview" xsi:type="object">Magento\Indexer\Console\Command\IndexerStatusMviewCommand</item> <item name="reset" xsi:type="object">Magento\Indexer\Console\Command\IndexerResetStateCommand</item> </argument> </arguments> From 709f88a712652a8f0a70893cde610d5fe6abb3e8 Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Sun, 3 Dec 2017 17:54:07 +0000 Subject: [PATCH 423/653] Update method visibility --- .../Magento/Indexer/Console/Command/IndexerStatusCommand.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php index 2d9c4bd3ccb28..f5237ea5d023b 100644 --- a/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php +++ b/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php @@ -70,7 +70,7 @@ protected function execute(InputInterface $input, OutputInterface $output) * @param Indexer\IndexerInterface $indexer * @return string */ - protected function getStatus(Indexer\IndexerInterface $indexer) + private function getStatus(Indexer\IndexerInterface $indexer) { $status = 'unknown'; switch ($indexer->getStatus()) { @@ -91,7 +91,7 @@ protected function getStatus(Indexer\IndexerInterface $indexer) * @param Mview\ViewInterface $view * @return string */ - protected function getPendingCount(Mview\ViewInterface $view) + private function getPendingCount(Mview\ViewInterface $view) { $changelog = $view->getChangelog(); From 831000b9263c1e11829fe0acf1769077f5205aab Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Sun, 3 Dec 2017 17:54:36 +0000 Subject: [PATCH 424/653] Correctly assert table output --- .../Test/Unit/Console/Command/IndexerStatusCommandTest.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php index 58a0a5b750709..27c18b1f9350d 100644 --- a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php +++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php @@ -108,9 +108,12 @@ public function testExecuteAll(array $indexers) $linesOutput = array_filter(explode(PHP_EOL, $commandTester->getDisplay())); + $spacer = '+----------------+------------------+-----------+-------------------------+---------------------+'; + $this->assertCount(8, $linesOutput, 'There should be 8 lines output. 3 Spacers, 1 header, 4 content.'); - $this->assertEquals($linesOutput[0], $linesOutput[2], "Lines 0, 2, 7 should be spacer lines"); - $this->assertEquals($linesOutput[2], $linesOutput[7], "Lines 0, 2, 6 should be spacer lines"); + $this->assertEquals($linesOutput[0], $spacer, "Lines 0, 2, 7 should be spacer lines"); + $this->assertEquals($linesOutput[2], $spacer, "Lines 0, 2, 7 should be spacer lines"); + $this->assertEquals($linesOutput[7], $spacer, "Lines 0, 2, 7 should be spacer lines"); $headerValues = array_values(array_filter(explode('|', $linesOutput[1]))); $this->assertEquals('Title', trim($headerValues[0])); From 62e67e1a654708bdb553b6489fb4199636575e9d Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Sun, 3 Dec 2017 17:55:58 +0000 Subject: [PATCH 425/653] Code style fixes --- .../Test/Unit/Console/Command/IndexerStatusCommandTest.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php index 27c18b1f9350d..1a4894faf4a91 100644 --- a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php +++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php @@ -88,8 +88,8 @@ public function testExecuteAll(array $indexers) } $indexerMocks[] = $indexerMock; - } + $this->initIndexerCollectionByItems($indexerMocks); $this->command = new IndexerStatusCommand($this->objectManagerFactory); @@ -101,8 +101,7 @@ public function testExecuteAll(array $indexers) ['helpers' => [$objectManager->getObject(TableHelper::class)]] ) ); - - + $commandTester = new CommandTester($this->command); $commandTester->execute([]); From 4af04b1c43ea8b1198ba5027500552c88a09737c Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Sun, 3 Dec 2017 17:57:34 +0000 Subject: [PATCH 426/653] Add ChangelogCounterInterface --- .../Framework/Mview/View/Changelog.php | 4 ++-- .../Mview/View/ChangelogCounterInterface.php | 22 +++++++++++++++++++ .../Mview/View/ChangelogInterface.php | 9 -------- 3 files changed, 24 insertions(+), 11 deletions(-) create mode 100644 lib/internal/Magento/Framework/Mview/View/ChangelogCounterInterface.php diff --git a/lib/internal/Magento/Framework/Mview/View/Changelog.php b/lib/internal/Magento/Framework/Mview/View/Changelog.php index 4f648d6b7d6ae..6d75ee27be14a 100644 --- a/lib/internal/Magento/Framework/Mview/View/Changelog.php +++ b/lib/internal/Magento/Framework/Mview/View/Changelog.php @@ -8,7 +8,7 @@ use Magento\Framework\App\ResourceConnection; use Magento\Framework\Phrase; -class Changelog implements ChangelogInterface +class Changelog implements ChangelogInterface, ChangelogCounterInterface { /** * Suffix for changelog table @@ -132,7 +132,7 @@ public function clear($versionId) * @return \Magento\Framework\DB\Select * @throws ChangelogTableNotExistsException */ - protected function getListSelect($fromVersionId, $toVersionId) + private function getListSelect($fromVersionId, $toVersionId) { $changelogTableName = $this->resource->getTableName($this->getName()); if (!$this->connection->isTableExists($changelogTableName)) { diff --git a/lib/internal/Magento/Framework/Mview/View/ChangelogCounterInterface.php b/lib/internal/Magento/Framework/Mview/View/ChangelogCounterInterface.php new file mode 100644 index 0000000000000..5d92ad1c3de79 --- /dev/null +++ b/lib/internal/Magento/Framework/Mview/View/ChangelogCounterInterface.php @@ -0,0 +1,22 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Framework\Mview\View; + +/** + * Interface \Magento\Framework\Mview\View\ChangelogCounterInterface + * + */ +interface ChangelogCounterInterface +{ + /** + * Retrieve the count of entity ids in the range [$fromVersionId..$toVersionId] + * + * @param $fromVersionId + * @param $toVersionId + * @return mixed + */ + public function getListSize($fromVersionId, $toVersionId); +} diff --git a/lib/internal/Magento/Framework/Mview/View/ChangelogInterface.php b/lib/internal/Magento/Framework/Mview/View/ChangelogInterface.php index da115ecdb83ee..b00c1ca3a2e33 100644 --- a/lib/internal/Magento/Framework/Mview/View/ChangelogInterface.php +++ b/lib/internal/Magento/Framework/Mview/View/ChangelogInterface.php @@ -42,15 +42,6 @@ public function clear($versionId); */ public function getList($fromVersionId, $toVersionId); - /** - * Retrieve the count of entity ids in the range [$fromVersionId..$toVersionId] - * - * @param $fromVersionId - * @param $toVersionId - * @return mixed - */ - public function getListSize($fromVersionId, $toVersionId); - /** * Get maximum version_id from changelog * From 448bfec53114ae82db4eae41238e09a36885d6fd Mon Sep 17 00:00:00 2001 From: Atish Goswami <atishgoswami@gmail.com> Date: Mon, 4 Dec 2017 05:11:38 +0530 Subject: [PATCH 427/653] Added correction for og:type content value --- .../frontend/templates/product/view/opengraph/general.phtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/opengraph/general.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/opengraph/general.phtml index b1e46776af465..a2b91a5eeb99f 100644 --- a/app/code/Magento/Catalog/view/frontend/templates/product/view/opengraph/general.phtml +++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/opengraph/general.phtml @@ -9,7 +9,7 @@ /** @var $block \Magento\Catalog\Block\Product\View */ ?> -<meta property="og:type" content="og:product" /> +<meta property="og:type" content="product" /> <meta property="og:title" content="<?= $block->escapeHtmlAttr($block->stripTags($block->getProduct()->getName())) ?>" /> <meta property="og:image" content="<?= $block->escapeUrl($block->getImage($block->getProduct(), 'product_base_image')->getImageUrl()) ?>" /> <meta property="og:description" content="<?= $block->escapeHtmlAttr($block->stripTags($block->getProduct()->getShortDescription())) ?>" /> From 700fe22627057e8a982dbb68fabe1c289b99c666 Mon Sep 17 00:00:00 2001 From: Ihor Sviziev <ihor-sviziev@users.noreply.github.com> Date: Mon, 4 Dec 2017 09:19:14 +0200 Subject: [PATCH 428/653] Add command to view mview state and queue Use private method visibility instead of protected in test --- .../Test/Unit/Console/Command/IndexerStatusCommandTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php index 1a4894faf4a91..45b3ec3471b09 100644 --- a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php +++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php @@ -25,7 +25,7 @@ class IndexerStatusCommandTest extends AbstractIndexerCommandCommonSetup * @param array $data * @return mixed */ - protected function attachViewToIndexerMock($indexerMock, array $data) + private function attachViewToIndexerMock($indexerMock, array $data) { /** @var \Magento\Framework\Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject $stub */ $changelog = $this->getMockBuilder(\Magento\Framework\Mview\View\Changelog::class) From ff0e2018e11dc221b3d81b38296d320d715e930c Mon Sep 17 00:00:00 2001 From: Oscar Recio <osrecio@gmail.com> Date: Sun, 3 Dec 2017 22:54:23 +0100 Subject: [PATCH 429/653] Set Current Store from Store Code --- app/code/Magento/Store/App/Request/PathInfoProcessor.php | 2 +- .../Store/Test/Unit/App/Request/PathInfoProcessorTest.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Store/App/Request/PathInfoProcessor.php b/app/code/Magento/Store/App/Request/PathInfoProcessor.php index a38ea6d1272e8..3fa78dc94aa35 100644 --- a/app/code/Magento/Store/App/Request/PathInfoProcessor.php +++ b/app/code/Magento/Store/App/Request/PathInfoProcessor.php @@ -44,7 +44,7 @@ public function process(\Magento\Framework\App\RequestInterface $request, $pathI if ($store->isUseStoreInUrl()) { if (!$request->isDirectAccessFrontendName($storeCode) && $storeCode != Store::ADMIN_CODE) { - $this->storeManager->setCurrentStore($storeCode); + $this->storeManager->setCurrentStore($store->getCode()); $pathInfo = '/' . (isset($pathParts[1]) ? $pathParts[1] : ''); return $pathInfo; } elseif (!empty($storeCode)) { diff --git a/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php b/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php index f2bd401cea3fb..7d2fb54014967 100644 --- a/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php +++ b/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php @@ -47,6 +47,7 @@ public function testProcessIfStoreExistsAndIsNotDirectAcccessToFrontName() )->with( 'storeCode' )->willReturn($store); + $store->expects($this->once())->method('getCode')->will($this->returnValue('storeCode')); $store->expects($this->once())->method('isUseStoreInUrl')->will($this->returnValue(true)); $this->_requestMock->expects( $this->once() From dd4dec8618cd4b514df76145681a3aff71f4a1dd Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Mon, 4 Dec 2017 11:38:02 +0200 Subject: [PATCH 430/653] 12110: Missing cascade into attribute set deletion. --- app/code/Magento/Catalog/Setup/UpgradeSchema.php | 6 ++---- .../Model/AttributeSetRepository/RemoveProductsTest.php | 4 +--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Catalog/Setup/UpgradeSchema.php b/app/code/Magento/Catalog/Setup/UpgradeSchema.php index ae09ff1113608..78106e3ff3a26 100755 --- a/app/code/Magento/Catalog/Setup/UpgradeSchema.php +++ b/app/code/Magento/Catalog/Setup/UpgradeSchema.php @@ -714,11 +714,9 @@ private function addReplicaTable(SchemaSetupInterface $setup, $existingTable, $r */ private function removeAttributeSetRelation(SchemaSetupInterface $setup) { - $productTable = $setup->getTable('catalog_product_entity'); - $attributeSetTable = $setup->getTable('eav_attribute_set'); $setup->getConnection()->dropForeignKey( - $productTable, - $setup->getFkName($productTable, 'attribute_set_id', $attributeSetTable, 'attribute_set_id') + $setup->getTable('catalog_product_entity'), + $setup->getFkName('catalog_product_entity', 'attribute_set_id', 'eav_attribute_set', 'attribute_set_id') ); } } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php index 724e2e62f230d..2896716a01a04 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php @@ -4,11 +4,10 @@ * See COPYING.txt for license details. */ -namespace Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository; +namespace Magento\Catalog\Plugin\Model\AttributeSetRepository; use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; -use Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts; use Magento\Eav\Api\AttributeSetRepositoryInterface; use Magento\Eav\Model\Entity\Attribute\Set; use Magento\TestFramework\Helper\Bootstrap; @@ -36,7 +35,6 @@ public function testRemoveProductsIsRegistered() * Test related to given attribute set products will be removed, if attribute set will be deleted. * * @magentoDataFixture Magento/Catalog/_files/attribute_set_with_product.php - * @magentoDbIsolation enabled */ public function testAroundDelete() { From c7a6c5669660a1dfb909d21a4a7ef70d0d09b8ff Mon Sep 17 00:00:00 2001 From: Volodymyr Kublytskyi <vkublytskyi@magento.com> Date: Mon, 4 Dec 2017 13:02:03 +0200 Subject: [PATCH 431/653] MAGETWO-83373: Fix for issue 9633 500 error on setup wizard with memcache #11608 - fixed test failures --- .../Magento/Framework/Session/ConfigTest.php | 53 ++++++++++--------- .../Magento/Framework/Session/Config.php | 14 ++--- .../Session/Test/Unit/ConfigTest.php | 27 ++++++---- 3 files changed, 53 insertions(+), 41 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Framework/Session/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Framework/Session/ConfigTest.php index 629089ae4d99e..573531cff960a 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Session/ConfigTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Session/ConfigTest.php @@ -36,15 +36,18 @@ protected function setUp() $sessionManager->writeClose(); } $this->deploymentConfigMock = $this->createMock(\Magento\Framework\App\DeploymentConfig::class); - - $this->deploymentConfigMock->expects($this->at(0)) - ->method('get') - ->with(Config::PARAM_SESSION_SAVE_PATH) - ->will($this->returnValue(null)); - $this->deploymentConfigMock->expects($this->at(1)) + $this->deploymentConfigMock ->method('get') - ->with(Config::PARAM_SESSION_CACHE_LIMITER) - ->will($this->returnValue($this->_cacheLimiter)); + ->willReturnCallback(function ($configPath) { + switch ($configPath) { + case Config::PARAM_SESSION_SAVE_METHOD: + return 'files'; + case Config::PARAM_SESSION_CACHE_LIMITER: + return $this->_cacheLimiter; + default: + return null; + } + }); $this->_model = $this->_objectManager->create( \Magento\Framework\Session\Config::class, @@ -83,15 +86,6 @@ public function testDefaultConfiguration() $this->assertEquals($this->_model->getSavePath(), $this->_model->getOption('save_path')); } - /** - * Unable to add integration tests for testGetLifetimePathNonDefault - * - * Error: Cannot modify header information - headers already sent - */ - public function testGetLifetimePathNonDefault() - { - } - public function testSetOptionsInvalidValue() { $preValue = $this->_model->getOptions(); @@ -280,16 +274,27 @@ public function testConstructorSavePath($existing, $given, $expected) $this->markTestSkipped('Cannot set session.save_path with ini_set'); } - $this->deploymentConfigMock->expects($this->at(0)) + $deploymentConfigMock = $this->createMock(\Magento\Framework\App\DeploymentConfig::class); + $deploymentConfigMock ->method('get') - ->with(Config::PARAM_SESSION_SAVE_PATH) - ->will($this->returnValue($given)); - - $this->_model = $this->_objectManager->create( + ->willReturnCallback(function ($configPath) use ($given) { + switch ($configPath) { + case Config::PARAM_SESSION_SAVE_METHOD: + return 'files'; + case Config::PARAM_SESSION_CACHE_LIMITER: + return $this->_cacheLimiter; + case Config::PARAM_SESSION_SAVE_PATH: + return $given; + default: + return null; + } + }); + + $model = $this->_objectManager->create( \Magento\Framework\Session\Config::class, - ['deploymentConfig' => $this->deploymentConfigMock] + ['deploymentConfig' => $deploymentConfigMock] ); - $this->assertEquals($expected, $this->_model->getOption('save_path')); + $this->assertEquals($expected, $model->getOption('save_path')); if ($sessionSavePath != ini_get('session.save_path')) { ini_set('session.save_path', $sessionSavePath); diff --git a/lib/internal/Magento/Framework/Session/Config.php b/lib/internal/Magento/Framework/Session/Config.php index 73a5eb26df433..053bd3e7fd6b9 100644 --- a/lib/internal/Magento/Framework/Session/Config.php +++ b/lib/internal/Magento/Framework/Session/Config.php @@ -133,14 +133,14 @@ public function __construct( if ($savePath) { $this->setSavePath($savePath); } - /** - * Session save handler - memcache,files,etc - */ - $saveHandler=$deploymentConfig->get(self::PARAM_SESSION_SAVE_METHOD); - if ($saveHandler) { - $this->setOption('session.save_handler', $saveHandler); - } + /** + * Session save handler - memcache, files, etc + */ + $saveHandler = $deploymentConfig->get(self::PARAM_SESSION_SAVE_METHOD); + if ($saveHandler) { + $this->setOption('session.save_handler', $saveHandler); + } /** * Session cache limiter diff --git a/lib/internal/Magento/Framework/Session/Test/Unit/ConfigTest.php b/lib/internal/Magento/Framework/Session/Test/Unit/ConfigTest.php index 66fc12b493090..12e28cdb3970d 100644 --- a/lib/internal/Magento/Framework/Session/Test/Unit/ConfigTest.php +++ b/lib/internal/Magento/Framework/Session/Test/Unit/ConfigTest.php @@ -350,33 +350,36 @@ public function constructorDataProvider() true, true, [ - 'session.cache_limiter' => 'files', + 'session.cache_limiter' => 'private_no_expire', 'session.cookie_lifetime' => 7200, 'session.cookie_path' => '/', 'session.cookie_domain' => 'init.host', 'session.cookie_httponly' => false, 'session.cookie_secure' => false, + 'session.save_handler' => 'files' ], ], 'all invalid' => [ true, false, [ - 'session.cache_limiter' => 'files', + 'session.cache_limiter' => 'private_no_expire', 'session.cookie_httponly' => false, 'session.cookie_secure' => false, + 'session.save_handler' => 'files' ], ], 'invalid_valid' => [ false, true, [ - 'session.cache_limiter' => 'files', + 'session.cache_limiter' => 'private_no_expire', 'session.cookie_lifetime' => 3600, 'session.cookie_path' => '/', 'session.cookie_domain' => 'init.host', 'session.cookie_httponly' => false, 'session.cookie_secure' => false, + 'session.save_handler' => 'files' ], ], ]; @@ -429,14 +432,18 @@ protected function getModel($validator) ->will($this->returnValue($dirMock)); $deploymentConfigMock = $this->createMock(\Magento\Framework\App\DeploymentConfig::class); - $deploymentConfigMock->expects($this->at(0)) + $deploymentConfigMock ->method('get') - ->with(Config::PARAM_SESSION_SAVE_PATH) - ->will($this->returnValue(null)); - $deploymentConfigMock->expects($this->at(1)) - ->method('get') - ->with(Config::PARAM_SESSION_CACHE_LIMITER) - ->will($this->returnValue('files')); + ->willReturnCallback(function ($configPath) { + switch ($configPath) { + case Config::PARAM_SESSION_SAVE_METHOD: + return 'files'; + case Config::PARAM_SESSION_CACHE_LIMITER: + return 'private_no_expire'; + default: + return null; + } + }); $this->config = $this->helper->getObject( \Magento\Framework\Session\Config::class, From 3143bbb0289d82b0da5a6bccdb779802323d670f Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Mon, 4 Dec 2017 13:16:08 +0200 Subject: [PATCH 432/653] 12110: Missing cascade into attribute set deletion. --- .../Model/AttributeSetRepository/RemoveProducts.php | 7 +++---- .../Model/AttributeSetRepository/RemoveProductsTest.php | 8 ++------ .../Model/AttributeSetRepository/RemoveProductsTest.php | 2 +- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php b/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php index bc6de17f90cfe..342b703ded0a5 100644 --- a/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php +++ b/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php @@ -37,21 +37,20 @@ public function __construct(CollectionFactory $collectionFactory) * Delete related to specific attribute set products, if attribute set was removed successfully. * * @param AttributeSetRepositoryInterface $subject - * @param \Closure $proceed + * @param bool $result * @param AttributeSetInterface $attributeSet * @return bool * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function aroundDelete( + public function afterDelete( AttributeSetRepositoryInterface $subject, - \Closure $proceed, + bool $result, AttributeSetInterface $attributeSet ) { /** @var Collection $productCollection */ $productCollection = $this->collectionFactory->create(); $productCollection->addFieldToFilter('attribute_set_id', ['eq' => $attributeSet->getId()]); - $result = $proceed($attributeSet); $productCollection->delete(); return $result; diff --git a/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php index a8eb757646e74..712aeba59dffe 100644 --- a/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php @@ -50,7 +50,7 @@ protected function setUp() /** * Test plugin will delete all related products for given attribute set. */ - public function testAroundDelete() + public function testAfterDelete() { $attributeSetId = '1'; @@ -73,10 +73,6 @@ public function testAroundDelete() ->disableOriginalConstructor() ->getMockForAbstractClass(); - $proceed = function () { - return true; - }; - /** @var AttributeSetInterface|\PHPUnit_Framework_MockObject_MockObject $attributeSet */ $attributeSet = $this->getMockBuilder(AttributeSetInterface::class) ->setMethods(['getId']) @@ -86,6 +82,6 @@ public function testAroundDelete() ->method('getId') ->willReturn($attributeSetId); - $this->testSubject->aroundDelete($attributeSetRepository, $proceed, $attributeSet); + self::assertTrue($this->testSubject->afterDelete($attributeSetRepository, true, $attributeSet)); } } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php index 2896716a01a04..4e8eaf70824db 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php @@ -36,7 +36,7 @@ public function testRemoveProductsIsRegistered() * * @magentoDataFixture Magento/Catalog/_files/attribute_set_with_product.php */ - public function testAroundDelete() + public function testAfterDelete() { $attributeSet = Bootstrap::getObjectManager()->get(Set::class); $attributeSet->load('empty_attribute_set', 'attribute_set_name'); From 9df89df5572afd0c4ee98d04321e57213b063951 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@magento.com> Date: Mon, 4 Dec 2017 15:05:46 +0200 Subject: [PATCH 433/653] magento/magento2#12167 --- app/code/Magento/Catalog/Setup/UpgradeSchema.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Catalog/Setup/UpgradeSchema.php b/app/code/Magento/Catalog/Setup/UpgradeSchema.php index 78106e3ff3a26..dfaa6a110e823 100755 --- a/app/code/Magento/Catalog/Setup/UpgradeSchema.php +++ b/app/code/Magento/Catalog/Setup/UpgradeSchema.php @@ -21,6 +21,7 @@ class UpgradeSchema implements UpgradeSchemaInterface /** * {@inheritdoc} * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context) { From c14e9e36612a40f3daff270a4e321234f8d3377a Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Mon, 4 Dec 2017 15:13:49 +0200 Subject: [PATCH 434/653] 12110: Missing cascade into attribute set deletion. --- app/code/Magento/Catalog/Setup/UpgradeSchema.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/code/Magento/Catalog/Setup/UpgradeSchema.php b/app/code/Magento/Catalog/Setup/UpgradeSchema.php index 78106e3ff3a26..d08108d1fc22b 100755 --- a/app/code/Magento/Catalog/Setup/UpgradeSchema.php +++ b/app/code/Magento/Catalog/Setup/UpgradeSchema.php @@ -21,6 +21,8 @@ class UpgradeSchema implements UpgradeSchemaInterface /** * {@inheritdoc} * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @SuppressWarnings(PHPMD.NPathComplexity) */ public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context) { From 8c86e807a0e47aaae7a7034973fe9ec8c66a796a Mon Sep 17 00:00:00 2001 From: Michail Slabko <mslabko@magento.com> Date: Mon, 4 Dec 2017 17:23:00 +0200 Subject: [PATCH 435/653] MAGETWO-75786: Incorrect count for category filter at layered navigation for configurable with no available options --- app/code/Magento/Catalog/Model/Category.php | 7 +- .../Category/Product/AbstractAction.php | 160 ++++++++++++------ .../Indexer/Product/Category/Action/Rows.php | 129 +++++++++++--- .../frontend/templates/navigation/left.phtml | 1 + .../Magento/CatalogInventory/Helper/Stock.php | 2 +- .../CatalogSearch/Model/Indexer/Fulltext.php | 3 +- .../Indexer/Fulltext/Action/DataProvider.php | 6 +- .../Model/Indexer/Fulltext/Action/Full.php | 23 ++- .../Model/ResourceModel/Fulltext.php | 25 +-- .../Constraint/AssertFilterProductList.php | 1 - .../Test/Constraint/AssertProductsCount.php | 99 +++++++++++ .../Test/Repository/Category.xml | 54 ++++++ .../ProductsCountInLayeredNavigationTest.php | 121 +++++++++++++ .../ProductsCountInLayeredNavigationTest.xml | 29 ++++ .../Model/Indexer/FulltextTest.php | 23 +++ ...product_configurable_with_single_child.php | 101 +++++++++++ ...onfigurable_with_single_child_rollback.php | 34 ++++ .../Framework/Indexer/CacheContext.php | 5 +- 18 files changed, 722 insertions(+), 101 deletions(-) create mode 100644 dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Constraint/AssertProductsCount.php create mode 100644 dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Repository/Category.xml create mode 100644 dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.php create mode 100644 dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.xml create mode 100644 dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child.php create mode 100644 dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child_rollback.php diff --git a/app/code/Magento/Catalog/Model/Category.php b/app/code/Magento/Catalog/Model/Category.php index 571e4646f46a3..2002722684431 100644 --- a/app/code/Magento/Catalog/Model/Category.php +++ b/app/code/Magento/Catalog/Model/Category.php @@ -943,8 +943,11 @@ public function getAnchorsAbove() */ public function getProductCount() { - $count = $this->_getResource()->getProductCount($this); - $this->setData(self::KEY_PRODUCT_COUNT, $count); + if (!$this->hasData(self::KEY_PRODUCT_COUNT)) { + $count = $this->_getResource()->getProductCount($this); + $this->setData(self::KEY_PRODUCT_COUNT, $count); + } + return $this->getData(self::KEY_PRODUCT_COUNT); } diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Product/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Category/Product/AbstractAction.php index c7ddb14a7649d..f7f2c7eb5def9 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Product/AbstractAction.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Product/AbstractAction.php @@ -8,9 +8,14 @@ namespace Magento\Catalog\Model\Indexer\Category\Product; -use Magento\Framework\DB\Query\Generator as QueryGenerator; +use Magento\Catalog\Api\Data\ProductInterface; +use Magento\Catalog\Model\Product; +use Magento\Framework\App\ObjectManager; use Magento\Framework\App\ResourceConnection; +use Magento\Framework\DB\Query\Generator as QueryGenerator; +use Magento\Framework\DB\Select; use Magento\Framework\EntityManager\MetadataPool; +use Magento\Store\Model\Store; /** * Class AbstractAction @@ -45,21 +50,21 @@ abstract class AbstractAction /** * Cached non anchor categories select by store id * - * @var \Magento\Framework\DB\Select[] + * @var Select[] */ protected $nonAnchorSelects = []; /** * Cached anchor categories select by store id * - * @var \Magento\Framework\DB\Select[] + * @var Select[] */ protected $anchorSelects = []; /** * Cached all product select by store id * - * @var \Magento\Framework\DB\Select[] + * @var Select[] */ protected $productsSelects = []; @@ -119,19 +124,21 @@ abstract class AbstractAction * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\Config $config * @param QueryGenerator $queryGenerator + * @param MetadataPool|null $metadataPool */ public function __construct( \Magento\Framework\App\ResourceConnection $resource, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Config $config, - QueryGenerator $queryGenerator = null + QueryGenerator $queryGenerator = null, + MetadataPool $metadataPool = null ) { $this->resource = $resource; $this->connection = $resource->getConnection(); $this->storeManager = $storeManager; $this->config = $config; - $this->queryGenerator = $queryGenerator ?: \Magento\Framework\App\ObjectManager::getInstance() - ->get(QueryGenerator::class); + $this->queryGenerator = $queryGenerator ?: ObjectManager::getInstance()->get(QueryGenerator::class); + $this->metadataPool = $metadataPool ?: ObjectManager::getInstance()->get(MetadataPool::class); } /** @@ -188,9 +195,9 @@ protected function getMainTable() */ protected function getMainTmpTable() { - return $this->useTempTable ? $this->getTable( - self::MAIN_INDEX_TABLE . self::TEMPORARY_TABLE_SUFFIX - ) : $this->getMainTable(); + return $this->useTempTable + ? $this->getTable(self::MAIN_INDEX_TABLE . self::TEMPORARY_TABLE_SUFFIX) + : $this->getMainTable(); } /** @@ -218,24 +225,25 @@ protected function getPathFromCategoryId($categoryId) /** * Retrieve select for reindex products of non anchor categories * - * @param \Magento\Store\Model\Store $store - * @return \Magento\Framework\DB\Select + * @param Store $store + * @return Select + * @throws \Exception when metadata not found for ProductInterface */ - protected function getNonAnchorCategoriesSelect(\Magento\Store\Model\Store $store) + protected function getNonAnchorCategoriesSelect(Store $store) { if (!isset($this->nonAnchorSelects[$store->getId()])) { $statusAttributeId = $this->config->getAttribute( - \Magento\Catalog\Model\Product::ENTITY, + Product::ENTITY, 'status' )->getId(); $visibilityAttributeId = $this->config->getAttribute( - \Magento\Catalog\Model\Product::ENTITY, + Product::ENTITY, 'visibility' )->getId(); $rootPath = $this->getPathFromCategoryId($store->getRootCategoryId()); - $metadata = $this->getMetadataPool()->getMetadata(\Magento\Catalog\Api\Data\ProductInterface::class); + $metadata = $this->metadataPool->getMetadata(ProductInterface::class); $linkField = $metadata->getLinkField(); $select = $this->connection->select()->from( ['cc' => $this->getTable('catalog_category_entity')], @@ -304,12 +312,65 @@ protected function getNonAnchorCategoriesSelect(\Magento\Store\Model\Store $stor ] ); + $this->addFilteringByChildProductsToSelect($select, $store); + $this->nonAnchorSelects[$store->getId()] = $select; } return $this->nonAnchorSelects[$store->getId()]; } + /** + * Add filtering by child products to select + * + * It's used for correct handling of composite products. + * This method makes assumption that select already joins `catalog_product_entity` as `cpe`. + * + * @param Select $select + * @param Store $store + * @return void + * @throws \Exception when metadata not found for ProductInterface + */ + private function addFilteringByChildProductsToSelect(Select $select, Store $store) + { + $metadata = $this->metadataPool->getMetadata(ProductInterface::class); + $linkField = $metadata->getLinkField(); + + $statusAttributeId = $this->config->getAttribute(Product::ENTITY, 'status')->getId(); + + $select->joinLeft( + ['relation' => $this->getTable('catalog_product_relation')], + 'cpe.' . $linkField . ' = relation.parent_id', + [] + )->joinLeft( + ['relation_product_entity' => $this->getTable('catalog_product_entity')], + 'relation.child_id = relation_product_entity.entity_id', + [] + )->joinLeft( + ['child_cpsd' => $this->getTable('catalog_product_entity_int')], + 'child_cpsd.' . $linkField . ' = '. 'relation_product_entity.' . $linkField + . ' AND child_cpsd.store_id = 0' + . ' AND child_cpsd.attribute_id = ' . $statusAttributeId, + [] + )->joinLeft( + ['child_cpss' => $this->getTable('catalog_product_entity_int')], + 'child_cpss.' . $linkField . ' = '. 'relation_product_entity.' . $linkField . '' + . ' AND child_cpss.attribute_id = child_cpsd.attribute_id' + . ' AND child_cpss.store_id = ' . $store->getId(), + [] + )->where( + 'relation.child_id IS NULL OR ' + . $this->connection->getIfNullSql('child_cpss.value', 'child_cpsd.value') . ' = ?', + \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED + )->group( + [ + 'cc.entity_id', + 'ccp.product_id', + 'visibility' + ] + ); + } + /** * Check whether select ranging is needed * @@ -323,16 +384,13 @@ protected function isRangingNeeded() /** * Return selects cut by min and max * - * @param \Magento\Framework\DB\Select $select + * @param Select $select * @param string $field * @param int $range - * @return \Magento\Framework\DB\Select[] + * @return Select[] */ - protected function prepareSelectsByRange( - \Magento\Framework\DB\Select $select, - $field, - $range = self::RANGE_CATEGORY_STEP - ) { + protected function prepareSelectsByRange(Select $select, $field, $range = self::RANGE_CATEGORY_STEP) + { if ($this->isRangingNeeded()) { $iterator = $this->queryGenerator->generate( $field, @@ -353,10 +411,10 @@ protected function prepareSelectsByRange( /** * Reindex products of non anchor categories * - * @param \Magento\Store\Model\Store $store + * @param Store $store * @return void */ - protected function reindexNonAnchorCategories(\Magento\Store\Model\Store $store) + protected function reindexNonAnchorCategories(Store $store) { $selects = $this->prepareSelectsByRange($this->getNonAnchorCategoriesSelect($store), 'entity_id'); foreach ($selects as $select) { @@ -374,10 +432,10 @@ protected function reindexNonAnchorCategories(\Magento\Store\Model\Store $store) /** * Check if anchor select isset * - * @param \Magento\Store\Model\Store $store + * @param Store $store * @return bool */ - protected function hasAnchorSelect(\Magento\Store\Model\Store $store) + protected function hasAnchorSelect(Store $store) { return isset($this->anchorSelects[$store->getId()]); } @@ -385,19 +443,20 @@ protected function hasAnchorSelect(\Magento\Store\Model\Store $store) /** * Create anchor select * - * @param \Magento\Store\Model\Store $store - * @return \Magento\Framework\DB\Select + * @param Store $store + * @return Select + * @throws \Exception when metadata not found for ProductInterface or CategoryInterface * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ - protected function createAnchorSelect(\Magento\Store\Model\Store $store) + protected function createAnchorSelect(Store $store) { $isAnchorAttributeId = $this->config->getAttribute( \Magento\Catalog\Model\Category::ENTITY, 'is_anchor' )->getId(); - $statusAttributeId = $this->config->getAttribute(\Magento\Catalog\Model\Product::ENTITY, 'status')->getId(); + $statusAttributeId = $this->config->getAttribute(Product::ENTITY, 'status')->getId(); $visibilityAttributeId = $this->config->getAttribute( - \Magento\Catalog\Model\Product::ENTITY, + Product::ENTITY, 'visibility' )->getId(); $rootCatIds = explode('/', $this->getPathFromCategoryId($store->getRootCategoryId())); @@ -405,12 +464,12 @@ protected function createAnchorSelect(\Magento\Store\Model\Store $store) $temporaryTreeTable = $this->makeTempCategoryTreeIndex(); - $productMetadata = $this->getMetadataPool()->getMetadata(\Magento\Catalog\Api\Data\ProductInterface::class); - $categoryMetadata = $this->getMetadataPool()->getMetadata(\Magento\Catalog\Api\Data\CategoryInterface::class); + $productMetadata = $this->metadataPool->getMetadata(ProductInterface::class); + $categoryMetadata = $this->metadataPool->getMetadata(\Magento\Catalog\Api\Data\CategoryInterface::class); $productLinkField = $productMetadata->getLinkField(); $categoryLinkField = $categoryMetadata->getLinkField(); - return $this->connection->select()->from( + $select = $this->connection->select()->from( ['cc' => $this->getTable('catalog_category_entity')], [] )->joinInner( @@ -492,6 +551,10 @@ protected function createAnchorSelect(\Magento\Store\Model\Store $store) 'visibility' => new \Zend_Db_Expr($this->connection->getIfNullSql('cpvs.value', 'cpvd.value')), ] ); + + $this->addFilteringByChildProductsToSelect($select, $store); + + return $select; } /** @@ -586,10 +649,10 @@ protected function fillTempCategoryTreeIndex($temporaryName) /** * Retrieve select for reindex products of non anchor categories * - * @param \Magento\Store\Model\Store $store - * @return \Magento\Framework\DB\Select + * @param Store $store + * @return Select */ - protected function getAnchorCategoriesSelect(\Magento\Store\Model\Store $store) + protected function getAnchorCategoriesSelect(Store $store) { if (!$this->hasAnchorSelect($store)) { $this->anchorSelects[$store->getId()] = $this->createAnchorSelect($store); @@ -600,10 +663,10 @@ protected function getAnchorCategoriesSelect(\Magento\Store\Model\Store $store) /** * Reindex products of anchor categories * - * @param \Magento\Store\Model\Store $store + * @param Store $store * @return void */ - protected function reindexAnchorCategories(\Magento\Store\Model\Store $store) + protected function reindexAnchorCategories(Store $store) { $selects = $this->prepareSelectsByRange($this->getAnchorCategoriesSelect($store), 'entity_id'); @@ -622,22 +685,23 @@ protected function reindexAnchorCategories(\Magento\Store\Model\Store $store) /** * Get select for all products * - * @param \Magento\Store\Model\Store $store - * @return \Magento\Framework\DB\Select + * @param Store $store + * @return Select + * @throws \Exception when metadata not found for ProductInterface */ - protected function getAllProducts(\Magento\Store\Model\Store $store) + protected function getAllProducts(Store $store) { if (!isset($this->productsSelects[$store->getId()])) { $statusAttributeId = $this->config->getAttribute( - \Magento\Catalog\Model\Product::ENTITY, + Product::ENTITY, 'status' )->getId(); $visibilityAttributeId = $this->config->getAttribute( - \Magento\Catalog\Model\Product::ENTITY, + Product::ENTITY, 'visibility' )->getId(); - $metadata = $this->getMetadataPool()->getMetadata(\Magento\Catalog\Api\Data\ProductInterface::class); + $metadata = $this->metadataPool->getMetadata(ProductInterface::class); $linkField = $metadata->getLinkField(); $select = $this->connection->select()->from( @@ -726,10 +790,10 @@ protected function isIndexRootCategoryNeeded() /** * Reindex all products to root category * - * @param \Magento\Store\Model\Store $store + * @param Store $store * @return void */ - protected function reindexRootCategory(\Magento\Store\Model\Store $store) + protected function reindexRootCategory(Store $store) { if ($this->isIndexRootCategoryNeeded()) { $selects = $this->prepareSelectsByRange( diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Category/Action/Rows.php b/app/code/Magento/Catalog/Model/Indexer/Product/Category/Action/Rows.php index 1b988534328e9..bba8cf6656727 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Category/Action/Rows.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Category/Action/Rows.php @@ -6,9 +6,19 @@ namespace Magento\Catalog\Model\Indexer\Product\Category\Action; use Magento\Catalog\Model\Category; +use Magento\Catalog\Model\Config; use Magento\Catalog\Model\Product; +use Magento\Framework\App\ObjectManager; +use Magento\Framework\App\ResourceConnection; +use Magento\Framework\DB\Query\Generator as QueryGenerator; +use Magento\Framework\EntityManager\MetadataPool; +use Magento\Framework\Event\ManagerInterface as EventManagerInterface; use Magento\Framework\Indexer\CacheContext; +use Magento\Store\Model\StoreManagerInterface; +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class Rows extends \Magento\Catalog\Model\Indexer\Category\Product\AbstractAction { /** @@ -19,32 +29,103 @@ class Rows extends \Magento\Catalog\Model\Indexer\Category\Product\AbstractActio protected $limitationByProducts; /** - * @var \Magento\Framework\Indexer\CacheContext + * @var CacheContext */ private $cacheContext; + /** + * @var EventManagerInterface|null + */ + private $eventManager; + + /** + * @param ResourceConnection $resource + * @param StoreManagerInterface $storeManager + * @param Config $config + * @param QueryGenerator|null $queryGenerator + * @param MetadataPool|null $metadataPool + * @param CacheContext|null $cacheContext + * @param EventManagerInterface|null $eventManager + */ + public function __construct( + ResourceConnection $resource, + StoreManagerInterface $storeManager, + Config $config, + QueryGenerator $queryGenerator = null, + MetadataPool $metadataPool = null, + CacheContext $cacheContext = null, + EventManagerInterface $eventManager = null + ) { + parent::__construct($resource, $storeManager, $config, $queryGenerator, $metadataPool); + $this->cacheContext = $cacheContext ?: ObjectManager::getInstance()->get(CacheContext::class); + $this->eventManager = $eventManager ?: ObjectManager::getInstance()->get(EventManagerInterface::class); + } + /** * Refresh entities index * * @param int[] $entityIds * @param bool $useTempTable * @return $this + * @throws \Exception if metadataPool doesn't contain metadata for ProductInterface + * @throws \DomainException */ public function execute(array $entityIds = [], $useTempTable = false) { - $this->limitationByProducts = $entityIds; + $idsToBeReIndexed = $this->getProductIdsWithParents($entityIds); + + $this->limitationByProducts = $idsToBeReIndexed; $this->useTempTable = $useTempTable; + $affectedCategories = $this->getCategoryIdsFromIndex($idsToBeReIndexed); + $this->removeEntries(); $this->reindex(); - $this->registerProducts($entityIds); - $this->registerCategories($entityIds); + $affectedCategories = array_merge($affectedCategories, $this->getCategoryIdsFromIndex($idsToBeReIndexed)); + + $this->registerProducts($idsToBeReIndexed); + $this->registerCategories($affectedCategories); + $this->eventManager->dispatch('clean_cache_by_tags', ['object' => $this->cacheContext]); return $this; } + /** + * Get IDs of parent products by their child IDs. + * + * Returns identifiers of parent product from the catalog_product_relation. + * Please note that returned ids don't contain ids of passed child products. + * + * @param int[] $childProductIds + * @return int[] + * @throws \Exception if metadataPool doesn't contain metadata for ProductInterface + * @throws \DomainException + */ + private function getProductIdsWithParents(array $childProductIds) + { + /** @var \Magento\Framework\EntityManager\EntityMetadataInterface $metadata */ + $metadata = $this->metadataPool->getMetadata(\Magento\Catalog\Api\Data\ProductInterface::class); + $fieldForParent = $metadata->getLinkField(); + + $select = $this->connection + ->select() + ->from(['relation' => $this->getTable('catalog_product_relation')], []) + ->distinct(true) + ->where('child_id IN (?)', $childProductIds) + ->where('parent_id NOT IN (?)', $childProductIds) + ->join( + ['cpe' => $this->getTable('catalog_product_entity')], + 'relation.parent_id = cpe.' . $fieldForParent, + ['cpe.entity_id'] + ); + + $parentProductIds = $this->connection->fetchCol($select); + + return array_unique(array_merge($childProductIds, $parentProductIds)); + } + /** * Register affected products * @@ -53,26 +134,19 @@ public function execute(array $entityIds = [], $useTempTable = false) */ private function registerProducts($entityIds) { - $this->getCacheContext()->registerEntities(Product::CACHE_TAG, $entityIds); + $this->cacheContext->registerEntities(Product::CACHE_TAG, $entityIds); } /** * Register categories assigned to products * - * @param array $entityIds + * @param array $categoryIds * @return void */ - private function registerCategories($entityIds) + private function registerCategories(array $categoryIds) { - $categories = $this->connection->fetchCol( - $this->connection->select() - ->from($this->getMainTable(), ['category_id']) - ->where('product_id IN (?)', $entityIds) - ->distinct() - ); - - if ($categories) { - $this->getCacheContext()->registerEntities(Category::CACHE_TAG, $categories); + if ($categoryIds) { + $this->cacheContext->registerEntities(Category::CACHE_TAG, $categoryIds); } } @@ -98,7 +172,7 @@ protected function removeEntries() protected function getNonAnchorCategoriesSelect(\Magento\Store\Model\Store $store) { $select = parent::getNonAnchorCategoriesSelect($store); - return $select->where('ccp.product_id IN (?)', $this->limitationByProducts); + return $select->where('ccp.product_id IN (?) OR relation.child_id IN (?)', $this->limitationByProducts); } /** @@ -136,16 +210,25 @@ protected function isRangingNeeded() } /** - * Get cache context + * Returns a list of category ids which are assigned to product ids in the index * * @return \Magento\Framework\Indexer\CacheContext - * @deprecated 101.0.0 */ - private function getCacheContext() + private function getCategoryIdsFromIndex(array $productIds) { - if ($this->cacheContext === null) { - $this->cacheContext = \Magento\Framework\App\ObjectManager::getInstance()->get(CacheContext::class); + $categoryIds = $this->connection->fetchCol( + $this->connection->select() + ->from($this->getMainTable(), ['category_id']) + ->where('product_id IN (?)', $productIds) + ->distinct() + ); + $parentCategories = $categoryIds; + foreach ($categoryIds as $categoryId) { + $parentIds = explode('/', $this->getPathFromCategoryId($categoryId)); + $parentCategories = array_merge($parentCategories, $parentIds); } - return $this->cacheContext; + $categoryIds = array_unique($parentCategories); + + return $categoryIds; } } diff --git a/app/code/Magento/Catalog/view/frontend/templates/navigation/left.phtml b/app/code/Magento/Catalog/view/frontend/templates/navigation/left.phtml index fa70e15135578..01820361744e0 100644 --- a/app/code/Magento/Catalog/view/frontend/templates/navigation/left.phtml +++ b/app/code/Magento/Catalog/view/frontend/templates/navigation/left.phtml @@ -28,6 +28,7 @@ <dt><?= /* @escapeNotVerified */ __('Category') ?></dt> <dd> <ol class="items"> + <?php /** @var \Magento\Catalog\Model\Category $_category */ ?> <?php foreach ($_categories as $_category): ?> <?php if ($_category->getIsActive()): ?> <li class="item"> diff --git a/app/code/Magento/CatalogInventory/Helper/Stock.php b/app/code/Magento/CatalogInventory/Helper/Stock.php index 410e35096ee58..99a83753e4379 100644 --- a/app/code/Magento/CatalogInventory/Helper/Stock.php +++ b/app/code/Magento/CatalogInventory/Helper/Stock.php @@ -156,7 +156,7 @@ public function addIsInStockFilterToCollection($collection) $resource = $this->getStockStatusResource(); $resource->addStockDataToCollection( $collection, - !$isShowOutOfStock || $collection->getFlag('require_stock_items') + !$isShowOutOfStock ); $collection->setFlag($stockFlag, true); } diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext.php b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext.php index 9009a40c19dff..1aa3dba07fc78 100644 --- a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext.php +++ b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext.php @@ -123,11 +123,12 @@ public function execute($ids) $saveHandler = $this->indexerHandlerFactory->create([ 'data' => $this->data ]); + foreach ($storeIds as $storeId) { $dimension = $this->dimensionFactory->create(['name' => 'scope', 'value' => $storeId]); $productIds = array_unique(array_merge($ids, $this->fulltextResource->getRelationsByChild($ids))); $saveHandler->deleteIndex([$dimension], new \ArrayObject($productIds)); - $saveHandler->saveIndex([$dimension], $this->fullAction->rebuildStoreIndex($storeId, $ids)); + $saveHandler->saveIndex([$dimension], $this->fullAction->rebuildStoreIndex($storeId, $productIds)); } } diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/DataProvider.php b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/DataProvider.php index 07ff47610f330..98fb2528593e7 100644 --- a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/DataProvider.php +++ b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/DataProvider.php @@ -377,9 +377,9 @@ private function getProductTypeInstance($typeId) public function getProductChildIds($productId, $typeId) { $typeInstance = $this->getProductTypeInstance($typeId); - $relation = $typeInstance->isComposite( - $this->getProductEmulator($typeId) - ) ? $typeInstance->getRelationInfo() : false; + $relation = $typeInstance->isComposite($this->getProductEmulator($typeId)) + ? $typeInstance->getRelationInfo() + : false; if ($relation && $relation->getTable() && $relation->getParentFieldName() && $relation->getChildFieldName()) { $select = $this->connection->select()->from( diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php index 639c0e8ca66f0..a517594322da3 100644 --- a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php +++ b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php @@ -5,6 +5,7 @@ */ namespace Magento\CatalogSearch\Model\Indexer\Fulltext\Action; +use Magento\Catalog\Api\Data\ProductInterface; use Magento\CatalogSearch\Model\Indexer\Fulltext; use Magento\Framework\App\ObjectManager; use Magento\Framework\App\ResourceConnection; @@ -297,27 +298,33 @@ protected function getTable($table) /** * Get parents IDs of product IDs to be re-indexed * + * @deprecated as it not used in the class anymore and duplicates another API method + * @see \Magento\CatalogSearch\Model\ResourceModel\Fulltext::getRelationsByChild() + * * @param int[] $entityIds * @return int[] + * @throws \Exception */ protected function getProductIdsFromParents(array $entityIds) { - /** @var \Magento\Framework\EntityManager\EntityMetadataInterface $metadata */ - $metadata = $this->metadataPool->getMetadata(\Magento\Catalog\Api\Data\ProductInterface::class); - $fieldForParent = $metadata->getLinkField(); + $connection = $this->connection; + $linkField = $this->metadataPool->getMetadata(ProductInterface::class)->getLinkField(); - $select = $this->connection + $select = $connection ->select() - ->from(['relation' => $this->getTable('catalog_product_relation')], []) + ->from( + ['relation' => $this->getTable('catalog_product_relation')], + [] + ) ->distinct(true) ->where('child_id IN (?)', $entityIds) ->where('parent_id NOT IN (?)', $entityIds) ->join( ['cpe' => $this->getTable('catalog_product_entity')], - 'relation.parent_id = cpe.' . $fieldForParent, + 'relation.parent_id = cpe.' . $linkField, ['cpe.entity_id'] ); - return $this->connection->fetchCol($select); + return $connection->fetchCol($select); } /** @@ -335,7 +342,7 @@ protected function getProductIdsFromParents(array $entityIds) public function rebuildStoreIndex($storeId, $productIds = null) { if ($productIds !== null) { - $productIds = array_unique(array_merge($productIds, $this->getProductIdsFromParents($productIds))); + $productIds = array_unique($productIds); } // prepare searchable attributes diff --git a/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php index 15349e91c3fe9..e9737d0aa0599 100644 --- a/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php +++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php @@ -82,17 +82,20 @@ public function getRelationsByChild($childIds) { $connection = $this->getConnection(); $linkField = $this->metadataPool->getMetadata(ProductInterface::class)->getLinkField(); - $select = $connection->select()->from( - ['relation' => $this->getTable('catalog_product_relation')], - [] - )->join( - ['cpe' => $this->getTable('catalog_product_entity')], - 'cpe.' . $linkField . ' = relation.parent_id', - ['cpe.entity_id'] - )->where( - 'relation.child_id IN (?)', - $childIds - )->distinct(true); + $select = $connection + ->select() + ->from( + ['relation' => $this->getTable('catalog_product_relation')], + [] + )->distinct(true) + ->join( + ['cpe' => $this->getTable('catalog_product_entity')], + 'cpe.' . $linkField . ' = relation.parent_id', + ['cpe.entity_id'] + )->where( + 'relation.child_id IN (?)', + $childIds + ); return $connection->fetchCol($select); } diff --git a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Constraint/AssertFilterProductList.php b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Constraint/AssertFilterProductList.php index ea80e5ac22480..19de61c698701 100644 --- a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Constraint/AssertFilterProductList.php +++ b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Constraint/AssertFilterProductList.php @@ -3,7 +3,6 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ - namespace Magento\LayeredNavigation\Test\Constraint; use Magento\Catalog\Test\Fixture\Category; diff --git a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Constraint/AssertProductsCount.php b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Constraint/AssertProductsCount.php new file mode 100644 index 0000000000000..43b3e8d1fab05 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Constraint/AssertProductsCount.php @@ -0,0 +1,99 @@ +<?php +/** + * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\LayeredNavigation\Test\Constraint; + +use Magento\Catalog\Test\Fixture\Category; +use Magento\Catalog\Test\Page\Category\CatalogCategoryView; +use Magento\Mtf\Client\BrowserInterface; +use Magento\Mtf\Constraint\AbstractConstraint; + +/** + * Assertion that category name and products qty are correct in category layered navigation + */ +class AssertProductsCount extends AbstractConstraint +{ + /** + * Browser instance. + * + * @var BrowserInterface + */ + private $browser; + + /** + * Catalog category view page. + * + * @var CatalogCategoryView $catalogCategoryView + */ + private $catalogCategoryView; + + /** + * Assert that category name and products cont in layered navigation are correct + * + * @param CatalogCategoryView $catalogCategoryView + * @param Category $category + * @param BrowserInterface $browser + * @param string $productsCount + * @return void + */ + public function processAssert( + CatalogCategoryView $catalogCategoryView, + Category $category, + BrowserInterface $browser, + $productsCount + ) { + $this->browser = $browser; + $this->catalogCategoryView = $catalogCategoryView; + while ($category) { + $parentCategory = $category->getDataFieldConfig('parent_id')['source']->getParentCategory(); + if ($parentCategory && $parentCategory->getData('is_anchor') == 'No') { + $this->openCategory($parentCategory); + \PHPUnit_Framework_Assert::assertTrue( + $this->catalogCategoryView->getLayeredNavigationBlock()->isCategoryVisible( + $category, + $productsCount + ), + 'Category ' . $category->getName() . ' is absent in Layered Navigation or products count is wrong' + ); + } + $category = $parentCategory; + } + } + + /** + * Open category. + * + * @param Category $category + * @return void + */ + private function openCategory(Category $category) + { + $categoryUrlKey = []; + + while ($category) { + $categoryUrlKey[] = $category->hasData('url_key') + ? strtolower($category->getUrlKey()) + : trim(strtolower(preg_replace('#[^0-9a-z%]+#i', '-', $category->getName())), '-'); + + $category = $category->getDataFieldConfig('parent_id')['source']->getParentCategory(); + if ($category !== null && 1 == $category->getParentId()) { + $category = null; + } + } + $categoryUrlKey = $_ENV['app_frontend_url'] . implode('/', array_reverse($categoryUrlKey)) . '.html'; + + $this->browser->open($categoryUrlKey); + } + + /** + * Assert success message that category is present in layered navigation and product is visible in product grid. + * + * @return string + */ + public function toString() + { + return 'Category is present in layered navigation and product is visible in product grid.'; + } +} diff --git a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Repository/Category.xml b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Repository/Category.xml new file mode 100644 index 0000000000000..4d463f0b93605 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Repository/Category.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" ?> +<!-- +/** + * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/Magento/Mtf/Repository/etc/repository.xsd"> + <repository class="Magento\Catalog\Test\Repository\Category"> + <dataset name="default_non_anchored_subcategory"> + <field name="name" xsi:type="string">DefaultSubcategory%isolation%</field> + <field name="url_key" xsi:type="string">default-subcategory-%isolation%</field> + <field name="parent_id" xsi:type="array"> + <item name="dataset" xsi:type="string">default_category</item> + </field> + <field name="is_active" xsi:type="string">Yes</field> + <field name="is_anchor" xsi:type="string">No</field> + <field name="include_in_menu" xsi:type="string">Yes</field> + </dataset> + + <dataset name="default_second_level_anchored_subcategory"> + <field name="name" xsi:type="string">DefaultSubcategory%isolation%</field> + <field name="url_key" xsi:type="string">default-subcategory-%isolation%</field> + <field name="parent_id" xsi:type="array"> + <item name="dataset" xsi:type="string">default_non_anchored_subcategory</item> + </field> + <field name="is_active" xsi:type="string">Yes</field> + <field name="is_anchor" xsi:type="string">Yes</field> + <field name="include_in_menu" xsi:type="string">Yes</field> + </dataset> + + <dataset name="default_third_level_non_anchored_subcategory"> + <field name="name" xsi:type="string">DefaultSubcategory%isolation%</field> + <field name="url_key" xsi:type="string">default-subcategory-%isolation%</field> + <field name="parent_id" xsi:type="array"> + <item name="dataset" xsi:type="string">default_second_level_anchored_subcategory</item> + </field> + <field name="is_active" xsi:type="string">Yes</field> + <field name="is_anchor" xsi:type="string">No</field> + <field name="include_in_menu" xsi:type="string">Yes</field> + </dataset> + + <dataset name="default_fourth_level_anchored_subcategory"> + <field name="name" xsi:type="string">DefaultSubcategory%isolation%</field> + <field name="url_key" xsi:type="string">default-subcategory-%isolation%</field> + <field name="parent_id" xsi:type="array"> + <item name="dataset" xsi:type="string">default_third_level_non_anchored_subcategory</item> + </field> + <field name="is_active" xsi:type="string">Yes</field> + <field name="is_anchor" xsi:type="string">Yes</field> + <field name="include_in_menu" xsi:type="string">Yes</field> + </dataset> + </repository> +</config> diff --git a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.php b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.php new file mode 100644 index 0000000000000..32ad64d6deca8 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.php @@ -0,0 +1,121 @@ +<?php +/** + * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\LayeredNavigation\Test\TestCase; + +use Magento\Catalog\Test\Fixture\Category; +use Magento\Mtf\TestCase\Injectable; +use Magento\Catalog\Test\Page\Adminhtml\CatalogProductEdit; +use Magento\Catalog\Test\Page\Adminhtml\CatalogProductIndex; +use Magento\Mtf\Fixture\FixtureFactory; + +/** + * Preconditions: + * 1. Create four categories assigned in ascending order (Default Category->first->second->third->fourth) + * first and third categories should not be anchored, second and fourth categories should be anchored + * 2. Create configurable product with two configurable options and assign it to category "fourth" + * + * Steps: + * 1. Disable configurable options via massaction or from edit product page + * 2. Open created non anchored categories on frontend + * 3. Perform assertions + * + * @group Layered_Navigation + * @ZephyrId MAGETWO-82891 + */ +class ProductsCountInLayeredNavigationTest extends Injectable +{ + /** + * Product page with a grid + * + * @var CatalogProductIndex + */ + protected $catalogProductIndex; + + /** + * Page to update a product + * + * @var CatalogProductEdit + */ + protected $editProductPage; + + /** + * Fixture factory + * + * @var FixtureFactory + */ + protected $fixtureFactory; + + /** + * Injection data + * + * @param CatalogProductIndex $catalogProductIndex + * @param CatalogProductEdit $editProductPage + * @param FixtureFactory $fixtureFactory + * @return void + */ + public function __inject( + CatalogProductIndex $catalogProductIndex, + CatalogProductEdit $editProductPage, + FixtureFactory $fixtureFactory + ) { + $this->catalogProductIndex = $catalogProductIndex; + $this->editProductPage = $editProductPage; + $this->fixtureFactory = $fixtureFactory; + } + + /** + * Test category name and products count displaying in layered navigation after configurable options disabling + * + * @param Category $category + * @param boolean $disableFromProductsGreed + * @return array + */ + public function test( + Category $category, + $disableFromProductsGreed = true + ) { + // Preconditions + $category->persist(); + // Steps + $products = $category->getDataFieldConfig('category_products')['source']->getProducts(); + $configurableOptions = []; + /** @var \Magento\ConfigurableProduct\Test\Fixture\ConfigurableProduct\ $product */ + foreach ($products as $product) { + $configurableOptions = array_merge( + $configurableOptions, + $product->getConfigurableAttributesData()['matrix'] + ); + } + // Disable configurable options + if ($disableFromProductsGreed) { + $this->catalogProductIndex->open(); + $this->catalogProductIndex->getProductGrid()->massaction( + array_map( + function ($assignedProduct) { + return ['sku' => $assignedProduct['sku']]; + }, + $configurableOptions + ), + ['Change status' => 'Disable'] + ); + } else { + $productToDisable = $this->fixtureFactory->createByCode( + 'catalogProductSimple', + ['data' => ['status' => 'No']] + ); + foreach ($configurableOptions as $configurableOption) { + $filter = ['sku' => $configurableOption['sku']]; + $this->catalogProductIndex->open(); + $this->catalogProductIndex->getProductGrid()->searchAndOpen($filter); + $this->editProductPage->getProductForm()->fill($productToDisable); + $this->editProductPage->getFormPageActions()->save(); + } + } + return [ + 'products' => $configurableOptions + ]; + } +} diff --git a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.xml b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.xml new file mode 100644 index 0000000000000..a832163ceea55 --- /dev/null +++ b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/** + * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> +<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd"> + <testCase name="Magento\LayeredNavigation\Test\TestCase\ProductsCountInLayeredNavigationTest" summary="Check configurable products count in child categories of non-anchor category" ticketId="MAGETWO-82891"> + <variation name="ProductsCountInLayeredNavigationTestVariation1" summary="Check configurable products count with disabled by massaction products"> + <data name="runReindex" xsi:type="boolean">true</data> + <data name="flushCache" xsi:type="boolean">true</data> + <data name="category/dataset" xsi:type="string">default_fourth_level_anchored_subcategory</data> + <data name="category/data/category_products/dataset" xsi:type="string">configurableProduct::product_with_size</data> + <data name="productsCount" xsi:type="string">0</data> + <data name="disableFromProductsGreed" xsi:type="boolean">true</data> + <constraint name="Magento\LayeredNavigation\Test\Constraint\AssertProductsCount" /> + </variation> + <variation name="ProductsCountInLayeredNavigationTestVariation2" summary="Check configurable products count with disabled from edit page products"> + <data name="runReindex" xsi:type="boolean">true</data> + <data name="flushCache" xsi:type="boolean">true</data> + <data name="category/dataset" xsi:type="string">default_fourth_level_anchored_subcategory</data> + <data name="category/data/category_products/dataset" xsi:type="string">configurableProduct::product_with_size</data> + <data name="productsCount" xsi:type="string">0</data> + <data name="disableFromProductsGreed" xsi:type="boolean">false</data> + <constraint name="Magento\LayeredNavigation\Test\Constraint\AssertProductsCount" /> + </variation> + </testCase> +</config> diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php index 29d1547f2d872..56269bca47097 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php @@ -186,6 +186,29 @@ public function testReindexRowAfterDelete() $this->assertCount(4, $products); } + /** + * Test the case when the last child product of the configurable becomes disabled/out of stock. + * + * Such behavior should enforce parent product to be deleted from the index as its latest child become unavailable + * and the configurable cannot be sold anymore. + * + * @magentoAppArea adminhtml + * @magentoDataFixture Magento/CatalogSearch/_files/product_configurable_with_single_child.php + */ + public function testReindexParentProductWhenChildBeingDisabled() + { + $this->indexer->reindexAll(); + + $products = $this->search('Configurable'); + $this->assertCount(1, $products); + + $childProduct = $this->getProductBySku('configurable_option_single_child'); + $childProduct->setStatus(Product\Attribute\Source\Status::STATUS_DISABLED)->save(); + + $products = $this->search('Configurable'); + $this->assertCount(0, $products); + } + /** * Search the text and return result collection * diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child.php new file mode 100644 index 0000000000000..a1e1c30323c5b --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child.php @@ -0,0 +1,101 @@ +<?php +/** + * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Catalog\Model\Product; +use Magento\Catalog\Model\Product\Attribute\Source\Status; +use Magento\Catalog\Model\Product\Type; +use Magento\Catalog\Model\Product\Visibility; +use Magento\Catalog\Setup\CategorySetup; +use Magento\CatalogInventory\Api\Data\StockItemInterface; +use Magento\ConfigurableProduct\Helper\Product\Options\Factory; +use Magento\ConfigurableProduct\Model\Product\Type\Configurable; +use Magento\Eav\Api\Data\AttributeOptionInterface; +use Magento\TestFramework\Helper\Bootstrap; + +Bootstrap::getInstance()->reinitialize(); + +require __DIR__ . '/../../../Magento/ConfigurableProduct/_files/configurable_attribute.php'; + +/** @var ProductRepositoryInterface $productRepository */ +$productRepository = Bootstrap::getObjectManager() + ->create(ProductRepositoryInterface::class); + +/** @var $installer CategorySetup */ +$installer = Bootstrap::getObjectManager()->create(CategorySetup::class); + +/* Create simple products per each option value*/ +/** @var AttributeOptionInterface[] $options */ +$options = $attribute->getOptions(); + +$attributeValues = []; +$attributeSetId = $installer->getAttributeSetId('catalog_product', 'Default'); +$productsSku = [1410]; +array_shift($options); //remove the first option which is empty + +$option = reset($options); + +/** @var $childProduct Product */ +$childProduct = Bootstrap::getObjectManager()->create(Product::class); +$productSku = array_shift($productsSku); +$childProduct->setTypeId(Type::TYPE_SIMPLE) + ->setAttributeSetId($attributeSetId) + ->setName('Configurable Product Option' . $option->getLabel()) + ->setSku('configurable_option_single_child') + ->setPrice(11) + ->setTestConfigurable($option->getValue()) + ->setVisibility(Visibility::VISIBILITY_NOT_VISIBLE) + ->setStatus(Status::STATUS_ENABLED); +$childProduct = $productRepository->save($childProduct); + +/** @var StockItemInterface $stockItem */ +$stockItem = $childProduct->getExtensionAttributes()->getStockItem(); +$stockItem->setUseConfigManageStock(1)->setIsInStock(true)->setQty(100)->setIsQtyDecimal(0); + +$childProduct = $productRepository->save($childProduct); + +$attributeValues[] = [ + 'label' => 'test', + 'attribute_id' => $attribute->getId(), + 'value_index' => $option->getValue(), +]; + +/** @var $product Product */ +$configurableProduct = Bootstrap::getObjectManager()->create(Product::class); + +/** @var Factory $optionsFactory */ +$optionsFactory = Bootstrap::getObjectManager()->create(Factory::class); + +$configurableAttributesData = [ + [ + 'attribute_id' => $attribute->getId(), + 'code' => $attribute->getAttributeCode(), + 'label' => $attribute->getStoreLabel(), + 'position' => '0', + 'values' => $attributeValues, + ], +]; + +$configurableOptions = $optionsFactory->create($configurableAttributesData); + +$extensionConfigurableAttributes = $configurableProduct->getExtensionAttributes(); +$extensionConfigurableAttributes->setConfigurableProductOptions($configurableOptions); +$extensionConfigurableAttributes->setConfigurableProductLinks([$childProduct->getId()]); + +$configurableProduct->setExtensionAttributes($extensionConfigurableAttributes); + +$configurableProduct->setTypeId(Configurable::TYPE_CODE) + ->setAttributeSetId($attributeSetId) + ->setName('Configurable Product with single child') + ->setSku('configurable_with_single_child') + ->setVisibility(Visibility::VISIBILITY_BOTH) + ->setStatus(Status::STATUS_ENABLED); +$configurableProduct = $productRepository->save($configurableProduct); + +/** @var StockItemInterface $stockItem */ +$stockItem = $configurableProduct->getExtensionAttributes()->getStockItem(); +$stockItem->setUseConfigManageStock(1)->setIsInStock(1); + +$productRepository->save($configurableProduct); diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child_rollback.php new file mode 100644 index 0000000000000..bc27505ac5148 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child_rollback.php @@ -0,0 +1,34 @@ +<?php +/** + * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +use Magento\Catalog\Api\Data\ProductInterface; +use Magento\Framework\Api\SearchCriteriaBuilder; +use Magento\TestFramework\Helper\Bootstrap; + +$objectManager = Bootstrap::getObjectManager(); + +/** @var \Magento\Framework\Registry $registry */ +$registry = $objectManager->get(\Magento\Framework\Registry::class); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', true); + +/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ +$productRepository = Bootstrap::getObjectManager() + ->get(\Magento\Catalog\Api\ProductRepositoryInterface::class); + +$productSkus = ['configurable_option_single_child', 'configurable_with_single_child']; +/** @var SearchCriteriaBuilder $searchCriteriaBuilder */ +$searchCriteriaBuilder = Bootstrap::getObjectManager()->get(SearchCriteriaBuilder::class); +$searchCriteriaBuilder->addFilter(ProductInterface::SKU, $productSkus, 'in'); +$result = $productRepository->getList($searchCriteriaBuilder->create()); +foreach ($result->getItems() as $product) { + $productRepository->delete($product); +} + +require __DIR__ . '/../../../Magento/Framework/Search/_files/configurable_attribute_rollback.php'; + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', false); diff --git a/lib/internal/Magento/Framework/Indexer/CacheContext.php b/lib/internal/Magento/Framework/Indexer/CacheContext.php index df0bed1dc1dcb..4a6964477ebd5 100644 --- a/lib/internal/Magento/Framework/Indexer/CacheContext.php +++ b/lib/internal/Magento/Framework/Indexer/CacheContext.php @@ -29,15 +29,14 @@ class CacheContext implements \Magento\Framework\DataObject\IdentityInterface */ public function registerEntities($cacheTag, $ids) { - $this->entities[$cacheTag] = - array_merge($this->getRegisteredEntity($cacheTag), $ids); + $this->entities[$cacheTag] = array_merge($this->getRegisteredEntity($cacheTag), $ids); return $this; } /** * Register entity tags * - * @param string $cacheTag + * @param array $cacheTags * @return $this */ public function registerTags($cacheTags) From ee37eb301dfeee54fe0fc302fcaa5f00d56a211b Mon Sep 17 00:00:00 2001 From: angelo983 <angelo983@gmail.com> Date: Mon, 4 Dec 2017 16:31:53 +0100 Subject: [PATCH 436/653] Update Collection.php --- .../Reports/Model/ResourceModel/Quote/Item/Collection.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php index 6e891c481aebe..e9dbfdae7a9a5 100644 --- a/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php +++ b/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php @@ -220,8 +220,10 @@ protected function _afterLoad() $orderData = $this->getOrdersData($productIds); foreach ($items as $item) { $item->setId($item->getProductId()); - $item->setPrice($productData[$item->getProductId()]['price'] * $item->getBaseToGlobalRate()); - $item->setName($productData[$item->getProductId()]['name']); + if (isset($productData[$item->getProductId()])) { + $item->setPrice($productData[$item->getProductId()]['price'] * $item->getBaseToGlobalRate()); + $item->setName($productData[$item->getProductId()]['name']); + } $item->setOrders(0); if (isset($orderData[$item->getProductId()])) { $item->setOrders($orderData[$item->getProductId()]['orders']); From 0d11498ae76c6e54c5ad23360e8dc8c049b6bdff Mon Sep 17 00:00:00 2001 From: Aria Stewart <aredridel@dinhe.net> Date: Fri, 11 Aug 2017 13:35:35 -0400 Subject: [PATCH 437/653] Fix swagger-ui on instances of Magento running on a non-standard port --- app/code/Magento/Webapi/Controller/Rest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Webapi/Controller/Rest.php b/app/code/Magento/Webapi/Controller/Rest.php index 1f8260c93c574..dc061aeea99e7 100644 --- a/app/code/Magento/Webapi/Controller/Rest.php +++ b/app/code/Magento/Webapi/Controller/Rest.php @@ -303,7 +303,7 @@ protected function processSchemaRequest() $responseBody = $this->swaggerGenerator->generate( $requestedServices, $this->_request->getScheme(), - $this->_request->getHttpHost(), + $this->_request->getHttpHost(false), $this->_request->getRequestUri() ); $this->_response->setBody($responseBody)->setHeader('Content-Type', 'application/json'); From ca50c9d411090af4e4f554d16325e8469a83930a Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Mon, 4 Dec 2017 19:06:22 +0000 Subject: [PATCH 438/653] Remove backwards breaking ChangelogCounterInterface --- .../Framework/Mview/View/Changelog.php | 18 +-------------- .../Mview/View/ChangelogCounterInterface.php | 22 ------------------- 2 files changed, 1 insertion(+), 39 deletions(-) delete mode 100644 lib/internal/Magento/Framework/Mview/View/ChangelogCounterInterface.php diff --git a/lib/internal/Magento/Framework/Mview/View/Changelog.php b/lib/internal/Magento/Framework/Mview/View/Changelog.php index 6d75ee27be14a..3b0b1bedeec22 100644 --- a/lib/internal/Magento/Framework/Mview/View/Changelog.php +++ b/lib/internal/Magento/Framework/Mview/View/Changelog.php @@ -8,7 +8,7 @@ use Magento\Framework\App\ResourceConnection; use Magento\Framework\Phrase; -class Changelog implements ChangelogInterface, ChangelogCounterInterface +class Changelog implements ChangelogInterface { /** * Suffix for changelog table @@ -169,22 +169,6 @@ public function getList($fromVersionId, $toVersionId) return $this->connection->fetchCol($select); } - /** - * Retrieve the count of entity ids in the range [$fromVersionId..$toVersionId] - * - * @param int $fromVersionId - * @param int $toVersionId - * @return int[] - * @throws ChangelogTableNotExistsException - */ - public function getListSize($fromVersionId, $toVersionId) - { - $countSelect = $this->getListSelect($fromVersionId, $toVersionId); - $countSelect->reset(\Magento\Framework\DB\Select::COLUMNS); - $countSelect->columns(new \Zend_Db_Expr(("COUNT(DISTINCT " . $this->getColumnName() . ")"))); - return $this->connection->fetchOne($countSelect); - } - /** * Get maximum version_id from changelog * @return int diff --git a/lib/internal/Magento/Framework/Mview/View/ChangelogCounterInterface.php b/lib/internal/Magento/Framework/Mview/View/ChangelogCounterInterface.php deleted file mode 100644 index 5d92ad1c3de79..0000000000000 --- a/lib/internal/Magento/Framework/Mview/View/ChangelogCounterInterface.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -namespace Magento\Framework\Mview\View; - -/** - * Interface \Magento\Framework\Mview\View\ChangelogCounterInterface - * - */ -interface ChangelogCounterInterface -{ - /** - * Retrieve the count of entity ids in the range [$fromVersionId..$toVersionId] - * - * @param $fromVersionId - * @param $toVersionId - * @return mixed - */ - public function getListSize($fromVersionId, $toVersionId); -} From 10df2ced56f7010cf274c7950d9d30a7c8db2ba3 Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Mon, 4 Dec 2017 19:08:45 +0000 Subject: [PATCH 439/653] Replace getListSize with getList This is not so performant, but as discussed in github it'll do for now. --- .../Indexer/Console/Command/IndexerStatusCommand.php | 2 +- .../Test/Unit/Console/Command/IndexerStatusCommandTest.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php b/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php index f5237ea5d023b..22acdc6f82bbc 100644 --- a/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php +++ b/app/code/Magento/Indexer/Console/Command/IndexerStatusCommand.php @@ -103,7 +103,7 @@ private function getPendingCount(Mview\ViewInterface $view) $state = $view->getState(); - $pendingCount = $changelog->getListSize($state->getVersionId(), $currentVersionId); + $pendingCount = count($changelog->getList($state->getVersionId(), $currentVersionId)); $pendingString = "<error>$pendingCount</error>"; if ($pendingCount <= 0) { diff --git a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php index 45b3ec3471b09..31513da018c6b 100644 --- a/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php +++ b/app/code/Magento/Indexer/Test/Unit/Console/Command/IndexerStatusCommandTest.php @@ -27,14 +27,14 @@ class IndexerStatusCommandTest extends AbstractIndexerCommandCommonSetup */ private function attachViewToIndexerMock($indexerMock, array $data) { - /** @var \Magento\Framework\Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject $stub */ + /** @var \Magento\Framework\Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject $changelog */ $changelog = $this->getMockBuilder(\Magento\Framework\Mview\View\Changelog::class) ->disableOriginalConstructor() ->getMock(); $changelog->expects($this->any()) - ->method('getListSize') - ->willReturn($data['view']['changelog']['list_size']); + ->method('getList') + ->willReturn(range(0, $data['view']['changelog']['list_size']-1)); /** @var \Magento\Indexer\Model\Mview\View\State|\PHPUnit_Framework_MockObject_MockObject $stateMock */ $stateMock = $this->getMockBuilder(\Magento\Indexer\Model\Mview\View\State::class) From 3d34bc85aacd57275c5dccc67d9f4a99bfac0374 Mon Sep 17 00:00:00 2001 From: Luke Rodgers <lukerodgers90@gmail.com> Date: Mon, 4 Dec 2017 19:11:34 +0000 Subject: [PATCH 440/653] Remove changes to Changelog --- .../Framework/Mview/View/Changelog.php | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/lib/internal/Magento/Framework/Mview/View/Changelog.php b/lib/internal/Magento/Framework/Mview/View/Changelog.php index 3b0b1bedeec22..91caf66228360 100644 --- a/lib/internal/Magento/Framework/Mview/View/Changelog.php +++ b/lib/internal/Magento/Framework/Mview/View/Changelog.php @@ -127,12 +127,14 @@ public function clear($versionId) } /** + * Retrieve entity ids by range [$fromVersionId..$toVersionId] + * * @param int $fromVersionId * @param int $toVersionId - * @return \Magento\Framework\DB\Select + * @return int[] * @throws ChangelogTableNotExistsException */ - private function getListSelect($fromVersionId, $toVersionId) + public function getList($fromVersionId, $toVersionId) { $changelogTableName = $this->resource->getTableName($this->getName()); if (!$this->connection->isTableExists($changelogTableName)) { @@ -152,20 +154,6 @@ private function getListSelect($fromVersionId, $toVersionId) (int)$toVersionId ); - return $select; - } - - /** - * Retrieve entity ids by range [$fromVersionId..$toVersionId] - * - * @param int $fromVersionId - * @param int $toVersionId - * @return int[] - * @throws ChangelogTableNotExistsException - */ - public function getList($fromVersionId, $toVersionId) - { - $select = $this->getListSelect($fromVersionId, $toVersionId); return $this->connection->fetchCol($select); } From b42712efbf971e621687617c9e5eefc2241cade4 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Tue, 5 Dec 2017 15:56:02 +0200 Subject: [PATCH 441/653] 7467: File Put Contents file with empty content. --- .../Framework/Filesystem/Driver/FileTest.php | 45 ++++++++++++++++++- .../Framework/Filesystem/Driver/File.php | 2 +- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Framework/Filesystem/Driver/FileTest.php b/dev/tests/integration/testsuite/Magento/Framework/Filesystem/Driver/FileTest.php index 26401c782efc4..b74d87fab3a84 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Filesystem/Driver/FileTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Filesystem/Driver/FileTest.php @@ -7,7 +7,10 @@ */ namespace Magento\Framework\Filesystem\Driver; -use Magento\Framework\Filesystem\DriverInterface; +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Filesystem; +use Magento\Framework\Filesystem\Directory\WriteInterface; +use Magento\TestFramework\Helper\Bootstrap; class FileTest extends \PHPUnit\Framework\TestCase { @@ -80,4 +83,44 @@ public function testCreateDirectory() $this->assertTrue($this->driver->createDirectory($generatedPath)); $this->assertTrue(is_dir($generatedPath)); } + + /** + * Check, driver can create file with content or without one. + * + * @dataProvider createFileDataProvider + * @param int $result + * @param string $fileName + * @param string $fileContent + * @return void + * @throws \Magento\Framework\Exception\FileSystemException + */ + public function testCreateFile(int $result, string $fileName, string $fileContent) + { + /** @var WriteInterface $directory */ + $directory = Bootstrap::getObjectManager()->get(Filesystem::class)->getDirectoryWrite(DirectoryList::VAR_DIR); + $filePath = $directory->getAbsolutePath() . '/' . $fileName; + $this->assertSame($result, $this->driver->filePutContents($filePath, $fileContent)); + $this->assertTrue($this->driver->deleteFile($filePath)); + } + + /** + * Provides test data for testCreateFile(). + * + * @return array + */ + public function createFileDataProvider() + { + return [ + 'file_with_content' => [ + 'result' => 11, + 'fileName' => 'test.txt', + 'fileContent' => 'testContent', + ], + 'empty_file' => [ + 'result' => 0, + 'filePath' => 'test.txt', + 'fileContent' => '', + ] + ]; + } } diff --git a/lib/internal/Magento/Framework/Filesystem/Driver/File.php b/lib/internal/Magento/Framework/Filesystem/Driver/File.php index 519ca21deadb2..6f9c24344f677 100644 --- a/lib/internal/Magento/Framework/Filesystem/Driver/File.php +++ b/lib/internal/Magento/Framework/Filesystem/Driver/File.php @@ -528,7 +528,7 @@ public function touch($path, $modificationTime = null) public function filePutContents($path, $content, $mode = null) { $result = @file_put_contents($this->getScheme() . $path, $content, $mode); - if (!$result) { + if ($result === false) { throw new FileSystemException( new \Magento\Framework\Phrase( 'The specified "%1" file could not be written %2', From 6227a14c301604008e4b62e061fdc482f6b66371 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko <omiroshnichenko@magento.com> Date: Tue, 5 Dec 2017 16:10:54 +0200 Subject: [PATCH 442/653] [BUGFIX] Made method public so a plugin is possible. --- .../Customer/Model/AccountConfirmation.php | 89 ++++++++++++++++++ .../Customer/Model/AccountManagement.php | 35 ++++--- app/code/Magento/Customer/Model/Customer.php | 30 ++++-- .../Unit/Model/AccountConfirmationTest.php | 93 +++++++++++++++++++ .../Test/Unit/Model/AccountManagementTest.php | 35 +++---- .../Customer/Test/Unit/Model/CustomerTest.php | 39 ++++---- .../Listing/Column/ConfirmationTest.php | 24 +++-- .../Component/Listing/Column/Confirmation.php | 44 +++++---- 8 files changed, 302 insertions(+), 87 deletions(-) create mode 100644 app/code/Magento/Customer/Model/AccountConfirmation.php create mode 100644 app/code/Magento/Customer/Test/Unit/Model/AccountConfirmationTest.php diff --git a/app/code/Magento/Customer/Model/AccountConfirmation.php b/app/code/Magento/Customer/Model/AccountConfirmation.php new file mode 100644 index 0000000000000..7d01ff0efc411 --- /dev/null +++ b/app/code/Magento/Customer/Model/AccountConfirmation.php @@ -0,0 +1,89 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Customer\Model; + +use Magento\Store\Model\ScopeInterface; +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\Registry; + +/** + * Class AccountConfirmation. + * Checks if email confirmation required for customer. + */ +class AccountConfirmation +{ + /** + * Configuration path for email confirmation. + */ + const XML_PATH_IS_CONFIRM = 'customer/create_account/confirm'; + + /** + * @var ScopeConfigInterface + */ + private $scopeConfig; + + /** + * @var Registry + */ + private $registry; + + /** + * @param ScopeConfigInterface $scopeConfig + * @param Registry $registry + */ + public function __construct( + ScopeConfigInterface $scopeConfig, + Registry $registry + ) { + $this->scopeConfig = $scopeConfig; + $this->registry = $registry; + } + + /** + * Check if accounts confirmation is required. + * + * @param int|null $websiteId + * @param int|null $customerId + * @param string $customerEmail + * @return bool + */ + public function isConfirmationRequired($websiteId, $customerId, $customerEmail): bool + { + if ($this->canSkipConfirmation($customerId, $customerEmail)) { + return false; + } + + return (bool)$this->scopeConfig->getValue( + self::XML_PATH_IS_CONFIRM, + ScopeInterface::SCOPE_WEBSITES, + $websiteId + ); + } + + /** + * Check whether confirmation may be skipped when registering using certain email address. + * + * @param int|null $customerId + * @param string $customerEmail + * @return bool + */ + private function canSkipConfirmation($customerId, $customerEmail): bool + { + if (!$customerId) { + return false; + } + + /* If an email was used to start the registration process and it is the same email as the one + used to register, then this can skip confirmation. + */ + $skipConfirmationIfEmail = $this->registry->registry("skip_confirmation_if_email"); + if (!$skipConfirmationIfEmail) { + return false; + } + + return strtolower($skipConfirmationIfEmail) === strtolower($customerEmail); + } +} diff --git a/app/code/Magento/Customer/Model/AccountManagement.php b/app/code/Magento/Customer/Model/AccountManagement.php index 03bf6361be72c..27ca2bc6bf6a3 100644 --- a/app/code/Magento/Customer/Model/AccountManagement.php +++ b/app/code/Magento/Customer/Model/AccountManagement.php @@ -89,6 +89,10 @@ class AccountManagement implements AccountManagementInterface */ const XML_PATH_FORGOT_EMAIL_IDENTITY = 'customer/password/forgot_email_identity'; + /** + * @deprecated + * @see AccountConfirmation::XML_PATH_IS_CONFIRM + */ const XML_PATH_IS_CONFIRM = 'customer/create_account/confirm'; /** @@ -298,6 +302,11 @@ class AccountManagement implements AccountManagementInterface */ private $dateTimeFactory; + /** + * @var AccountConfirmation + */ + private $accountConfirmation; + /** * @param CustomerFactory $customerFactory * @param ManagerInterface $eventManager @@ -323,7 +332,8 @@ class AccountManagement implements AccountManagementInterface * @param ObjectFactory $objectFactory * @param ExtensibleDataObjectConverter $extensibleDataObjectConverter * @param CredentialsValidator|null $credentialsValidator - * @param DateTimeFactory $dateTimeFactory + * @param DateTimeFactory|null $dateTimeFactory + * @param AccountConfirmation|null $accountConfirmation * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -351,7 +361,8 @@ public function __construct( ObjectFactory $objectFactory, ExtensibleDataObjectConverter $extensibleDataObjectConverter, CredentialsValidator $credentialsValidator = null, - DateTimeFactory $dateTimeFactory = null + DateTimeFactory $dateTimeFactory = null, + AccountConfirmation $accountConfirmation = null ) { $this->customerFactory = $customerFactory; $this->eventManager = $eventManager; @@ -379,6 +390,8 @@ public function __construct( $this->credentialsValidator = $credentialsValidator ?: ObjectManager::getInstance()->get(CredentialsValidator::class); $this->dateTimeFactory = $dateTimeFactory ?: ObjectManager::getInstance()->get(DateTimeFactory::class); + $this->accountConfirmation = $accountConfirmation ?: ObjectManager::getInstance() + ->get(AccountConfirmation::class); } /** @@ -1147,17 +1160,15 @@ protected function sendEmailTemplate( * * @param CustomerInterface $customer * @return bool + * @deprecated + * @see AccountConfirmation::isConfirmationRequired */ - public function isConfirmationRequired($customer) + protected function isConfirmationRequired($customer) { - if ($this->canSkipConfirmation($customer)) { - return false; - } - - return (bool)$this->scopeConfig->getValue( - self::XML_PATH_IS_CONFIRM, - ScopeInterface::SCOPE_WEBSITES, - $customer->getWebsiteId() + return $this->accountConfirmation->isConfirmationRequired( + $customer->getWebsiteId(), + $customer->getId(), + $customer->getEmail() ); } @@ -1166,6 +1177,8 @@ public function isConfirmationRequired($customer) * * @param CustomerInterface $customer * @return bool + * @deprecated + * @see AccountConfirmation::isConfirmationRequired */ protected function canSkipConfirmation($customer) { diff --git a/app/code/Magento/Customer/Model/Customer.php b/app/code/Magento/Customer/Model/Customer.php index 2e2260f16ff91..e0a7281776de9 100644 --- a/app/code/Magento/Customer/Model/Customer.php +++ b/app/code/Magento/Customer/Model/Customer.php @@ -18,6 +18,7 @@ use Magento\Framework\Indexer\StateInterface; use Magento\Framework\Reflection\DataObjectProcessor; use Magento\Store\Model\ScopeInterface; +use Magento\Framework\App\ObjectManager; /** * Customer model @@ -58,6 +59,10 @@ class Customer extends \Magento\Framework\Model\AbstractModel const XML_PATH_RESET_PASSWORD_TEMPLATE = 'customer/password/reset_password_template'; + /** + * @deprecated + * @see AccountConfirmation::XML_PATH_IS_CONFIRM + */ const XML_PATH_IS_CONFIRM = 'customer/create_account/confirm'; const XML_PATH_CONFIRM_EMAIL_TEMPLATE = 'customer/create_account/email_confirmation_template'; @@ -208,6 +213,11 @@ class Customer extends \Magento\Framework\Model\AbstractModel */ protected $indexerRegistry; + /** + * @var AccountConfirmation + */ + private $accountConfirmation; + /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry @@ -229,6 +239,7 @@ class Customer extends \Magento\Framework\Model\AbstractModel * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection * @param array $data + * @param AccountConfirmation|null $accountConfirmation * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ @@ -252,7 +263,8 @@ public function __construct( \Magento\Customer\Api\CustomerMetadataInterface $metadataService, \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, - array $data = [] + array $data = [], + AccountConfirmation $accountConfirmation = null ) { $this->metadataService = $metadataService; $this->_scopeConfig = $scopeConfig; @@ -269,6 +281,8 @@ public function __construct( $this->dataObjectProcessor = $dataObjectProcessor; $this->dataObjectHelper = $dataObjectHelper; $this->indexerRegistry = $indexerRegistry; + $this->accountConfirmation = $accountConfirmation ?: ObjectManager::getInstance() + ->get(AccountConfirmation::class); parent::__construct( $context, $registry, @@ -770,20 +784,14 @@ public function sendNewAccountEmail($type = 'registered', $backUrl = '', $storeI * Check if accounts confirmation is required in config * * @return bool + * @deprecated + * @see AccountConfirmation::isConfirmationRequired */ public function isConfirmationRequired() { - if ($this->canSkipConfirmation()) { - return false; - } - $websiteId = $this->getWebsiteId() ? $this->getWebsiteId() : null; - return (bool)$this->_scopeConfig->getValue( - self::XML_PATH_IS_CONFIRM, - ScopeInterface::SCOPE_WEBSITES, - $websiteId - ); + return $this->accountConfirmation->isConfirmationRequired($websiteId, $this->getId(), $this->getEmail()); } /** @@ -1156,6 +1164,8 @@ public function setIsReadonly($value) * Check whether confirmation may be skipped when registering using certain email address * * @return bool + * @deprecated + * @see AccountConfirmation::isConfirmationRequired */ protected function canSkipConfirmation() { diff --git a/app/code/Magento/Customer/Test/Unit/Model/AccountConfirmationTest.php b/app/code/Magento/Customer/Test/Unit/Model/AccountConfirmationTest.php new file mode 100644 index 0000000000000..ae246665b28ed --- /dev/null +++ b/app/code/Magento/Customer/Test/Unit/Model/AccountConfirmationTest.php @@ -0,0 +1,93 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Customer\Test\Unit\Model; + +use Magento\Customer\Model\AccountConfirmation; +use Magento\Store\Model\ScopeInterface; +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\Registry; + +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class AccountConfirmationTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var AccountConfirmation|\PHPUnit_Framework_MockObject_MockObject + */ + private $accountConfirmation; + + /** + * @var ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $scopeConfig; + + /** + * @var Registry|\PHPUnit_Framework_MockObject_MockObject + */ + private $registry; + + protected function setUp() + { + $this->scopeConfig = $this->createMock(ScopeConfigInterface::class); + $this->registry = $this->createMock(Registry::class); + + $this->accountConfirmation = new AccountConfirmation( + $this->scopeConfig, + $this->registry + ); + } + + /** + * @param $customerId + * @param $customerEmail + * @param $skipConfirmationIfEmail + * @param $isConfirmationEnabled + * @param $expected + * @dataProvider dataProviderIsConfirmationRequired + */ + public function testIsConfirmationRequired( + $customerId, + $customerEmail, + $skipConfirmationIfEmail, + $isConfirmationEnabled, + $expected + ) { + $websiteId = 1; + + $this->scopeConfig->expects($this->any()) + ->method('getValue') + ->with( + $this->accountConfirmation::XML_PATH_IS_CONFIRM, + ScopeInterface::SCOPE_WEBSITES, + $websiteId + )->willReturn($isConfirmationEnabled); + + $this->registry->expects($this->any()) + ->method('registry') + ->with('skip_confirmation_if_email') + ->willReturn($skipConfirmationIfEmail); + + self::assertEquals( + $expected, + $this->accountConfirmation->isConfirmationRequired($websiteId, $customerId, $customerEmail) + ); + } + + /** + * @return array + */ + public function dataProviderIsConfirmationRequired() + { + return [ + [null, 'customer@example.com', null, true, true], + [null, 'customer@example.com', null, false, false], + [1, 'customer@example.com', 'customer@example.com', true, false], + [1, 'customer@example.com', 'customer1@example.com', false, false], + [1, 'customer@example.com', 'customer1@example.com', true, true], + ]; + } +} diff --git a/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php b/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php index 2a6b9fe6fd4ea..fed2005ade8e2 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php @@ -6,6 +6,7 @@ namespace Magento\Customer\Test\Unit\Model; use Magento\Customer\Model\AccountManagement; +use Magento\Customer\Model\AccountConfirmation; use Magento\Customer\Model\AuthenticationInterface; use Magento\Customer\Model\EmailNotificationInterface; use Magento\Framework\App\Area; @@ -120,6 +121,11 @@ class AccountManagementTest extends \PHPUnit\Framework\TestCase */ private $dateTimeFactory; + /** + * @var AccountConfirmation|\PHPUnit_Framework_MockObject_MockObject + */ + private $accountConfirmation; + /** * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ @@ -170,6 +176,7 @@ protected function setUp() ->getMock(); $this->dateTimeFactory = $this->createMock(DateTimeFactory::class); + $this->accountConfirmation = $this->createMock(AccountConfirmation::class); $this->objectManagerHelper = new ObjectManagerHelper($this); $this->accountManagement = $this->objectManagerHelper->getObject( @@ -199,6 +206,7 @@ protected function setUp() 'objectFactory' => $this->objectFactory, 'extensibleDataObjectConverter' => $this->extensibleDataObjectConverter, 'dateTimeFactory' => $this->dateTimeFactory, + 'accountConfirmation' => $this->accountConfirmation ] ); $reflection = new \ReflectionClass(get_class($this->accountManagement)); @@ -1467,14 +1475,12 @@ public function testAuthenticate() } /** - * @param string|null $skipConfirmationIfEmail * @param int $isConfirmationRequired * @param string|null $confirmation * @param string $expected * @dataProvider dataProviderGetConfirmationStatus */ public function testGetConfirmationStatus( - $skipConfirmationIfEmail, $isConfirmationRequired, $confirmation, $expected @@ -1492,21 +1498,16 @@ public function testGetConfirmationStatus( $customerMock->expects($this->any()) ->method('getConfirmation') ->willReturn($confirmation); - $customerMock->expects($this->any()) + $customerMock->expects($this->once()) ->method('getEmail') ->willReturn($customerEmail); - $customerMock->expects($this->any()) + $customerMock->expects($this->once()) ->method('getWebsiteId') ->willReturn($websiteId); - $this->registry->expects($this->once()) - ->method('registry') - ->with('skip_confirmation_if_email') - ->willReturn($skipConfirmationIfEmail); - - $this->scopeConfig->expects($this->any()) - ->method('getValue') - ->with(AccountManagement::XML_PATH_IS_CONFIRM, ScopeInterface::SCOPE_WEBSITES, $websiteId) + $this->accountConfirmation->expects($this->once()) + ->method('isConfirmationRequired') + ->with($websiteId, $customerId, $customerEmail) ->willReturn($isConfirmationRequired); $this->customerRepository->expects($this->once()) @@ -1523,11 +1524,11 @@ public function testGetConfirmationStatus( public function dataProviderGetConfirmationStatus() { return [ - [null, 0, null, AccountManagement::ACCOUNT_CONFIRMATION_NOT_REQUIRED], - ['test1@example.com', 0, null, AccountManagement::ACCOUNT_CONFIRMATION_NOT_REQUIRED], - ['test2@example.com', 0, null, AccountManagement::ACCOUNT_CONFIRMATION_NOT_REQUIRED], - ['test2@example.com', 1, null, AccountManagement::ACCOUNT_CONFIRMED], - ['test2@example.com', 1, 'test', AccountManagement::ACCOUNT_CONFIRMATION_REQUIRED], + [0, null, AccountManagement::ACCOUNT_CONFIRMATION_NOT_REQUIRED], + [0, null, AccountManagement::ACCOUNT_CONFIRMATION_NOT_REQUIRED], + [0, null, AccountManagement::ACCOUNT_CONFIRMATION_NOT_REQUIRED], + [1, null, AccountManagement::ACCOUNT_CONFIRMED], + [1, 'test', AccountManagement::ACCOUNT_CONFIRMATION_REQUIRED], ]; } diff --git a/app/code/Magento/Customer/Test/Unit/Model/CustomerTest.php b/app/code/Magento/Customer/Test/Unit/Model/CustomerTest.php index 8b3f7875e3c97..f5b7f08d2906d 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/CustomerTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/CustomerTest.php @@ -12,7 +12,7 @@ namespace Magento\Customer\Test\Unit\Model; use Magento\Customer\Model\Customer; -use Magento\Store\Model\ScopeInterface; +use Magento\Customer\Model\AccountConfirmation; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) @@ -63,6 +63,11 @@ class CustomerTest extends \PHPUnit\Framework\TestCase */ private $dataObjectProcessor; + /** + * @var AccountConfirmation|\PHPUnit_Framework_MockObject_MockObject + */ + private $accountConfirmation; + protected function setUp() { $this->_website = $this->createMock(\Magento\Store\Model\Website::class); @@ -94,6 +99,7 @@ protected function setUp() $this->registryMock = $this->createPartialMock(\Magento\Framework\Registry::class, ['registry']); $this->_encryptor = $this->createMock(\Magento\Framework\Encryption\EncryptorInterface::class); $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $this->accountConfirmation = $this->createMock(AccountConfirmation::class); $this->_model = $helper->getObject( \Magento\Customer\Model\Customer::class, [ @@ -105,7 +111,8 @@ protected function setUp() 'attributeFactory' => $this->attributeFactoryMock, 'registry' => $this->registryMock, 'resource' => $this->resourceMock, - 'dataObjectProcessor' => $this->dataObjectProcessor + 'dataObjectProcessor' => $this->dataObjectProcessor, + 'accountConfirmation' => $this->accountConfirmation ] ); } @@ -215,32 +222,27 @@ public function isCustomerLockedDataProvider() /** * @param int $customerId * @param int $websiteId - * @param string|null $skipConfirmationIfEmail + * @param bool $isConfirmationRequired * @param bool $expected * @dataProvider dataProviderIsConfirmationRequired */ public function testIsConfirmationRequired( $customerId, $websiteId, - $skipConfirmationIfEmail, + $isConfirmationRequired, $expected ) { $customerEmail = 'test1@example.com'; - $this->registryMock->expects($this->any()) - ->method('registry') - ->with('skip_confirmation_if_email') - ->willReturn($skipConfirmationIfEmail); - - $this->_scopeConfigMock->expects($this->any()) - ->method('getValue') - ->with(Customer::XML_PATH_IS_CONFIRM, ScopeInterface::SCOPE_WEBSITES, $websiteId) - ->willReturn($expected); - $this->_model->setData('id', $customerId); $this->_model->setData('website_id', $websiteId); $this->_model->setData('email', $customerEmail); + $this->accountConfirmation->expects($this->once()) + ->method('isConfirmationRequired') + ->with($websiteId, $customerId, $customerEmail) + ->willReturn($isConfirmationRequired); + $this->assertEquals($expected, $this->_model->isConfirmationRequired()); } @@ -250,12 +252,9 @@ public function testIsConfirmationRequired( public function dataProviderIsConfirmationRequired() { return [ - [null, null, null, false], - [1, 1, null, false], - [1, 1, 'test1@example.com', false], - [1, 1, 'test2@example.com', true], - [1, 0, 'test2@example.com', true], - [1, null, 'test2@example.com', true], + [null, null, false, false], + [1, 1, true, true], + [1, null, true, true], ]; } diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ConfirmationTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ConfirmationTest.php index e55cee49b5c94..b712c0f30b430 100644 --- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ConfirmationTest.php +++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ConfirmationTest.php @@ -5,13 +5,12 @@ */ namespace Magento\Customer\Test\Unit\Ui\Component\Listing\Column; -use Magento\Customer\Model\AccountManagement; +use Magento\Customer\Model\AccountConfirmation; use Magento\Customer\Ui\Component\Listing\Column\Confirmation; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\View\Element\UiComponent\ContextInterface; use Magento\Framework\View\Element\UiComponent\Processor; use Magento\Framework\View\Element\UiComponentFactory; -use Magento\Store\Model\ScopeInterface; class ConfirmationTest extends \PHPUnit\Framework\TestCase { @@ -40,6 +39,11 @@ class ConfirmationTest extends \PHPUnit\Framework\TestCase */ protected $processor; + /** + * @var AccountConfirmation|\PHPUnit_Framework_MockObject_MockObject + */ + protected $accountConfirmation; + public function setup() { $this->processor = $this->getMockBuilder(\Magento\Framework\View\Element\UiComponent\Processor::class) @@ -60,12 +64,15 @@ public function setup() $this->scopeConfig = $this->getMockBuilder(\Magento\Framework\App\Config\ScopeConfigInterface::class) ->getMockForAbstractClass(); + $this->accountConfirmation = $this->createMock(AccountConfirmation::class); + $this->confirmation = new Confirmation( $this->context, $this->uiComponentFactory, $this->scopeConfig, [], - [] + [], + $this->accountConfirmation ); } @@ -81,12 +88,17 @@ public function testPrepareDataSource( $expected ) { $websiteId = 1; + $customerId = 1; + $customerEmail = 'customer@example.com'; $dataSource = [ 'data' => [ 'items' => [ [ + 'id_field_name' => 'entity_id', + 'entity_id' => $customerId, 'confirmation' => $confirmation, + 'email' => $customerEmail, 'website_id' => [ $websiteId, ], @@ -100,9 +112,9 @@ public function testPrepareDataSource( ->with($this->confirmation) ->willReturnSelf(); - $this->scopeConfig->expects($this->once()) - ->method('getValue') - ->with(AccountManagement::XML_PATH_IS_CONFIRM, ScopeInterface::SCOPE_WEBSITES, $websiteId) + $this->accountConfirmation->expects($this->once()) + ->method('isConfirmationRequired') + ->with($websiteId, $customerId, $customerEmail) ->willReturn($isConfirmationRequired); $this->confirmation->setData('name', 'confirmation'); diff --git a/app/code/Magento/Customer/Ui/Component/Listing/Column/Confirmation.php b/app/code/Magento/Customer/Ui/Component/Listing/Column/Confirmation.php index dcaaa665ad392..1786c52844a75 100644 --- a/app/code/Magento/Customer/Ui/Component/Listing/Column/Confirmation.php +++ b/app/code/Magento/Customer/Ui/Component/Listing/Column/Confirmation.php @@ -5,35 +5,42 @@ */ namespace Magento\Customer\Ui\Component\Listing\Column; -use Magento\Customer\Model\AccountManagement; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\View\Element\UiComponent\ContextInterface; use Magento\Framework\View\Element\UiComponentFactory; -use Magento\Store\Model\ScopeInterface; use Magento\Ui\Component\Listing\Columns\Column; +use Magento\Framework\App\ObjectManager; +use Magento\Customer\Model\AccountConfirmation; +/** + * Class Confirmation column. + */ class Confirmation extends Column { /** - * @var ScopeConfigInterface + * @var AccountConfirmation */ - private $scopeConfig; + private $accountConfirmation; /** * @param ContextInterface $context * @param UiComponentFactory $uiComponentFactory - * @param ScopeConfigInterface $scopeConfig + * @param ScopeConfigInterface $scopeConfig @deprecated * @param array $components * @param array $data + * @param AccountConfirmation $accountConfirmation + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( ContextInterface $context, UiComponentFactory $uiComponentFactory, ScopeConfigInterface $scopeConfig, array $components, - array $data + array $data, + AccountConfirmation $accountConfirmation = null ) { - $this->scopeConfig = $scopeConfig; + $this->accountConfirmation = $accountConfirmation ?: ObjectManager::getInstance() + ->get(AccountConfirmation::class); parent::__construct($context, $uiComponentFactory, $components, $data); } @@ -58,7 +65,13 @@ public function prepareDataSource(array $dataSource) */ private function getFieldLabel(array $item) { - if ($this->isConfirmationRequired($item)) { + $isConfirmationRequired = $this->accountConfirmation->isConfirmationRequired( + $item['website_id'][0], + $item[$item['id_field_name']], + $item['email'] + ); + + if ($isConfirmationRequired) { if ($item[$this->getData('name')] === null) { return __('Confirmed'); } @@ -66,19 +79,4 @@ private function getFieldLabel(array $item) } return __('Confirmation Not Required'); } - - /** - * Check if confirmation is required - * - * @param array $item - * @return bool - */ - private function isConfirmationRequired(array $item) - { - return (bool)$this->scopeConfig->getValue( - AccountManagement::XML_PATH_IS_CONFIRM, - ScopeInterface::SCOPE_WEBSITES, - $item['website_id'][0] - ); - } } From 02a09d68a1f25d50d438b48611654c4c458e1521 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@magento.com> Date: Tue, 5 Dec 2017 16:36:01 +0200 Subject: [PATCH 443/653] magento/magento2#11099 --- .../Model/ResourceModel/BookmarkRepositoryTest.php | 6 ++++-- .../Magento/Wishlist/Test/Unit/Model/ItemTest.php | 3 ++- .../App/Test/Unit/Cache/Tag/ResolverTest.php | 3 ++- .../App/Test/Unit/Cache/Tag/Strategy/DummyTest.php | 3 ++- .../App/Test/Unit/Cache/Tag/Strategy/FactoryTest.php | 3 ++- .../Test/Unit/Cache/Tag/Strategy/IdentifierTest.php | 3 ++- .../Framework/App/Test/Unit/ErrorHandlerTest.php | 3 ++- .../Framework/App/Test/Unit/SetupInfoTest.php | 3 ++- .../Magento/Framework/App/Test/Unit/ShellTest.php | 3 ++- .../Asset/MaterializationStrategy/FactoryTest.php | 3 ++- .../Cache/Test/Unit/Frontend/Adapter/ZendTest.php | 3 ++- .../Test/Unit/Generator/InterfaceGeneratorTest.php | 3 ++- .../Framework/Code/Test/Unit/Generator/IoTest.php | 3 ++- .../Test/Unit/Validator/ArgumentSequenceTest.php | 3 ++- .../Code/Test/Unit/Validator/TypeDuplicationTest.php | 3 ++- .../Config/Test/Unit/Data/ConfigDataTest.php | 3 ++- .../Magento/Framework/DB/Test/Unit/Tree/NodeTest.php | 3 ++- .../Test/Unit/Argument/Interpreter/CompositeTest.php | 3 ++- .../Filesystem/Test/Unit/DirectoryListTest.php | 3 ++- .../Image/Test/Unit/Adapter/ImageMagickTest.php | 3 ++- .../Framework/Mview/Test/Unit/View/ChangelogTest.php | 12 ++++++++---- .../Phrase/Test/Unit/Renderer/CompositeTest.php | 3 ++- .../Phrase/Test/Unit/Renderer/InlineTest.php | 3 ++- .../Phrase/Test/Unit/Renderer/TranslateTest.php | 3 ++- .../Unit/Module/Plugin/DbStatusValidatorTest.php | 2 +- .../Framework/Validator/Test/Unit/BuilderTest.php | 6 ++++-- .../Test/Unit/Constraint/Option/CallbackTest.php | 3 ++- .../View/Test/Unit/Element/TemplateTest.php | 3 ++- .../File/Collector/Override/ThemeModularTest.php | 3 ++- .../Layout/Argument/Interpreter/HelperMethodTest.php | 3 ++- .../Layout/Argument/Interpreter/NamedParamsTest.php | 3 ++- .../Unit/Layout/Argument/Interpreter/ObjectTest.php | 3 ++- .../Unit/Layout/Argument/Interpreter/OptionsTest.php | 3 ++- .../Test/Unit/Rest/Request/Deserializer/JsonTest.php | 3 ++- .../Test/Unit/Rest/Request/Deserializer/XmlTest.php | 3 ++- .../Unit/Rest/Request/DeserializerFactoryTest.php | 3 ++- .../Di/Compiler/Config/ModificationChainTest.php | 3 ++- .../Module/I18n/Dictionary/Options/ResolverTest.php | 3 ++- .../Test/Unit/Module/I18n/Dictionary/PhraseTest.php | 3 ++- .../Test/Unit/Module/I18n/Pack/GeneratorTest.php | 3 ++- .../Unit/Module/I18n/Parser/AbstractParserTest.php | 3 ++- 41 files changed, 91 insertions(+), 46 deletions(-) diff --git a/app/code/Magento/Ui/Test/Unit/Model/ResourceModel/BookmarkRepositoryTest.php b/app/code/Magento/Ui/Test/Unit/Model/ResourceModel/BookmarkRepositoryTest.php index 00a88437c8cb1..a0cec2258d658 100644 --- a/app/code/Magento/Ui/Test/Unit/Model/ResourceModel/BookmarkRepositoryTest.php +++ b/app/code/Magento/Ui/Test/Unit/Model/ResourceModel/BookmarkRepositoryTest.php @@ -94,7 +94,8 @@ public function testSaveWithException() ->method('save') ->with($this->bookmarkMock) ->willThrowException(new \Exception($exceptionMessage)); - $this->expectException(\Magento\Framework\Exception\CouldNotSaveException::class, __($exceptionMessage)); + $this->expectException(\Magento\Framework\Exception\CouldNotSaveException::class); + $this->expectExceptionMessage($exceptionMessage); $this->bookmarkRepository->save($this->bookmarkMock); } @@ -143,7 +144,8 @@ public function testDeleteWithException() ->method('delete') ->with($this->bookmarkMock) ->willThrowException(new \Exception($exceptionMessage)); - $this->expectException(\Magento\Framework\Exception\CouldNotDeleteException::class, __($exceptionMessage)); + $this->expectException(\Magento\Framework\Exception\CouldNotDeleteException::class); + $this->expectExceptionMessage($exceptionMessage); $this->assertTrue($this->bookmarkRepository->delete($this->bookmarkMock)); } diff --git a/app/code/Magento/Wishlist/Test/Unit/Model/ItemTest.php b/app/code/Magento/Wishlist/Test/Unit/Model/ItemTest.php index 95e65a1740b72..0b1057683de86 100644 --- a/app/code/Magento/Wishlist/Test/Unit/Model/ItemTest.php +++ b/app/code/Magento/Wishlist/Test/Unit/Model/ItemTest.php @@ -299,7 +299,8 @@ public function testSetAndSaveItemOptions() public function testGetProductWithException() { - $this->expectException(\Magento\Framework\Exception\LocalizedException::class, __('Cannot specify product.')); + $this->expectException(\Magento\Framework\Exception\LocalizedException::class); + $this->expectExceptionMessage('Cannot specify product.'); $this->model->getProduct(); } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/ResolverTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/ResolverTest.php index f4560ed31ae49..33b6ab7e99aed 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/ResolverTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/ResolverTest.php @@ -40,7 +40,8 @@ protected function setUp() public function testGetTagsForNotObject() { - $this->expectException(\InvalidArgumentException::class, 'Provided argument is not an object'); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Provided argument is not an object'); $this->model->getTags('some scalar'); } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/DummyTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/DummyTest.php index ad04326064587..4f072e037f74e 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/DummyTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/DummyTest.php @@ -20,7 +20,8 @@ protected function setUp() public function testGetTagsWithScalar() { - $this->expectException(\InvalidArgumentException::class, 'Provided argument is not an object'); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Provided argument is not an object'); $this->model->getTags('scalar'); } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/FactoryTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/FactoryTest.php index 8964bd70f0ba8..3e96c7ab9ca6c 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/FactoryTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/FactoryTest.php @@ -49,7 +49,8 @@ protected function setUp() public function testGetStrategyWithScalar() { - $this->expectException(\InvalidArgumentException::class, 'Provided argument is not an object'); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Provided argument is not an object'); $this->model->getStrategy('some scalar'); } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/IdentifierTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/IdentifierTest.php index d0fcf9d8a739d..4dc46d46e675e 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/IdentifierTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Tag/Strategy/IdentifierTest.php @@ -22,7 +22,8 @@ protected function setUp() public function testGetWithScalar() { - $this->expectException(\InvalidArgumentException::class, 'Provided argument is not an object'); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Provided argument is not an object'); $this->model->getTags('scalar'); } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/ErrorHandlerTest.php b/lib/internal/Magento/Framework/App/Test/Unit/ErrorHandlerTest.php index 5301255818800..daf3a4bdfab0c 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/ErrorHandlerTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/ErrorHandlerTest.php @@ -54,7 +54,8 @@ public function testHandlerException($errorNo, $errorPhrase) $errorLine = 'test_error_line'; $exceptedExceptionMessage = sprintf('%s: %s in %s on line %s', $errorPhrase, $errorStr, $errorFile, $errorLine); - $this->expectException('Exception', $exceptedExceptionMessage); + $this->expectException('Exception'); + $this->expectExceptionMessage($exceptedExceptionMessage); $this->object->handler($errorNo, $errorStr, $errorFile, $errorLine); } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/SetupInfoTest.php b/lib/internal/Magento/Framework/App/Test/Unit/SetupInfoTest.php index a209c313a0a89..3db75f7ec7fb2 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/SetupInfoTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/SetupInfoTest.php @@ -24,7 +24,8 @@ class SetupInfoTest extends \PHPUnit\Framework\TestCase */ public function testConstructorExceptions($server, $expectedError) { - $this->expectException('\InvalidArgumentException', $expectedError); + $this->expectException('\InvalidArgumentException'); + $this->expectExceptionMessage($expectedError); new SetupInfo($server); } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/ShellTest.php b/lib/internal/Magento/Framework/App/Test/Unit/ShellTest.php index 9eed1fbedd954..65ac19cbc2996 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/ShellTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/ShellTest.php @@ -69,7 +69,8 @@ public function testExecuteFailure() ); $this->driverMock->expects($this->once())->method('execute')->willReturn($response); $this->loggerMock->expects($this->once())->method('error')->with($logEntry); - $this->expectException(LocalizedException::class, "Command returned non-zero exit code:\n`$command`"); + $this->expectException(LocalizedException::class); + $this->expectExceptionMessage("Command returned non-zero exit code:\n`$command`"); $this->model->execute($command, []); } } diff --git a/lib/internal/Magento/Framework/App/Test/Unit/View/Asset/MaterializationStrategy/FactoryTest.php b/lib/internal/Magento/Framework/App/Test/Unit/View/Asset/MaterializationStrategy/FactoryTest.php index c7a2764545357..1873cc593a655 100644 --- a/lib/internal/Magento/Framework/App/Test/Unit/View/Asset/MaterializationStrategy/FactoryTest.php +++ b/lib/internal/Magento/Framework/App/Test/Unit/View/Asset/MaterializationStrategy/FactoryTest.php @@ -87,7 +87,8 @@ public function testCreateException() $factory = new Factory($this->objectManager, []); - $this->expectException('LogicException', 'No materialization strategy is supported'); + $this->expectException('LogicException'); + $this->expectExceptionMessage('No materialization strategy is supported'); $factory->create($asset); } diff --git a/lib/internal/Magento/Framework/Cache/Test/Unit/Frontend/Adapter/ZendTest.php b/lib/internal/Magento/Framework/Cache/Test/Unit/Frontend/Adapter/ZendTest.php index ee00a2154f415..129fade7b4a9c 100644 --- a/lib/internal/Magento/Framework/Cache/Test/Unit/Frontend/Adapter/ZendTest.php +++ b/lib/internal/Magento/Framework/Cache/Test/Unit/Frontend/Adapter/ZendTest.php @@ -80,7 +80,8 @@ public function proxyMethodDataProvider() */ public function testCleanException($cleaningMode, $expectedErrorMessage) { - $this->expectException('InvalidArgumentException', $expectedErrorMessage); + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage($expectedErrorMessage); $object = new \Magento\Framework\Cache\Frontend\Adapter\Zend($this->createMock(\Zend_Cache_Core::class)); $object->clean($cleaningMode); } diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/InterfaceGeneratorTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/InterfaceGeneratorTest.php index 347bc6b46ace5..0f3daa46e1ec3 100644 --- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/InterfaceGeneratorTest.php +++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/InterfaceGeneratorTest.php @@ -75,7 +75,8 @@ protected function setUp() public function testGenerate($additionalMethodsData, $expectedException, $expectedExceptionMessage) { if ($expectedException) { - $this->expectException($expectedException, $expectedExceptionMessage); + $this->expectException($expectedException); + $this->expectExceptionMessage($expectedExceptionMessage); } $methodsData = array_merge_recursive($this->methodsData, $additionalMethodsData); $this->interfaceGenerator->setClassDocBlock($this->interfaceDocBlock) diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php index bc23ef954f216..9c63de1258d15 100644 --- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php +++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php @@ -97,7 +97,8 @@ public function testWriteResultFileAlreadyExists($resultFileName, $fileExists, $ } else { $exceptionMessage = 'Some error renaming file'; $renameMockEvent = $this->throwException(new FileSystemException(new Phrase($exceptionMessage))); - $this->expectException(\Magento\Framework\Exception\FileSystemException::class, $exceptionMessage); + $this->expectException(\Magento\Framework\Exception\FileSystemException::class); + $this->expectExceptionMessage($exceptionMessage); } $this->_filesystemDriverMock->expects($this->once()) diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ArgumentSequenceTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ArgumentSequenceTest.php index d1692fd4ec012..96be42658f762 100644 --- a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ArgumentSequenceTest.php +++ b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/ArgumentSequenceTest.php @@ -51,7 +51,8 @@ public function testInvalidSequence() 'Actual : %s' . PHP_EOL; $message = sprintf($message, '\ArgumentSequence\InvalidChildClass', $expectedSequence, $actualSequence); - $this->expectException(\Magento\Framework\Exception\ValidatorException::class, $message); + $this->expectException(\Magento\Framework\Exception\ValidatorException::class); + $this->expectExceptionMessage($message); $this->_validator->validate('\ArgumentSequence\InvalidChildClass'); } } diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/TypeDuplicationTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/TypeDuplicationTest.php index 3822d148adca5..a82c88e3e18b1 100644 --- a/lib/internal/Magento/Framework/Code/Test/Unit/Validator/TypeDuplicationTest.php +++ b/lib/internal/Magento/Framework/Code/Test/Unit/Validator/TypeDuplicationTest.php @@ -49,7 +49,8 @@ public function testInvalidClass() $this->_fixturePath . PHP_EOL . 'Multiple type injection [\TypeDuplication\ArgumentBaseClass]'; - $this->expectException(\Magento\Framework\Exception\ValidatorException::class, $message); + $this->expectException(\Magento\Framework\Exception\ValidatorException::class); + $this->expectExceptionMessage($message); $this->_validator->validate('\TypeDuplication\InvalidClassWithDuplicatedTypes'); } } diff --git a/lib/internal/Magento/Framework/Config/Test/Unit/Data/ConfigDataTest.php b/lib/internal/Magento/Framework/Config/Test/Unit/Data/ConfigDataTest.php index b222f52dc738b..619135f9c7038 100644 --- a/lib/internal/Magento/Framework/Config/Test/Unit/Data/ConfigDataTest.php +++ b/lib/internal/Magento/Framework/Config/Test/Unit/Data/ConfigDataTest.php @@ -42,7 +42,8 @@ public function testSetWrongKey($key, $expectedException) $configData = new ConfigData('testKey'); - $this->expectException('InvalidArgumentException', $expectedException); + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage($expectedException); $configData->set($key, 'value'); } diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/Tree/NodeTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/Tree/NodeTest.php index 8d3623d485b89..92c901f3872f2 100644 --- a/lib/internal/Magento/Framework/DB/Test/Unit/Tree/NodeTest.php +++ b/lib/internal/Magento/Framework/DB/Test/Unit/Tree/NodeTest.php @@ -20,7 +20,8 @@ public function testConstructorWithInvalidArgumentsThrowsException( $expectedException, $expectedExceptionMessage ) { - $this->expectException($expectedException, $expectedExceptionMessage); + $this->expectException($expectedException); + $this->expectExceptionMessage($expectedExceptionMessage); new \Magento\Framework\DB\Tree\Node($data['node_data'], $data['keys']); } diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Argument/Interpreter/CompositeTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Argument/Interpreter/CompositeTest.php index 768b8d3b9efa2..bca8bb0d9347f 100644 --- a/lib/internal/Magento/Framework/Data/Test/Unit/Argument/Interpreter/CompositeTest.php +++ b/lib/internal/Magento/Framework/Data/Test/Unit/Argument/Interpreter/CompositeTest.php @@ -55,7 +55,8 @@ public function testConstructWrongInterpreter() */ public function testEvaluateWrongDiscriminator($input, $expectedExceptionMessage) { - $this->expectException('\InvalidArgumentException', $expectedExceptionMessage); + $this->expectException('\InvalidArgumentException'); + $this->expectExceptionMessage($expectedExceptionMessage); $this->_model->evaluate($input); } diff --git a/lib/internal/Magento/Framework/Filesystem/Test/Unit/DirectoryListTest.php b/lib/internal/Magento/Framework/Filesystem/Test/Unit/DirectoryListTest.php index 8a96f79179bd7..96b56de8451c2 100644 --- a/lib/internal/Magento/Framework/Filesystem/Test/Unit/DirectoryListTest.php +++ b/lib/internal/Magento/Framework/Filesystem/Test/Unit/DirectoryListTest.php @@ -21,7 +21,8 @@ public function testGetDefaultConfig() */ public function testValidate($config, $expectedError) { - $this->expectException('\InvalidArgumentException', $expectedError); + $this->expectException('\InvalidArgumentException'); + $this->expectExceptionMessage($expectedError); DirectoryList::validate($config); } diff --git a/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/ImageMagickTest.php b/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/ImageMagickTest.php index af44ae45c2cc5..ae0348f489fd2 100644 --- a/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/ImageMagickTest.php +++ b/lib/internal/Magento/Framework/Image/Test/Unit/Adapter/ImageMagickTest.php @@ -58,7 +58,8 @@ public function setup() */ public function testWatermark($imagePath, $expectedMessage) { - $this->expectException('LogicException', $expectedMessage); + $this->expectException('LogicException'); + $this->expectExceptionMessage($expectedMessage); $this->imageMagic->watermark($imagePath); } diff --git a/lib/internal/Magento/Framework/Mview/Test/Unit/View/ChangelogTest.php b/lib/internal/Magento/Framework/Mview/Test/Unit/View/ChangelogTest.php index e278de0fff914..c91b56560eb75 100644 --- a/lib/internal/Magento/Framework/Mview/Test/Unit/View/ChangelogTest.php +++ b/lib/internal/Magento/Framework/Mview/Test/Unit/View/ChangelogTest.php @@ -124,7 +124,8 @@ public function testGetVersionWithExceptionNoTable() $this->mockIsTableExists($changelogTableName, false); $this->mockGetTableName(); - $this->expectException('Exception', "Table {$changelogTableName} does not exist"); + $this->expectException('Exception'); + $this->expectExceptionMessage("Table {$changelogTableName} does not exist"); $this->model->setViewId('viewIdtest'); $this->model->getVersion(); } @@ -135,7 +136,8 @@ public function testDrop() $this->mockIsTableExists($changelogTableName, false); $this->mockGetTableName(); - $this->expectException('Exception', "Table {$changelogTableName} does not exist"); + $this->expectException('Exception'); + $this->expectExceptionMessage("Table {$changelogTableName} does not exist"); $this->model->setViewId('viewIdtest'); $this->model->drop(); } @@ -226,7 +228,8 @@ public function testGetListWithException() $this->mockIsTableExists($changelogTableName, false); $this->mockGetTableName(); - $this->expectException('Exception', "Table {$changelogTableName} does not exist"); + $this->expectException('Exception'); + $this->expectExceptionMessage("Table {$changelogTableName} does not exist"); $this->model->setViewId('viewIdtest'); $this->model->getList(mt_rand(1, 200), mt_rand(201, 400)); } @@ -237,7 +240,8 @@ public function testClearWithException() $this->mockIsTableExists($changelogTableName, false); $this->mockGetTableName(); - $this->expectException('Exception', "Table {$changelogTableName} does not exist"); + $this->expectException('Exception'); + $this->expectExceptionMessage("Table {$changelogTableName} does not exist"); $this->model->setViewId('viewIdtest'); $this->model->clear(mt_rand(1, 200)); } diff --git a/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/CompositeTest.php b/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/CompositeTest.php index 57d8841455fd7..e302dc8f5ad5e 100644 --- a/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/CompositeTest.php +++ b/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/CompositeTest.php @@ -85,7 +85,8 @@ public function testRenderException() ->method('render') ->willThrowException($exception); - $this->expectException('Exception', $message); + $this->expectException('Exception'); + $this->expectExceptionMessage($message); $this->object->render(['text'], []); } } diff --git a/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/InlineTest.php b/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/InlineTest.php index 793557000fb1e..f9b6e47c19a86 100644 --- a/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/InlineTest.php +++ b/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/InlineTest.php @@ -88,7 +88,8 @@ public function testRenderException() ->method('get') ->willThrowException($exception); - $this->expectException('Exception', $message); + $this->expectException('Exception'); + $this->expectExceptionMessage($message); $this->renderer->render(['text'], []); } } diff --git a/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/TranslateTest.php b/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/TranslateTest.php index fb4b3232cab31..d8a0b3673ad6d 100644 --- a/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/TranslateTest.php +++ b/lib/internal/Magento/Framework/Phrase/Test/Unit/Renderer/TranslateTest.php @@ -91,7 +91,8 @@ public function testRenderException() ->method('getData') ->willThrowException($exception); - $this->expectException('Exception', $message); + $this->expectException('Exception'); + $this->expectExceptionMessage($message); $this->_renderer->render(['text'], []); } } diff --git a/lib/internal/Magento/Framework/Test/Unit/Module/Plugin/DbStatusValidatorTest.php b/lib/internal/Magento/Framework/Test/Unit/Module/Plugin/DbStatusValidatorTest.php index 201856124d721..1516f65479771 100644 --- a/lib/internal/Magento/Framework/Test/Unit/Module/Plugin/DbStatusValidatorTest.php +++ b/lib/internal/Magento/Framework/Test/Unit/Module/Plugin/DbStatusValidatorTest.php @@ -114,7 +114,7 @@ public function testBeforeDispatchOutOfDateWithErrors(array $errors, string $exp $this->cacheMock->expects(static::never()) ->method('save'); - $this->expectException(LocalizedException::class, $expectedMessage); + $this->expectException(LocalizedException::class); $this->expectExceptionMessage($expectedMessage); $this->plugin->beforeDispatch($this->frontControllerMock, $this->requestMock); } diff --git a/lib/internal/Magento/Framework/Validator/Test/Unit/BuilderTest.php b/lib/internal/Magento/Framework/Validator/Test/Unit/BuilderTest.php index 2df8d535ee788..860d449c4717e 100644 --- a/lib/internal/Magento/Framework/Validator/Test/Unit/BuilderTest.php +++ b/lib/internal/Magento/Framework/Validator/Test/Unit/BuilderTest.php @@ -341,7 +341,8 @@ protected function _getExpectedConstraints($constraint, $optionKey, $optionValue */ public function testConstructorConfigValidation(array $options, $exception, $exceptionMessage) { - $this->expectException($exception, $exceptionMessage); + $this->expectException($exception); + $this->expectExceptionMessage($exceptionMessage); if (array_key_exists('method', $options)) { $options = ['methods' => [$options]]; } @@ -362,7 +363,8 @@ public function testConstructorConfigValidation(array $options, $exception, $exc */ public function testAddConfigurationConfigValidation(array $options, $exception, $exceptionMessage) { - $this->expectException($exception, $exceptionMessage); + $this->expectException($exception); + $this->expectExceptionMessage($exceptionMessage); $constraints = [ ['alias' => 'alias', 'class' => 'Some\Validator\Class', 'options' => null, 'type' => 'entity'], diff --git a/lib/internal/Magento/Framework/Validator/Test/Unit/Constraint/Option/CallbackTest.php b/lib/internal/Magento/Framework/Validator/Test/Unit/Constraint/Option/CallbackTest.php index 91bd3a7608d67..9617b28383088 100644 --- a/lib/internal/Magento/Framework/Validator/Test/Unit/Constraint/Option/CallbackTest.php +++ b/lib/internal/Magento/Framework/Validator/Test/Unit/Constraint/Option/CallbackTest.php @@ -123,7 +123,8 @@ public function setArgumentsDataProvider() public function testGetValueException($callback, $expectedMessage, $createInstance = false) { $option = new \Magento\Framework\Validator\Constraint\Option\Callback($callback, null, $createInstance); - $this->expectException('InvalidArgumentException', $expectedMessage); + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage($expectedMessage); $option->getValue(); } diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Element/TemplateTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Element/TemplateTest.php index 83813785886c5..b457a98b5e236 100644 --- a/lib/internal/Magento/Framework/View/Test/Unit/Element/TemplateTest.php +++ b/lib/internal/Magento/Framework/View/Test/Unit/Element/TemplateTest.php @@ -175,7 +175,8 @@ public function testFetchViewWithNoFileNameDeveloperMode() ->method('getMode') ->willReturn(\Magento\Framework\App\State::MODE_DEVELOPER); - $this->expectException(\Magento\Framework\Exception\ValidatorException::class, $exception); + $this->expectException(\Magento\Framework\Exception\ValidatorException::class); + $this->expectExceptionMessage($exception); $this->block->fetchView($template); } diff --git a/lib/internal/Magento/Framework/View/Test/Unit/File/Collector/Override/ThemeModularTest.php b/lib/internal/Magento/Framework/View/Test/Unit/File/Collector/Override/ThemeModularTest.php index d1a1851c06c52..cae621a09125f 100644 --- a/lib/internal/Magento/Framework/View/Test/Unit/File/Collector/Override/ThemeModularTest.php +++ b/lib/internal/Magento/Framework/View/Test/Unit/File/Collector/Override/ThemeModularTest.php @@ -169,7 +169,8 @@ public function testGetFilesWrongAncestor() $filePath = 'design/area/theme_path/Module_One/override/theme/vendor/parent_theme/1.xml'; $expectedMessage = "Trying to override modular view file '$filePath' for theme 'vendor/parent_theme'" . ", which is not ancestor of theme 'vendor/theme_path'"; - $this->expectException(\Magento\Framework\Exception\LocalizedException::class, $expectedMessage); + $this->expectException(\Magento\Framework\Exception\LocalizedException::class); + $this->expectExceptionMessage($expectedMessage); $theme = $this->getMockForAbstractClass(\Magento\Framework\View\Design\ThemeInterface::class); $theme->expects($this->once())->method('getFullPath')->willReturn($themePath); diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/HelperMethodTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/HelperMethodTest.php index 19b450e2d4235..458b23a4b15eb 100644 --- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/HelperMethodTest.php +++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/HelperMethodTest.php @@ -67,7 +67,8 @@ public function help($input) */ public function testEvaluateException($helperMethod, $expectedExceptionMessage) { - $this->expectException('\InvalidArgumentException', $expectedExceptionMessage); + $this->expectException('\InvalidArgumentException'); + $this->expectExceptionMessage($expectedExceptionMessage); $input = ['value' => 'some text', 'helper' => $helperMethod]; $this->_model->evaluate($input); } diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/NamedParamsTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/NamedParamsTest.php index 65f72ef96f850..5ae0b0332f28a 100644 --- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/NamedParamsTest.php +++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/NamedParamsTest.php @@ -62,7 +62,8 @@ public function testEvaluate() */ public function testEvaluateWrongParam($input, $expectedExceptionMessage) { - $this->expectException('\InvalidArgumentException', $expectedExceptionMessage); + $this->expectException('\InvalidArgumentException'); + $this->expectExceptionMessage($expectedExceptionMessage); $this->_model->evaluate($input); } diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/ObjectTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/ObjectTest.php index 682106e01ad4e..7cc280a930d9c 100644 --- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/ObjectTest.php +++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/ObjectTest.php @@ -49,7 +49,8 @@ public function testEvaluate() */ public function testEvaluateWrongClass($input, $expectedException, $expectedExceptionMessage) { - $this->expectException($expectedException, $expectedExceptionMessage); + $this->expectException($expectedException); + $this->expectExceptionMessage($expectedExceptionMessage); $self = $this; $this->_objectManager->expects($this->any())->method('create')->willReturnCallback( function ($className) use ($self) { diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/OptionsTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/OptionsTest.php index ffb79790d33f8..d3e91cb7c2b7e 100644 --- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/OptionsTest.php +++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Argument/Interpreter/OptionsTest.php @@ -67,7 +67,8 @@ public function testEvaluate() */ public function testEvaluateWrongModel($input, $expectedException, $expectedExceptionMessage) { - $this->expectException($expectedException, $expectedExceptionMessage); + $this->expectException($expectedException); + $this->expectExceptionMessage($expectedExceptionMessage); $this->_model->evaluate($input); } diff --git a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/Deserializer/JsonTest.php b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/Deserializer/JsonTest.php index 71ede3fd4fcb4..d4177ceee8d7e 100644 --- a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/Deserializer/JsonTest.php +++ b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/Deserializer/JsonTest.php @@ -55,7 +55,8 @@ protected function tearDown() public function testDeserializerInvalidArgumentException() { - $this->expectException('InvalidArgumentException', '"boolean" data type is invalid. String is expected.'); + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage('"boolean" data type is invalid. String is expected.'); $this->_jsonDeserializer->deserialize(false); } diff --git a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/Deserializer/XmlTest.php b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/Deserializer/XmlTest.php index 2c754f23b0b5c..4b9c90de7355e 100644 --- a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/Deserializer/XmlTest.php +++ b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/Deserializer/XmlTest.php @@ -42,7 +42,8 @@ protected function tearDown() public function testDeserializeInvalidArgumentException() { - $this->expectException('InvalidArgumentException', '"boolean" data type is invalid. String is expected.'); + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage('"boolean" data type is invalid. String is expected.'); $this->_xmlDeserializer->deserialize(false); } diff --git a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/DeserializerFactoryTest.php b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/DeserializerFactoryTest.php index 74d87095823f7..588a67430a61f 100644 --- a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/DeserializerFactoryTest.php +++ b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Request/DeserializerFactoryTest.php @@ -11,7 +11,8 @@ class DeserializerFactoryTest extends \PHPUnit\Framework\TestCase { public function testGetLogicExceptionEmptyRequestAdapter() { - $this->expectException('LogicException', 'Request deserializer adapter is not set.'); + $this->expectException('LogicException'); + $this->expectExceptionMessage('Request deserializer adapter is not set.'); $interpreterFactory = new \Magento\Framework\Webapi\Rest\Request\DeserializerFactory( $this->createMock(\Magento\Framework\ObjectManagerInterface::class), [] diff --git a/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/ModificationChainTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/ModificationChainTest.php index dbe566f9a1c7a..7f0553034b4f9 100644 --- a/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/ModificationChainTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/Compiler/Config/ModificationChainTest.php @@ -25,7 +25,8 @@ public function testConstructor() public function testConstructorException() { - $this->expectException('InvalidArgumentException', 'Wrong modifier provided'); + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage('Wrong modifier provided'); $modificationsList = []; $modificationsList[] = $this->getMockBuilder( \Magento\Setup\Module\Di\Compiler\Config\ModificationInterface::class diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/ResolverTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/ResolverTest.php index cb49c3a33a5c5..331b2b8705c5b 100644 --- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/ResolverTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/ResolverTest.php @@ -136,7 +136,8 @@ public function testGetOptionsWrongDir($directory, $withContext, $message) 'directoryList' => $directoryList ] ); - $this->expectException('\InvalidArgumentException', $message); + $this->expectException('\InvalidArgumentException'); + $this->expectExceptionMessage($message); $resolver->getOptions(); } diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/PhraseTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/PhraseTest.php index e87a716ffdb62..b76cc4a0b1f1a 100644 --- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/PhraseTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/PhraseTest.php @@ -55,7 +55,8 @@ public function dataProviderPhraseCreation() */ public function testWrongParametersWhilePhraseCreation($constructArguments, $message) { - $this->expectException('DomainException', $message); + $this->expectException('DomainException'); + $this->expectExceptionMessage($message); new Phrase(...array_values($constructArguments)); } diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Pack/GeneratorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Pack/GeneratorTest.php index 3395596f399a3..1c035e8ceed82 100644 --- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Pack/GeneratorTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Pack/GeneratorTest.php @@ -111,7 +111,8 @@ public function testGenerateWithNotAllowedDuplicatesAndDuplicatesExist() $error = "Duplicated translation is found, but it is not allowed.\n" . "The phrase \"phrase1\" is translated in 1 places.\n" . "The phrase \"phrase2\" is translated in 1 places.\n"; - $this->expectException('\RuntimeException', $error); + $this->expectException('\RuntimeException'); + $this->expectExceptionMessage($error); $allowDuplicates = false; diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/AbstractParserTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/AbstractParserTest.php index e68a1c624376b..3c744bb44d32a 100644 --- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/AbstractParserTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/AbstractParserTest.php @@ -29,7 +29,8 @@ protected function setUp() */ public function testValidateOptions($options, $message) { - $this->expectException('InvalidArgumentException', $message); + $this->expectException('InvalidArgumentException'); + $this->expectExceptionMessage($message); $this->_parserMock->addAdapter( 'php', From afafc3c0a64adb2802704d71d8e44136bd72f7c5 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Tue, 5 Dec 2017 18:01:25 +0200 Subject: [PATCH 444/653] 8601: Can bypass Minimum Order Amount Logic --- .../Model/Checkout/Type/Multishipping.php | 53 +++++++++++++++++-- .../Model/Checkout/Type/MultishippingTest.php | 42 ++++++++++++++- 2 files changed, 89 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php b/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php index f9d6d0adaae93..7c72c09c0d9e9 100644 --- a/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php +++ b/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php @@ -817,13 +817,21 @@ public function reset() */ public function validateMinimumAmount() { - return !($this->_scopeConfig->isSetFlag( + $minimumOrderActive = $this->_scopeConfig->isSetFlag( 'sales/minimum_order/active', \Magento\Store\Model\ScopeInterface::SCOPE_STORE - ) && $this->_scopeConfig->isSetFlag( + ); + + if ($this->_scopeConfig->isSetFlag( 'sales/minimum_order/multi_address', - \Magento\Store\Model\ScopeInterface::SCOPE_STORE - ) && !$this->getQuote()->validateMinimumAmount()); + \Magento\Store\Model\ScopeInterface::SCOPE_STORE) + ) { + $result = !($minimumOrderActive && !$this->getQuote()->validateMinimumAmount()); + } else { + $result = !($minimumOrderActive && !$this->validateMinimumAmountForAddressItems()); + } + + return $result; } /** @@ -1031,4 +1039,41 @@ private function getShippingAssignmentProcessor() } return $this->shippingAssignmentProcessor; } + + /** + * Validate minimum amount for "Checkout with Multiple Addresses" when + * "Validate Each Address Separately in Multi-address Checkout" is No. + * + * @return bool + */ + private function validateMinimumAmountForAddressItems() + { + $result = true; + $storeId = $this->getQuote()->getStoreId(); + + $minAmount = $this->_scopeConfig->getValue( + 'sales/minimum_order/amount', + \Magento\Store\Model\ScopeInterface::SCOPE_STORE, + $storeId + ); + $taxInclude = $this->_scopeConfig->getValue( + 'sales/minimum_order/tax_including', + \Magento\Store\Model\ScopeInterface::SCOPE_STORE, + $storeId + ); + + $addresses = $this->getQuote()->getAllAddresses(); + + $baseTotal = 0; + foreach ($addresses as $address) { + $taxes = ($taxInclude) ? $address->getBaseTaxAmount() : 0; + $baseTotal += $address->getBaseSubtotalWithDiscount() + $taxes; + } + + if ($baseTotal < $minAmount) { + $result = false; + } + + return $result; + } } diff --git a/app/code/Magento/Multishipping/Test/Unit/Model/Checkout/Type/MultishippingTest.php b/app/code/Magento/Multishipping/Test/Unit/Model/Checkout/Type/MultishippingTest.php index 1d779c11d5935..f90e85a904352 100644 --- a/app/code/Magento/Multishipping/Test/Unit/Model/Checkout/Type/MultishippingTest.php +++ b/app/code/Magento/Multishipping/Test/Unit/Model/Checkout/Type/MultishippingTest.php @@ -118,13 +118,18 @@ class MultishippingTest extends \PHPUnit\Framework\TestCase */ private $quoteRepositoryMock; + /** + * @var PHPUnit_Framework_MockObject_MockObject + */ + private $scopeConfigMock; + protected function setUp() { $this->checkoutSessionMock = $this->createSimpleMock(Session::class); $this->customerSessionMock = $this->createSimpleMock(CustomerSession::class); $orderFactoryMock = $this->createSimpleMock(OrderFactory::class); $eventManagerMock = $this->createSimpleMock(ManagerInterface::class); - $scopeConfigMock = $this->createSimpleMock(ScopeConfigInterface::class); + $this->scopeConfigMock = $this->createSimpleMock(ScopeConfigInterface::class); $sessionMock = $this->createSimpleMock(Generic::class); $addressFactoryMock = $this->createSimpleMock(AddressFactory::class); $toOrderMock = $this->createSimpleMock(ToOrder::class); @@ -166,7 +171,7 @@ protected function setUp() $orderFactoryMock, $this->addressRepositoryMock, $eventManagerMock, - $scopeConfigMock, + $this->scopeConfigMock, $sessionMock, $addressFactoryMock, $toOrderMock, @@ -497,4 +502,37 @@ private function createSimpleMock($className) ->disableOriginalConstructor() ->getMock(); } + + public function testValidateMinimumAmountMultiAddressTrue() + { + $this->scopeConfigMock->expects($this->exactly(2))->method('isSetFlag')->withConsecutive( + ['sales/minimum_order/active', \Magento\Store\Model\ScopeInterface::SCOPE_STORE], + ['sales/minimum_order/multi_address', \Magento\Store\Model\ScopeInterface::SCOPE_STORE] + )->willReturnOnConsecutiveCalls(true, true); + + $this->checkoutSessionMock->expects($this->atLeastOnce())->method('getQuote')->willReturn($this->quoteMock); + $this->quoteMock->expects($this->once())->method('validateMinimumAmount')->willReturn(false); + $this->assertFalse($this->model->validateMinimumAmount()); + } + + public function testValidateMinimumAmountMultiAddressFalse() + { + $addressMock = $this->createMock(\Magento\Quote\Model\Quote\Address::class); + $this->scopeConfigMock->expects($this->exactly(2))->method('isSetFlag')->withConsecutive( + ['sales/minimum_order/active', \Magento\Store\Model\ScopeInterface::SCOPE_STORE], + ['sales/minimum_order/multi_address', \Magento\Store\Model\ScopeInterface::SCOPE_STORE] + )->willReturnOnConsecutiveCalls(true, false); + + $this->scopeConfigMock->expects($this->exactly(2))->method('getValue')->withConsecutive( + ['sales/minimum_order/amount', \Magento\Store\Model\ScopeInterface::SCOPE_STORE], + ['sales/minimum_order/tax_including', \Magento\Store\Model\ScopeInterface::SCOPE_STORE] + )->willReturnOnConsecutiveCalls(100, false); + + $this->checkoutSessionMock->expects($this->atLeastOnce())->method('getQuote')->willReturn($this->quoteMock); + $this->quoteMock->expects($this->once())->method('getStoreId')->willReturn(1); + $this->quoteMock->expects($this->once())->method('getAllAddresses')->willReturn([$addressMock]); + $addressMock->expects($this->once())->method('getBaseSubtotalWithDiscount')->willReturn(101); + + $this->assertTrue($this->model->validateMinimumAmount()); + } } From aaf1c2b35387e0224306fdeeb323d2f13b523af5 Mon Sep 17 00:00:00 2001 From: Michail Slabko <mslabko@magento.com> Date: Tue, 5 Dec 2017 19:21:54 +0200 Subject: [PATCH 445/653] MAGETWO-75786: Incorrect count for category filter at layered navigation for configurable with no available options --- .../Indexer/Category/Product/AbstractAction.php | 12 ------------ .../Test/Constraint/AssertProductsCount.php | 2 +- .../Model/Indexer/FulltextTest.php | 17 ++++++++++++++--- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Product/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Category/Product/AbstractAction.php index f7f2c7eb5def9..78fe3042b5f71 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Product/AbstractAction.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Product/AbstractAction.php @@ -814,16 +814,4 @@ protected function reindexRootCategory(Store $store) } } } - - /** - * @return \Magento\Framework\EntityManager\MetadataPool - */ - private function getMetadataPool() - { - if (null === $this->metadataPool) { - $this->metadataPool = \Magento\Framework\App\ObjectManager::getInstance() - ->get(\Magento\Framework\EntityManager\MetadataPool::class); - } - return $this->metadataPool; - } } diff --git a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Constraint/AssertProductsCount.php b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Constraint/AssertProductsCount.php index 43b3e8d1fab05..7c9a1f4faef16 100644 --- a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Constraint/AssertProductsCount.php +++ b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Constraint/AssertProductsCount.php @@ -1,6 +1,6 @@ <?php /** - * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\LayeredNavigation\Test\Constraint; diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php index 56269bca47097..ffd837aaca6c4 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php @@ -6,6 +6,7 @@ namespace Magento\CatalogSearch\Model\Indexer; use Magento\Catalog\Model\Product; +use Magento\Catalog\Model\Product\Visibility; use Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection; use Magento\TestFramework\Helper\Bootstrap; @@ -199,13 +200,18 @@ public function testReindexParentProductWhenChildBeingDisabled() { $this->indexer->reindexAll(); - $products = $this->search('Configurable'); + $visibilityFilter = [ + Visibility::VISIBILITY_IN_SEARCH, + Visibility::VISIBILITY_IN_CATALOG, + Visibility::VISIBILITY_BOTH + ]; + $products = $this->search('Configurable', $visibilityFilter); $this->assertCount(1, $products); $childProduct = $this->getProductBySku('configurable_option_single_child'); $childProduct->setStatus(Product\Attribute\Source\Status::STATUS_DISABLED)->save(); - $products = $this->search('Configurable'); + $products = $this->search('Configurable', $visibilityFilter); $this->assertCount(0, $products); } @@ -213,9 +219,10 @@ public function testReindexParentProductWhenChildBeingDisabled() * Search the text and return result collection * * @param string $text + * @param null|array $visibilityFilter * @return Product[] */ - protected function search($text) + protected function search($text, $visibilityFilter = null) { $this->resourceFulltext->resetSearchResults(); $query = $this->queryFactory->get(); @@ -230,6 +237,10 @@ protected function search($text) ] ); $collection->addSearchFilter($text); + if (null !== $visibilityFilter) { + $collection->setVisibility($visibilityFilter); + } + foreach ($collection as $product) { $products[] = $product; } From ce54ef2a0e98c8e8a3ff79e0d0ef4dea9e51ec01 Mon Sep 17 00:00:00 2001 From: Andrii Voskoboinikov <avoskoboinikov@magento.com> Date: Tue, 5 Dec 2017 22:07:00 +0200 Subject: [PATCH 446/653] MAGETWO-83366: Stabilize Admin Pool for multi thread run --- setup/performance-toolkit/profiles/ce/small.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/setup/performance-toolkit/profiles/ce/small.xml b/setup/performance-toolkit/profiles/ce/small.xml index cbcb4764f0f89..270828c2a2c9d 100644 --- a/setup/performance-toolkit/profiles/ce/small.xml +++ b/setup/performance-toolkit/profiles/ce/small.xml @@ -7,6 +7,7 @@ --> <config xmlns:xi="http://www.w3.org/2001/XInclude"> <profile> + <admin_users>50</admin_users><!-- Number of admin users to generate --> <websites>1</websites> <!-- Number of websites to generate --> <store_groups>1</store_groups> <!--Number of stores--> <store_views>1</store_views> <!-- Number of store views --> From 59cedcd02f8ca52d14e1cb88cd464cc6c13952bd Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Wed, 6 Dec 2017 11:47:45 +0200 Subject: [PATCH 447/653] 8011: Strip Tags from attribute. --- .../Condition/Product/AbstractProduct.php | 21 +++- .../Condition/Product/AbstractProductTest.php | 95 +++++++++++++++++++ .../_files/dropdown_attribute_with_html.php | 59 ++++++++++++ .../dropdown_attribute_with_html_rollback.php | 22 +++++ 4 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 dev/tests/integration/testsuite/Magento/Rule/Model/Condition/Product/AbstractProductTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Rule/_files/dropdown_attribute_with_html.php create mode 100644 dev/tests/integration/testsuite/Magento/Rule/_files/dropdown_attribute_with_html_rollback.php diff --git a/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php b/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php index 5ab1379b96cf6..370d00d6c302b 100644 --- a/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php +++ b/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php @@ -241,7 +241,9 @@ protected function _prepareValueOptions() } else { $addEmptyOption = true; } - $selectOptions = $attributeObject->getSource()->getAllOptions($addEmptyOption); + $selectOptions = $this->removeTagsFromLabel( + $attributeObject->getSource()->getAllOptions($addEmptyOption) + ); } } @@ -734,4 +736,21 @@ protected function getEavAttributeTableAlias() return 'at_' . $attribute->getAttributeCode(); } + + /** + * Remove html tags from attribute labels. + * + * @param array $selectOptions + * @return array + */ + private function removeTagsFromLabel($selectOptions) + { + foreach ($selectOptions as &$option) { + if (isset($option['label'])) { + $option['label'] = strip_tags($option['label']); + } + } + + return $selectOptions; + } } diff --git a/dev/tests/integration/testsuite/Magento/Rule/Model/Condition/Product/AbstractProductTest.php b/dev/tests/integration/testsuite/Magento/Rule/Model/Condition/Product/AbstractProductTest.php new file mode 100644 index 0000000000000..5052525f5574d --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Rule/Model/Condition/Product/AbstractProductTest.php @@ -0,0 +1,95 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Rule\Model\Condition\Product; + +use Magento\Backend\Helper\Data; +use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Catalog\Model\ProductCategoryList; +use Magento\Catalog\Model\ProductFactory; +use Magento\Catalog\Model\ResourceModel\Product; +use Magento\Eav\Model\Config; +use Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection; +use Magento\Framework\Locale\FormatInterface; +use Magento\Rule\Model\Condition\Context; +use Magento\TestFramework\Helper\Bootstrap; + +/** + * Provide tests for Abstract Rule product condition data model. + * @magentoAppArea adminhtml + */ +class AbstractProductTest extends \PHPUnit\Framework\TestCase +{ + /** + * Test subject. + * + * @var AbstractProduct|\PHPUnit_Framework_MockObject_MockObject + */ + private $model; + + /** + * @inheritdoc + */ + protected function setUp() + { + $objectManager = Bootstrap::getObjectManager(); + $context = $objectManager->get(Context::class); + $helperData = $objectManager->get(Data::class); + $config = $objectManager->get(Config::class); + $productFactory = $objectManager->get(ProductFactory::class); + $productRepository = $objectManager->get(ProductRepositoryInterface::class); + $productResource = $objectManager->get(Product::class); + $attributeSetCollection = $objectManager->get(Collection::class); + $localeFormat = $objectManager->get(FormatInterface::class); + $data = []; + $productCategoryList = $objectManager->get(ProductCategoryList::class); + $this->model = $this->getMockBuilder(AbstractProduct::class) + ->setMethods(['getOperator', 'getFormName', 'setFormName']) + ->setConstructorArgs([ + $context, + $helperData, + $config, + $productFactory, + $productRepository, + $productResource, + $attributeSetCollection, + $localeFormat, + $data, + $productCategoryList + ]) + ->getMockForAbstractClass(); + } + + /** + * Test Abstract Rule product condition data model shows attribute labels in more readable view + * (without html tags, if one presented). + * + * @magentoDataFixture Magento/Rule/_files/dropdown_attribute_with_html.php + */ + public function test() + { + $expectedOptions = [ + [ + 'label' => ' ', + 'value' => '', + ], + [ + 'value' => '4', + 'label' => 'Option 1', + ], + [ + 'value' => '5', + 'label' => 'Option 2', + ], + [ + 'value' => '6', + 'label' => 'Option 3', + ], + ]; + $this->model->setAttribute('dropdown_attribute_with_html'); + self::assertSame($expectedOptions, $this->model->getValueSelectOptions()); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Rule/_files/dropdown_attribute_with_html.php b/dev/tests/integration/testsuite/Magento/Rule/_files/dropdown_attribute_with_html.php new file mode 100644 index 0000000000000..d4c6036a340cd --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Rule/_files/dropdown_attribute_with_html.php @@ -0,0 +1,59 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* Create attribute */ +/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */ +$attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + \Magento\Catalog\Model\ResourceModel\Eav\Attribute::class +); + +if (!$attribute->loadByCode(4, 'dropdown_attribute_with_html')->getId()) { + /** @var $installer \Magento\Catalog\Setup\CategorySetup */ + $installer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + \Magento\Catalog\Setup\CategorySetup::class + ); + + $attribute->setData( + [ + 'attribute_code' => 'dropdown_attribute_with_html', + 'entity_type_id' => $installer->getEntityTypeId('catalog_product'), + 'is_global' => 0, + 'is_user_defined' => 1, + 'frontend_input' => 'select', + 'is_unique' => 0, + 'is_required' => 0, + 'is_searchable' => 0, + 'is_visible_in_advanced_search' => 0, + 'is_comparable' => 0, + 'is_filterable' => 0, + 'is_filterable_in_search' => 0, + 'is_used_for_promo_rules' => 0, + 'is_html_allowed_on_front' => 1, + 'is_visible_on_front' => 0, + 'used_in_product_listing' => 0, + 'used_for_sort_by' => 0, + 'frontend_label' => ['Drop-Down Attribute'], + 'backend_type' => 'varchar', + 'backend_model' => \Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend::class, + 'option' => [ + 'value' => [ + 'option_1' => ['<a href="#">Option 1</a>'], + 'option_2' => ['<a href="#">Option 2</a>'], + 'option_3' => ['<a href="#">Option 3</a>'], + ], + 'order' => [ + 'option_1' => 1, + 'option_2' => 2, + 'option_3' => 3, + ], + ], + ] + ); + $attribute->save(); + + /* Assign attribute to attribute set */ + $installer->addAttributeToGroup('catalog_product', 'Default', 'Attributes', $attribute->getId()); +} diff --git a/dev/tests/integration/testsuite/Magento/Rule/_files/dropdown_attribute_with_html_rollback.php b/dev/tests/integration/testsuite/Magento/Rule/_files/dropdown_attribute_with_html_rollback.php new file mode 100644 index 0000000000000..130cfea7442e0 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Rule/_files/dropdown_attribute_with_html_rollback.php @@ -0,0 +1,22 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +/* Delete attribute with dropdown_attribute_with_html code */ + +use Magento\Catalog\Model\ResourceModel\Eav\Attribute; +use Magento\TestFramework\Helper\Bootstrap; + +$registry = Bootstrap::getObjectManager()->get(\Magento\Framework\Registry::class); +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', true); +/** @var $attribute Attribute */ +$attribute = Bootstrap::getObjectManager()->create( + Attribute::class +); +$attribute->load('dropdown_attribute_with_html', 'attribute_code'); +$attribute->delete(); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', false); From 45cc40d9ce3fab8412380fb91e4b526a1d4b8604 Mon Sep 17 00:00:00 2001 From: Michail Slabko <mslabko@magento.com> Date: Wed, 6 Dec 2017 12:16:54 +0200 Subject: [PATCH 448/653] MAGETWO-75786: Incorrect count for category filter at layered navigation for configurable with no available options --- .../app/Magento/LayeredNavigation/Test/Repository/Category.xml | 2 +- .../Test/TestCase/ProductsCountInLayeredNavigationTest.php | 2 +- .../Test/TestCase/ProductsCountInLayeredNavigationTest.xml | 2 +- .../Magento/CatalogSearch/Model/Indexer/FulltextTest.php | 1 + .../_files/product_configurable_with_single_child.php | 2 +- .../_files/product_configurable_with_single_child_rollback.php | 2 +- 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Repository/Category.xml b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Repository/Category.xml index 4d463f0b93605..7799faf309ccf 100644 --- a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Repository/Category.xml +++ b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/Repository/Category.xml @@ -1,7 +1,7 @@ <?xml version="1.0" ?> <!-- /** - * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> diff --git a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.php b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.php index 32ad64d6deca8..179f9ef257909 100644 --- a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.php +++ b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.php @@ -1,6 +1,6 @@ <?php /** - * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\LayeredNavigation\Test\TestCase; diff --git a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.xml b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.xml index a832163ceea55..41e18e6454097 100644 --- a/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.xml +++ b/dev/tests/functional/tests/app/Magento/LayeredNavigation/Test/TestCase/ProductsCountInLayeredNavigationTest.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!-- /** - * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php index ffd837aaca6c4..da2fc4498718b 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php @@ -13,6 +13,7 @@ /** * @magentoDbIsolation disabled * @magentoDataFixture Magento/CatalogSearch/_files/indexer_fulltext.php + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class FulltextTest extends \PHPUnit\Framework\TestCase { diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child.php index a1e1c30323c5b..5172ea94e5374 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child.php +++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child.php @@ -1,6 +1,6 @@ <?php /** - * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ use Magento\Catalog\Api\ProductRepositoryInterface; diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child_rollback.php index bc27505ac5148..85a72789e7fd3 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child_rollback.php +++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/product_configurable_with_single_child_rollback.php @@ -1,6 +1,6 @@ <?php /** - * Copyright © 2013-2017 Magento, Inc. All rights reserved. + * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ use Magento\Catalog\Api\Data\ProductInterface; From d81d25edbc1cfb8b8f5e0c39bbaf48ee28abe7e4 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@magento.com> Date: Wed, 6 Dec 2017 12:37:56 +0200 Subject: [PATCH 449/653] magento/magento2#11099 --- .../Catalog/Api/ProductCustomOptionRepositoryTest.php | 5 +++-- .../Catalog/Api/_files/product_options_update_negative.php | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductCustomOptionRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductCustomOptionRepositoryTest.php index b0dd2702f89be..34588c9573f98 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductCustomOptionRepositoryTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductCustomOptionRepositoryTest.php @@ -391,8 +391,9 @@ public function validOptionDataProvider() * @dataProvider optionNegativeUpdateDataProvider * @param array $optionData * @param string $message + * @param int $exceptionCode */ - public function testUpdateNegative($optionData, $message) + public function testUpdateNegative($optionData, $message, $exceptionCode) { $this->_markTestAsRestOnly(); $productSku = 'simple'; @@ -411,7 +412,7 @@ public function testUpdateNegative($optionData, $message) $this->expectException('Exception'); $this->expectExceptionMessage($message); - $this->expectExceptionCode(400); + $this->expectExceptionCode($exceptionCode); $this->_webApiCall($serviceInfo, ['option' => $optionData]); } diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/_files/product_options_update_negative.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/_files/product_options_update_negative.php index 08a14c2e7b261..d819fb5f604bf 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/_files/product_options_update_negative.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/_files/product_options_update_negative.php @@ -16,6 +16,7 @@ 'max_characters' => 10, ], 'ProductSku should be specified', + 400 ], 'invalid_product_sku' => [ [ @@ -25,9 +26,10 @@ 'is_require' => 1, 'price' => 10.0, 'price_type' => 'fixed', - 'sku' => 'sku1', + 'product_sku' => 'sku1', 'max_characters' => 10, ], 'Requested product doesn\'t exist', + 404 ], ]; From bd6d35c41739d4060d87169f2a7f160a2b916eab Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Wed, 6 Dec 2017 12:43:40 +0200 Subject: [PATCH 450/653] 8507: There is invalid type in PHPDoc block of \Magento\Framework\Data\Tree::getNodeById() --- lib/internal/Magento/Framework/Data/Tree.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/Data/Tree.php b/lib/internal/Magento/Framework/Data/Tree.php index b458338184885..b348bc8fdc93b 100644 --- a/lib/internal/Magento/Framework/Data/Tree.php +++ b/lib/internal/Magento/Framework/Data/Tree.php @@ -189,7 +189,7 @@ public function getNodes() /** * Enter description here... * - * @param Node $nodeId + * @param string|int $nodeId * @return Node */ public function getNodeById($nodeId) From 0c069a257624c477cf44ba4f53b47400f06b3bfa Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Wed, 6 Dec 2017 13:03:05 +0200 Subject: [PATCH 451/653] 8011: Strip Tags from attribute. --- .../Condition/Product/AbstractProductTest.php | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Rule/Model/Condition/Product/AbstractProductTest.php b/dev/tests/integration/testsuite/Magento/Rule/Model/Condition/Product/AbstractProductTest.php index 5052525f5574d..3c706b453b4d1 100644 --- a/dev/tests/integration/testsuite/Magento/Rule/Model/Condition/Product/AbstractProductTest.php +++ b/dev/tests/integration/testsuite/Magento/Rule/Model/Condition/Product/AbstractProductTest.php @@ -69,27 +69,15 @@ protected function setUp() * * @magentoDataFixture Magento/Rule/_files/dropdown_attribute_with_html.php */ - public function test() + public function testGetValueSelectOptions() { - $expectedOptions = [ - [ - 'label' => ' ', - 'value' => '', - ], - [ - 'value' => '4', - 'label' => 'Option 1', - ], - [ - 'value' => '5', - 'label' => 'Option 2', - ], - [ - 'value' => '6', - 'label' => 'Option 3', - ], - ]; + $expectedLabels = [' ', 'Option 1', 'Option 2', 'Option 3']; $this->model->setAttribute('dropdown_attribute_with_html'); - self::assertSame($expectedOptions, $this->model->getValueSelectOptions()); + $options = $this->model->getValueSelectOptions(); + $labels = []; + foreach ($options as $option) { + $labels[] = $option['label']; + } + self::assertSame($expectedLabels, $labels); } } From c053a2a587b3b8debe09ca3686e81b7667afc6f9 Mon Sep 17 00:00:00 2001 From: Andrii Voskoboinikov <avoskoboinikov@magento.com> Date: Wed, 6 Dec 2017 15:29:15 +0200 Subject: [PATCH 452/653] MAGETWO-83366: Stabilize Admin Pool for multi thread run --- setup/performance-toolkit/profiles/ce/extra_large.xml | 1 + setup/performance-toolkit/profiles/ce/large.xml | 1 + setup/performance-toolkit/profiles/ce/medium.xml | 1 + setup/performance-toolkit/profiles/ce/medium_msite.xml | 1 + 4 files changed, 4 insertions(+) diff --git a/setup/performance-toolkit/profiles/ce/extra_large.xml b/setup/performance-toolkit/profiles/ce/extra_large.xml index 830d1d95d7d21..44b3512090b12 100644 --- a/setup/performance-toolkit/profiles/ce/extra_large.xml +++ b/setup/performance-toolkit/profiles/ce/extra_large.xml @@ -7,6 +7,7 @@ --> <config xmlns:xi="http://www.w3.org/2001/XInclude"> <profile> + <admin_users>50</admin_users><!-- Number of admin users to generate --> <websites>5</websites> <!-- Number of websites to generate --> <store_groups>5</store_groups> <!--Number of stores--> <store_views>5</store_views> <!-- Number of store views --> diff --git a/setup/performance-toolkit/profiles/ce/large.xml b/setup/performance-toolkit/profiles/ce/large.xml index dd297b21d3503..606c854d27adc 100644 --- a/setup/performance-toolkit/profiles/ce/large.xml +++ b/setup/performance-toolkit/profiles/ce/large.xml @@ -7,6 +7,7 @@ --> <config xmlns:xi="http://www.w3.org/2001/XInclude"> <profile> + <admin_users>50</admin_users><!-- Number of admin users to generate --> <websites>5</websites> <!-- Number of websites to generate --> <store_groups>5</store_groups> <!--Number of stores--> <store_views>5</store_views> <!-- Number of store views --> diff --git a/setup/performance-toolkit/profiles/ce/medium.xml b/setup/performance-toolkit/profiles/ce/medium.xml index 896ab92d32f33..4f735ae4ac2d4 100644 --- a/setup/performance-toolkit/profiles/ce/medium.xml +++ b/setup/performance-toolkit/profiles/ce/medium.xml @@ -7,6 +7,7 @@ --> <config xmlns:xi="http://www.w3.org/2001/XInclude"> <profile> + <admin_users>50</admin_users><!-- Number of admin users to generate --> <websites>3</websites> <!-- Number of websites to generate --> <store_groups>3</store_groups> <!--Number of stores--> <store_views>3</store_views> <!-- Number of store views --> diff --git a/setup/performance-toolkit/profiles/ce/medium_msite.xml b/setup/performance-toolkit/profiles/ce/medium_msite.xml index 245eed4c18fe1..24d51d170fbc2 100644 --- a/setup/performance-toolkit/profiles/ce/medium_msite.xml +++ b/setup/performance-toolkit/profiles/ce/medium_msite.xml @@ -7,6 +7,7 @@ --> <config xmlns:xi="http://www.w3.org/2001/XInclude"> <profile> + <admin_users>50</admin_users><!-- Number of admin users to generate --> <websites>25</websites> <!-- Number of websites to generate --> <store_groups>25</store_groups> <!--Number of stores--> <store_views>50</store_views> <!-- Number of store views --> From 5e93220a56bd741d3ec27b8a0fffd2f539e4e473 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Wed, 6 Dec 2017 15:53:14 +0200 Subject: [PATCH 453/653] 8437:Silent error when an email template is not found --- .../Customer/Model/AccountManagement.php | 2 + .../Test/Unit/Model/AccountManagementTest.php | 98 +++++++++++++++++++ .../Magento/Email/Model/Template/Config.php | 23 ++++- .../Test/Unit/Model/Template/ConfigTest.php | 13 +++ 4 files changed, 135 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Customer/Model/AccountManagement.php b/app/code/Magento/Customer/Model/AccountManagement.php index ba646549f6919..894dd5931a63c 100644 --- a/app/code/Magento/Customer/Model/AccountManagement.php +++ b/app/code/Magento/Customer/Model/AccountManagement.php @@ -817,6 +817,8 @@ protected function sendEmailConfirmation(CustomerInterface $customer, $redirectU } catch (MailException $e) { // If we are not able to send a new account email, this should be ignored $this->logger->critical($e); + } catch (\UnexpectedValueException $e) { + $this->logger->error($e); } } diff --git a/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php b/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php index 2a6b9fe6fd4ea..676e9c98a2008 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php @@ -1721,4 +1721,102 @@ private function prepareDateTimeFactory() return $dateTime; } + + public function testCreateAccountUnexpectedValueException() + { + $websiteId = 1; + $storeId = null; + $defaultStoreId = 1; + $customerId = 1; + $customerEmail = 'email@email.com'; + $newLinkToken = '2jh43j5h2345jh23lh452h345hfuzasd96ofu'; + $exception = new \UnexpectedValueException('Template file was not found'); + + $datetime = $this->prepareDateTimeFactory(); + + $address = $this->createMock(\Magento\Customer\Api\Data\AddressInterface::class); + $address->expects($this->once()) + ->method('setCustomerId') + ->with($customerId); + $store = $this->createMock(\Magento\Store\Model\Store::class); + $store->expects($this->once()) + ->method('getId') + ->willReturn($defaultStoreId); + $website = $this->createMock(\Magento\Store\Model\Website::class); + $website->expects($this->atLeastOnce()) + ->method('getStoreIds') + ->willReturn([1, 2, 3]); + $website->expects($this->once()) + ->method('getDefaultStore') + ->willReturn($store); + $customer = $this->createMock(\Magento\Customer\Api\Data\CustomerInterface::class); + $customer->expects($this->atLeastOnce()) + ->method('getId') + ->willReturn($customerId); + $customer->expects($this->atLeastOnce()) + ->method('getEmail') + ->willReturn($customerEmail); + $customer->expects($this->atLeastOnce()) + ->method('getWebsiteId') + ->willReturn($websiteId); + $customer->expects($this->atLeastOnce()) + ->method('getStoreId') + ->willReturn($storeId); + $customer->expects($this->once()) + ->method('setStoreId') + ->with($defaultStoreId); + $customer->expects($this->once()) + ->method('getAddresses') + ->willReturn([$address]); + $customer->expects($this->once()) + ->method('setAddresses') + ->with(null); + $this->customerRepository->expects($this->once()) + ->method('get') + ->with($customerEmail) + ->willReturn($customer); + $this->share->expects($this->once()) + ->method('isWebsiteScope') + ->willReturn(true); + $this->storeManager->expects($this->atLeastOnce()) + ->method('getWebsite') + ->with($websiteId) + ->willReturn($website); + $this->customerRepository->expects($this->atLeastOnce()) + ->method('save') + ->willReturn($customer); + $this->addressRepository->expects($this->atLeastOnce()) + ->method('save') + ->with($address); + $this->customerRepository->expects($this->once()) + ->method('getById') + ->with($customerId) + ->willReturn($customer); + $this->random->expects($this->once()) + ->method('getUniqueHash') + ->willReturn($newLinkToken); + $customerSecure = $this->createPartialMock( + \Magento\Customer\Model\Data\CustomerSecure::class, + ['setRpToken', 'setRpTokenCreatedAt', 'getPasswordHash'] + ); + $customerSecure->expects($this->any()) + ->method('setRpToken') + ->with($newLinkToken); + $customerSecure->expects($this->any()) + ->method('setRpTokenCreatedAt') + ->with($datetime) + ->willReturnSelf(); + $customerSecure->expects($this->any()) + ->method('getPasswordHash') + ->willReturn(null); + $this->customerRegistry->expects($this->atLeastOnce()) + ->method('retrieveSecureData') + ->willReturn($customerSecure); + $this->emailNotificationMock->expects($this->once()) + ->method('newAccount') + ->willThrowException($exception); + $this->logger->expects($this->once())->method('error')->with($exception); + + $this->accountManagement->createAccount($customer); + } } diff --git a/app/code/Magento/Email/Model/Template/Config.php b/app/code/Magento/Email/Model/Template/Config.php index bdd9054e7969b..8a7e7172a8e6e 100644 --- a/app/code/Magento/Email/Model/Template/Config.php +++ b/app/code/Magento/Email/Model/Template/Config.php @@ -205,8 +205,9 @@ public function getTemplateFilename($templateId, $designParams = []) $designParams['module'] = $module; $file = $this->_getInfo($templateId, 'file'); + $filename = $this->getFilename($file, $designParams, $module); - return $this->viewFileSystem->getEmailTemplateFileName($file, $designParams, $module); + return $filename; } /** @@ -230,4 +231,24 @@ protected function _getInfo($templateId, $fieldName) } return $data[$templateId][$fieldName]; } + + /** + * @param string $file + * @param array $designParams + * @param string $module + * + * @return string + * + * @throws \UnexpectedValueException + */ + private function getFilename($file, array $designParams, $module) + { + $filename = $this->viewFileSystem->getEmailTemplateFileName($file, $designParams, $module); + + if ($filename === false) { + throw new \UnexpectedValueException("Template file '{$file}' is not found."); + } + + return $filename; + } } diff --git a/app/code/Magento/Email/Test/Unit/Model/Template/ConfigTest.php b/app/code/Magento/Email/Test/Unit/Model/Template/ConfigTest.php index 6ec3905fe4633..6cb51ee8328b5 100644 --- a/app/code/Magento/Email/Test/Unit/Model/Template/ConfigTest.php +++ b/app/code/Magento/Email/Test/Unit/Model/Template/ConfigTest.php @@ -272,6 +272,19 @@ public function testGetTemplateFilenameWithNoParams() $this->assertEquals('_files/Fixture/ModuleOne/view/frontend/email/one.html', $actualResult); } + /** + * @expectedException \UnexpectedValueException + * @expectedExceptionMessage Template file 'one.html' is not found + */ + public function testGetTemplateFilenameWrongFileName() + { + $this->viewFileSystem->expects($this->once())->method('getEmailTemplateFileName') + ->with('one.html', $this->designParams, 'Fixture_ModuleOne') + ->willReturn(false); + + $this->model->getTemplateFilename('template_one', $this->designParams); + } + /** * @param string $getterMethod * @param $argument From be347775dcc199c221b2916108e47049996a6e9a Mon Sep 17 00:00:00 2001 From: Michail Slabko <mslabko@magento.com> Date: Wed, 6 Dec 2017 20:22:10 +0200 Subject: [PATCH 454/653] MAGETWO-75786: Incorrect count for category filter at layered navigation for configurable with no available options --- .../Catalog/Model/Indexer/Product/Category/Action/Rows.php | 1 - .../Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php | 1 - 2 files changed, 2 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Category/Action/Rows.php b/app/code/Magento/Catalog/Model/Indexer/Product/Category/Action/Rows.php index bba8cf6656727..99b087691ab09 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Category/Action/Rows.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Category/Action/Rows.php @@ -114,7 +114,6 @@ private function getProductIdsWithParents(array $childProductIds) ->from(['relation' => $this->getTable('catalog_product_relation')], []) ->distinct(true) ->where('child_id IN (?)', $childProductIds) - ->where('parent_id NOT IN (?)', $childProductIds) ->join( ['cpe' => $this->getTable('catalog_product_entity')], 'relation.parent_id = cpe.' . $fieldForParent, diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php index a517594322da3..5abcd5e7592e1 100644 --- a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php +++ b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php @@ -318,7 +318,6 @@ protected function getProductIdsFromParents(array $entityIds) ) ->distinct(true) ->where('child_id IN (?)', $entityIds) - ->where('parent_id NOT IN (?)', $entityIds) ->join( ['cpe' => $this->getTable('catalog_product_entity')], 'relation.parent_id = cpe.' . $linkField, From c45ec2a7f2211020617ec9e0ab9e2b7673cde6b8 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Thu, 7 Dec 2017 11:52:23 +0200 Subject: [PATCH 455/653] 10797: catalogProductTierPriceManagementV1 DELETE and POST operation wipes out media gallery selections when used on store code "all". --- .../Catalog/Model/ProductRepository.php | 18 ++++++++++-------- .../Api/ProductTierPriceManagementTest.php | 10 ++++++++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/Catalog/Model/ProductRepository.php b/app/code/Magento/Catalog/Model/ProductRepository.php index e814dc03cf37f..3f4d275fb9553 100644 --- a/app/code/Magento/Catalog/Model/ProductRepository.php +++ b/app/code/Magento/Catalog/Model/ProductRepository.php @@ -489,16 +489,17 @@ private function processLinks(\Magento\Catalog\Api\Data\ProductInterface $produc * @throws InputException * @throws StateException * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @throws LocalizedException */ - protected function processMediaGallery(ProductInterface $product, $mediaGalleryEntries) + protected function processMediaGallery(ProductInterface $product, array $mediaGalleryEntries) { $existingMediaGallery = $product->getMediaGallery('images'); $newEntries = []; $entriesById = []; if (!empty($existingMediaGallery)) { foreach ($mediaGalleryEntries as $entry) { - if (isset($entry['value_id'])) { - $entriesById[$entry['value_id']] = $entry; + if (isset($entry['id'])) { + $entriesById[$entry['id']] = $entry; } else { $newEntries[] = $entry; } @@ -515,6 +516,7 @@ protected function processMediaGallery(ProductInterface $product, $mediaGalleryE $existingEntry['removed'] = true; } } + unset($existingEntry); $product->setData('media_gallery', ["images" => $existingMediaGallery]); } else { $newEntries = $mediaGalleryEntries; @@ -536,9 +538,9 @@ protected function processMediaGallery(ProductInterface $product, $mediaGalleryE } /** @var ImageContentInterface $contentDataObject */ $contentDataObject = $this->contentFactory->create() - ->setName($newEntry['content']['data'][ImageContentInterface::NAME]) - ->setBase64EncodedData($newEntry['content']['data'][ImageContentInterface::BASE64_ENCODED_DATA]) - ->setType($newEntry['content']['data'][ImageContentInterface::TYPE]); + ->setName($newEntry['content'][ImageContentInterface::NAME]) + ->setBase64EncodedData($newEntry['content'][ImageContentInterface::BASE64_ENCODED_DATA]) + ->setType($newEntry['content'][ImageContentInterface::TYPE]); $newEntry['content'] = $contentDataObject; $this->processNewMediaGalleryEntry($product, $newEntry); @@ -587,8 +589,8 @@ public function save(\Magento\Catalog\Api\Data\ProductInterface $product, $saveO $product = $this->initializeProductData($productDataArray, empty($existingProduct)); $this->processLinks($product, $productLinks); - if (isset($productDataArray['media_gallery'])) { - $this->processMediaGallery($product, $productDataArray['media_gallery']['images']); + if (isset($productDataArray['media_gallery_entries'])) { + $this->processMediaGallery($product, $productDataArray['media_gallery_entries']); } if (!$product->getOptionsReadonly()) { diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductTierPriceManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductTierPriceManagementTest.php index 315458a0e3872..7df0aede46b26 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductTierPriceManagementTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductTierPriceManagementTest.php @@ -60,15 +60,17 @@ public function getListDataProvider() /** * @param string|int $customerGroupId * @param int $qty - * @magentoApiDataFixture Magento/Catalog/_files/product_simple.php + * @magentoApiDataFixture Magento/Catalog/_files/product_with_image.php * @dataProvider deleteDataProvider */ public function testDelete($customerGroupId, $qty) { $productSku = 'simple'; + $objectManager = \Magento\TestFramework\ObjectManager::getInstance(); + $productBefore = $objectManager->get(ProductRepositoryInterface::class)->get($productSku, false, null, true); $serviceInfo = [ 'rest' => [ - 'resourcePath' => self::RESOURCE_PATH + 'resourcePath' => self::RESOURCE_PATH . $productSku . "/group-prices/" . $customerGroupId . "/tiers/" . $qty, 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_DELETE, ], @@ -80,6 +82,10 @@ public function testDelete($customerGroupId, $qty) ]; $requestData = ['sku' => $productSku, 'customerGroupId' => $customerGroupId, 'qty' => $qty]; $this->assertTrue($this->_webApiCall($serviceInfo, $requestData)); + $productAfter = $objectManager->get(ProductRepositoryInterface::class)->get($productSku, false, null, true); + $this->assertSame($productBefore->getImage(), $productAfter->getImage()); + $this->assertSame($productBefore->getSmallImage(), $productAfter->getSmallImage()); + $this->assertSame($productBefore->getThumbnail(), $productAfter->getThumbnail()); } public function deleteDataProvider() From fd5f40a94dc66806aa98822c87ade74d4a8025d7 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Thu, 7 Dec 2017 12:20:52 +0200 Subject: [PATCH 456/653] 8410: Custom Checkout Step and Shipping Step are Highlighted --- .../Checkout/view/frontend/web/js/view/payment.js | 10 ++++++++++ .../Checkout/view/frontend/web/js/view/shipping.js | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js index c17e5e40d5c98..94ccf7a24f384 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js @@ -46,8 +46,18 @@ define([ /** @inheritdoc */ initialize: function () { + var self = this; this._super(); checkoutDataResolver.resolvePaymentMethod(); + + //If some step is active this step will become inactive. + stepNavigator.steps().some(function (element) { + if (element.isVisible()) { + self.isVisible(false); + return true; + } + }); + stepNavigator.registerStep( 'payment', null, diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js index 619de95e467f0..a6e7e3efd3d2e 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js @@ -82,6 +82,14 @@ define([ this._super(); if (!quote.isVirtual()) { + //If some step is active this step will become inactive. + stepNavigator.steps().some(function (element) { + if (element.isVisible()) { + self.visible(false); + return true; + } + }); + stepNavigator.registerStep( 'shipping', '', From c12dc31bc40536e5f13577475f0dc28d451b2c17 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Thu, 7 Dec 2017 14:21:16 +0200 Subject: [PATCH 457/653] 8410: Custom Checkout Step and Shipping Step are Highlighted --- .../app/code/Magento/Checkout/frontend/js/view/shipping.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/view/shipping.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/view/shipping.test.js index be27e16a13786..b25c36de28a0c 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/view/shipping.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/view/shipping.test.js @@ -42,7 +42,7 @@ define(['squire', 'ko', 'jquery', 'jquery/validate'], function (Squire, ko, $) { 'Magento_Checkout/js/action/select-shipping-method': jasmine.createSpy(), 'Magento_Checkout/js/model/shipping-rate-registry': jasmine.createSpy(), 'Magento_Checkout/js/action/set-shipping-information': jasmine.createSpy(), - 'Magento_Checkout/js/model/step-navigator': jasmine.createSpyObj('navigator', ['registerStep']), + 'Magento_Checkout/js/model/step-navigator': jasmine.createSpyObj('navigator', ['registerStep', 'steps']), 'Magento_Ui/js/modal/modal': jasmine.createSpy('modal').and.returnValue(modalStub), 'Magento_Checkout/js/model/checkout-data-resolver': jasmine.createSpyObj( 'dataResolver', From 7959af7912ee5262ad0db46b3b57f2ef93dbc7c0 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Thu, 7 Dec 2017 15:49:41 +0200 Subject: [PATCH 458/653] 10797: catalogProductTierPriceManagementV1 DELETE and POST operation wipes out media gallery selections when used on store code "all". --- .../Catalog/Model/ProductRepository.php | 24 ++++++++++++++++++- .../Test/Unit/Model/ProductRepositoryTest.php | 23 ++++++++++++++---- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Catalog/Model/ProductRepository.php b/app/code/Magento/Catalog/Model/ProductRepository.php index 3f4d275fb9553..e6d2de0365333 100644 --- a/app/code/Magento/Catalog/Model/ProductRepository.php +++ b/app/code/Magento/Catalog/Model/ProductRepository.php @@ -507,7 +507,7 @@ protected function processMediaGallery(ProductInterface $product, array $mediaGa foreach ($existingMediaGallery as $key => &$existingEntry) { if (isset($entriesById[$existingEntry['value_id']])) { $updatedEntry = $entriesById[$existingEntry['value_id']]; - if ($updatedEntry['file'] === null) { + if (isset($updatedEntry['file']) && $updatedEntry['file'] === null) { unset($updatedEntry['file']); } $existingMediaGallery[$key] = array_merge($existingEntry, $updatedEntry); @@ -546,6 +546,9 @@ protected function processMediaGallery(ProductInterface $product, array $mediaGa $finalGallery = $product->getData('media_gallery'); $newEntryId = key(array_diff_key($product->getData('media_gallery')['images'], $entriesById)); + if (isset($newEntry['extension_attributes'])) { + $this->processExtensionAttributes($newEntry, $newEntry['extension_attributes']); + } $newEntry = array_replace_recursive($newEntry, $finalGallery['images'][$newEntryId]); $entriesById[$newEntryId] = $newEntry; $finalGallery['images'][$newEntryId] = $newEntry; @@ -788,4 +791,23 @@ private function getCollectionProcessor() } return $this->collectionProcessor; } + + /** + * Convert extension attribute for product media gallery. + * + * @param array $newEntry + * @param array $extensionAttributes + * @return void + */ + private function processExtensionAttributes(array &$newEntry, array $extensionAttributes) + { + foreach ($extensionAttributes as $code => $value) { + if (is_array($value)) { + $this->processExtensionAttributes($newEntry, $value); + } else { + $newEntry[$code] = $value; + } + } + unset($newEntry['extension_attributes']); + } } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php index c98705b4eda63..8cd3fcd11491f 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php @@ -9,7 +9,6 @@ namespace Magento\Catalog\Test\Unit\Model; -use Magento\Catalog\Api\Data\ProductAttributeInterface; use Magento\Framework\Api\Data\ImageContentInterface; use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface; use Magento\Framework\DB\Adapter\ConnectionException; @@ -1178,7 +1177,21 @@ public function testSaveExistingWithNewMediaGalleryEntries() $this->setupProductMocksForSave(); //media gallery data - $this->productData['media_gallery'] = $newEntriesData; + $this->productData['media_gallery_entries'] = [ + [ + 'id' => null, + 'label' => "label_text", + 'position' => 10, + 'disabled' => false, + 'types' => ['image', 'small_image'], + 'content' => [ + ImageContentInterface::NAME => 'filename', + ImageContentInterface::TYPE => 'image/jpeg', + ImageContentInterface::BASE64_ENCODED_DATA => 'encoded_content', + ], + 'media_type' => 'media_type', + ] + ]; $this->extensibleDataObjectConverterMock ->expects($this->once()) ->method('toNestedArray') @@ -1288,7 +1301,7 @@ public function testSaveExistingWithMediaGalleryEntries() //update one entry, delete one entry $newEntries = [ [ - 'value_id' => 5, + 'id' => 5, "label" => "new_label_text", 'file' => 'filename1', 'position' => 10, @@ -1316,7 +1329,7 @@ public function testSaveExistingWithMediaGalleryEntries() $expectedResult = [ [ 'value_id' => 5, - 'value_id' => 5, + 'id' => 5, "label" => "new_label_text", 'file' => 'filename1', 'position' => 10, @@ -1332,7 +1345,7 @@ public function testSaveExistingWithMediaGalleryEntries() $this->setupProductMocksForSave(); //media gallery data - $this->productData['media_gallery']['images'] = $newEntries; + $this->productData['media_gallery_entries'] = $newEntries; $this->extensibleDataObjectConverterMock ->expects($this->once()) ->method('toNestedArray') From 5aef35b950f77917f39406bfcfc9c481275cefe9 Mon Sep 17 00:00:00 2001 From: magento-engcom-team <mikola.malevanec@transoftgroup.com> Date: Thu, 7 Dec 2017 18:24:59 +0200 Subject: [PATCH 459/653] 10797: catalogProductTierPriceManagementV1 DELETE and POST operation wipes out media gallery selections when used on store code "all". --- .../Catalog/Model/ProductRepository.php | 62 ++++++++++++------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/app/code/Magento/Catalog/Model/ProductRepository.php b/app/code/Magento/Catalog/Model/ProductRepository.php index e6d2de0365333..cdab94b57b4e4 100644 --- a/app/code/Magento/Catalog/Model/ProductRepository.php +++ b/app/code/Magento/Catalog/Model/ProductRepository.php @@ -488,8 +488,8 @@ private function processLinks(\Magento\Catalog\Api\Data\ProductInterface $produc * @return $this * @throws InputException * @throws StateException - * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @throws LocalizedException + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function processMediaGallery(ProductInterface $product, array $mediaGalleryEntries) { @@ -531,29 +531,8 @@ protected function processMediaGallery(ProductInterface $product, array $mediaGa } } } + $this->processEntries($product, $newEntries, $entriesById); - foreach ($newEntries as $newEntry) { - if (!isset($newEntry['content'])) { - throw new InputException(__('The image content is not valid.')); - } - /** @var ImageContentInterface $contentDataObject */ - $contentDataObject = $this->contentFactory->create() - ->setName($newEntry['content'][ImageContentInterface::NAME]) - ->setBase64EncodedData($newEntry['content'][ImageContentInterface::BASE64_ENCODED_DATA]) - ->setType($newEntry['content'][ImageContentInterface::TYPE]); - $newEntry['content'] = $contentDataObject; - $this->processNewMediaGalleryEntry($product, $newEntry); - - $finalGallery = $product->getData('media_gallery'); - $newEntryId = key(array_diff_key($product->getData('media_gallery')['images'], $entriesById)); - if (isset($newEntry['extension_attributes'])) { - $this->processExtensionAttributes($newEntry, $newEntry['extension_attributes']); - } - $newEntry = array_replace_recursive($newEntry, $finalGallery['images'][$newEntryId]); - $entriesById[$newEntryId] = $newEntry; - $finalGallery['images'][$newEntryId] = $newEntry; - $product->setData('media_gallery', $finalGallery); - } return $this; } @@ -810,4 +789,41 @@ private function processExtensionAttributes(array &$newEntry, array $extensionAt } unset($newEntry['extension_attributes']); } + + /** + * Convert entries into product media gallery data and set to product. + * + * @param ProductInterface $product + * @param array $newEntries + * @param array $entriesById + * @throws InputException + * @throws LocalizedException + * @throws StateException + * @return void + */ + private function processEntries(ProductInterface $product, array $newEntries, array $entriesById) + { + foreach ($newEntries as $newEntry) { + if (!isset($newEntry['content'])) { + throw new InputException(__('The image content is not valid.')); + } + /** @var ImageContentInterface $contentDataObject */ + $contentDataObject = $this->contentFactory->create() + ->setName($newEntry['content'][ImageContentInterface::NAME]) + ->setBase64EncodedData($newEntry['content'][ImageContentInterface::BASE64_ENCODED_DATA]) + ->setType($newEntry['content'][ImageContentInterface::TYPE]); + $newEntry['content'] = $contentDataObject; + $this->processNewMediaGalleryEntry($product, $newEntry); + + $finalGallery = $product->getData('media_gallery'); + $newEntryId = key(array_diff_key($product->getData('media_gallery')['images'], $entriesById)); + if (isset($newEntry['extension_attributes'])) { + $this->processExtensionAttributes($newEntry, $newEntry['extension_attributes']); + } + $newEntry = array_replace_recursive($newEntry, $finalGallery['images'][$newEntryId]); + $entriesById[$newEntryId] = $newEntry; + $finalGallery['images'][$newEntryId] = $newEntry; + $product->setData('media_gallery', $finalGallery); + } + } } From 4ac80e00d30d7bbffe843c92e775c583feaa82b4 Mon Sep 17 00:00:00 2001 From: nmalevanec <mikola.malevanec@transoftgroup.com> Date: Fri, 8 Dec 2017 11:17:48 +0200 Subject: [PATCH 460/653] 10123: Wrong invoice entity_model in table eav_entity_type. --- app/code/Magento/Sales/Setup/UpgradeData.php | 8 ++++++++ app/code/Magento/Sales/etc/module.xml | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php index 1c36a9a538366..16455d616d853 100644 --- a/app/code/Magento/Sales/Setup/UpgradeData.php +++ b/app/code/Magento/Sales/Setup/UpgradeData.php @@ -108,6 +108,14 @@ public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface [$setup] ); } + if (version_compare($context->getVersion(), '2.0.9', '<')) { + //Correct wrong source model for "invoice" entity type, introduced by mistake in 2.0.1 upgrade. + $salesSetup->updateEntityType( + 'invoice', + 'entity_model', + \Magento\Sales\Model\ResourceModel\Order\Invoice::class + ); + } $this->eavConfig->clear(); } diff --git a/app/code/Magento/Sales/etc/module.xml b/app/code/Magento/Sales/etc/module.xml index 58c7a4f21202a..b234cdad876cc 100644 --- a/app/code/Magento/Sales/etc/module.xml +++ b/app/code/Magento/Sales/etc/module.xml @@ -6,7 +6,7 @@ */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> - <module name="Magento_Sales" setup_version="2.0.8"> + <module name="Magento_Sales" setup_version="2.0.9"> <sequence> <module name="Magento_Rule"/> <module name="Magento_Catalog"/> From 0db60528b24e5fea1614b8cd20b67933758b95aa Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Fri, 8 Dec 2017 13:53:46 +0200 Subject: [PATCH 461/653] magento/magento2#12582: Can't remove item description from wishlist --- .../Wishlist/Controller/Index/Update.php | 2 - .../Wishlist/Controller/UpdateTest.php | 141 ++++++++++++++++++ 2 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Wishlist/Controller/UpdateTest.php diff --git a/app/code/Magento/Wishlist/Controller/Index/Update.php b/app/code/Magento/Wishlist/Controller/Index/Update.php index a79e4aa95ffc5..cc3f222c83065 100644 --- a/app/code/Magento/Wishlist/Controller/Index/Update.php +++ b/app/code/Magento/Wishlist/Controller/Index/Update.php @@ -83,8 +83,6 @@ public function execute() )->defaultCommentString() ) { $description = ''; - } elseif (!strlen($description)) { - $description = $item->getDescription(); } $qty = null; diff --git a/dev/tests/integration/testsuite/Magento/Wishlist/Controller/UpdateTest.php b/dev/tests/integration/testsuite/Magento/Wishlist/Controller/UpdateTest.php new file mode 100644 index 0000000000000..4af27d705f5c9 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Wishlist/Controller/UpdateTest.php @@ -0,0 +1,141 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Wishlist\Controller; + +use Magento\Customer\Helper\View; +use Magento\Customer\Model\Session; +use Magento\Framework\Data\Form\FormKey; +use Magento\Framework\Message\ManagerInterface; +use Magento\Wishlist\Model\Item; +use Psr\Log\LoggerInterface; +use Zend\Http\Request; + +/** + * Tests updating wishlist item comment. + * + * @magentoAppIsolation enabled + * @magentoDbIsolation disabled + * @magentoAppArea frontend + */ +class UpdateTest extends \Magento\TestFramework\TestCase\AbstractController +{ + /** + * @var Session + */ + private $customerSession; + + /** + * @var ManagerInterface + */ + private $messages; + + /** + * @var View + */ + private $customerViewHelper; + + /** + * Description field value for wishlist item. + * + * @var string + */ + private $description = 'some description'; + + /** + * Tests updating wishlist item comment. + * + * @magentoDataFixture Magento/Wishlist/_files/wishlist.php + * @dataProvider commentDataProvider + */ + public function testUpdateComment($postDescription, $postQty, $expectedResult, $presetComment) + { + $itemId = 1; + $wishlistId = 1; + + if ($presetComment) { + $item = $this->_objectManager->create(Item::class)->load($itemId); + $item->setDescription($this->description); + $item->save(); + } + + $formKey = $this->_objectManager->get(FormKey::class); + $this->getRequest()->setPostValue( + [ + 'description' => $postDescription, + 'qty' => $postQty, + 'do' => '', + 'form_key' => $formKey->getFormKey() + ] + )->setMethod(Request::METHOD_POST); + $this->dispatch('wishlist/index/update/wishlist_id/' . $wishlistId); + + $item = $this->_objectManager->create(Item::class)->load($itemId); + + self::assertEquals( + $expectedResult, + $item->getDescription() + ); + } + + /** + * Data provider for testUpdateComment. + * + * @return array + */ + public function commentDataProvider() + { + return [ + 'test adding comment' => [ + 'postDescription' => [1 => $this->description], + 'postQty' => [1 => '1'], + 'expectedResult' => $this->description, + 'presetComment' => false + ], + 'test removing comment' => [ + 'postDescription' => [1 => ''], + 'postQty' => [1 => '1'], + 'expectedResult' => '', + 'presetComment' => true + ], + 'test not changing comment' => [ + 'postDescription' => [], + 'postQty' => [1 => '1'], + 'expectedResult' => $this->description, + 'presetComment' => true + ], + ]; + } + + protected function setUp() + { + parent::setUp(); + $logger = $this->createMock(LoggerInterface::class); + $this->customerSession = $this->_objectManager->get( + Session::class, + [$logger] + ); + /** @var \Magento\Customer\Api\AccountManagementInterface $service */ + $service = $this->_objectManager->create( + \Magento\Customer\Api\AccountManagementInterface::class + ); + $customer = $service->authenticate('customer@example.com', 'password'); + $this->customerSession->setCustomerDataAsLoggedIn($customer); + + $this->customerViewHelper = $this->_objectManager->create(View::class); + + $this->messages = $this->_objectManager->get( + ManagerInterface::class + ); + } + + protected function tearDown() + { + $this->customerSession->logout(); + $this->customerSession = null; + parent::tearDown(); + } +} From 89b8f3a2e4c01b130754e024d00ed34618163b8b Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko <omiroshnichenko@magento.com> Date: Fri, 8 Dec 2017 14:05:59 +0200 Subject: [PATCH 462/653] MAGETWO-84903: Added namespace to product videos fotorama events #12469 --- .../view/frontend/web/js/fotorama-add-video-events.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js index c0036b71ac86a..3104fdc6190dc 100644 --- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js +++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js @@ -207,7 +207,7 @@ define([ if (options.dataMergeStrategy === 'prepend') { this.options.videoData = [].concat( this.options.optionsVideoData[options.selectedOption], - this.options.videoData + this.defaultVideoData ); } else { this.options.videoData = this.options.optionsVideoData[options.selectedOption]; From ef925df91df0d3472511651fd5329aff829da2ed Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov <slopukhov@magento.com> Date: Fri, 8 Dec 2017 14:44:29 +0200 Subject: [PATCH 463/653] MAGETWO-83659: Enable metrics validation for PAT --- setup/performance-toolkit/benchmark.jmx | 753 ++++++++++++------------ 1 file changed, 385 insertions(+), 368 deletions(-) diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx index 655b19760b958..c01e3ed57f3ec 100644 --- a/setup/performance-toolkit/benchmark.jmx +++ b/setup/performance-toolkit/benchmark.jmx @@ -2867,7 +2867,7 @@ if (testLabel <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="Extract filter link from layered navigation" enabled="true"> <stringProp name="XPathExtractor.default"/> <stringProp name="XPathExtractor.refname">attribute_1_filter_url</stringProp> - <stringProp name="XPathExtractor.xpathQuery">((//div[@class="filter-options-content"])[1]//li[@class="item"]//a)[${__javaScript(Math.floor(Math.random()*${attribute_1_options_count})+1)}]/@href</stringProp> + <stringProp name="XPathExtractor.xpathQuery">((//div[@class="filter-options-content"])[1]//li[@class="item"]//a)[1]/@href</stringProp> <boolProp name="XPathExtractor.validate">false</boolProp> <boolProp name="XPathExtractor.tolerant">true</boolProp> <boolProp name="XPathExtractor.namespace">false</boolProp> @@ -2938,7 +2938,7 @@ if (testLabel <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="Extract filter link from layered navigation" enabled="true"> <stringProp name="XPathExtractor.default"/> <stringProp name="XPathExtractor.refname">attribute_2_filter_url</stringProp> - <stringProp name="XPathExtractor.xpathQuery">((//div[@class="filter-options-content"])[2]//li[@class="item"]//a)[${__javaScript(Math.floor(Math.random()*${attribute_2_options_count})+1)}]/@href</stringProp> + <stringProp name="XPathExtractor.xpathQuery">((//div[@class="filter-options-content"])[2]//li[@class="item"]//a)[1]/@href</stringProp> <boolProp name="XPathExtractor.validate">false</boolProp> <boolProp name="XPathExtractor.tolerant">true</boolProp> <boolProp name="XPathExtractor.namespace">false</boolProp> @@ -3228,7 +3228,7 @@ if (testLabel <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="Extract attribute value" enabled="true"> <stringProp name="XPathExtractor.default"/> <stringProp name="XPathExtractor.refname">attribute_value</stringProp> - <stringProp name="XPathExtractor.xpathQuery">((//select[@class="multiselect"])[last()]/option)[${__javaScript(Math.floor(Math.random()*${attribute_options_count})+1)}]/@value</stringProp> + <stringProp name="XPathExtractor.xpathQuery">((//select[@class="multiselect"])[last()]/option)[1]/@value</stringProp> <boolProp name="XPathExtractor.validate">false</boolProp> <boolProp name="XPathExtractor.tolerant">true</boolProp> <boolProp name="XPathExtractor.namespace">false</boolProp> @@ -4262,37 +4262,18 @@ vars.putObject("randomIntGenerator", random); <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - Get Customer Email" enabled="true"> <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/get_customer_email.jmx</stringProp> - <stringProp name="BeanShellSampler.query">import org.apache.jmeter.samplers.SampleResult; - -String siterator = vars.get("customer_emails_index"); -int iterator; -if(siterator == null){ - iterator = 0; - vars.put("customer_emails_index", "0"); -} else { - iterator = Integer.parseInt(siterator); - iterator ++; - vars.put("customer_emails_index", iterator.toString()); -} - -emails_list = props.get("customer_emails_list"); - -threadsNumber = ctx.getThreadGroup().getNumThreads(); -emailsCount = emails_list.size(); -if (threadsNumber > emailsCount) { - log.error(" There are not enough customers for this scenario."); -} else { - clusterLength = Math.round(emailsCount / threadsNumber); - threadNum = ctx.getThreadNum(); - emails_index = clusterLength * threadNum + iterator; - maxLimit = clusterLength * (threadNum + 1); - if (emails_index >= maxLimit) { - iterator = 0; - emails_index = clusterLength * threadNum + iterator; - vars.put("customer_emails_index", iterator.toString()); - } + <stringProp name="BeanShellSampler.query"> +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); } -vars.put("customer_email", emails_list.get(emails_index));</stringProp> +vars.put("customer_email", customerUser); + </stringProp> <stringProp name="BeanShellSampler.filename"/> <stringProp name="BeanShellSampler.parameters"/> <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp> @@ -4488,7 +4469,7 @@ vars.put("product_sku", product.get("sku")); <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx</stringProp></BeanShellSampler> <hashTree/> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product View" enabled="true"> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product ${_counter} View" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> <collectionProp name="Arguments.arguments"/> </elementProp> @@ -4519,7 +4500,7 @@ vars.put("product_sku", product.get("sku")); <hashTree/> </hashTree> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product Add To Wishlist" enabled="true"> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product ${_counter} Add To Wishlist" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="form_key" elementType="HTTPArgument"> @@ -4582,7 +4563,7 @@ vars.put("product_sku", product.get("sku")); <hashTree/> </hashTree> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Load Wishlist Section" enabled="true"> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Load Wishlist Section ${_counter}" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="sections" elementType="HTTPArgument"> @@ -4656,7 +4637,7 @@ vars.put("product_sku", product.get("sku")); <boolProp name="CounterConfig.reset_on_tg_iteration">true</boolProp> </CounterConfig> <hashTree/> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Clear Wishlist" enabled="true"> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Clear Wishlist ${counter}" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="form_key" elementType="HTTPArgument"> @@ -6524,37 +6505,18 @@ vars.put("category_name", props.get("category_names_list").get(number)); <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - Get Customer Email" enabled="true"> <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/get_customer_email.jmx</stringProp> - <stringProp name="BeanShellSampler.query">import org.apache.jmeter.samplers.SampleResult; - -String siterator = vars.get("customer_emails_index"); -int iterator; -if(siterator == null){ - iterator = 0; - vars.put("customer_emails_index", "0"); -} else { - iterator = Integer.parseInt(siterator); - iterator ++; - vars.put("customer_emails_index", iterator.toString()); -} - -emails_list = props.get("customer_emails_list"); - -threadsNumber = ctx.getThreadGroup().getNumThreads(); -emailsCount = emails_list.size(); -if (threadsNumber > emailsCount) { - log.error(" There are not enough customers for this scenario."); -} else { - clusterLength = Math.round(emailsCount / threadsNumber); - threadNum = ctx.getThreadNum(); - emails_index = clusterLength * threadNum + iterator; - maxLimit = clusterLength * (threadNum + 1); - if (emails_index >= maxLimit) { - iterator = 0; - emails_index = clusterLength * threadNum + iterator; - vars.put("customer_emails_index", iterator.toString()); - } + <stringProp name="BeanShellSampler.query"> +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); } -vars.put("customer_email", emails_list.get(emails_index));</stringProp> +vars.put("customer_email", customerUser); + </stringProp> <stringProp name="BeanShellSampler.filename"/> <stringProp name="BeanShellSampler.parameters"/> <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp> @@ -8021,7 +7983,7 @@ try { //id of related product do { - relatedIndex = (int)(Math.random() * props.get("simple_products_list").size()); + relatedIndex = (int)(0.555 * props.get("simple_products_list").size()); } while(i == relatedIndex); vars.put("related_product_id", props.get("simple_products_list").get(relatedIndex).get("id")); } catch (Exception ex) { @@ -20125,9 +20087,9 @@ if (testLabel <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx</stringProp></CookieManager> <hashTree/> - <OnceOnlyController guiclass="OnceOnlyControllerGui" testclass="OnceOnlyController" testname="Once Only Controller" enabled="true"> - <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/once_only_controller.jmx</stringProp> -</OnceOnlyController> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Simple Controller" enabled="true"> + <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/simple_controller.jmx</stringProp> +</GenericController> <hashTree> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - Login" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> @@ -20754,180 +20716,94 @@ if (testLabel <hashTree/> </hashTree> - <RandomController guiclass="RandomControlGui" testclass="RandomController" testname="Random Controller" enabled="true"> - <intProp name="InterleaveControl.style">1</intProp> - <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/admin_create_process_returns/credit_memo_submit.jmx</stringProp></RandomController> - <hashTree> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Credit Memo Submit - Full Refund" enabled="true"> - <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> - <collectionProp name="Arguments.arguments"> - <elementProp name="form_key" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">${admin_form_key}</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">form_key</stringProp> - <stringProp name="Argument.desc">false</stringProp> - </elementProp> - <elementProp name="creditmemo[items][${item_ids_1}][qty]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">1</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[items][${item_ids_1}][qty]</stringProp> - </elementProp> - <elementProp name="creditmemo[items][${item_ids_2}][qty]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">1</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[items][${item_ids_2}][qty]</stringProp> - </elementProp> - <elementProp name="creditmemo[do_offline]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">1</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[do_offline]</stringProp> - </elementProp> - <elementProp name="creditmemo[comment_text]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">Credit Memo added</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[comment_text]</stringProp> - </elementProp> - <elementProp name="creditmemo[shipping_amount]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">10</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[shipping_amount]</stringProp> - </elementProp> - <elementProp name="creditmemo[adjustment_positive]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">0</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[adjustment_positive]</stringProp> - </elementProp> - <elementProp name="creditmemo[adjustment_negative]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">0</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[adjustment_negative]</stringProp> - </elementProp> - </collectionProp> - </elementProp> - <stringProp name="HTTPSampler.domain"/> - <stringProp name="HTTPSampler.port"/> - <stringProp name="HTTPSampler.connect_timeout"/> - <stringProp name="HTTPSampler.response_timeout"/> - <stringProp name="HTTPSampler.protocol">${request_protocol}</stringProp> - <stringProp name="HTTPSampler.contentEncoding"/> - <stringProp name="HTTPSampler.path">${base_path}${admin_path}/sales/order_creditmemo/save/order_id/${order_id}/</stringProp> - <stringProp name="HTTPSampler.method">POST</stringProp> - <boolProp name="HTTPSampler.follow_redirects">true</boolProp> - <boolProp name="HTTPSampler.auto_redirects">false</boolProp> - <boolProp name="HTTPSampler.use_keepalive">true</boolProp> - <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> - <boolProp name="HTTPSampler.monitor">false</boolProp> - <stringProp name="HTTPSampler.embedded_url_re"/> - </HTTPSamplerProxy> - <hashTree> - <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> - <collectionProp name="Asserion.test_strings"> - <stringProp name="-515117447">You created the credit memo</stringProp> - </collectionProp> - <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> - <boolProp name="Assertion.assume_success">false</boolProp> - <intProp name="Assertion.test_type">2</intProp> - </ResponseAssertion> - <hashTree/> - </hashTree> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Credit Memo Submit - Partial Refund" enabled="true"> - <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> - <collectionProp name="Arguments.arguments"> - <elementProp name="form_key" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">${admin_form_key}</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">form_key</stringProp> - <stringProp name="Argument.desc">false</stringProp> - </elementProp> - <elementProp name="creditmemo[items][${item_ids_1}][qty]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">1</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[items][${item_ids_1}][qty]</stringProp> - </elementProp> - <elementProp name="creditmemo[do_offline]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">1</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[do_offline]</stringProp> - </elementProp> - <elementProp name="creditmemo[comment_text]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">Credit Memo added</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[comment_text]</stringProp> - </elementProp> - <elementProp name="creditmemo[shipping_amount]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">10</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[shipping_amount]</stringProp> - </elementProp> - <elementProp name="creditmemo[adjustment_positive]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">0</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[adjustment_positive]</stringProp> - </elementProp> - <elementProp name="creditmemo[adjustment_negative]" elementType="HTTPArgument"> - <boolProp name="HTTPArgument.always_encode">true</boolProp> - <stringProp name="Argument.value">0</stringProp> - <stringProp name="Argument.metadata">=</stringProp> - <boolProp name="HTTPArgument.use_equals">true</boolProp> - <stringProp name="Argument.name">creditmemo[adjustment_negative]</stringProp> - </elementProp> - </collectionProp> - </elementProp> - <stringProp name="HTTPSampler.domain"/> - <stringProp name="HTTPSampler.port"/> - <stringProp name="HTTPSampler.connect_timeout"/> - <stringProp name="HTTPSampler.response_timeout"/> - <stringProp name="HTTPSampler.protocol">${request_protocol}</stringProp> - <stringProp name="HTTPSampler.contentEncoding"/> - <stringProp name="HTTPSampler.path">${base_path}${admin_path}/sales/order_creditmemo/save/order_id/${order_id}/</stringProp> - <stringProp name="HTTPSampler.method">POST</stringProp> - <boolProp name="HTTPSampler.follow_redirects">true</boolProp> - <boolProp name="HTTPSampler.auto_redirects">false</boolProp> - <boolProp name="HTTPSampler.use_keepalive">true</boolProp> - <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> - <boolProp name="HTTPSampler.monitor">false</boolProp> - <stringProp name="HTTPSampler.embedded_url_re"/> - </HTTPSamplerProxy> - <hashTree> - <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> - <collectionProp name="Asserion.test_strings"> - <stringProp name="-515117447">You created the credit memo</stringProp> - </collectionProp> - <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> - <boolProp name="Assertion.assume_success">false</boolProp> - <intProp name="Assertion.test_type">2</intProp> - </ResponseAssertion> - <hashTree/> - </hashTree> - </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Credit Memo Submit - Full Refund" enabled="true"> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> + <collectionProp name="Arguments.arguments"> + <elementProp name="form_key" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">${admin_form_key}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">form_key</stringProp> + <stringProp name="Argument.desc">false</stringProp> + </elementProp> + <elementProp name="creditmemo[items][${item_ids_1}][qty]" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">1</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">creditmemo[items][${item_ids_1}][qty]</stringProp> + </elementProp> + <elementProp name="creditmemo[items][${item_ids_2}][qty]" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">1</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">creditmemo[items][${item_ids_2}][qty]</stringProp> + </elementProp> + <elementProp name="creditmemo[do_offline]" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">1</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">creditmemo[do_offline]</stringProp> + </elementProp> + <elementProp name="creditmemo[comment_text]" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">Credit Memo added</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">creditmemo[comment_text]</stringProp> + </elementProp> + <elementProp name="creditmemo[shipping_amount]" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">10</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">creditmemo[shipping_amount]</stringProp> + </elementProp> + <elementProp name="creditmemo[adjustment_positive]" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">0</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">creditmemo[adjustment_positive]</stringProp> + </elementProp> + <elementProp name="creditmemo[adjustment_negative]" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">0</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">creditmemo[adjustment_negative]</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"/> + <stringProp name="HTTPSampler.port"/> + <stringProp name="HTTPSampler.connect_timeout"/> + <stringProp name="HTTPSampler.response_timeout"/> + <stringProp name="HTTPSampler.protocol">${request_protocol}</stringProp> + <stringProp name="HTTPSampler.contentEncoding"/> + <stringProp name="HTTPSampler.path">${base_path}${admin_path}/sales/order_creditmemo/save/order_id/${order_id}/</stringProp> + <stringProp name="HTTPSampler.method">POST</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"/> + <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/admin_create_process_returns/credit_memo_full_refund.jmx</stringProp></HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="-515117447">You created the credit memo</stringProp> + </collectionProp> + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">2</intProp> + </ResponseAssertion> + <hashTree/> + </hashTree> <TestAction guiclass="TestActionGui" testclass="TestAction" testname="Create/Process Returns - Pause" enabled="true"> <intProp name="ActionProcessor.action">1</intProp> @@ -25406,37 +25282,18 @@ vars.putObject("randomIntGenerator", random); <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - Get Customer Email" enabled="true"> <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/get_customer_email.jmx</stringProp> - <stringProp name="BeanShellSampler.query">import org.apache.jmeter.samplers.SampleResult; - -String siterator = vars.get("customer_emails_index"); -int iterator; -if(siterator == null){ - iterator = 0; - vars.put("customer_emails_index", "0"); -} else { - iterator = Integer.parseInt(siterator); - iterator ++; - vars.put("customer_emails_index", iterator.toString()); -} - -emails_list = props.get("customer_emails_list"); - -threadsNumber = ctx.getThreadGroup().getNumThreads(); -emailsCount = emails_list.size(); -if (threadsNumber > emailsCount) { - log.error(" There are not enough customers for this scenario."); -} else { - clusterLength = Math.round(emailsCount / threadsNumber); - threadNum = ctx.getThreadNum(); - emails_index = clusterLength * threadNum + iterator; - maxLimit = clusterLength * (threadNum + 1); - if (emails_index >= maxLimit) { - iterator = 0; - emails_index = clusterLength * threadNum + iterator; - vars.put("customer_emails_index", iterator.toString()); - } + <stringProp name="BeanShellSampler.query"> +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); } -vars.put("customer_email", emails_list.get(emails_index));</stringProp> +vars.put("customer_email", customerUser); + </stringProp> <stringProp name="BeanShellSampler.filename"/> <stringProp name="BeanShellSampler.parameters"/> <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp> @@ -28015,7 +27872,7 @@ var productsPageSize = Integer.parseInt(vars.get("products_page_size")); var totalNumberOfPages = Integer.parseInt(vars.get("pages_count_product")); // Randomly select a page. -var randomProductsPage = Math.floor((Math.random() * totalNumberOfPages) + 1); +var randomProductsPage = Math.floor((0.555 * totalNumberOfPages) + 1); // Get the first and last product id on that page. var lastProductIdOnPage = randomProductsPage * productsPageSize; @@ -28030,8 +27887,8 @@ vars.put("productId1", String.valueOf(randomProductId1)); vars.put("productId2", String.valueOf(randomProductId2)); vars.put("productId3", String.valueOf(randomProductId3)); -var randomQuantity = Math.floor(Math.random() * 1000) + 1; -var randomPrice = Math.floor(Math.random() * 500) + 10; +var randomQuantity = Math.floor(0.555 * 1000) + 1; +var randomPrice = Math.floor(0.555 * 500) + 10; var randomVisibility = Math.floor(random.nextInt(4)) + 1; vars.put("quantity", String.valueOf(randomQuantity)); @@ -28498,37 +28355,18 @@ if (testLabel <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - Get Customer Email" enabled="true"> <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/get_customer_email.jmx</stringProp> - <stringProp name="BeanShellSampler.query">import org.apache.jmeter.samplers.SampleResult; - -String siterator = vars.get("customer_emails_index"); -int iterator; -if(siterator == null){ - iterator = 0; - vars.put("customer_emails_index", "0"); -} else { - iterator = Integer.parseInt(siterator); - iterator ++; - vars.put("customer_emails_index", iterator.toString()); -} - -emails_list = props.get("customer_emails_list"); - -threadsNumber = ctx.getThreadGroup().getNumThreads(); -emailsCount = emails_list.size(); -if (threadsNumber > emailsCount) { - log.error(" There are not enough customers for this scenario."); -} else { - clusterLength = Math.round(emailsCount / threadsNumber); - threadNum = ctx.getThreadNum(); - emails_index = clusterLength * threadNum + iterator; - maxLimit = clusterLength * (threadNum + 1); - if (emails_index >= maxLimit) { - iterator = 0; - emails_index = clusterLength * threadNum + iterator; - vars.put("customer_emails_index", iterator.toString()); - } + <stringProp name="BeanShellSampler.query"> +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); } -vars.put("customer_email", emails_list.get(emails_index));</stringProp> +vars.put("customer_email", customerUser); + </stringProp> <stringProp name="BeanShellSampler.filename"/> <stringProp name="BeanShellSampler.parameters"/> <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp> @@ -29257,37 +29095,18 @@ vars.put("category_name", props.get("category_names_list").get(number)); <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - Get Customer Email" enabled="true"> <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/get_customer_email.jmx</stringProp> - <stringProp name="BeanShellSampler.query">import org.apache.jmeter.samplers.SampleResult; - -String siterator = vars.get("customer_emails_index"); -int iterator; -if(siterator == null){ - iterator = 0; - vars.put("customer_emails_index", "0"); -} else { - iterator = Integer.parseInt(siterator); - iterator ++; - vars.put("customer_emails_index", iterator.toString()); -} - -emails_list = props.get("customer_emails_list"); - -threadsNumber = ctx.getThreadGroup().getNumThreads(); -emailsCount = emails_list.size(); -if (threadsNumber > emailsCount) { - log.error(" There are not enough customers for this scenario."); -} else { - clusterLength = Math.round(emailsCount / threadsNumber); - threadNum = ctx.getThreadNum(); - emails_index = clusterLength * threadNum + iterator; - maxLimit = clusterLength * (threadNum + 1); - if (emails_index >= maxLimit) { - iterator = 0; - emails_index = clusterLength * threadNum + iterator; - vars.put("customer_emails_index", iterator.toString()); - } + <stringProp name="BeanShellSampler.query"> +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); } -vars.put("customer_email", emails_list.get(emails_index));</stringProp> +vars.put("customer_email", customerUser); + </stringProp> <stringProp name="BeanShellSampler.filename"/> <stringProp name="BeanShellSampler.parameters"/> <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp> @@ -29769,44 +29588,31 @@ vars.put("category_name", props.get("category_names_list").get(number)); <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/common/extract_category_setup.jmx</stringProp></BeanShellSampler> <hashTree/> + <CriticalSectionController guiclass="CriticalSectionControllerGui" testclass="CriticalSectionController" testname="Get Customer Email" enabled="true"> + <stringProp name="CriticalSectionController.lockName">get-email</stringProp> + <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/lock_controller.jmx</stringProp></CriticalSectionController> + <hashTree> + <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - Get Customer Email" enabled="true"> <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/get_customer_email.jmx</stringProp> - <stringProp name="BeanShellSampler.query">import org.apache.jmeter.samplers.SampleResult; - -String siterator = vars.get("customer_emails_index"); -int iterator; -if(siterator == null){ - iterator = 0; - vars.put("customer_emails_index", "0"); -} else { - iterator = Integer.parseInt(siterator); - iterator ++; - vars.put("customer_emails_index", iterator.toString()); -} - -emails_list = props.get("customer_emails_list"); - -threadsNumber = ctx.getThreadGroup().getNumThreads(); -emailsCount = emails_list.size(); -if (threadsNumber > emailsCount) { - log.error(" There are not enough customers for this scenario."); -} else { - clusterLength = Math.round(emailsCount / threadsNumber); - threadNum = ctx.getThreadNum(); - emails_index = clusterLength * threadNum + iterator; - maxLimit = clusterLength * (threadNum + 1); - if (emails_index >= maxLimit) { - iterator = 0; - emails_index = clusterLength * threadNum + iterator; - vars.put("customer_emails_index", iterator.toString()); - } + <stringProp name="BeanShellSampler.query"> +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); } -vars.put("customer_email", emails_list.get(emails_index));</stringProp> +vars.put("customer_email", customerUser); + </stringProp> <stringProp name="BeanShellSampler.filename"/> <stringProp name="BeanShellSampler.parameters"/> <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp> </BeanShellSampler> <hashTree/> + </hashTree> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Login Page" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> @@ -30044,6 +29850,175 @@ vars.put("customer_email", emails_list.get(emails_index));</stringProp> <hashTree/> </hashTree> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Make Cart Empty" enabled="true"> + <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/simple_controller.jmx</stringProp> +</GenericController> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Cart" enabled="true"> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> + <collectionProp name="Arguments.arguments"/> + </elementProp> + <stringProp name="HTTPSampler.domain"/> + <stringProp name="HTTPSampler.port"/> + <stringProp name="HTTPSampler.connect_timeout"/> + <stringProp name="HTTPSampler.response_timeout"/> + <stringProp name="HTTPSampler.protocol"/> + <stringProp name="HTTPSampler.contentEncoding"/> + <stringProp name="HTTPSampler.path">${base_path}checkout/cart/</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"/> + <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/open_cart.jmx</stringProp></HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Cart Opened" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="-179817969"><title>Shopping Cart</title></stringProp> + </collectionProp> + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">2</intProp> + </ResponseAssertion> + <hashTree/> + <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract cart qty inputs" enabled="true"> + <stringProp name="RegexExtractor.useHeaders">false</stringProp> + <stringProp name="RegexExtractor.refname">cart_items_qty_inputs</stringProp> + <stringProp name="RegexExtractor.regex">name="cart\[([^\[\]]+)\]\[qty\]"</stringProp> + <stringProp name="RegexExtractor.template">$1$</stringProp> + <stringProp name="RegexExtractor.default"/> + <stringProp name="RegexExtractor.match_number">-1</stringProp> + </RegexExtractor> + <hashTree/> + </hashTree> + + <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Remove Items From Cart" enabled="true"> + <boolProp name="LoopController.continue_forever">true</boolProp> + <stringProp name="LoopController.loops">${cart_items_qty_inputs_matchNr}</stringProp> + <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/loop_controller.jmx</stringProp></LoopController> + <hashTree> + <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Counter" enabled="true"> + <stringProp name="CounterConfig.start">1</stringProp> + <stringProp name="CounterConfig.end"/> + <stringProp name="CounterConfig.incr">1</stringProp> + <stringProp name="CounterConfig.name">_counter</stringProp> + <stringProp name="CounterConfig.format"/> + <boolProp name="CounterConfig.per_user">true</boolProp> + <boolProp name="CounterConfig.reset_on_tg_iteration">true</boolProp> + </CounterConfig> + <hashTree/> + + <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - Prepare Product Data for Removing from Cart" enabled="true"> + <stringProp name="BeanShellSampler.query"> +id = vars.get("_counter"); +vars.put("uenc", vars.get("cart_items_uencs_" + id)); +vars.put("item_id", vars.get("cart_items_qty_inputs_" + id)); + </stringProp> + <stringProp name="BeanShellSampler.filename"/> + <stringProp name="BeanShellSampler.parameters"/> + <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp> + <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/remove_item_from_cart_setup.jmx</stringProp></BeanShellSampler> + <hashTree/> + + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Remove item" enabled="true"> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> + <collectionProp name="Arguments.arguments"> + <elementProp name="form_key" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">${form_key}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">form_key</stringProp> + </elementProp> + <elementProp name="uenc" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">${uenc}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">uenc</stringProp> + </elementProp> + <elementProp name="id" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value">${item_id}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">id</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"/> + <stringProp name="HTTPSampler.port"/> + <stringProp name="HTTPSampler.connect_timeout"/> + <stringProp name="HTTPSampler.response_timeout"/> + <stringProp name="HTTPSampler.protocol"/> + <stringProp name="HTTPSampler.contentEncoding"/> + <stringProp name="HTTPSampler.path">${base_path}checkout/cart/delete/</stringProp> + <stringProp name="HTTPSampler.method">POST</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"/> + <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/remove_item_from_cart.jmx</stringProp></HTTPSamplerProxy> + </hashTree> + + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Check Cart is Empty" enabled="true"> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> + <collectionProp name="Arguments.arguments"> + <elementProp name="sections" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">cart</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">sections</stringProp> + </elementProp> + <elementProp name="update_section_id" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">true</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">update_section_id</stringProp> + </elementProp> + <elementProp name="_" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">true</boolProp> + <stringProp name="Argument.value">${__time()}${__Random(1,1000000)}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + <boolProp name="HTTPArgument.use_equals">true</boolProp> + <stringProp name="Argument.name">_</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"/> + <stringProp name="HTTPSampler.port"/> + <stringProp name="HTTPSampler.connect_timeout"/> + <stringProp name="HTTPSampler.response_timeout"/> + <stringProp name="HTTPSampler.protocol">${request_protocol}</stringProp> + <stringProp name="HTTPSampler.contentEncoding"/> + <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"/> + <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/check_cart_is_empty.jmx</stringProp></HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="-350323027">\"summary_count\":0</stringProp> + </collectionProp> + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">2</intProp> + </ResponseAssertion> + <hashTree/> + </hashTree> + </hashTree> + <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Add Simple Products to Cart" enabled="true"> <boolProp name="LoopController.continue_forever">true</boolProp> <stringProp name="LoopController.loops">2</stringProp> @@ -30631,6 +30606,48 @@ vars.put("totalProductsAdded", String.valueOf(productsAdded)); <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx</stringProp></HeaderManager> <hashTree/> </hashTree> + </hashTree> + + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Logout" enabled="true"> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true"> + <collectionProp name="Arguments.arguments"/> + </elementProp> + <stringProp name="HTTPSampler.domain"/> + <stringProp name="HTTPSampler.port"/> + <stringProp name="HTTPSampler.connect_timeout"/> + <stringProp name="HTTPSampler.response_timeout"/> + <stringProp name="HTTPSampler.protocol">${request_protocol}</stringProp> + <stringProp name="HTTPSampler.contentEncoding"/> + <stringProp name="HTTPSampler.path">${base_path}customer/account/logout/</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <boolProp name="HTTPSampler.monitor">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"/> + <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/common/logout.jmx</stringProp></HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1723813687">You are signed out.</stringProp> + </collectionProp> + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">2</intProp> + </ResponseAssertion> + <hashTree/> + + <BeanShellPostProcessor guiclass="TestBeanGUI" testclass="BeanShellPostProcessor" testname="Return Customer to Pool" enabled="true"> + <boolProp name="resetInterpreter">false</boolProp> + <stringProp name="parameters"/> + <stringProp name="filename"/> + <stringProp name="script"> +adminUserList = props.get("customer_emails_list"); +adminUserList.add(vars.get("customer_email")); + </stringProp> + <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/common/return_email_to_pool.jmx</stringProp></BeanShellPostProcessor> + <hashTree/> </hashTree> </hashTree> From 3fed3a86bfc3c6ec8661ae2d904790eed4f7c6e7 Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov <slopukhov@magento.com> Date: Fri, 8 Dec 2017 15:53:53 +0200 Subject: [PATCH 464/653] MAGETWO-83659: Enable metrics validation for PAT --- setup/performance-toolkit/README.md | 2 +- setup/performance-toolkit/benchmark.jmx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/setup/performance-toolkit/README.md b/setup/performance-toolkit/README.md index 0152f3f917ad3..700f6cd0d775d 100644 --- a/setup/performance-toolkit/README.md +++ b/setup/performance-toolkit/README.md @@ -62,7 +62,7 @@ The following parameters can be passed to the `benchmark.jmx` scenario: | admin_user | admin | Admin backend user. | | admin_password | 123123q | Admin backend password. | | customer_password | 123123q | Storefront customer password. | -| customers_page_size | 20 | Page size for customers grid in Magento Admin. | +| customers_page_size | 50 | Page size for customers grid in Magento Admin. | | files_folder | ./files/ | Path to various files that are used in scenario (`setup/performance-toolkit/files`). | | loops | 1 | Number of loops to run. | | frontendPoolUsers | 1 | Total number of Frontend threads. | diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx index c01e3ed57f3ec..2732cfd492c0a 100644 --- a/setup/performance-toolkit/benchmark.jmx +++ b/setup/performance-toolkit/benchmark.jmx @@ -306,7 +306,7 @@ </elementProp> <elementProp name="customers_page_size" elementType="Argument"> <stringProp name="Argument.name">customers_page_size</stringProp> - <stringProp name="Argument.value">${__P(customers_page_size,20)}</stringProp> + <stringProp name="Argument.value">${__P(customers_page_size,50)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="dashboard_enabled" elementType="Argument"> @@ -356,7 +356,7 @@ </elementProp> <elementProp name="orders_page_size" elementType="Argument"> <stringProp name="Argument.name">orders_page_size</stringProp> - <stringProp name="Argument.value">${__P(orders_page_size,20)}</stringProp> + <stringProp name="Argument.value">${__P(orders_page_size,50)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="othersPoolUsers" elementType="Argument"> @@ -376,7 +376,7 @@ </elementProp> <elementProp name="products_page_size" elementType="Argument"> <stringProp name="Argument.name">products_page_size</stringProp> - <stringProp name="Argument.value">${__P(products_page_size,20)}</stringProp> + <stringProp name="Argument.value">${__P(products_page_size,50)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="ramp_period" elementType="Argument"> From ac4dd33ea39e3d25226291282560ca3083635e7b Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Fri, 8 Dec 2017 16:46:57 +0200 Subject: [PATCH 465/653] magento/magento2#12259: Save and Duplicated product not working --- .../Magento/Catalog/Model/Product/Copier.php | 1 + .../Catalog/Model/Product/CopierTest.php | 68 +++++++++++++++++++ .../_files/product_simple_rollback.php | 22 +++--- 3 files changed, 79 insertions(+), 12 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/Model/Product/CopierTest.php diff --git a/app/code/Magento/Catalog/Model/Product/Copier.php b/app/code/Magento/Catalog/Model/Product/Copier.php index e94104ae473a0..906280257d49b 100644 --- a/app/code/Magento/Catalog/Model/Product/Copier.php +++ b/app/code/Magento/Catalog/Model/Product/Copier.php @@ -83,6 +83,7 @@ public function copy(\Magento\Catalog\Model\Product $product) $duplicate->save(); $isDuplicateSaved = true; } catch (\Magento\Framework\Exception\AlreadyExistsException $e) { + } catch (\Magento\UrlRewrite\Model\Exception\UrlAlreadyExistsException $e) { } } while (!$isDuplicateSaved); $this->getOptionRepository()->duplicate($product, $duplicate); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/CopierTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/CopierTest.php new file mode 100644 index 0000000000000..8c91f5689f683 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/CopierTest.php @@ -0,0 +1,68 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Catalog\Model\Product; + + +use Magento\Catalog\Model\ProductRepository; + +class CopierTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var \Magento\Framework\ObjectManagerInterface + */ + private $objectManager; + + /** + * @var \Magento\Catalog\Model\Product\Copier + */ + private $copier; + + /** + * @var \Magento\Catalog\Model\ProductRepository + */ + private $productRepository; + + /** + * Tests multiple duplication of the same product. + * + * @magentoDataFixture Magento/Catalog/_files/product_simple.php + * @magentoAppArea adminhtml + * @magentoDbIsolation disabled + * @magentoAppIsolation enabled + */ + public function testDoubleCopy() + { + $product = $this->productRepository->get('simple'); + + $product1 = $this->copier->copy($product); + $this->assertEquals( + 'simple-1', + $product1->getSku() + ); + $this->assertEquals( + 'simple-product-1', + $product1->getUrlKey() + ); + + $product2 = $this->copier->copy($product); + $this->assertEquals( + 'simple-2', + $product2->getSku() + ); + $this->assertEquals( + 'simple-product-2', + $product2->getUrlKey() + ); + } + + protected function setUp() + { + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $this->copier = $this->objectManager->get(Copier::class); + $this->productRepository = $this->objectManager->get(ProductRepository::class); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_rollback.php index 28d229d06b2c0..bdefb1470ec2e 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_rollback.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_rollback.php @@ -3,23 +3,21 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ -use Magento\Framework\Exception\NoSuchEntityException; -\Magento\TestFramework\Helper\Bootstrap::getInstance()->getInstance()->reinitialize(); +use Magento\Catalog\Model\Product; +use Magento\Catalog\Model\ResourceModel\Product\Collection; +use Magento\Framework\Registry; +use Magento\TestFramework\Helper\Bootstrap; -/** @var \Magento\Framework\Registry $registry */ -$registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Framework\Registry::class); +/** @var Registry $registry */ +$registry = Bootstrap::getObjectManager()->get(Registry::class); $registry->unregister('isSecureArea'); $registry->register('isSecureArea', true); -/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ -$productRepository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() - ->get(\Magento\Catalog\Api\ProductRepositoryInterface::class); -try { - $product = $productRepository->get('simple', false, null, true); - $productRepository->delete($product); -} catch (NoSuchEntityException $e) { -} +/** @var Collection $productCollection */ +$productCollection = Bootstrap::getObjectManager()->get(Product::class)->getCollection(); +$productCollection->delete(); + $registry->unregister('isSecureArea'); $registry->register('isSecureArea', false); From 04ff6611e313efaed87d88f36e25e7c82cb95f26 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Fri, 8 Dec 2017 16:49:01 +0200 Subject: [PATCH 466/653] 8410: Custom Checkout Step and Shipping Step are Highlighted --- .../Checkout/view/frontend/web/js/view/payment.js | 14 ++++++++------ .../Checkout/view/frontend/web/js/view/shipping.js | 14 ++++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js index 94ccf7a24f384..5a4e1ad5a91a5 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js @@ -51,12 +51,14 @@ define([ checkoutDataResolver.resolvePaymentMethod(); //If some step is active this step will become inactive. - stepNavigator.steps().some(function (element) { - if (element.isVisible()) { - self.isVisible(false); - return true; - } - }); + if (stepNavigator.steps()) { + stepNavigator.steps().some(function (element) { + if (element.isVisible()) { + self.isVisible(false); + return true; + } + }); + } stepNavigator.registerStep( 'payment', diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js index a6e7e3efd3d2e..d99fc56458d76 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js @@ -83,12 +83,14 @@ define([ if (!quote.isVirtual()) { //If some step is active this step will become inactive. - stepNavigator.steps().some(function (element) { - if (element.isVisible()) { - self.visible(false); - return true; - } - }); + if (stepNavigator.steps()) { + stepNavigator.steps().some(function (element) { + if (element.isVisible()) { + self.visible(false); + return true; + } + }); + } stepNavigator.registerStep( 'shipping', From 4996ea2e82ea1fc98e352b1450b9824b9cefb59f Mon Sep 17 00:00:00 2001 From: nmalevanec <mikola.malevanec@transoftgroup.com> Date: Fri, 8 Dec 2017 17:14:59 +0200 Subject: [PATCH 467/653] 12535: Product change sku via repository. --- .../Catalog/Model/ProductRepository.php | 11 +++- .../Test/Unit/Model/ProductRepositoryTest.php | 4 +- .../Catalog/Model/ProductRepositoryTest.php | 56 +++++++++++++++++++ 3 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/Model/ProductRepositoryTest.php diff --git a/app/code/Magento/Catalog/Model/ProductRepository.php b/app/code/Magento/Catalog/Model/ProductRepository.php index e814dc03cf37f..2b9ee8f862907 100644 --- a/app/code/Magento/Catalog/Model/ProductRepository.php +++ b/app/code/Magento/Catalog/Model/ProductRepository.php @@ -333,8 +333,13 @@ protected function initializeProductData(array $productData, $createNew) $product->setWebsiteIds([$this->storeManager->getStore(true)->getWebsiteId()]); } } else { - unset($this->instances[$productData['sku']]); - $product = $this->get($productData['sku']); + if (!empty($productData['id'])) { + unset($this->instancesById[$productData['id']]); + $product = $this->getById($productData['id']); + } else { + unset($this->instances[$productData['sku']]); + $product = $this->get($productData['sku']); + } } foreach ($productData as $key => $value) { @@ -562,7 +567,7 @@ public function save(\Magento\Catalog\Api\Data\ProductInterface $product, $saveO $tierPrices = $product->getData('tier_price'); try { - $existingProduct = $this->get($product->getSku()); + $existingProduct = $product->getId() ? $this->getById($product->getId()) : $this->get($product->getSku()); $product->setData( $this->resourceModel->getLinkField(), diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php index c98705b4eda63..2a9a867fa20b5 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php @@ -610,7 +610,7 @@ public function testSaveException() ->willReturn(true); $this->resourceModelMock->expects($this->once())->method('save')->with($this->productMock) ->willThrowException(new \Magento\Eav\Model\Entity\Attribute\Exception(__('123'))); - $this->productMock->expects($this->once())->method('getId')->willReturn(null); + $this->productMock->expects($this->exactly(2))->method('getId')->willReturn(null); $this->extensibleDataObjectConverterMock ->expects($this->once()) ->method('toNestedArray') @@ -634,7 +634,7 @@ public function testSaveInvalidProductException() $this->initializationHelperMock->expects($this->never())->method('initialize'); $this->resourceModelMock->expects($this->once())->method('validate')->with($this->productMock) ->willReturn(['error1', 'error2']); - $this->productMock->expects($this->never())->method('getId'); + $this->productMock->expects($this->once())->method('getId')->willReturn(null); $this->extensibleDataObjectConverterMock ->expects($this->once()) ->method('toNestedArray') diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductRepositoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductRepositoryTest.php new file mode 100644 index 0000000000000..cbd2a90b4d744 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductRepositoryTest.php @@ -0,0 +1,56 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Catalog\Model; + +use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Catalog\Model\ResourceModel\Product as ProductResource; +use Magento\TestFramework\Helper\Bootstrap; + +/** + * Provide tests for ProductRepository model. + */ +class ProductRepositoryTest extends \PHPUnit\Framework\TestCase +{ + /** + * Test subject. + * + * @var ProductRepositoryInterface + */ + private $productRepository; + + /** + * @inheritdoc + */ + protected function setUp() + { + $this->productRepository = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class); + } + + /** + * Test Product Repository can change(update) "sku" for given product. + * + * @magentoDataFixture Magento/Catalog/_files/product_simple.php + * @magentoDbIsolation enabled + * @magentoAppArea adminhtml + */ + public function testUpdateProductSku() + { + $newSku = 'simple-edited'; + $productId = Bootstrap::getObjectManager()->get(ProductResource::class)->getIdBySku('simple'); + $initialProduct = Bootstrap::getObjectManager()->create(Product::class)->load($productId); + + $initialProduct->setSku($newSku); + $this->productRepository->save($initialProduct); + + $updatedProduct = Bootstrap::getObjectManager()->create(Product::class); + $updatedProduct->load($productId); + self::assertSame($newSku, $updatedProduct->getSku()); + + //clean up. + $this->productRepository->delete($updatedProduct); + } +} From fccecf386b710d779fcf497e0a282d8ddb0703a4 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Fri, 8 Dec 2017 17:50:05 +0200 Subject: [PATCH 468/653] 8410: Custom Checkout Step and Shipping Step are Highlighted --- app/code/Magento/Checkout/view/frontend/web/js/view/payment.js | 1 + app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js | 1 + 2 files changed, 2 insertions(+) diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js index 5a4e1ad5a91a5..3753091f0db3b 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js @@ -55,6 +55,7 @@ define([ stepNavigator.steps().some(function (element) { if (element.isVisible()) { self.isVisible(false); + return true; } }); diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js index d99fc56458d76..52078488af4ad 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js @@ -87,6 +87,7 @@ define([ stepNavigator.steps().some(function (element) { if (element.isVisible()) { self.visible(false); + return true; } }); From 41db211ad868cae7b594b909f875007f7aef1285 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Fri, 8 Dec 2017 14:37:06 +0200 Subject: [PATCH 469/653] 12560: Back-End issue for multi-store website: when editing Order shipping/billing address - allowed countries are selected from wrong Store View --- .../Block/Adminhtml/Order/Address/Form.php | 16 ++++ .../Adminhtml/Order/Create/Form/Address.php | 12 ++- .../Adminhtml/Order/Address/FormTest.php | 92 +++++++++++++++++++ 3 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Address/FormTest.php diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Address/Form.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Address/Form.php index f2b454260dc22..2d23bca110ae2 100644 --- a/app/code/Magento/Sales/Block/Adminhtml/Order/Address/Form.php +++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Address/Form.php @@ -135,4 +135,20 @@ public function getFormValues() { return $this->_getAddress()->getData(); } + + /** + * @inheritdoc + */ + protected function processCountryOptions( + \Magento\Framework\Data\Form\Element\AbstractElement $countryElement, + $storeId = null + ) { + /** @var \Magento\Sales\Model\Order\Address $address */ + $address = $this->_coreRegistry->registry('order_address'); + if ($address !== null) { + $storeId = $address->getOrder()->getStoreId(); + } + + parent::processCountryOptions($countryElement, $storeId); + } } diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/Address.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/Address.php index 5738e8ee33399..6625f438f9515 100644 --- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/Address.php +++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/Address.php @@ -293,11 +293,17 @@ protected function _prepareForm() /** * @param \Magento\Framework\Data\Form\Element\AbstractElement $countryElement + * @param string|int $storeId + * * @return void */ - private function processCountryOptions(\Magento\Framework\Data\Form\Element\AbstractElement $countryElement) - { - $storeId = $this->getBackendQuoteSession()->getStoreId(); + protected function processCountryOptions( + \Magento\Framework\Data\Form\Element\AbstractElement $countryElement, + $storeId = null + ) { + if ($storeId === null) { + $storeId = $this->getBackendQuoteSession()->getStoreId(); + } $options = $this->getCountriesCollection() ->loadByStore($storeId) ->toOptionArray(); diff --git a/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Address/FormTest.php b/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Address/FormTest.php new file mode 100644 index 0000000000000..8a11717c95420 --- /dev/null +++ b/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Address/FormTest.php @@ -0,0 +1,92 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Sales\Test\Unit\Block\Adminhtml\Order\Address; + +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ +class FormTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var \Magento\Sales\Block\Adminhtml\Order\Address\Form + */ + private $addressBlock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $formFactoryMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $customerFormFactoryMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $coreRegistryMock; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $countriesCollection; + + protected function setUp() + { + $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + + $this->formFactoryMock = $this->createMock(\Magento\Framework\Data\FormFactory::class); + $this->customerFormFactoryMock = $this->createMock(\Magento\Customer\Model\Metadata\FormFactory::class); + $this->coreRegistryMock = $this->createMock(\Magento\Framework\Registry::class); + $this->countriesCollection = $this->createMock( + \Magento\Directory\Model\ResourceModel\Country\Collection::class + ); + + $this->addressBlock = $objectManager->getObject( + \Magento\Sales\Block\Adminhtml\Order\Address\Form::class, + [ + '_formFactory' => $this->formFactoryMock, + '_customerFormFactory' => $this->customerFormFactoryMock, + '_coreRegistry' => $this->coreRegistryMock, + 'countriesCollection' => $this->countriesCollection, + ] + ); + } + + public function testGetForm() + { + $formMock = $this->createMock(\Magento\Framework\Data\Form::class); + $fieldsetMock = $this->createMock(\Magento\Framework\Data\Form\Element\Fieldset::class); + $addressFormMock = $this->createMock(\Magento\Customer\Model\Metadata\Form::class); + $addressMock = $this->createMock(\Magento\Sales\Model\Order\Address::class); + $selectMock = $this->createMock(\Magento\Framework\Data\Form\Element\Select::class); + $orderMock = $this->createMock(\Magento\Sales\Model\Order::class); + + $this->formFactoryMock->expects($this->atLeastOnce())->method('create')->willReturn($formMock); + $formMock->expects($this->atLeastOnce())->method('addFieldset')->willReturn($fieldsetMock); + $this->customerFormFactoryMock->expects($this->atLeastOnce())->method('create')->willReturn($addressFormMock); + $addressFormMock->expects($this->atLeastOnce())->method('getAttributes')->willReturn([]); + $this->coreRegistryMock->expects($this->atLeastOnce())->method('registry')->willReturn($addressMock); + $formMock->expects($this->atLeastOnce())->method('getElement')->willReturnOnConsecutiveCalls( + $selectMock, + $selectMock, + $selectMock, + $selectMock, + $selectMock, + $selectMock, + $selectMock, + null + ); + $addressMock->expects($this->once())->method('getOrder')->willReturn($orderMock); + $orderMock->expects($this->once())->method('getStoreId')->willReturn(5); + $this->countriesCollection->expects($this->atLeastOnce())->method('loadByStore') + ->willReturn($this->countriesCollection); + + $this->addressBlock->getForm(); + } +} From 84207463800df2900484cff76065076d7bee74d8 Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Wed, 29 Nov 2017 22:28:53 +0200 Subject: [PATCH 470/653] MQE-528: Robo commands should override certain files. - Adjusting the commands that Robo executes so it overrides certain files. --- dev/tests/acceptance/RoboFile.php | 4 +-- .../SalesRule/Data/SalesRuleData.xml | 25 ------------------- 2 files changed, 2 insertions(+), 27 deletions(-) delete mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/SalesRuleData.xml diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php index c255e9f065392..c7368c7930912 100644 --- a/dev/tests/acceptance/RoboFile.php +++ b/dev/tests/acceptance/RoboFile.php @@ -21,8 +21,8 @@ class RoboFile extends \Robo\Tasks function cloneFiles() { $this->_exec('cp -vn .env.example .env'); - $this->_exec('cp -vn codeception.dist.yml codeception.yml'); - $this->_exec('cp -vn tests/functional.suite.dist.yml tests/functional.suite.yml'); + $this->_exec('cp -vf codeception.dist.yml codeception.yml'); + $this->_exec('cp -vf tests/functional.suite.dist.yml tests/functional.suite.yml'); } /** diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/SalesRuleData.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/SalesRuleData.xml deleted file mode 100644 index 3f13fbf02a8fd..0000000000000 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/Data/SalesRuleData.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - /** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ ---> - -<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/DataGenerator/etc/dataProfileSchema.xsd"> - <entity name="SimpleSalesRule" type="SalesRule"> - <data key="name" unique="suffix">SalesRule</data> - <data key="is_active">true</data> - <required-entity type="SalesRuleStoreLabel">SalesRuleStoreLabel1</required-entity> - <required-entity type="SalesRuleStoreLabel">SalesRuleStoreLabel2</required-entity> - </entity> - <entity name="SalesRuleStoreLabel1" type="SalesRuleStoreLabel"> - <data key="store_id">0</data> - <data key="store_label">TestRule_Label</data> - </entity> - <entity name="SalesRuleStoreLabel2" type="SalesRuleStoreLabel"> - <data key="store_id">1</data> - <data key="store_label">TestRule_Label_default</data> - </entity> -</config> From 2f634043a8d71329cfa7c1837c1742adb6059c4a Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Wed, 29 Nov 2017 23:16:31 +0200 Subject: [PATCH 471/653] MQE-382: Adding custom "assertElementContainsAttribute" method. - Replacing "userInput" with "expectedValue". - Adding example for asserting "0" is present in an attribute. - Adding another example to the SampleCest file. - Adding examples to the SampleCest file under "CustomMethods". --- .../FunctionalTest/SampleTests/Cest/SampleCest.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml index b07e73bbbaa2b..6b931ce3f306f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml @@ -180,6 +180,15 @@ <severity value="CRITICAL"/> <testCaseId value="#"/> </annotations> + <assertElementContainsAttribute selector="#username" attribute="class" expectedValue="admin__control-text" mergeKey="assertElementContainsAttribute1"/> + <assertElementContainsAttribute selector="#username" attribute="type" expectedValue="text" mergeKey="assertElementContainsAttribute2"/> + <assertElementContainsAttribute selector="#username" attribute="name" expectedValue="login[username]" mergeKey="assertElementContainsAttribute3"/> + <assertElementContainsAttribute selector="#username" attribute="autofocus" expectedValue="" mergeKey="assertElementContainsAttribute4"/> + <assertElementContainsAttribute selector="#username" attribute="data-validate" expectedValue="{required:true}" mergeKey="assertElementContainsAttribute5"/> + <assertElementContainsAttribute selector="#username" attribute="placeholder" expectedValue="user name" mergeKey="assertElementContainsAttribute6"/> + <assertElementContainsAttribute selector="#username" attribute="autocomplete" expectedValue="off" mergeKey="assertElementContainsAttribute7"/> + <assertElementContainsAttribute selector=".admin__menu-overlay" attribute="style" expectedValue="display: none;" mergeKey="assertElementContainsAttribute8"/> + <assertElementContainsAttribute selector=".admin__menu-overlay" attribute="border" expectedValue="0" mergeKey="assertElementContainsAttribute9"/> <loginAsAdmin mergeKey="loginAsAdmin1"/> <loginAsAdmin username="admin" password="123123q" mergeKey="loginAsAdmin2"/> <closeAdminNotification mergeKey="closeAdminNotification1"/> From 8173a436373fdd119257edd3f5a0fd983a3eece7 Mon Sep 17 00:00:00 2001 From: Kevin Kozan <kkozan@magento.com> Date: Thu, 30 Nov 2017 17:41:01 +0200 Subject: [PATCH 472/653] MQE-572: Expose selenium configuration from within our .env file - changed functional.suite.dist to set host,port,protocol, and path based on env. - added above env parameters to env.example (cherry picked from commit e08c27e) --- dev/tests/acceptance/.env.example | 6 ++++++ dev/tests/acceptance/tests/functional.suite.dist.yml | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/dev/tests/acceptance/.env.example b/dev/tests/acceptance/.env.example index 500d54c3881ef..9cce00f6c0679 100644 --- a/dev/tests/acceptance/.env.example +++ b/dev/tests/acceptance/.env.example @@ -7,6 +7,12 @@ MAGENTO_BACKEND_NAME= MAGENTO_ADMIN_USERNAME= MAGENTO_ADMIN_PASSWORD= +#*** Selenium Server Protocol, Host, Port, and Path, with local defaults. Change if not running Selenium locally. +SELENIUM_HOST=127.0.0.1 +SELENIUM_PORT=4444 +SELENIUM_PROTOCOL=http +SELENIUM_PATH=/wd/hub + #*** Uncomment and set host & port if your dev environment needs different value other than MAGENTO_BASE_URL for Rest Api Requests ***# #MAGENTO_RESTAPI_SERVER_HOST= #MAGENTO_RESTAPI_SERVER_PORT= diff --git a/dev/tests/acceptance/tests/functional.suite.dist.yml b/dev/tests/acceptance/tests/functional.suite.dist.yml index afba145ca9a0c..9bae4de6edb26 100644 --- a/dev/tests/acceptance/tests/functional.suite.dist.yml +++ b/dev/tests/acceptance/tests/functional.suite.dist.yml @@ -31,3 +31,8 @@ modules: username: "%MAGENTO_ADMIN_USERNAME%" password: "%MAGENTO_ADMIN_PASSWORD%" pageload_timeout: 30 + host: %SELENIUM_HOST% + port: %SELENIUM_PORT% + protocol: %SELENIUM_PROTOCOL% + path: %SELENIUM_PATH% + From 73107df7a3c3e079a73a2f983943edc6714cf9f5 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Tue, 28 Nov 2017 18:23:43 +0200 Subject: [PATCH 473/653] MQE-513: added attachment (screenshots/logs) support in Allure reporting. --- dev/tests/functional/composer.json | 9 ++++-- dev/tests/functional/etc/events.xml | 17 +++++++++++ .../System/Observer/AllureWebapiResponse.php | 30 +++++++++++++++++++ 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 dev/tests/functional/lib/Magento/Mtf/System/Observer/AllureWebapiResponse.php diff --git a/dev/tests/functional/composer.json b/dev/tests/functional/composer.json index f58a38bd01de3..08ac79f0ab600 100644 --- a/dev/tests/functional/composer.json +++ b/dev/tests/functional/composer.json @@ -1,10 +1,13 @@ { + "config": { + "sort-packages": true + }, "require": { - "magento/mtf": "1.0.0-rc57", "php": "7.0.2|~7.0.6|~7.1.0", + "allure-framework/allure-phpunit": "~1.2.0", + "magento/mtf": "1.0.0-rc57", "phpunit/phpunit": "~4.8.0|~5.5.0", - "phpunit/phpunit-selenium": ">=1.2", - "allure-framework/allure-phpunit": "~1.2.0" + "phpunit/phpunit-selenium": ">=1.2" }, "suggest": { "netwing/selenium-server-standalone": "dev-master", diff --git a/dev/tests/functional/etc/events.xml b/dev/tests/functional/etc/events.xml index 5be0f8e7d4e9c..e8f0f63334fd3 100644 --- a/dev/tests/functional/etc/events.xml +++ b/dev/tests/functional/etc/events.xml @@ -10,6 +10,9 @@ <observer class="Magento\Mtf\System\Observer\WebapiResponse"> <tag name="webapi_failed" /> </observer> + <observer class="Magento\Mtf\System\Observer\AllureWebapiResponse"> + <tag name="webapi_failed" /> + </observer> </preset> <preset name="coverage" extends="base"> <observer class="Magento\Mtf\System\Observer\PageUrl"> @@ -32,15 +35,29 @@ <tag name="exception"/> <tag name="failure"/> </observer> + <observer class="Magento\Mtf\System\Observer\AllureSourceCode"> + <tag name="exception"/> + <tag name="failure"/> + </observer> <observer class="Magento\Mtf\System\Observer\Screenshot"> <tag name="exception"/> <tag name="failure"/> </observer> + <observer class="Magento\Mtf\System\Observer\AllureScreenshot"> + <tag name="exception"/> + <tag name="failure"/> + </observer> <observer class="Magento\Mtf\System\Observer\CurlResponse"> <tag name="curl_failed"/> </observer> + <observer class="Magento\Mtf\System\Observer\AllureCurlResponse"> + <tag name="curl_failed"/> + </observer> <observer class="Magento\Mtf\System\Observer\WebapiResponse"> <tag name="webapi_failed" /> </observer> + <observer class="Magento\Mtf\System\Observer\AllureWebapiResponse"> + <tag name="webapi_failed" /> + </observer> </preset> </config> diff --git a/dev/tests/functional/lib/Magento/Mtf/System/Observer/AllureWebapiResponse.php b/dev/tests/functional/lib/Magento/Mtf/System/Observer/AllureWebapiResponse.php new file mode 100644 index 0000000000000..bda514ad9fa85 --- /dev/null +++ b/dev/tests/functional/lib/Magento/Mtf/System/Observer/AllureWebapiResponse.php @@ -0,0 +1,30 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Mtf\System\Observer; + +use Magento\Mtf\System\Event\Event; + +/** + * AllureWebapiResponse observer. + */ +class AllureWebapiResponse extends AbstractAllureObserver +{ + /** + * Collect response source artifact to storage. + * + * @param Event $event + * @return void + */ + public function process(Event $event) + { + $this->addAttachment( + json_encode($event->getSubjects()[0]), + 'webapi-response-' . $event->getFileIdentifier(), + 'text/json' + ); + } +} From f17a854bfa650cb47129948a3c11abb8b8299113 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Thu, 30 Nov 2017 17:40:53 +0200 Subject: [PATCH 474/653] MQE-513: added allure observers as a separate event preset. --- dev/tests/functional/etc/events.xml | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/dev/tests/functional/etc/events.xml b/dev/tests/functional/etc/events.xml index e8f0f63334fd3..5f6a771237a81 100644 --- a/dev/tests/functional/etc/events.xml +++ b/dev/tests/functional/etc/events.xml @@ -10,6 +10,8 @@ <observer class="Magento\Mtf\System\Observer\WebapiResponse"> <tag name="webapi_failed" /> </observer> + </preset> + <preset name="allure"> <observer class="Magento\Mtf\System\Observer\AllureWebapiResponse"> <tag name="webapi_failed" /> </observer> @@ -35,29 +37,15 @@ <tag name="exception"/> <tag name="failure"/> </observer> - <observer class="Magento\Mtf\System\Observer\AllureSourceCode"> - <tag name="exception"/> - <tag name="failure"/> - </observer> <observer class="Magento\Mtf\System\Observer\Screenshot"> <tag name="exception"/> <tag name="failure"/> </observer> - <observer class="Magento\Mtf\System\Observer\AllureScreenshot"> - <tag name="exception"/> - <tag name="failure"/> - </observer> <observer class="Magento\Mtf\System\Observer\CurlResponse"> <tag name="curl_failed"/> </observer> - <observer class="Magento\Mtf\System\Observer\AllureCurlResponse"> - <tag name="curl_failed"/> - </observer> <observer class="Magento\Mtf\System\Observer\WebapiResponse"> <tag name="webapi_failed" /> </observer> - <observer class="Magento\Mtf\System\Observer\AllureWebapiResponse"> - <tag name="webapi_failed" /> - </observer> </preset> </config> From 3b8ecb717602eeb0c86236f4b1347ff0466ad199 Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Thu, 30 Nov 2017 20:53:10 +0200 Subject: [PATCH 475/653] MQE-439: .env.example parameter example comment block - Added a comment block at the top of the file that contains example values for each of the supported parameters. - Removing DB parameters, part of MQE-404: Remove DB variables from .env.example. --- dev/tests/acceptance/.env.example | 40 +++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/dev/tests/acceptance/.env.example b/dev/tests/acceptance/.env.example index 9cce00f6c0679..01c375010dba0 100644 --- a/dev/tests/acceptance/.env.example +++ b/dev/tests/acceptance/.env.example @@ -1,8 +1,36 @@ #Copyright © Magento, Inc. All rights reserved. #See COPYING.txt for license details. +#*** Start of example .env ***# +# +# MAGENTO_BASE_URL=http://127.0.0.1:32772/ +# +# MAGENTO_BACKEND_NAME=admin +# MAGENTO_ADMIN_USERNAME=admin +# MAGENTO_ADMIN_PASSWORD=123123q +# +# SELENIUM_HOST=127.0.0.1 +# SELENIUM_PORT=4444 +# SELENIUM_PROTOCOL=http +# SELENIUM_PATH=/wd/hub +# +# MAGENTO_RESTAPI_SERVER_HOST=127.0.0.1 +# MAGENTO_RESTAPI_SERVER_PORT=32769 +# +# TESTS_BP=/Users/First_Last/GitHub/magento2ce/dev/tests/acceptance/tests/functional +# FW_BP=/Users/First_Last/GitHub/magento2-functional-testing-framework +# TESTS_MODULE_PATH=/Users/First_Last/GitHub/magento2ce/dev/tests/acceptance/tests/functional/Magento/FunctionalTest +# MODULE_WHITELIST=Magento_SampleTests,Magento_NewModule +# +#*** End of example .env ***# + + +#*** Start of .env ***# + +#*** Set the base URL for your Magento instance ***# MAGENTO_BASE_URL= +#*** Set the Admin Username and Password for your Magento instance ***# MAGENTO_BACKEND_NAME= MAGENTO_ADMIN_USERNAME= MAGENTO_ADMIN_PASSWORD= @@ -13,16 +41,14 @@ SELENIUM_PORT=4444 SELENIUM_PROTOCOL=http SELENIUM_PATH=/wd/hub -#*** Uncomment and set host & port if your dev environment needs different value other than MAGENTO_BASE_URL for Rest Api Requests ***# +#*** Uncomment and set host & port if your dev environment needs different value other than MAGENTO_BASE_URL for Rest API Requests ***# #MAGENTO_RESTAPI_SERVER_HOST= #MAGENTO_RESTAPI_SERVER_PORT= -DB_DSN= -DB_USERNAME= -DB_PASSWORD= - -#*** uncomment these properties to set up a dev environment with symlinked projects***# +#*** Uncomment these properties to set up a dev environment with symlinked projects ***# #TESTS_BP= #FW_BP= #TESTS_MODULE_PATH= -#MODULE_WHITELIST= \ No newline at end of file +#MODULE_WHITELIST= + +#*** End of .env ***# \ No newline at end of file From 718ccaae8e3c4147d83f2b1d6bf20f671ed58498 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Fri, 1 Dec 2017 18:37:11 +0200 Subject: [PATCH 476/653] MQE-541: changed to use stepKey for test step sequencing. --- .../acceptance/tests/_suite/sampleSuite.xml | 8 +- .../Backend/Cest/AdminLoginCest.xml | 10 +- .../Catalog/Cest/AdminCreateCategoryCest.xml | 34 +- .../Cest/AdminCreateSimpleProductCest.xml | 68 +-- .../Cest/StorefrontCustomerCheckoutCest.xml | 96 ++-- .../Cest/StorefrontGuestCheckoutCest.xml | 98 ++-- .../Cms/Cest/AdminCreateCmsPageCest.xml | 40 +- .../AdminCreateConfigurableProductCest.xml | 202 ++++---- .../Customer/Cest/AdminCreateCustomerCest.xml | 38 +- .../Cest/StorefrontCreateCustomerCest.xml | 24 +- .../StorefrontPersistedCustomerLoginCest.xml | 18 +- .../Sales/Cest/AdminCreateInvoiceCest.xml | 102 ++-- .../ActionGroup/SampleActionGroup.xml | 6 +- .../SampleTests/Cest/AdvancedSampleCest.xml | 16 +- .../SampleTests/Cest/AssertsCest.xml | 126 ++--- .../CreateConfigurableProductByApiCest.xml | 36 +- .../Cest/CreateSalesRuleByApiCest.xml | 4 +- .../SampleTests/Cest/MinimumTestCest.xml | 10 +- .../Cest/PersistMultipleEntitiesCest.xml | 18 +- .../SampleTests/Cest/SampleCest.xml | 462 +++++++++--------- .../Cest/SetPaymentConfigurationCest.xml | 8 +- .../Cest/UpdateSimpleProductByApiCest.xml | 8 +- .../Store/Cest/AdminCreateStoreGroupCest.xml | 38 +- .../StorefrontDeletePersistedWishlistCest.xml | 44 +- 24 files changed, 757 insertions(+), 757 deletions(-) diff --git a/dev/tests/acceptance/tests/_suite/sampleSuite.xml b/dev/tests/acceptance/tests/_suite/sampleSuite.xml index f9b142d89c8a1..4172b526683d7 100644 --- a/dev/tests/acceptance/tests/_suite/sampleSuite.xml +++ b/dev/tests/acceptance/tests/_suite/sampleSuite.xml @@ -9,14 +9,14 @@ <suites xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Suite/etc/suiteSchema.xsd"> <suite name="mySuite"> <before> - <createData entity="_defaultCategory" mergeKey="createCategory"/> - <createData entity="_defaultProduct" mergeKey="createProduct"> + <createData entity="_defaultCategory" stepKey="createCategory"/> + <createData entity="_defaultProduct" stepKey="createProduct"> <required-entity createDataKey="createCategory"/> </createData> </before> <after> - <deleteData mergeKey="deleteMyProduct" createDataKey="createProduct"/> - <deleteData mergeKey="deleteMyCategory" createDataKey="createCategory"/> + <deleteData stepKey="deleteMyProduct" createDataKey="createProduct"/> + <deleteData stepKey="deleteMyCategory" createDataKey="createCategory"/> </after> <include> <group name="example"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml index a50d75c167c9c..67605e2dbe551 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml @@ -26,11 +26,11 @@ <env value="phantomjs"/> <env value="headless"/> </annotations> - <amOnPage url="{{AdminLoginPage.url}}" mergeKey="amOnAdminLoginPage"/> - <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> - <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> - <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickOnSignIn"/> - <seeInCurrentUrl url="{{AdminLoginPage.url}}" mergeKey="seeAdminLoginUrl"/> + <amOnPage url="{{AdminLoginPage.url}}" stepKey="amOnAdminLoginPage"/> + <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" stepKey="fillUsername"/> + <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" stepKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" stepKey="clickOnSignIn"/> + <seeInCurrentUrl url="{{AdminLoginPage.url}}" stepKey="seeAdminLoginUrl"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml index 550e668b0808f..980eae28b6d22 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml @@ -14,7 +14,7 @@ <stories value="Create a Category via the Admin"/> </annotations> <after> - <amOnPage url="admin/admin/auth/logout/" mergeKey="amOnLogoutPage"/> + <amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/> </after> <test name="CreateCategoryViaAdmin"> <annotations> @@ -26,24 +26,24 @@ <env value="chrome"/> <env value="headless"/> </annotations> - <amOnPage url="{{AdminLoginPage.url}}" mergeKey="amOnAdminLoginPage"/> - <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> - <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> - <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickOnSignIn"/> - <amOnPage url="{{AdminCategoryPage.url}}" mergeKey="navigateToCategoryPage"/> - <waitForPageLoad mergeKey="waitForPageLoad1"/> - <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" mergeKey="clickOnAddSubCategory"/> - <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{SimpleSubCategory.name}}" mergeKey="enterCategoryName"/> - <click selector="{{AdminCategorySEOSection.SectionHeader}}" mergeKey="openSEO"/> - <fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{SimpleSubCategory.name_lwr}}" mergeKey="enterURLKey"/> - <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" mergeKey="saveCategory"/> - <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" mergeKey="assertSuccess"/> + <amOnPage url="{{AdminLoginPage.url}}" stepKey="amOnAdminLoginPage"/> + <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" stepKey="fillUsername"/> + <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" stepKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" stepKey="clickOnSignIn"/> + <amOnPage url="{{AdminCategoryPage.url}}" stepKey="navigateToCategoryPage"/> + <waitForPageLoad stepKey="waitForPageLoad1"/> + <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" stepKey="clickOnAddSubCategory"/> + <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{SimpleSubCategory.name}}" stepKey="enterCategoryName"/> + <click selector="{{AdminCategorySEOSection.SectionHeader}}" stepKey="openSEO"/> + <fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{SimpleSubCategory.name_lwr}}" stepKey="enterURLKey"/> + <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" stepKey="saveCategory"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="assertSuccess"/> <!-- Literal URL below, need to refactor line + StorefrontCategoryPage when support for variable URL is implemented--> - <amOnPage url="/{{SimpleSubCategory.name_lwr}}.html" mergeKey="goToCategoryFrontPage"/> - <waitForPageLoad mergeKey="waitForPageLoad2"/> - <seeInTitle userInput="{{SimpleSubCategory.name}}" mergeKey="assertTitle"/> - <see selector="{{StorefrontCategoryMainSection.CategoryTitle}}" userInput="{{SimpleSubCategory.name_lwr}}" mergeKey="assertInfo1"/> + <amOnPage url="/{{SimpleSubCategory.name_lwr}}.html" stepKey="goToCategoryFrontPage"/> + <waitForPageLoad stepKey="waitForPageLoad2"/> + <seeInTitle userInput="{{SimpleSubCategory.name}}" stepKey="assertTitle"/> + <see selector="{{StorefrontCategoryMainSection.CategoryTitle}}" userInput="{{SimpleSubCategory.name_lwr}}" stepKey="assertInfo1"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml index f649580554eaa..c2756445f6268 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml @@ -14,7 +14,7 @@ <stories value="Create a Simple Product via Admin"/> </annotations> <before> - <createData entity="_defaultCategory" mergeKey="createPreReqCategory"/> + <createData entity="_defaultCategory" stepKey="createPreReqCategory"/> </before> <test name="CreateSimpleProductViaAdmin"> <annotations> @@ -26,45 +26,45 @@ <env value="chrome"/> <env value="headless"/> </annotations> - <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> - <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" mergeKey="fillUsername"/> - <fillField userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" selector="{{AdminLoginFormSection.password}}" mergeKey="fillPassword"/> - <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> - <amOnPage url="{{AdminProductIndexPage.url}}" mergeKey="navigateToProductIndex"/> - <click selector="{{AdminProductGridActionSection.addProductToggle}}" mergeKey="clickAddProductDropdown"/> - <click selector="{{AdminProductGridActionSection.addSimpleProduct}}" mergeKey="clickAddSimpleProduct"/> - <fillField userInput="{{_defaultProduct.name}}" selector="{{AdminProductFormSection.productName}}" mergeKey="fillName"/> - <fillField userInput="{{_defaultProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" mergeKey="fillSKU"/> - <fillField userInput="{{_defaultProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" mergeKey="fillPrice"/> - <fillField userInput="{{_defaultProduct.quantity}}" selector="{{AdminProductFormSection.productQuantity}}" mergeKey="fillQuantity"/> - <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="[$$createPreReqCategory.name$$]" mergeKey="searchAndSelectCategory"/> - <click selector="{{AdminProductSEOSection.sectionHeader}}" mergeKey="openSeoSection"/> - <fillField userInput="{{_defaultProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" mergeKey="fillUrlKey"/> - <click selector="{{AdminProductFormActionSection.saveButton}}" mergeKey="saveProduct"/> - <seeElement selector="{{AdminProductMessagesSection.successMessage}}" mergeKey="assertSaveMessageSuccess"/> - <seeInField userInput="{{_defaultProduct.name}}" selector="{{AdminProductFormSection.productName}}" mergeKey="assertFieldName"/> - <seeInField userInput="{{_defaultProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" mergeKey="assertFieldSku"/> - <seeInField userInput="{{_defaultProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" mergeKey="assertFieldPrice"/> - <click selector="{{AdminProductSEOSection.sectionHeader}}" mergeKey="openSeoSectionAssert"/> - <seeInField userInput="{{_defaultProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" mergeKey="assertFieldUrlKey"/> + <amOnPage url="{{AdminLoginPage.url}}" stepKey="navigateToAdmin"/> + <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" stepKey="fillUsername"/> + <fillField userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" selector="{{AdminLoginFormSection.password}}" stepKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" stepKey="clickLogin"/> + <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="navigateToProductIndex"/> + <click selector="{{AdminProductGridActionSection.addProductToggle}}" stepKey="clickAddProductDropdown"/> + <click selector="{{AdminProductGridActionSection.addSimpleProduct}}" stepKey="clickAddSimpleProduct"/> + <fillField userInput="{{_defaultProduct.name}}" selector="{{AdminProductFormSection.productName}}" stepKey="fillName"/> + <fillField userInput="{{_defaultProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" stepKey="fillSKU"/> + <fillField userInput="{{_defaultProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" stepKey="fillPrice"/> + <fillField userInput="{{_defaultProduct.quantity}}" selector="{{AdminProductFormSection.productQuantity}}" stepKey="fillQuantity"/> + <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="[$$createPreReqCategory.name$$]" stepKey="searchAndSelectCategory"/> + <click selector="{{AdminProductSEOSection.sectionHeader}}" stepKey="openSeoSection"/> + <fillField userInput="{{_defaultProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" stepKey="fillUrlKey"/> + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="saveProduct"/> + <seeElement selector="{{AdminProductMessagesSection.successMessage}}" stepKey="assertSaveMessageSuccess"/> + <seeInField userInput="{{_defaultProduct.name}}" selector="{{AdminProductFormSection.productName}}" stepKey="assertFieldName"/> + <seeInField userInput="{{_defaultProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" stepKey="assertFieldSku"/> + <seeInField userInput="{{_defaultProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" stepKey="assertFieldPrice"/> + <click selector="{{AdminProductSEOSection.sectionHeader}}" stepKey="openSeoSectionAssert"/> + <seeInField userInput="{{_defaultProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" stepKey="assertFieldUrlKey"/> <!-- Go to storefront category page, assert product visibility --> - <amOnPage url="{{StorefrontCategoryPage.url($$createPreReqCategory.name$$)}}" mergeKey="navigateToCategoryPage"/> - <waitForPageLoad mergeKey="waitForPageLoad1"/> - <see userInput="{{_defaultProduct.name}}" mergeKey="assertProductPresent"/> - <see userInput="{{_defaultProduct.price}}" mergeKey="assertProductPricePresent"/> + <amOnPage url="{{StorefrontCategoryPage.url($$createPreReqCategory.name$$)}}" stepKey="navigateToCategoryPage"/> + <waitForPageLoad stepKey="waitForPageLoad1"/> + <see userInput="{{_defaultProduct.name}}" stepKey="assertProductPresent"/> + <see userInput="{{_defaultProduct.price}}" stepKey="assertProductPricePresent"/> <!-- Go to storefront product page, assert product visibility --> - <amOnPage url="{{_defaultProduct.urlKey}}.html" mergeKey="navigateToProductPage"/> - <waitForPageLoad mergeKey="waitForPageLoad2"/> - <seeInTitle userInput="{{_defaultProduct.name}}" mergeKey="assertProductNameTitle"/> - <see userInput="{{_defaultProduct.name}}" selector="{{StorefrontProductInfoMainSection.productName}}" mergeKey="assertProductName"/> - <see userInput="{{_defaultProduct.price}}" selector="{{StorefrontProductInfoMainSection.productPrice}}" mergeKey="assertProductPrice"/> - <see userInput="{{_defaultProduct.sku}}" selector="{{StorefrontProductInfoMainSection.productSku}}" mergeKey="assertProductSku"/> + <amOnPage url="{{_defaultProduct.urlKey}}.html" stepKey="navigateToProductPage"/> + <waitForPageLoad stepKey="waitForPageLoad2"/> + <seeInTitle userInput="{{_defaultProduct.name}}" stepKey="assertProductNameTitle"/> + <see userInput="{{_defaultProduct.name}}" selector="{{StorefrontProductInfoMainSection.productName}}" stepKey="assertProductName"/> + <see userInput="{{_defaultProduct.price}}" selector="{{StorefrontProductInfoMainSection.productPrice}}" stepKey="assertProductPrice"/> + <see userInput="{{_defaultProduct.sku}}" selector="{{StorefrontProductInfoMainSection.productSku}}" stepKey="assertProductSku"/> </test> <after> - <deleteData createDataKey="createPreReqCategory" mergeKey="deletePreReqCategory"/> - <amOnPage url="admin/admin/auth/logout/" mergeKey="amOnLogoutPage"/> + <deleteData createDataKey="createPreReqCategory" stepKey="deletePreReqCategory"/> + <amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/> </after> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml index 5e97a6ab03b1b..1da632eaae16f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml @@ -14,16 +14,16 @@ <stories value="Checkout via the Admin"/> </annotations> <before> - <createData entity="SimpleSubCategory" mergeKey="simplecategory"/> - <createData entity="SimpleProduct" mergeKey="simpleproduct1"> + <createData entity="SimpleSubCategory" stepKey="simplecategory"/> + <createData entity="SimpleProduct" stepKey="simpleproduct1"> <required-entity createDataKey="simplecategory"/> </createData> - <createData entity="Simple_US_Customer" mergeKey="simpleuscustomer"/> + <createData entity="Simple_US_Customer" stepKey="simpleuscustomer"/> </before> <after> - <deleteData createDataKey="simpleproduct1" mergeKey="deleteProduct1"/> - <deleteData createDataKey="simplecategory" mergeKey="deleteCategory"/> - <deleteData createDataKey="simpleuscustomer" mergeKey="deleteCustomer"/> + <deleteData createDataKey="simpleproduct1" stepKey="deleteProduct1"/> + <deleteData createDataKey="simplecategory" stepKey="deleteCategory"/> + <deleteData createDataKey="simpleuscustomer" stepKey="deleteCustomer"/> </after> <test name="CustomerCheckoutTest"> <annotations> @@ -36,52 +36,52 @@ <env value="headless"/> </annotations> - <amOnPage mergeKey="s1" url="customer/account/login/"/> - <fillField mergeKey="s3" userInput="$$simpleuscustomer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> - <fillField mergeKey="s5" userInput="$$simpleuscustomer.password$$" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> - <click mergeKey="s7" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> - <waitForPageLoad mergeKey="s9"/> + <amOnPage stepKey="s1" url="customer/account/login/"/> + <fillField stepKey="s3" userInput="$$simpleuscustomer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> + <fillField stepKey="s5" userInput="$$simpleuscustomer.password$$" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> + <click stepKey="s7" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> + <waitForPageLoad stepKey="s9"/> - <amOnPage mergeKey="s11" url="/$$simplecategory.name$$.html" /> - <moveMouseOver mergeKey="s15" selector="{{StorefrontCategoryMainSection.ProductItemInfo}}" /> - <click mergeKey="s17" selector="{{StorefrontCategoryMainSection.AddToCartBtn}}" /> - <waitForElementVisible mergeKey="s21" selector="{{StorefrontCategoryMainSection.SuccessMsg}}" time="30" /> - <see mergeKey="s23" selector="{{StorefrontCategoryMainSection.SuccessMsg}}" userInput="You added $$simpleproduct1.name$$ to your shopping cart."/> - <see mergeKey="s25" selector="{{StorefrontMiniCartSection.quantity}}" userInput="1" /> - <click mergeKey="s27" selector="{{StorefrontMiniCartSection.show}}" /> - <click mergeKey="s31" selector="{{StorefrontMiniCartSection.goToCheckout}}" /> - <waitForPageLoad mergeKey="s33"/> - <waitForLoadingMaskToDisappear mergeKey="s34"/> - <click mergeKey="s35" selector="{{CheckoutShippingMethodsSection.firstShippingMethod}}"/> - <waitForElement mergeKey="s36" selector="{{CheckoutShippingMethodsSection.next}}" time="30"/> - <click mergeKey="s37" selector="{{CheckoutShippingMethodsSection.next}}" /> - <waitForPageLoad mergeKey="s39"/> - <waitForElement mergeKey="s41" selector="{{CheckoutPaymentSection.placeOrder}}" time="30" /> - <see mergeKey="s47" selector="{{CheckoutPaymentSection.billingAddress}}" userInput="{{US_Address_TX.street[0]}}" /> - <click mergeKey="s49" selector="{{CheckoutPaymentSection.placeOrder}}" /> - <waitForPageLoad mergeKey="s51"/> - <grabTextFrom mergeKey="s53" selector="{{CheckoutSuccessMainSection.orderNumber22}}" returnVariable="orderNumber" /> - <see mergeKey="s55" selector="{{CheckoutSuccessMainSection.success}}" userInput="Your order number is:" /> + <amOnPage stepKey="s11" url="/$$simplecategory.name$$.html" /> + <moveMouseOver stepKey="s15" selector="{{StorefrontCategoryMainSection.ProductItemInfo}}" /> + <click stepKey="s17" selector="{{StorefrontCategoryMainSection.AddToCartBtn}}" /> + <waitForElementVisible stepKey="s21" selector="{{StorefrontCategoryMainSection.SuccessMsg}}" time="30" /> + <see stepKey="s23" selector="{{StorefrontCategoryMainSection.SuccessMsg}}" userInput="You added $$simpleproduct1.name$$ to your shopping cart."/> + <see stepKey="s25" selector="{{StorefrontMiniCartSection.quantity}}" userInput="1" /> + <click stepKey="s27" selector="{{StorefrontMiniCartSection.show}}" /> + <click stepKey="s31" selector="{{StorefrontMiniCartSection.goToCheckout}}" /> + <waitForPageLoad stepKey="s33"/> + <waitForLoadingMaskToDisappear stepKey="s34"/> + <click stepKey="s35" selector="{{CheckoutShippingMethodsSection.firstShippingMethod}}"/> + <waitForElement stepKey="s36" selector="{{CheckoutShippingMethodsSection.next}}" time="30"/> + <click stepKey="s37" selector="{{CheckoutShippingMethodsSection.next}}" /> + <waitForPageLoad stepKey="s39"/> + <waitForElement stepKey="s41" selector="{{CheckoutPaymentSection.placeOrder}}" time="30" /> + <see stepKey="s47" selector="{{CheckoutPaymentSection.billingAddress}}" userInput="{{US_Address_TX.street[0]}}" /> + <click stepKey="s49" selector="{{CheckoutPaymentSection.placeOrder}}" /> + <waitForPageLoad stepKey="s51"/> + <grabTextFrom stepKey="s53" selector="{{CheckoutSuccessMainSection.orderNumber22}}" returnVariable="orderNumber" /> + <see stepKey="s55" selector="{{CheckoutSuccessMainSection.success}}" userInput="Your order number is:" /> - <amOnPage mergeKey="s59" url="{{AdminLoginPage.url}}" /> - <fillField mergeKey="s61" selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" /> - <fillField mergeKey="s63" selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" /> - <click mergeKey="s65" selector="{{AdminLoginFormSection.signIn}}" /> + <amOnPage stepKey="s59" url="{{AdminLoginPage.url}}" /> + <fillField stepKey="s61" selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" /> + <fillField stepKey="s63" selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" /> + <click stepKey="s65" selector="{{AdminLoginFormSection.signIn}}" /> - <amOnPage mergeKey="s67" url="{{OrdersPage.url}}"/> - <waitForPageLoad mergeKey="s75"/> - <fillField mergeKey="s77" selector="{{OrdersGridSection.search}}" variable="orderNumber" /> - <waitForPageLoad mergeKey="s78"/> + <amOnPage stepKey="s67" url="{{OrdersPage.url}}"/> + <waitForPageLoad stepKey="s75"/> + <fillField stepKey="s77" selector="{{OrdersGridSection.search}}" variable="orderNumber" /> + <waitForPageLoad stepKey="s78"/> - <click mergeKey="s81" selector="{{OrdersGridSection.submitSearch22}}" /> - <waitForPageLoad mergeKey="s831"/> - <click mergeKey="s84" selector="{{OrdersGridSection.firstRow}}" /> - <see mergeKey="s85" selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Pending" /> - <see mergeKey="s87" selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="Customer" /> - <see mergeKey="s89" selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="$$simpleuscustomer.email$$" /> - <see mergeKey="s91" selector="{{OrderDetailsInformationSection.billingAddress}}" userInput="{{US_Address_TX.street[0]}}" /> - <see mergeKey="s93" selector="{{OrderDetailsInformationSection.shippingAddress}}" userInput="{{US_Address_TX.street[0]}}" /> - <see mergeKey="s95" selector="{{OrderDetailsInformationSection.itemsOrdered}}" userInput="$$simpleproduct1.name$$" /> + <click stepKey="s81" selector="{{OrdersGridSection.submitSearch22}}" /> + <waitForPageLoad stepKey="s831"/> + <click stepKey="s84" selector="{{OrdersGridSection.firstRow}}" /> + <see stepKey="s85" selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Pending" /> + <see stepKey="s87" selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="Customer" /> + <see stepKey="s89" selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="$$simpleuscustomer.email$$" /> + <see stepKey="s91" selector="{{OrderDetailsInformationSection.billingAddress}}" userInput="{{US_Address_TX.street[0]}}" /> + <see stepKey="s93" selector="{{OrderDetailsInformationSection.shippingAddress}}" userInput="{{US_Address_TX.street[0]}}" /> + <see stepKey="s95" selector="{{OrderDetailsInformationSection.itemsOrdered}}" userInput="$$simpleproduct1.name$$" /> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml index fa441fd673784..2aa0a77b0a0d1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml @@ -14,14 +14,14 @@ <stories value="Checkout via Guest Checkout"/> </annotations> <before> - <createData entity="_defaultCategory" mergeKey="createCategory"/> - <createData entity="_defaultProduct" mergeKey="createProduct"> + <createData entity="_defaultCategory" stepKey="createCategory"/> + <createData entity="_defaultProduct" stepKey="createProduct"> <required-entity createDataKey="createCategory"/> </createData> </before> <after> - <deleteData createDataKey="createCategory" mergeKey="deleteCategory"/> - <deleteData createDataKey="createProduct" mergeKey="deleteProduct"/> + <deleteData createDataKey="createCategory" stepKey="deleteCategory"/> + <deleteData createDataKey="createProduct" stepKey="deleteProduct"/> </after> <test name="GuestCheckoutTest"> <annotations> @@ -33,51 +33,51 @@ <env value="chrome"/> <env value="headless"/> </annotations> - <amOnPage url="{{StorefrontCategoryPage.url($$createCategory.name$$)}}" mergeKey="onCategoryPage"/> - <waitForPageLoad mergeKey="waitForPageLoad1"/> - <moveMouseOver selector="{{StorefrontCategoryMainSection.ProductItemInfo}}" mergeKey="hoverProduct"/> - <click selector="{{StorefrontCategoryMainSection.AddToCartBtn}}" mergeKey="addToCart"/> - <waitForElementVisible selector="{{StorefrontCategoryMainSection.SuccessMsg}}" time="30" mergeKey="waitForProductAdded"/> - <see selector="{{StorefrontCategoryMainSection.SuccessMsg}}" userInput="You added $$createProduct.name$$ to your shopping cart." mergeKey="seeAddedToCartMessage"/> - <see selector="{{StorefrontMiniCartSection.quantity}}" userInput="1" mergeKey="seeCartQuantity"/> - <click selector="{{StorefrontMiniCartSection.show}}" mergeKey="clickCart"/> - <click selector="{{StorefrontMiniCartSection.goToCheckout}}" mergeKey="goToCheckout"/> - <waitForPageLoad mergeKey="waitForPageLoad2"/> - <fillField selector="{{GuestCheckoutShippingSection.email}}" userInput="{{CustomerEntityOne.email}}" mergeKey="enterEmail"/> - <fillField selector="{{GuestCheckoutShippingSection.firstName}}" userInput="{{CustomerEntityOne.firstname}}" mergeKey="enterFirstName"/> - <fillField selector="{{GuestCheckoutShippingSection.lastName}}" userInput="{{CustomerEntityOne.lastname}}" mergeKey="enterLastName"/> - <fillField selector="{{GuestCheckoutShippingSection.street}}" userInput="{{CustomerAddressSimple.street[0]}}" mergeKey="enterStreet"/> - <fillField selector="{{GuestCheckoutShippingSection.city}}" userInput="{{CustomerAddressSimple.city}}" mergeKey="enterCity"/> - <selectOption selector="{{GuestCheckoutShippingSection.region}}" userInput="{{CustomerAddressSimple.state}}" mergeKey="selectRegion"/> - <fillField selector="{{GuestCheckoutShippingSection.postcode}}" userInput="{{CustomerAddressSimple.postcode}}" mergeKey="enterPostcode"/> - <fillField selector="{{GuestCheckoutShippingSection.telephone}}" userInput="{{CustomerAddressSimple.telephone}}" mergeKey="enterTelephone"/> - <waitForLoadingMaskToDisappear mergeKey="waitForLoadingMask"/> - <click selector="{{GuestCheckoutShippingSection.firstShippingMethod}}" mergeKey="selectFirstShippingMethod"/> - <waitForElement selector="{{GuestCheckoutShippingSection.next}}" time="30" mergeKey="waitForNextButton"/> - <click selector="{{GuestCheckoutShippingSection.next}}" mergeKey="clickNext"/> - <waitForElement selector="{{GuestCheckoutPaymentSection.placeOrder}}" time="30" mergeKey="waitForPlaceOrderButton"/> - <see selector="{{GuestCheckoutPaymentSection.cartItems}}" userInput="{{_defaultProduct.name}}" mergeKey="seeProductInCart"/> - <see selector="{{GuestCheckoutPaymentSection.billingAddress}}" userInput="{{CustomerAddressSimple.street[0]}}" mergeKey="seeAddress"/> - <click selector="{{GuestCheckoutPaymentSection.placeOrder}}" mergeKey="clickPlaceOrder"/> - <grabTextFrom selector="{{CheckoutSuccessMainSection.orderNumber}}" returnVariable="orderNumber" mergeKey="grabOrderNumber"/> - <see selector="{{CheckoutSuccessMainSection.success}}" userInput="Your order # is:" mergeKey="seeOrderNumber"/> - <see selector="{{CheckoutSuccessMainSection.success}}" userInput="We'll email you an order confirmation with details and tracking info." mergeKey="seeEmailYou"/> - <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> - <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> - <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> - <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> - <amOnPage url="{{OrdersPage.url}}" mergeKey="onOrdersPage"/> - <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="30" mergeKey="waitForOrdersPage"/> - <fillField selector="{{OrdersGridSection.search}}" variable="orderNumber" mergeKey="fillOrderNum"/> - <click selector="{{OrdersGridSection.submitSearch}}" mergeKey="submitSearchOrderNum"/> - <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="30" mergeKey="waitForOrdersPage2"/> - <click selector="{{OrdersGridSection.firstRow}}" mergeKey="clickOrderRow"/> - <see selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Pending" mergeKey="seeAdminOrderStatus"/> - <see selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="Guest" mergeKey="seeAdminOrderGuest"/> - <see selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="{{CustomerEntityOne.email}}" mergeKey="seeAdminOrderEmail"/> - <see selector="{{OrderDetailsInformationSection.billingAddress}}" userInput="{{CustomerAddressSimple.street[0]}}" mergeKey="seeAdminOrderBillingAddress"/> - <see selector="{{OrderDetailsInformationSection.shippingAddress}}" userInput="{{CustomerAddressSimple.street[0]}}" mergeKey="seeAdminOrderShippingAddress"/> - <see selector="{{OrderDetailsInformationSection.itemsOrdered}}" userInput="{{_defaultProduct.name}}" mergeKey="seeAdminOrderProduct"/> + <amOnPage url="{{StorefrontCategoryPage.url($$createCategory.name$$)}}" stepKey="onCategoryPage"/> + <waitForPageLoad stepKey="waitForPageLoad1"/> + <moveMouseOver selector="{{StorefrontCategoryMainSection.ProductItemInfo}}" stepKey="hoverProduct"/> + <click selector="{{StorefrontCategoryMainSection.AddToCartBtn}}" stepKey="addToCart"/> + <waitForElementVisible selector="{{StorefrontCategoryMainSection.SuccessMsg}}" time="30" stepKey="waitForProductAdded"/> + <see selector="{{StorefrontCategoryMainSection.SuccessMsg}}" userInput="You added $$createProduct.name$$ to your shopping cart." stepKey="seeAddedToCartMessage"/> + <see selector="{{StorefrontMiniCartSection.quantity}}" userInput="1" stepKey="seeCartQuantity"/> + <click selector="{{StorefrontMiniCartSection.show}}" stepKey="clickCart"/> + <click selector="{{StorefrontMiniCartSection.goToCheckout}}" stepKey="goToCheckout"/> + <waitForPageLoad stepKey="waitForPageLoad2"/> + <fillField selector="{{GuestCheckoutShippingSection.email}}" userInput="{{CustomerEntityOne.email}}" stepKey="enterEmail"/> + <fillField selector="{{GuestCheckoutShippingSection.firstName}}" userInput="{{CustomerEntityOne.firstname}}" stepKey="enterFirstName"/> + <fillField selector="{{GuestCheckoutShippingSection.lastName}}" userInput="{{CustomerEntityOne.lastname}}" stepKey="enterLastName"/> + <fillField selector="{{GuestCheckoutShippingSection.street}}" userInput="{{CustomerAddressSimple.street[0]}}" stepKey="enterStreet"/> + <fillField selector="{{GuestCheckoutShippingSection.city}}" userInput="{{CustomerAddressSimple.city}}" stepKey="enterCity"/> + <selectOption selector="{{GuestCheckoutShippingSection.region}}" userInput="{{CustomerAddressSimple.state}}" stepKey="selectRegion"/> + <fillField selector="{{GuestCheckoutShippingSection.postcode}}" userInput="{{CustomerAddressSimple.postcode}}" stepKey="enterPostcode"/> + <fillField selector="{{GuestCheckoutShippingSection.telephone}}" userInput="{{CustomerAddressSimple.telephone}}" stepKey="enterTelephone"/> + <waitForLoadingMaskToDisappear stepKey="waitForLoadingMask"/> + <click selector="{{GuestCheckoutShippingSection.firstShippingMethod}}" stepKey="selectFirstShippingMethod"/> + <waitForElement selector="{{GuestCheckoutShippingSection.next}}" time="30" stepKey="waitForNextButton"/> + <click selector="{{GuestCheckoutShippingSection.next}}" stepKey="clickNext"/> + <waitForElement selector="{{GuestCheckoutPaymentSection.placeOrder}}" time="30" stepKey="waitForPlaceOrderButton"/> + <see selector="{{GuestCheckoutPaymentSection.cartItems}}" userInput="{{_defaultProduct.name}}" stepKey="seeProductInCart"/> + <see selector="{{GuestCheckoutPaymentSection.billingAddress}}" userInput="{{CustomerAddressSimple.street[0]}}" stepKey="seeAddress"/> + <click selector="{{GuestCheckoutPaymentSection.placeOrder}}" stepKey="clickPlaceOrder"/> + <grabTextFrom selector="{{CheckoutSuccessMainSection.orderNumber}}" returnVariable="orderNumber" stepKey="grabOrderNumber"/> + <see selector="{{CheckoutSuccessMainSection.success}}" userInput="Your order # is:" stepKey="seeOrderNumber"/> + <see selector="{{CheckoutSuccessMainSection.success}}" userInput="We'll email you an order confirmation with details and tracking info." stepKey="seeEmailYou"/> + <amOnPage url="{{AdminLoginPage.url}}" stepKey="navigateToAdmin"/> + <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" stepKey="fillUsername"/> + <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" stepKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" stepKey="clickLogin"/> + <amOnPage url="{{OrdersPage.url}}" stepKey="onOrdersPage"/> + <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="30" stepKey="waitForOrdersPage"/> + <fillField selector="{{OrdersGridSection.search}}" variable="orderNumber" stepKey="fillOrderNum"/> + <click selector="{{OrdersGridSection.submitSearch}}" stepKey="submitSearchOrderNum"/> + <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="30" stepKey="waitForOrdersPage2"/> + <click selector="{{OrdersGridSection.firstRow}}" stepKey="clickOrderRow"/> + <see selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Pending" stepKey="seeAdminOrderStatus"/> + <see selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="Guest" stepKey="seeAdminOrderGuest"/> + <see selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="{{CustomerEntityOne.email}}" stepKey="seeAdminOrderEmail"/> + <see selector="{{OrderDetailsInformationSection.billingAddress}}" userInput="{{CustomerAddressSimple.street[0]}}" stepKey="seeAdminOrderBillingAddress"/> + <see selector="{{OrderDetailsInformationSection.shippingAddress}}" userInput="{{CustomerAddressSimple.street[0]}}" stepKey="seeAdminOrderShippingAddress"/> + <see selector="{{OrderDetailsInformationSection.itemsOrdered}}" userInput="{{_defaultProduct.name}}" stepKey="seeAdminOrderProduct"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml index e6dfb969fe218..fde1baac0c443 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml @@ -14,7 +14,7 @@ <stories value="Create a CMS Page via the Admin"/> </annotations> <after> - <amOnPage url="admin/admin/auth/logout/" mergeKey="amOnLogoutPage"/> + <amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/> </after> <test name="CreateNewPage"> <annotations> @@ -28,26 +28,26 @@ <env value="firefox"/> <env value="headless"/> </annotations> - <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> - <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> - <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> - <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> - <amOnPage url="{{CmsPagesPage.url}}" mergeKey="amOnPagePagesGrid"/> - <waitForPageLoad mergeKey="waitForPageLoad1"/> - <click selector="{{CmsPagesPageActionsSection.addNewPage}}" mergeKey="clickAddNewPage"/> - <fillField selector="{{CmsNewPagePageBasicFieldsSection.pageTitle}}" userInput="{{_defaultCmsPage.title}}" mergeKey="fillFieldTitle"/> - <click selector="{{CmsNewPagePageContentSection.header}}" mergeKey="clickExpandContent"/> - <fillField selector="{{CmsNewPagePageContentSection.contentHeading}}" userInput="{{_defaultCmsPage.content_heading}}" mergeKey="fillFieldContentHeading"/> + <amOnPage url="{{AdminLoginPage.url}}" stepKey="navigateToAdmin"/> + <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" stepKey="fillUsername"/> + <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" stepKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" stepKey="clickLogin"/> + <amOnPage url="{{CmsPagesPage.url}}" stepKey="amOnPagePagesGrid"/> + <waitForPageLoad stepKey="waitForPageLoad1"/> + <click selector="{{CmsPagesPageActionsSection.addNewPage}}" stepKey="clickAddNewPage"/> + <fillField selector="{{CmsNewPagePageBasicFieldsSection.pageTitle}}" userInput="{{_defaultCmsPage.title}}" stepKey="fillFieldTitle"/> + <click selector="{{CmsNewPagePageContentSection.header}}" stepKey="clickExpandContent"/> + <fillField selector="{{CmsNewPagePageContentSection.contentHeading}}" userInput="{{_defaultCmsPage.content_heading}}" stepKey="fillFieldContentHeading"/> <!-- As of 2017/11/15, this test is failing here (Jenkins only, works locally). See MQE-282. --> - <fillField selector="{{CmsNewPagePageContentSection.content}}" userInput="{{_defaultCmsPage.content}}" mergeKey="fillFieldContent"/> - <click selector="{{CmsNewPagePageSeoSection.header}}" mergeKey="clickExpandSearchEngineOptimisation"/> - <fillField selector="{{CmsNewPagePageSeoSection.urlKey}}" userInput="{{_defaultCmsPage.identifier}}" mergeKey="fillFieldUrlKey"/> - <click selector="{{CmsNewPagePageActionsSection.savePage}}" mergeKey="clickSavePage"/> - <see userInput="You saved the page." mergeKey="seeSuccessMessage"/> - <amOnPage url="{{_defaultCmsPage.identifier}}" mergeKey="amOnPageTestPage"/> - <waitForPageLoad mergeKey="waitForPageLoad2"/> - <see userInput="{{_defaultCmsPage.content_heading}}" mergeKey="seeContentHeading"/> - <see userInput="{{_defaultCmsPage.content}}" mergeKey="seeContent"/> + <fillField selector="{{CmsNewPagePageContentSection.content}}" userInput="{{_defaultCmsPage.content}}" stepKey="fillFieldContent"/> + <click selector="{{CmsNewPagePageSeoSection.header}}" stepKey="clickExpandSearchEngineOptimisation"/> + <fillField selector="{{CmsNewPagePageSeoSection.urlKey}}" userInput="{{_defaultCmsPage.identifier}}" stepKey="fillFieldUrlKey"/> + <click selector="{{CmsNewPagePageActionsSection.savePage}}" stepKey="clickSavePage"/> + <see userInput="You saved the page." stepKey="seeSuccessMessage"/> + <amOnPage url="{{_defaultCmsPage.identifier}}" stepKey="amOnPageTestPage"/> + <waitForPageLoad stepKey="waitForPageLoad2"/> + <see userInput="{{_defaultCmsPage.content_heading}}" stepKey="seeContentHeading"/> + <see userInput="{{_defaultCmsPage.content}}" stepKey="seeContent"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml index fbcc2581b4089..1e1475e154cd3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml @@ -14,10 +14,10 @@ <stories value="Create a Configurable Product via the Admin"/> </annotations> <before> - <loginAsAdmin mergeKey="loginAsAdmin"/> + <loginAsAdmin stepKey="loginAsAdmin"/> </before> <after> - <amOnPage url="admin/admin/auth/logout/" mergeKey="amOnLogoutPage"/> + <amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/> </after> <test name="CreateConfigurableProductViaAdmin"> <annotations> @@ -30,105 +30,105 @@ <env value="chrome"/> </annotations> - <amOnPage url="{{AdminCategoryPage.url}}" mergeKey="amOnCategoryGridPage"/> - <waitForPageLoad mergeKey="waitForPageLoad1"/> - - <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" mergeKey="clickOnAddSubCategory"/> - <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{_defaultCategory.name}}" mergeKey="enterCategoryName"/> - <click selector="{{AdminCategorySEOSection.SectionHeader}}" mergeKey="clickOnSeoSection"/> - <fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{_defaultCategory.name_lwr}}" mergeKey="enterUrlKey"/> - <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" mergeKey="clickOnSaveCategory"/> - <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" mergeKey="assertSuccessMessage"/> - - <amOnPage url="{{AdminProductIndexPage.url}}" mergeKey="amOnProductGridPage"/> - <waitForPageLoad mergeKey="waitForPageLoad2"/> - <click selector="{{AdminProductGridActionSection.addProductToggle}}" mergeKey="clickOnAddProductToggle"/> - <click selector="{{AdminProductGridActionSection.addConfigurableProduct}}" mergeKey="clickOnAddConfigurableProduct"/> - <fillField userInput="{{_defaultProduct.name}}" selector="{{AdminProductFormSection.productName}}" mergeKey="fillName"/> - <fillField userInput="{{_defaultProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" mergeKey="fillSKU"/> - <fillField userInput="{{_defaultProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" mergeKey="fillPrice"/> - <fillField userInput="{{_defaultProduct.quantity}}" selector="{{AdminProductFormSection.productQuantity}}" mergeKey="fillQuantity"/> - <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="[{{_defaultCategory.name}}]" mergeKey="searchAndSelectCategory"/> - <click selector="{{AdminProductSEOSection.sectionHeader}}" mergeKey="openSeoSection"/> - <fillField userInput="{{_defaultProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" mergeKey="fillUrlKey"/> - - <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" mergeKey="clickOnCreateConfigurations"/> - <click selector="{{AdminCreateProductConfigurationsPanel.createNewAttribute}}" mergeKey="clickOnNewAttribute"/> - <switchToIFrame selector="{{AdminNewAttributePanel.newAttributeIFrame}}" mergeKey="switchToNewAttributeIFrame"/> - <fillField selector="{{AdminNewAttributePanel.defaultLabel}}" userInput="{{colorProductAttribute.default_label}}" mergeKey="fillDefaultLabel"/> - <click selector="{{AdminNewAttributePanel.saveAttribute}}" mergeKey="clickOnNewAttributePanel"/> - - <switchToIFrame mergeKey="switchOutOfIFrame"/> - <click selector="{{AdminCreateProductConfigurationsPanel.filters}}" mergeKey="clickOnFilters"/> - <fillField userInput="{{colorProductAttribute.default_label}}" selector="{{AdminCreateProductConfigurationsPanel.attributeCode}}" mergeKey="fillFilterAttributeCodeField"/> - <click selector="{{AdminCreateProductConfigurationsPanel.applyFilters}}" mergeKey="clickApplyFiltersButton"/> - <click selector="{{AdminCreateProductConfigurationsPanel.firstCheckbox}}" mergeKey="clickOnFirstCheckbox"/> - <click selector="{{AdminCreateProductConfigurationsPanel.next}}" mergeKey="clickOnNextButton1"/> - - <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" mergeKey="clickOnCreateNewValue1"/> - <fillField userInput="{{colorProductAttribute1.name}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" mergeKey="fillFieldForNewAttribute1"/> - <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" mergeKey="clickOnSaveNewAttribute1"/> - - <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" mergeKey="clickOnCreateNewValue2"/> - <fillField userInput="{{colorProductAttribute2.name}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" mergeKey="fillFieldForNewAttribute2"/> - <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" mergeKey="clickOnSaveNewAttribute2"/> - - <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" mergeKey="clickOnCreateNewValue3"/> - <fillField userInput="{{colorProductAttribute3.name}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" mergeKey="fillFieldForNewAttribute3"/> - <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" mergeKey="clickOnSaveNewAttribute3"/> - - <click selector="{{AdminCreateProductConfigurationsPanel.selectAll}}" mergeKey="clickOnSelectAll"/> - <click selector="{{AdminCreateProductConfigurationsPanel.next}}" mergeKey="clickOnNextButton2"/> - - <click selector="{{AdminCreateProductConfigurationsPanel.applyUniquePricesByAttributeToEachSku}}" mergeKey="clickOnApplyUniquePricesByAttributeToEachSku"/> - <selectOption selector="{{AdminCreateProductConfigurationsPanel.selectAttribute}}" userInput="{{colorProductAttribute.default_label}}" mergeKey="selectAttributes"/> - <fillField selector="{{AdminCreateProductConfigurationsPanel.attribute1}}" userInput="{{colorProductAttribute1.price}}" mergeKey="fillAttributePrice1"/> - <fillField selector="{{AdminCreateProductConfigurationsPanel.attribute2}}" userInput="{{colorProductAttribute2.price}}" mergeKey="fillAttributePrice2"/> - <fillField selector="{{AdminCreateProductConfigurationsPanel.attribute3}}" userInput="{{colorProductAttribute3.price}}" mergeKey="fillAttributePrice3"/> - - <click selector="{{AdminCreateProductConfigurationsPanel.applySingleQuantityToEachSkus}}" mergeKey="clickOnApplySingleQuantityToEachSku"/> - <fillField selector="{{AdminCreateProductConfigurationsPanel.quantity}}" userInput="1" mergeKey="enterAttributeQuantity"/> - <click selector="{{AdminCreateProductConfigurationsPanel.next}}" mergeKey="clickOnNextButton3"/> - <click selector="{{AdminCreateProductConfigurationsPanel.next}}" mergeKey="clickOnNextButton4"/> - - <click selector="{{AdminProductFormActionSection.saveButton}}" mergeKey="clickOnSaveButton2"/> - <click selector="{{AdminChooseAffectedAttributeSetPopup.confirm}}" mergeKey="clickOnConfirmInPopup"/> - - <seeElement selector="{{AdminProductMessagesSection.successMessage}}" mergeKey="seeSaveProductMessage"/> - <seeInTitle userInput="{{_defaultProduct.name}}" mergeKey="seeProductNameInTitle"/> - - <seeNumberOfElements selector="{{AdminProductFormConfigurationsSection.currentVariationsRows}}" userInput="3" mergeKey="seeNumberOfRows"/> - <see selector="{{AdminProductFormConfigurationsSection.currentVariationsNameCells}}" userInput="{{colorProductAttribute1.name}}" mergeKey="seeAttributeName1InField"/> - <see selector="{{AdminProductFormConfigurationsSection.currentVariationsNameCells}}" userInput="{{colorProductAttribute2.name}}" mergeKey="seeAttributeName2InField"/> - <see selector="{{AdminProductFormConfigurationsSection.currentVariationsNameCells}}" userInput="{{colorProductAttribute3.name}}" mergeKey="seeAttributeName3InField"/> - <see selector="{{AdminProductFormConfigurationsSection.currentVariationsSkuCells}}" userInput="{{colorProductAttribute1.name}}" mergeKey="seeAttributeSku1InField"/> - <see selector="{{AdminProductFormConfigurationsSection.currentVariationsSkuCells}}" userInput="{{colorProductAttribute2.name}}" mergeKey="seeAttributeSku2InField"/> - <see selector="{{AdminProductFormConfigurationsSection.currentVariationsSkuCells}}" userInput="{{colorProductAttribute3.name}}" mergeKey="seeAttributeSku3InField"/> - <see selector="{{AdminProductFormConfigurationsSection.currentVariationsPriceCells}}" userInput="{{colorProductAttribute1.price}}" mergeKey="seeUniquePrice1InField"/> - <see selector="{{AdminProductFormConfigurationsSection.currentVariationsPriceCells}}" userInput="{{colorProductAttribute2.price}}" mergeKey="seeUniquePrice2InField"/> - <see selector="{{AdminProductFormConfigurationsSection.currentVariationsPriceCells}}" userInput="{{colorProductAttribute3.price}}" mergeKey="seeUniquePrice3InField"/> - <see selector="{{AdminProductFormConfigurationsSection.currentVariationsQuantityCells}}" userInput="{{colorProductAttribute.attribute_quantity}}" mergeKey="seeQuantityInField"/> - - <amOnPage url="/" mergeKey="amOnStorefront"/> - <waitForPageLoad mergeKey="waitForPageLoad3"/> - - <click userInput="{{_defaultCategory.name}}" mergeKey="clickOnCategoryName"/> - <waitForPageLoad mergeKey="waitForPageLoad4"/> - - <see userInput="{{_defaultProduct.name}}" mergeKey="assertProductPresent"/> - <see userInput="{{colorProductAttribute1.price}}" mergeKey="assertProductPricePresent"/> - <click userInput="{{_defaultProduct.name}}" mergeKey="clickOnProductName"/> - <waitForPageLoad mergeKey="waitForPageLoad5"/> - - <seeInTitle userInput="{{_defaultProduct.name}}" mergeKey="assertProductNameTitle"/> - <see userInput="{{_defaultProduct.name}}" selector="{{StorefrontProductInfoMainSection.productName}}" mergeKey="assertProductName"/> - <see userInput="{{colorProductAttribute1.price}}" selector="{{StorefrontProductInfoMainSection.productPrice}}" mergeKey="assertProductPrice"/> - <see userInput="{{_defaultProduct.sku}}" selector="{{StorefrontProductInfoMainSection.productSku}}" mergeKey="assertProductSku"/> - - <see selector="{{StorefrontProductInfoMainSection.productAttributeTitle1}}" userInput="{{colorProductAttribute.default_label}}" mergeKey="seeColorAttributeName1"/> - <see selector="{{StorefrontProductInfoMainSection.productAttributeOptions1}}" userInput="{{colorProductAttribute1.name}}" mergeKey="seeInDropDown1"/> - <see selector="{{StorefrontProductInfoMainSection.productAttributeOptions1}}" userInput="{{colorProductAttribute2.name}}" mergeKey="seeInDropDown2"/> - <see selector="{{StorefrontProductInfoMainSection.productAttributeOptions1}}" userInput="{{colorProductAttribute3.name}}" mergeKey="seeInDropDown3"/> + <amOnPage url="{{AdminCategoryPage.url}}" stepKey="amOnCategoryGridPage"/> + <waitForPageLoad stepKey="waitForPageLoad1"/> + + <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" stepKey="clickOnAddSubCategory"/> + <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{_defaultCategory.name}}" stepKey="enterCategoryName"/> + <click selector="{{AdminCategorySEOSection.SectionHeader}}" stepKey="clickOnSeoSection"/> + <fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{_defaultCategory.name_lwr}}" stepKey="enterUrlKey"/> + <click selector="{{AdminCategoryMainActionsSection.SaveButton}}" stepKey="clickOnSaveCategory"/> + <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="assertSuccessMessage"/> + + <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="amOnProductGridPage"/> + <waitForPageLoad stepKey="waitForPageLoad2"/> + <click selector="{{AdminProductGridActionSection.addProductToggle}}" stepKey="clickOnAddProductToggle"/> + <click selector="{{AdminProductGridActionSection.addConfigurableProduct}}" stepKey="clickOnAddConfigurableProduct"/> + <fillField userInput="{{_defaultProduct.name}}" selector="{{AdminProductFormSection.productName}}" stepKey="fillName"/> + <fillField userInput="{{_defaultProduct.sku}}" selector="{{AdminProductFormSection.productSku}}" stepKey="fillSKU"/> + <fillField userInput="{{_defaultProduct.price}}" selector="{{AdminProductFormSection.productPrice}}" stepKey="fillPrice"/> + <fillField userInput="{{_defaultProduct.quantity}}" selector="{{AdminProductFormSection.productQuantity}}" stepKey="fillQuantity"/> + <searchAndMultiSelectOption selector="{{AdminProductFormSection.categoriesDropdown}}" parameterArray="[{{_defaultCategory.name}}]" stepKey="searchAndSelectCategory"/> + <click selector="{{AdminProductSEOSection.sectionHeader}}" stepKey="openSeoSection"/> + <fillField userInput="{{_defaultProduct.urlKey}}" selector="{{AdminProductSEOSection.urlKeyInput}}" stepKey="fillUrlKey"/> + + <click selector="{{AdminProductFormConfigurationsSection.createConfigurations}}" stepKey="clickOnCreateConfigurations"/> + <click selector="{{AdminCreateProductConfigurationsPanel.createNewAttribute}}" stepKey="clickOnNewAttribute"/> + <switchToIFrame selector="{{AdminNewAttributePanel.newAttributeIFrame}}" stepKey="switchToNewAttributeIFrame"/> + <fillField selector="{{AdminNewAttributePanel.defaultLabel}}" userInput="{{colorProductAttribute.default_label}}" stepKey="fillDefaultLabel"/> + <click selector="{{AdminNewAttributePanel.saveAttribute}}" stepKey="clickOnNewAttributePanel"/> + + <switchToIFrame stepKey="switchOutOfIFrame"/> + <click selector="{{AdminCreateProductConfigurationsPanel.filters}}" stepKey="clickOnFilters"/> + <fillField userInput="{{colorProductAttribute.default_label}}" selector="{{AdminCreateProductConfigurationsPanel.attributeCode}}" stepKey="fillFilterAttributeCodeField"/> + <click selector="{{AdminCreateProductConfigurationsPanel.applyFilters}}" stepKey="clickApplyFiltersButton"/> + <click selector="{{AdminCreateProductConfigurationsPanel.firstCheckbox}}" stepKey="clickOnFirstCheckbox"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton1"/> + + <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" stepKey="clickOnCreateNewValue1"/> + <fillField userInput="{{colorProductAttribute1.name}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" stepKey="fillFieldForNewAttribute1"/> + <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" stepKey="clickOnSaveNewAttribute1"/> + + <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" stepKey="clickOnCreateNewValue2"/> + <fillField userInput="{{colorProductAttribute2.name}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" stepKey="fillFieldForNewAttribute2"/> + <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" stepKey="clickOnSaveNewAttribute2"/> + + <click selector="{{AdminCreateProductConfigurationsPanel.createNewValue}}" stepKey="clickOnCreateNewValue3"/> + <fillField userInput="{{colorProductAttribute3.name}}" selector="{{AdminCreateProductConfigurationsPanel.attributeName}}" stepKey="fillFieldForNewAttribute3"/> + <click selector="{{AdminCreateProductConfigurationsPanel.saveAttribute}}" stepKey="clickOnSaveNewAttribute3"/> + + <click selector="{{AdminCreateProductConfigurationsPanel.selectAll}}" stepKey="clickOnSelectAll"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton2"/> + + <click selector="{{AdminCreateProductConfigurationsPanel.applyUniquePricesByAttributeToEachSku}}" stepKey="clickOnApplyUniquePricesByAttributeToEachSku"/> + <selectOption selector="{{AdminCreateProductConfigurationsPanel.selectAttribute}}" userInput="{{colorProductAttribute.default_label}}" stepKey="selectAttributes"/> + <fillField selector="{{AdminCreateProductConfigurationsPanel.attribute1}}" userInput="{{colorProductAttribute1.price}}" stepKey="fillAttributePrice1"/> + <fillField selector="{{AdminCreateProductConfigurationsPanel.attribute2}}" userInput="{{colorProductAttribute2.price}}" stepKey="fillAttributePrice2"/> + <fillField selector="{{AdminCreateProductConfigurationsPanel.attribute3}}" userInput="{{colorProductAttribute3.price}}" stepKey="fillAttributePrice3"/> + + <click selector="{{AdminCreateProductConfigurationsPanel.applySingleQuantityToEachSkus}}" stepKey="clickOnApplySingleQuantityToEachSku"/> + <fillField selector="{{AdminCreateProductConfigurationsPanel.quantity}}" userInput="1" stepKey="enterAttributeQuantity"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton3"/> + <click selector="{{AdminCreateProductConfigurationsPanel.next}}" stepKey="clickOnNextButton4"/> + + <click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickOnSaveButton2"/> + <click selector="{{AdminChooseAffectedAttributeSetPopup.confirm}}" stepKey="clickOnConfirmInPopup"/> + + <seeElement selector="{{AdminProductMessagesSection.successMessage}}" stepKey="seeSaveProductMessage"/> + <seeInTitle userInput="{{_defaultProduct.name}}" stepKey="seeProductNameInTitle"/> + + <seeNumberOfElements selector="{{AdminProductFormConfigurationsSection.currentVariationsRows}}" userInput="3" stepKey="seeNumberOfRows"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsNameCells}}" userInput="{{colorProductAttribute1.name}}" stepKey="seeAttributeName1InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsNameCells}}" userInput="{{colorProductAttribute2.name}}" stepKey="seeAttributeName2InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsNameCells}}" userInput="{{colorProductAttribute3.name}}" stepKey="seeAttributeName3InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsSkuCells}}" userInput="{{colorProductAttribute1.name}}" stepKey="seeAttributeSku1InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsSkuCells}}" userInput="{{colorProductAttribute2.name}}" stepKey="seeAttributeSku2InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsSkuCells}}" userInput="{{colorProductAttribute3.name}}" stepKey="seeAttributeSku3InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsPriceCells}}" userInput="{{colorProductAttribute1.price}}" stepKey="seeUniquePrice1InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsPriceCells}}" userInput="{{colorProductAttribute2.price}}" stepKey="seeUniquePrice2InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsPriceCells}}" userInput="{{colorProductAttribute3.price}}" stepKey="seeUniquePrice3InField"/> + <see selector="{{AdminProductFormConfigurationsSection.currentVariationsQuantityCells}}" userInput="{{colorProductAttribute.attribute_quantity}}" stepKey="seeQuantityInField"/> + + <amOnPage url="/" stepKey="amOnStorefront"/> + <waitForPageLoad stepKey="waitForPageLoad3"/> + + <click userInput="{{_defaultCategory.name}}" stepKey="clickOnCategoryName"/> + <waitForPageLoad stepKey="waitForPageLoad4"/> + + <see userInput="{{_defaultProduct.name}}" stepKey="assertProductPresent"/> + <see userInput="{{colorProductAttribute1.price}}" stepKey="assertProductPricePresent"/> + <click userInput="{{_defaultProduct.name}}" stepKey="clickOnProductName"/> + <waitForPageLoad stepKey="waitForPageLoad5"/> + + <seeInTitle userInput="{{_defaultProduct.name}}" stepKey="assertProductNameTitle"/> + <see userInput="{{_defaultProduct.name}}" selector="{{StorefrontProductInfoMainSection.productName}}" stepKey="assertProductName"/> + <see userInput="{{colorProductAttribute1.price}}" selector="{{StorefrontProductInfoMainSection.productPrice}}" stepKey="assertProductPrice"/> + <see userInput="{{_defaultProduct.sku}}" selector="{{StorefrontProductInfoMainSection.productSku}}" stepKey="assertProductSku"/> + + <see selector="{{StorefrontProductInfoMainSection.productAttributeTitle1}}" userInput="{{colorProductAttribute.default_label}}" stepKey="seeColorAttributeName1"/> + <see selector="{{StorefrontProductInfoMainSection.productAttributeOptions1}}" userInput="{{colorProductAttribute1.name}}" stepKey="seeInDropDown1"/> + <see selector="{{StorefrontProductInfoMainSection.productAttributeOptions1}}" userInput="{{colorProductAttribute2.name}}" stepKey="seeInDropDown2"/> + <see selector="{{StorefrontProductInfoMainSection.productAttributeOptions1}}" userInput="{{colorProductAttribute3.name}}" stepKey="seeInDropDown3"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml index b577bca92e34f..da72ffd45ea28 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml @@ -24,26 +24,26 @@ <env value="chrome"/> <env value="headless"/> </annotations> - <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> - <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" mergeKey="fillUsername"/> - <fillField userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" selector="{{AdminLoginFormSection.password}}" mergeKey="fillPassword"/> - <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> - <amOnPage url="{{AdminCustomerPage.url}}" mergeKey="navigateToCustomers"/> - <click selector="{{AdminCustomerMainActionsSection.addNewCustomer}}" mergeKey="clickCreateCustomer"/> - <fillField userInput="{{CustomerEntityOne.firstname}}" selector="{{AdminNewCustomerAccountInformationSection.firstName}}" mergeKey="fillFirstName"/> - <fillField userInput="{{CustomerEntityOne.lastname}}" selector="{{AdminNewCustomerAccountInformationSection.lastName}}" mergeKey="fillLastName"/> - <fillField userInput="{{CustomerEntityOne.email}}" selector="{{AdminNewCustomerAccountInformationSection.email}}" mergeKey="fillEmail"/> - <click selector="{{AdminNewCustomerMainActionsSection.saveButton}}" mergeKey="saveCustomer"/> - <waitForElementNotVisible selector="div [data-role='spinner']" time="10" mergeKey="waitForSpinner1"/> - <seeElement selector="{{AdminCustomerMessagesSection.successMessage}}" mergeKey="assertSuccessMessage"/> + <amOnPage url="{{AdminLoginPage.url}}" stepKey="navigateToAdmin"/> + <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" stepKey="fillUsername"/> + <fillField userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" selector="{{AdminLoginFormSection.password}}" stepKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" stepKey="clickLogin"/> + <amOnPage url="{{AdminCustomerPage.url}}" stepKey="navigateToCustomers"/> + <click selector="{{AdminCustomerMainActionsSection.addNewCustomer}}" stepKey="clickCreateCustomer"/> + <fillField userInput="{{CustomerEntityOne.firstname}}" selector="{{AdminNewCustomerAccountInformationSection.firstName}}" stepKey="fillFirstName"/> + <fillField userInput="{{CustomerEntityOne.lastname}}" selector="{{AdminNewCustomerAccountInformationSection.lastName}}" stepKey="fillLastName"/> + <fillField userInput="{{CustomerEntityOne.email}}" selector="{{AdminNewCustomerAccountInformationSection.email}}" stepKey="fillEmail"/> + <click selector="{{AdminNewCustomerMainActionsSection.saveButton}}" stepKey="saveCustomer"/> + <waitForElementNotVisible selector="div [data-role='spinner']" time="10" stepKey="waitForSpinner1"/> + <seeElement selector="{{AdminCustomerMessagesSection.successMessage}}" stepKey="assertSuccessMessage"/> - <click selector="{{AdminCustomerFiltersSection.filtersButton}}" mergeKey="openFilter"/> - <fillField userInput="{{CustomerEntityOne.firstname}}" selector="{{AdminCustomerFiltersSection.nameInput}}" mergeKey="filterFirstName"/> - <click selector="{{AdminCustomerFiltersSection.apply}}" mergeKey="applyFilter"/> - <waitForElementNotVisible selector="div [data-role='spinner']" time="10" mergeKey="waitForSpinner2"/> - <see userInput="{{CustomerEntityOne.firstname}}" selector="{{AdminCustomerGridSection.customerGrid}}" mergeKey="assertFirstName"/> - <see userInput="{{CustomerEntityOne.lastname}}" selector="{{AdminCustomerGridSection.customerGrid}}" mergeKey="assertLastName"/> - <see userInput="{{CustomerEntityOne.email}}" selector="{{AdminCustomerGridSection.customerGrid}}" mergeKey="assertEmail"/> + <click selector="{{AdminCustomerFiltersSection.filtersButton}}" stepKey="openFilter"/> + <fillField userInput="{{CustomerEntityOne.firstname}}" selector="{{AdminCustomerFiltersSection.nameInput}}" stepKey="filterFirstName"/> + <click selector="{{AdminCustomerFiltersSection.apply}}" stepKey="applyFilter"/> + <waitForElementNotVisible selector="div [data-role='spinner']" time="10" stepKey="waitForSpinner2"/> + <see userInput="{{CustomerEntityOne.firstname}}" selector="{{AdminCustomerGridSection.customerGrid}}" stepKey="assertFirstName"/> + <see userInput="{{CustomerEntityOne.lastname}}" selector="{{AdminCustomerGridSection.customerGrid}}" stepKey="assertLastName"/> + <see userInput="{{CustomerEntityOne.email}}" selector="{{AdminCustomerGridSection.customerGrid}}" stepKey="assertEmail"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml index 37fe0017b8685..36c97c56d0f7d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml @@ -25,18 +25,18 @@ <env value="firefox"/> <env value="headless"/> </annotations> - <amOnPage mergeKey="amOnStorefrontPage" url="/"/> - <click mergeKey="clickOnCreateAccountLink" selector="{{StorefrontPanelHeaderSection.createAnAccountLink}}"/> - <fillField mergeKey="fillFirstName" userInput="{{CustomerEntityOne.firstname}}" selector="{{StorefrontCustomerCreateFormSection.firstnameField}}"/> - <fillField mergeKey="fillLastName" userInput="{{CustomerEntityOne.lastname}}" selector="{{StorefrontCustomerCreateFormSection.lastnameField}}"/> - <fillField mergeKey="fillEmail" userInput="{{CustomerEntityOne.email}}" selector="{{StorefrontCustomerCreateFormSection.emailField}}"/> - <fillField mergeKey="fillPassword" userInput="{{CustomerEntityOne.password}}" selector="{{StorefrontCustomerCreateFormSection.passwordField}}"/> - <fillField mergeKey="fillConfirmPassword" userInput="{{CustomerEntityOne.password}}" selector="{{StorefrontCustomerCreateFormSection.confirmPasswordField}}"/> - <click mergeKey="clickCreateAccountButton" selector="{{StorefrontCustomerCreateFormSection.createAccountButton}}"/> - <see mergeKey="seeThankYouMessage" userInput="Thank you for registering with Main Website Store."/> - <see mergeKey="seeFirstName" userInput="{{CustomerEntityOne.firstname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> - <see mergeKey="seeLastName" userInput="{{CustomerEntityOne.lastname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> - <see mergeKey="seeEmail" userInput="{{CustomerEntityOne.email}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <amOnPage stepKey="amOnStorefrontPage" url="/"/> + <click stepKey="clickOnCreateAccountLink" selector="{{StorefrontPanelHeaderSection.createAnAccountLink}}"/> + <fillField stepKey="fillFirstName" userInput="{{CustomerEntityOne.firstname}}" selector="{{StorefrontCustomerCreateFormSection.firstnameField}}"/> + <fillField stepKey="fillLastName" userInput="{{CustomerEntityOne.lastname}}" selector="{{StorefrontCustomerCreateFormSection.lastnameField}}"/> + <fillField stepKey="fillEmail" userInput="{{CustomerEntityOne.email}}" selector="{{StorefrontCustomerCreateFormSection.emailField}}"/> + <fillField stepKey="fillPassword" userInput="{{CustomerEntityOne.password}}" selector="{{StorefrontCustomerCreateFormSection.passwordField}}"/> + <fillField stepKey="fillConfirmPassword" userInput="{{CustomerEntityOne.password}}" selector="{{StorefrontCustomerCreateFormSection.confirmPasswordField}}"/> + <click stepKey="clickCreateAccountButton" selector="{{StorefrontCustomerCreateFormSection.createAccountButton}}"/> + <see stepKey="seeThankYouMessage" userInput="Thank you for registering with Main Website Store."/> + <see stepKey="seeFirstName" userInput="{{CustomerEntityOne.firstname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see stepKey="seeLastName" userInput="{{CustomerEntityOne.lastname}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see stepKey="seeEmail" userInput="{{CustomerEntityOne.email}}" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> </test> </cest> </config> \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml index 2e039b51bf107..6c79e31478c9a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml @@ -14,10 +14,10 @@ <stories value="Persisted customer can login from storefront."/> </annotations> <before> - <createData mergeKey="customer" entity="Simple_US_Customer"/> + <createData stepKey="customer" entity="Simple_US_Customer"/> </before> <after> - <deleteData mergeKey="deleteCustomer" createDataKey="customer" /> + <deleteData stepKey="deleteCustomer" createDataKey="customer" /> </after> <test name="StorefrontPersistedCustomerLoginTest"> <annotations> @@ -31,13 +31,13 @@ <env value="phantomjs"/> <env value="headless"/> </annotations> - <amOnPage mergeKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage.url}}"/> - <fillField mergeKey="fillEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> - <fillField mergeKey="fillPassword" userInput="$$customer.password$$" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> - <click mergeKey="clickSignInAccountButton" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> - <see mergeKey="seeFirstName" userInput="$$customer.firstname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> - <see mergeKey="seeLastName" userInput="$$customer.lastname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> - <see mergeKey="seeEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <amOnPage stepKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage.url}}"/> + <fillField stepKey="fillEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> + <fillField stepKey="fillPassword" userInput="$$customer.password$$" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> + <click stepKey="clickSignInAccountButton" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> + <see stepKey="seeFirstName" userInput="$$customer.firstname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see stepKey="seeLastName" userInput="$$customer.lastname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see stepKey="seeEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml index c043fe298f767..f27ac7d37af33 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml @@ -14,8 +14,8 @@ <stories value="Create an Invoice via the Admin"/> </annotations> <before> - <createData entity="_defaultCategory" mergeKey="createCategory"/> - <createData entity="_defaultProduct" mergeKey="createProduct"> + <createData entity="_defaultCategory" stepKey="createCategory"/> + <createData entity="_defaultProduct" stepKey="createProduct"> <required-entity createDataKey="createCategory"/> </createData> </before> @@ -32,59 +32,59 @@ </annotations> <!-- todo: Create an order via the api instead of driving the browser --> - <amOnPage url="{{StorefrontCategoryPage.url($$createCategory.name$$)}}" mergeKey="onCategoryPage"/> - <waitForPageLoad mergeKey="waitForPageLoad1"/> - <moveMouseOver selector="{{StorefrontCategoryMainSection.ProductItemInfo}}" mergeKey="hoverProduct"/> - <click selector="{{StorefrontCategoryMainSection.AddToCartBtn}}" mergeKey="addToCart"/> - <waitForElementVisible selector="{{StorefrontCategoryMainSection.SuccessMsg}}" time="30" mergeKey="waitForProductAdded"/> - <click selector="{{StorefrontMiniCartSection.show}}" mergeKey="clickCart"/> - <click selector="{{StorefrontMiniCartSection.goToCheckout}}" mergeKey="goToCheckout"/> - <waitForPageLoad mergeKey="waitForPageLoad2"/> - <fillField selector="{{CheckoutShippingGuestInfoSection.email}}" userInput="{{CustomerEntityOne.email}}" mergeKey="enterEmail"/> - <fillField selector="{{CheckoutShippingGuestInfoSection.firstName}}" userInput="{{CustomerEntityOne.firstname}}" mergeKey="enterFirstName"/> - <fillField selector="{{CheckoutShippingGuestInfoSection.lastName}}" userInput="{{CustomerEntityOne.lastname}}" mergeKey="enterLastName"/> - <fillField selector="{{CheckoutShippingGuestInfoSection.street}}" userInput="{{CustomerAddressSimple.street[0]}}" mergeKey="enterStreet"/> - <fillField selector="{{CheckoutShippingGuestInfoSection.city}}" userInput="{{CustomerAddressSimple.city}}" mergeKey="enterCity"/> - <selectOption selector="{{CheckoutShippingGuestInfoSection.region}}" userInput="{{CustomerAddressSimple.state}}" mergeKey="selectRegion"/> - <fillField selector="{{CheckoutShippingGuestInfoSection.postcode}}" userInput="{{CustomerAddressSimple.postcode}}" mergeKey="enterPostcode"/> - <fillField selector="{{CheckoutShippingGuestInfoSection.telephone}}" userInput="{{CustomerAddressSimple.telephone}}" mergeKey="enterTelephone"/> - <waitForLoadingMaskToDisappear mergeKey="waitForLoadingMask"/> - <click selector="{{CheckoutShippingMethodsSection.firstShippingMethod}}" mergeKey="selectFirstShippingMethod"/> - <waitForElement selector="{{CheckoutShippingMethodsSection.next}}" time="30" mergeKey="waitForNextButton"/> - <click selector="{{CheckoutShippingMethodsSection.next}}" mergeKey="clickNext"/> - <waitForElement selector="{{CheckoutPaymentSection.placeOrder}}" time="30" mergeKey="waitForPlaceOrderButton"/> - <click selector="{{CheckoutPaymentSection.placeOrder}}" mergeKey="clickPlaceOrder"/> - <grabTextFrom selector="{{CheckoutSuccessMainSection.orderNumber}}" returnVariable="orderNumber" mergeKey="grabOrderNumber"/> + <amOnPage url="{{StorefrontCategoryPage.url($$createCategory.name$$)}}" stepKey="onCategoryPage"/> + <waitForPageLoad stepKey="waitForPageLoad1"/> + <moveMouseOver selector="{{StorefrontCategoryMainSection.ProductItemInfo}}" stepKey="hoverProduct"/> + <click selector="{{StorefrontCategoryMainSection.AddToCartBtn}}" stepKey="addToCart"/> + <waitForElementVisible selector="{{StorefrontCategoryMainSection.SuccessMsg}}" time="30" stepKey="waitForProductAdded"/> + <click selector="{{StorefrontMiniCartSection.show}}" stepKey="clickCart"/> + <click selector="{{StorefrontMiniCartSection.goToCheckout}}" stepKey="goToCheckout"/> + <waitForPageLoad stepKey="waitForPageLoad2"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.email}}" userInput="{{CustomerEntityOne.email}}" stepKey="enterEmail"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.firstName}}" userInput="{{CustomerEntityOne.firstname}}" stepKey="enterFirstName"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.lastName}}" userInput="{{CustomerEntityOne.lastname}}" stepKey="enterLastName"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.street}}" userInput="{{CustomerAddressSimple.street[0]}}" stepKey="enterStreet"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.city}}" userInput="{{CustomerAddressSimple.city}}" stepKey="enterCity"/> + <selectOption selector="{{CheckoutShippingGuestInfoSection.region}}" userInput="{{CustomerAddressSimple.state}}" stepKey="selectRegion"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.postcode}}" userInput="{{CustomerAddressSimple.postcode}}" stepKey="enterPostcode"/> + <fillField selector="{{CheckoutShippingGuestInfoSection.telephone}}" userInput="{{CustomerAddressSimple.telephone}}" stepKey="enterTelephone"/> + <waitForLoadingMaskToDisappear stepKey="waitForLoadingMask"/> + <click selector="{{CheckoutShippingMethodsSection.firstShippingMethod}}" stepKey="selectFirstShippingMethod"/> + <waitForElement selector="{{CheckoutShippingMethodsSection.next}}" time="30" stepKey="waitForNextButton"/> + <click selector="{{CheckoutShippingMethodsSection.next}}" stepKey="clickNext"/> + <waitForElement selector="{{CheckoutPaymentSection.placeOrder}}" time="30" stepKey="waitForPlaceOrderButton"/> + <click selector="{{CheckoutPaymentSection.placeOrder}}" stepKey="clickPlaceOrder"/> + <grabTextFrom selector="{{CheckoutSuccessMainSection.orderNumber}}" returnVariable="orderNumber" stepKey="grabOrderNumber"/> <!-- end todo --> - <amOnPage url="{{AdminLoginPage.url}}" mergeKey="goToAdmin"/> - <waitForPageLoad mergeKey="waitForPageLoad1"/> - <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> - <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> - <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> + <amOnPage url="{{AdminLoginPage.url}}" stepKey="goToAdmin"/> + <waitForPageLoad stepKey="waitForPageLoad1"/> + <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" stepKey="fillUsername"/> + <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" stepKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" stepKey="clickLogin"/> - <amOnPage url="{{OrdersPage.url}}" mergeKey="onOrdersPage"/> - <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="10" mergeKey="waitSpinner1"/> - <fillField selector="{{OrdersGridSection.search}}" variable="orderNumber" mergeKey="searchOrderNum"/> - <click selector="{{OrdersGridSection.submitSearch}}" mergeKey="submitSearch"/> - <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="10" mergeKey="waitSpinner2"/> + <amOnPage url="{{OrdersPage.url}}" stepKey="onOrdersPage"/> + <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="10" stepKey="waitSpinner1"/> + <fillField selector="{{OrdersGridSection.search}}" variable="orderNumber" stepKey="searchOrderNum"/> + <click selector="{{OrdersGridSection.submitSearch}}" stepKey="submitSearch"/> + <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="10" stepKey="waitSpinner2"/> - <click selector="{{OrdersGridSection.firstRow}}" mergeKey="clickOrderRow"/> - <click selector="{{OrderDetailsMainActionsSection.invoice}}" mergeKey="clickInvoice"/> - <click selector="{{InvoiceNewSection.submitInvoice}}" mergeKey="clickSubmitInvoice"/> - <see selector="{{OrderDetailsMessagesSection.successMessage}}" userInput="The invoice has been created." mergeKey="seeSuccessMessage"/> - <click selector="{{OrderDetailsOrderViewSection.invoices}}" mergeKey="clickInvoices"/> - <waitForElementNotVisible selector="{{OrderDetailsInvoicesSection.spinner}}" time="10" mergeKey="waitSpinner3"/> - <see selector="{{OrderDetailsInvoicesSection.content}}" variable="orderNumber" mergeKey="seeInvoice1"/> - <see selector="{{OrderDetailsInvoicesSection.content}}" userInput="John Doe" mergeKey="seeInvoice2"/> - <click selector="{{OrderDetailsOrderViewSection.information}}" mergeKey="clickInformation"/> - <see selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Processing" mergeKey="seeOrderStatus"/> - <amOnPage url="{{InvoicesPage.url}}" mergeKey="goToInvoices"/> - <waitForElementNotVisible selector="{{InvoicesGridSection.spinner}}" time="10" mergeKey="waitSpinner4"/> - <click selector="{{InvoicesGridSection.filter}}" mergeKey="clickFilters"/> - <fillField selector="{{InvoicesFiltersSection.orderNum}}" variable="orderNumber" mergeKey="searchOrderNum2"/> - <click selector="{{InvoicesGridSection.firstRow}}" mergeKey="clickInvoice2"/> - <see selector="{{InvoiceDetailsInformationSection.orderStatus}}" userInput="Processing" mergeKey="seeOrderStatus2"/> + <click selector="{{OrdersGridSection.firstRow}}" stepKey="clickOrderRow"/> + <click selector="{{OrderDetailsMainActionsSection.invoice}}" stepKey="clickInvoice"/> + <click selector="{{InvoiceNewSection.submitInvoice}}" stepKey="clickSubmitInvoice"/> + <see selector="{{OrderDetailsMessagesSection.successMessage}}" userInput="The invoice has been created." stepKey="seeSuccessMessage"/> + <click selector="{{OrderDetailsOrderViewSection.invoices}}" stepKey="clickInvoices"/> + <waitForElementNotVisible selector="{{OrderDetailsInvoicesSection.spinner}}" time="10" stepKey="waitSpinner3"/> + <see selector="{{OrderDetailsInvoicesSection.content}}" variable="orderNumber" stepKey="seeInvoice1"/> + <see selector="{{OrderDetailsInvoicesSection.content}}" userInput="John Doe" stepKey="seeInvoice2"/> + <click selector="{{OrderDetailsOrderViewSection.information}}" stepKey="clickInformation"/> + <see selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Processing" stepKey="seeOrderStatus"/> + <amOnPage url="{{InvoicesPage.url}}" stepKey="goToInvoices"/> + <waitForElementNotVisible selector="{{InvoicesGridSection.spinner}}" time="10" stepKey="waitSpinner4"/> + <click selector="{{InvoicesGridSection.filter}}" stepKey="clickFilters"/> + <fillField selector="{{InvoicesFiltersSection.orderNum}}" variable="orderNumber" stepKey="searchOrderNum2"/> + <click selector="{{InvoicesGridSection.firstRow}}" stepKey="clickInvoice2"/> + <see selector="{{InvoiceDetailsInformationSection.orderStatus}}" userInput="Processing" stepKey="seeOrderStatus2"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml index 629688f7437b8..b047b19d4a044 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/ActionGroup/SampleActionGroup.xml @@ -12,13 +12,13 @@ <arguments> <argument name="person" defaultValue="SamplePerson"/> </arguments> - <fillField selector="#foo" userInput="{{person.foo}}" mergeKey="fillField1"/> - <fillField selector="#bar" userInput="{{person.bar}}" mergeKey="fillField2"/> + <fillField selector="#foo" userInput="{{person.foo}}" stepKey="fillField1"/> + <fillField selector="#bar" userInput="{{person.bar}}" stepKey="fillField2"/> </actionGroup> <actionGroup name="ValidateSlideOutPanelField"> <arguments> <argument name="property" defaultValue=""/> </arguments> - <see userInput="{{property.name}}" selector="{{ColumnSection.panelFieldLabel(property.section, property.fieldName, property.section, property.name)}}" mergeKey="seePropertyLabel"/> + <see userInput="{{property.name}}" selector="{{ColumnSection.panelFieldLabel(property.section, property.fieldName, property.section, property.name)}}" stepKey="seePropertyLabel"/> </actionGroup> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml index 761635f281886..eddae0242f5d4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AdvancedSampleCest.xml @@ -16,7 +16,7 @@ <group value="skip"/> </annotations> <before> - <createData entity="SamplePerson" mergeKey="beforeData"/> + <createData entity="SamplePerson" stepKey="beforeData"/> </before> <after> @@ -30,26 +30,26 @@ </annotations> <!-- Create an entity that depends on another entity --> - <createData entity="_defaultCategory" mergeKey="createCategory"/> - <createData entity="_defaultProduct" mergeKey="createProduct"> + <createData entity="_defaultCategory" stepKey="createCategory"/> + <createData entity="_defaultProduct" stepKey="createProduct"> <required-entity createDataKey="createCategory"/> </createData> <!-- Parameterized url --> - <amOnPage url="{{SamplePage.url('foo', SamplePerson.bar)}}" mergeKey="amOnPage"/> + <amOnPage url="{{SamplePage.url('foo', SamplePerson.bar)}}" stepKey="amOnPage"/> <!-- Parameterized selector --> - <grabTextFrom selector="{{SampleSection.twoParamElement(SamplePerson.foo, 'bar')}}" returnVariable="myReturnVar" mergeKey="grabTextFrom"/> + <grabTextFrom selector="{{SampleSection.twoParamElement(SamplePerson.foo, 'bar')}}" returnVariable="myReturnVar" stepKey="grabTextFrom"/> <!-- Element with a timeout --> - <click selector="{{SampleSection.timeoutElement}}" mergeKey="click"/> + <click selector="{{SampleSection.timeoutElement}}" stepKey="click"/> <!-- ActionGroup --> - <actionGroup ref="SampleActionGroup" mergeKey="actionGroup"> + <actionGroup ref="SampleActionGroup" stepKey="actionGroup"> <argument name="person" value="OverrideDefaultPerson"/> </actionGroup> - <actionGroup ref="ValidateSlideOutPanelField" mergeKey="seeAppearanceMinHeightProperty"> + <actionGroup ref="ValidateSlideOutPanelField" stepKey="seeAppearanceMinHeightProperty"> <argument name="property" value="AppearanceMinHeightProperty"/> </actionGroup> </test> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AssertsCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AssertsCest.xml index e6b3f9b563112..17366a6518c90 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AssertsCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/AssertsCest.xml @@ -14,83 +14,83 @@ <group value="skip"/> </annotations> <before> - <createData entity="Simple_US_Customer" mergeKey="createData1"/> + <createData entity="Simple_US_Customer" stepKey="createData1"/> </before> <after> - <deleteData createDataKey="createData1" mergeKey="deleteData1"/> + <deleteData createDataKey="createData1" stepKey="deleteData1"/> </after> <test name="AssertTest"> - <createData entity="Simple_US_Customer" mergeKey="createData2"/> - <amOnUrl url="https://www.yahoo.com" mergeKey="amOnPage"/> - <waitForElementVisible mergeKey="wait1" selector="#uh-logo" time="10"/> - <grabTextFrom returnVariable="text" selector="#uh-logo" mergeKey="grabTextFrom1"/> + <createData entity="Simple_US_Customer" stepKey="createData2"/> + <amOnUrl url="https://www.yahoo.com" stepKey="amOnPage"/> + <waitForElementVisible stepKey="wait1" selector="#uh-logo" time="10"/> + <grabTextFrom returnVariable="text" selector="#uh-logo" stepKey="grabTextFrom1"/> <!-- asserts without variable replacement --> - <comment mergeKey="c1" userInput="asserts without variable replacement"/> - <assertArrayHasKey mergeKey="assertArrayHasKey" expected="apple" expectedType="string" actual="['orange' => 2, 'apple' => 1]" actualType="const" message="pass"/> - <assertArrayNotHasKey mergeKey="assertArrayNotHasKey" expected="kiwi" expectedType="string" actual="['orange' => 2, 'apple' => 1]" message="pass"/> - <assertArraySubset mergeKey="assertArraySubset" expected="[1, 2]" actual="[1, 2, 3, 5]" message="pass"/> - <assertContains mergeKey="assertContains" expected="ab" expectedType="string" actual="['item1' => 'a', 'item2' => 'ab']" message="pass"/> - <assertCount mergeKey="assertCount" expected="2" expectedType="int" actual="['a', 'b']" message="pass"/> - <assertEmpty mergeKey="assertEmpty" actual="[]" message="pass"/> - <assertEquals mergeKey="assertEquals1" expected="text" expectedType="variable" actual="Yahoo" actualType="string" message="pass"/> - <assertEquals mergeKey="assertEquals2" expected="Yahoo" expectedType="string" actual="text" actualType="variable" message="pass"/> - <assertFalse mergeKey="assertFalse1" actual="0" actualType="bool" message="pass"/> - <assertFileNotExists mergeKey="assertFileNotExists1" actual="/out.txt" actualType="string" message="pass"/> - <assertFileNotExists mergeKey="assertFileNotExists2" actual="text" actualType="variable" message="pass"/> - <assertGreaterOrEquals mergeKey="assertGreaterOrEquals" expected="2" expectedType="int" actual="5" actualType="int" message="pass"/> - <assertGreaterThan mergeKey="assertGreaterThan" expected="2" expectedType="int" actual="5" actualType="int" message="pass"/> - <assertGreaterThanOrEqual mergeKey="assertGreaterThanOrEqual" expected="2" expectedType="int" actual="5" actualType="int" message="pass"/> - <assertInternalType mergeKey="assertInternalType1" expected="string" expectedType="string" actual="xyz" actualType="string" message="pass"/> - <assertInternalType mergeKey="assertInternalType2" expected="int" expectedType="string" actual="21" actualType="int" message="pass"/> - <assertInternalType mergeKey="assertInternalType3" expected="string" expectedType="string" actual="text" actualType="variable" message="pass"/> - <assertLessOrEquals mergeKey="assertLessOrEquals" expected="5" expectedType="int" actual="2" actualType="int" message="pass"/> - <assertLessThan mergeKey="assertLessThan" expected="5" expectedType="int" actual="2" actualType="int" message="pass"/> - <assertLessThanOrEqual mergeKey="assertLessThanOrEqual" expected="5" expectedType="int" actual="2" actualType="int" message="pass"/> - <assertNotContains mergeKey="assertNotContains1" expected="bc" expectedType="string" actual="['item1' => 'a', 'item2' => 'ab']" message="pass"/> - <assertNotContains mergeKey="assertNotContains2" expected="bc" expectedType="string" actual="text" actualType="variable" message="pass"/> - <assertNotEmpty mergeKey="assertNotEmpty1" actual="[1, 2]" message="pass"/> - <assertNotEmpty mergeKey="assertNotEmpty2" actual="text" actualType="variable" message="pass"/> - <assertNotEquals mergeKey="assertNotEquals" expected="2" expectedType="int" actual="5" actualType="int" message="pass" delta=""/> - <assertNotNull mergeKey="assertNotNull1" actual="abc" actualType="string" message="pass"/> - <assertNotNull mergeKey="assertNotNull2" actual="text" actualType="variable" message="pass"/> - <assertNotRegExp mergeKey="assertNotRegExp" expected="/foo/" expectedType="string" actual="bar" actualType="string" message="pass"/> - <assertNotSame mergeKey="assertNotSame" expected="log" expectedType="string" actual="tag" actualType="string" message="pass"/> - <assertRegExp mergeKey="assertRegExp" expected="/foo/" expectedType="string" actual="foo" actualType="string" message="pass"/> - <assertSame mergeKey="assertSame" expected="bar" expectedType="string" actual="bar" actualType="string" message="pass"/> - <assertStringStartsNotWith mergeKey="assertStringStartsNotWith" expected="a" expectedType="string" actual="banana" actualType="string" message="pass"/> - <assertStringStartsWith mergeKey="assertStringStartsWith" expected="a" expectedType="string" actual="apple" actualType="string" message="pass"/> - <assertTrue mergeKey="assertTrue" actual="1" actualType="bool" message="pass"/> + <comment stepKey="c1" userInput="asserts without variable replacement"/> + <assertArrayHasKey stepKey="assertArrayHasKey" expected="apple" expectedType="string" actual="['orange' => 2, 'apple' => 1]" actualType="const" message="pass"/> + <assertArrayNotHasKey stepKey="assertArrayNotHasKey" expected="kiwi" expectedType="string" actual="['orange' => 2, 'apple' => 1]" message="pass"/> + <assertArraySubset stepKey="assertArraySubset" expected="[1, 2]" actual="[1, 2, 3, 5]" message="pass"/> + <assertContains stepKey="assertContains" expected="ab" expectedType="string" actual="['item1' => 'a', 'item2' => 'ab']" message="pass"/> + <assertCount stepKey="assertCount" expected="2" expectedType="int" actual="['a', 'b']" message="pass"/> + <assertEmpty stepKey="assertEmpty" actual="[]" message="pass"/> + <assertEquals stepKey="assertEquals1" expected="text" expectedType="variable" actual="Yahoo" actualType="string" message="pass"/> + <assertEquals stepKey="assertEquals2" expected="Yahoo" expectedType="string" actual="text" actualType="variable" message="pass"/> + <assertFalse stepKey="assertFalse1" actual="0" actualType="bool" message="pass"/> + <assertFileNotExists stepKey="assertFileNotExists1" actual="/out.txt" actualType="string" message="pass"/> + <assertFileNotExists stepKey="assertFileNotExists2" actual="text" actualType="variable" message="pass"/> + <assertGreaterOrEquals stepKey="assertGreaterOrEquals" expected="2" expectedType="int" actual="5" actualType="int" message="pass"/> + <assertGreaterThan stepKey="assertGreaterThan" expected="2" expectedType="int" actual="5" actualType="int" message="pass"/> + <assertGreaterThanOrEqual stepKey="assertGreaterThanOrEqual" expected="2" expectedType="int" actual="5" actualType="int" message="pass"/> + <assertInternalType stepKey="assertInternalType1" expected="string" expectedType="string" actual="xyz" actualType="string" message="pass"/> + <assertInternalType stepKey="assertInternalType2" expected="int" expectedType="string" actual="21" actualType="int" message="pass"/> + <assertInternalType stepKey="assertInternalType3" expected="string" expectedType="string" actual="text" actualType="variable" message="pass"/> + <assertLessOrEquals stepKey="assertLessOrEquals" expected="5" expectedType="int" actual="2" actualType="int" message="pass"/> + <assertLessThan stepKey="assertLessThan" expected="5" expectedType="int" actual="2" actualType="int" message="pass"/> + <assertLessThanOrEqual stepKey="assertLessThanOrEqual" expected="5" expectedType="int" actual="2" actualType="int" message="pass"/> + <assertNotContains stepKey="assertNotContains1" expected="bc" expectedType="string" actual="['item1' => 'a', 'item2' => 'ab']" message="pass"/> + <assertNotContains stepKey="assertNotContains2" expected="bc" expectedType="string" actual="text" actualType="variable" message="pass"/> + <assertNotEmpty stepKey="assertNotEmpty1" actual="[1, 2]" message="pass"/> + <assertNotEmpty stepKey="assertNotEmpty2" actual="text" actualType="variable" message="pass"/> + <assertNotEquals stepKey="assertNotEquals" expected="2" expectedType="int" actual="5" actualType="int" message="pass" delta=""/> + <assertNotNull stepKey="assertNotNull1" actual="abc" actualType="string" message="pass"/> + <assertNotNull stepKey="assertNotNull2" actual="text" actualType="variable" message="pass"/> + <assertNotRegExp stepKey="assertNotRegExp" expected="/foo/" expectedType="string" actual="bar" actualType="string" message="pass"/> + <assertNotSame stepKey="assertNotSame" expected="log" expectedType="string" actual="tag" actualType="string" message="pass"/> + <assertRegExp stepKey="assertRegExp" expected="/foo/" expectedType="string" actual="foo" actualType="string" message="pass"/> + <assertSame stepKey="assertSame" expected="bar" expectedType="string" actual="bar" actualType="string" message="pass"/> + <assertStringStartsNotWith stepKey="assertStringStartsNotWith" expected="a" expectedType="string" actual="banana" actualType="string" message="pass"/> + <assertStringStartsWith stepKey="assertStringStartsWith" expected="a" expectedType="string" actual="apple" actualType="string" message="pass"/> + <assertTrue stepKey="assertTrue" actual="1" actualType="bool" message="pass"/> <!-- string type that use created data --> - <comment mergeKey="c2" userInput="string type that use created data"/> - <assertStringStartsWith mergeKey="assert1" expected="D" expectedType="string" actual="$$createData1.lastname$$, $$createData1.firstname$$" actualType="string" message="fail"/> - <assertStringStartsNotWith mergeKey="assert2" expected="W" expectedType="string" actual="$createData2.firstname$ $createData2.lastname$" actualType="string" message="pass"/> - <assertEquals mergeKey="assert5" expected="$$createData1.lastname$$" expectedType="string" actual="$$createData1.lastname$$" actualType="string" message="pass"/> + <comment stepKey="c2" userInput="string type that use created data"/> + <assertStringStartsWith stepKey="assert1" expected="D" expectedType="string" actual="$$createData1.lastname$$, $$createData1.firstname$$" actualType="string" message="fail"/> + <assertStringStartsNotWith stepKey="assert2" expected="W" expectedType="string" actual="$createData2.firstname$ $createData2.lastname$" actualType="string" message="pass"/> + <assertEquals stepKey="assert5" expected="$$createData1.lastname$$" expectedType="string" actual="$$createData1.lastname$$" actualType="string" message="pass"/> <!-- array type that use created data --> - <comment mergeKey="c3" userInput="array type that use created data"/> - <assertArraySubset mergeKey="assert9" expected="[$$createData1.lastname$$, $$createData1.firstname$$]" expectedType="array" actual="[$$createData1.lastname$$, $$createData1.firstname$$, 1]" actualType="array" message="pass"/> - <assertArraySubset mergeKey="assert10" expected="[$createData2.firstname$, $createData2.lastname$]" expectedType="array" actual="[$createData2.firstname$, $createData2.lastname$, 1]" actualType="array" message="pass"/> - <assertArrayHasKey mergeKey="assert3" expected="lastname" expectedType="string" actual="['lastname' => $$createData1.lastname$$, 'firstname' => $$createData1.firstname$$]" actualType="array" message="pass"/> - <assertArrayHasKey mergeKey="assert4" expected="lastname" expectedType="string" actual="['lastname' => $createData2.lastname$, 'firstname' => $createData2.firstname$]" actualType="array" message="pass"/> + <comment stepKey="c3" userInput="array type that use created data"/> + <assertArraySubset stepKey="assert9" expected="[$$createData1.lastname$$, $$createData1.firstname$$]" expectedType="array" actual="[$$createData1.lastname$$, $$createData1.firstname$$, 1]" actualType="array" message="pass"/> + <assertArraySubset stepKey="assert10" expected="[$createData2.firstname$, $createData2.lastname$]" expectedType="array" actual="[$createData2.firstname$, $createData2.lastname$, 1]" actualType="array" message="pass"/> + <assertArrayHasKey stepKey="assert3" expected="lastname" expectedType="string" actual="['lastname' => $$createData1.lastname$$, 'firstname' => $$createData1.firstname$$]" actualType="array" message="pass"/> + <assertArrayHasKey stepKey="assert4" expected="lastname" expectedType="string" actual="['lastname' => $createData2.lastname$, 'firstname' => $createData2.firstname$]" actualType="array" message="pass"/> <!-- comment this section before running this test --> - <comment mergeKey="c4" userInput="comment this section before running this test"/> - <assertInstanceOf mergeKey="assertInstanceOf" expected="User::class" actual="text" actualType="variable" message="pass"/> - <assertNotInstanceOf mergeKey="assertNotInstanceOf" expected="User::class" actual="21" actualType="int" message="pass"/> - <assertFileExists mergeKey="assertFileExists2" actual="text" actualType="variable" message="pass"/> - <assertFileExists mergeKey="assert6" actual="AssertCest.php" actualType="string" message="pass"/> - <assertIsEmpty mergeKey="assertIsEmpty" actual="text" actualType="variable" message="pass"/> - <assertNull mergeKey="assertNull" actual="text" actualType="variable" message="pass"/> - <expectException mergeKey="expectException" expected="new MyException('exception msg')" actual="function() {$this->doSomethingBad();}"/> - <fail mergeKey="fail" message="fail"/> - <fail mergeKey="assert7" message="$createData2.firstname$ $createData2.lastname$"/> - <fail mergeKey="assert8" message="$$createData1.firstname$$ $$createData1.lastname$$"/> + <comment stepKey="c4" userInput="comment this section before running this test"/> + <assertInstanceOf stepKey="assertInstanceOf" expected="User::class" actual="text" actualType="variable" message="pass"/> + <assertNotInstanceOf stepKey="assertNotInstanceOf" expected="User::class" actual="21" actualType="int" message="pass"/> + <assertFileExists stepKey="assertFileExists2" actual="text" actualType="variable" message="pass"/> + <assertFileExists stepKey="assert6" actual="AssertCest.php" actualType="string" message="pass"/> + <assertIsEmpty stepKey="assertIsEmpty" actual="text" actualType="variable" message="pass"/> + <assertNull stepKey="assertNull" actual="text" actualType="variable" message="pass"/> + <expectException stepKey="expectException" expected="new MyException('exception msg')" actual="function() {$this->doSomethingBad();}"/> + <fail stepKey="fail" message="fail"/> + <fail stepKey="assert7" message="$createData2.firstname$ $createData2.lastname$"/> + <fail stepKey="assert8" message="$$createData1.firstname$$ $$createData1.lastname$$"/> <!-- comment end --> - <comment mergeKey="c5" userInput="comment end"/> + <comment stepKey="c5" userInput="comment end"/> - <deleteData createDataKey="createData2" mergeKey="deleteData2"/> + <deleteData createDataKey="createData2" stepKey="deleteData2"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml index 690b008fe2952..0f13decf74090 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml @@ -14,61 +14,61 @@ <stories value="Create a Configurable Product By API"/> </annotations> <before> - <createData mergeKey="categoryHandle" entity="SimpleSubCategory" /> - <createData mergeKey="baseConfigProductHandle" entity="BaseConfigurableProduct" > + <createData stepKey="categoryHandle" entity="SimpleSubCategory" /> + <createData stepKey="baseConfigProductHandle" entity="BaseConfigurableProduct" > <required-entity createDataKey="categoryHandle"/> </createData> - <createData mergeKey="productAttributeHandle" entity="productAttributeWithTwoOptions"/> + <createData stepKey="productAttributeHandle" entity="productAttributeWithTwoOptions"/> - <createData mergeKey="productAttributeOption1Handle" entity="productAttributeOption1"> + <createData stepKey="productAttributeOption1Handle" entity="productAttributeOption1"> <required-entity createDataKey="productAttributeHandle"/> </createData> - <createData mergeKey="productAttributeOption2Handle" entity="productAttributeOption2"> + <createData stepKey="productAttributeOption2Handle" entity="productAttributeOption2"> <required-entity createDataKey="productAttributeHandle"/> </createData> - <createData mergeKey="addToAttributeSetHandle" entity="AddToDefaultSet"> + <createData stepKey="addToAttributeSetHandle" entity="AddToDefaultSet"> <required-entity createDataKey="productAttributeHandle"/> </createData> - <getData mergeKey="getAttributeOption1Handle" entity="ProductAttributeOptionGetter" index="1"> + <getData stepKey="getAttributeOption1Handle" entity="ProductAttributeOptionGetter" index="1"> <required-entity createDataKey="productAttributeHandle"/> </getData> - <getData mergeKey="getAttributeOption2Handle" entity="ProductAttributeOptionGetter" index="2"> + <getData stepKey="getAttributeOption2Handle" entity="ProductAttributeOptionGetter" index="2"> <required-entity createDataKey="productAttributeHandle"/> </getData> - <createData mergeKey="childProductHandle1" entity="SimpleOne"> + <createData stepKey="childProductHandle1" entity="SimpleOne"> <required-entity createDataKey="productAttributeHandle"/> <required-entity createDataKey="getAttributeOption1Handle"/> </createData> - <createData mergeKey="childProductHandle2" entity="SimpleOne"> + <createData stepKey="childProductHandle2" entity="SimpleOne"> <required-entity createDataKey="productAttributeHandle"/> <required-entity createDataKey="getAttributeOption2Handle"/> </createData> - <createData mergeKey="configProductOptionHandle" entity="ConfigurableProductTwoOptions"> + <createData stepKey="configProductOptionHandle" entity="ConfigurableProductTwoOptions"> <required-entity createDataKey="baseConfigProductHandle"/> <required-entity createDataKey="productAttributeHandle"/> <required-entity createDataKey="getAttributeOption1Handle"/> <required-entity createDataKey="getAttributeOption2Handle"/> </createData> - <createData mergeKey="configProductHandle1" entity="ConfigurableProductAddChild"> + <createData stepKey="configProductHandle1" entity="ConfigurableProductAddChild"> <required-entity createDataKey="childProductHandle1"/> <required-entity createDataKey="baseConfigProductHandle"/> </createData> - <createData mergeKey="configProductHandle2" entity="ConfigurableProductAddChild"> + <createData stepKey="configProductHandle2" entity="ConfigurableProductAddChild"> <required-entity createDataKey="childProductHandle2"/> <required-entity createDataKey="baseConfigProductHandle"/> </createData> </before> <after> - <deleteData mergeKey="d2" createDataKey="childProductHandle1"/> - <deleteData mergeKey="d3" createDataKey="childProductHandle2"/> - <deleteData mergeKey="d7" createDataKey="baseConfigProductHandle"/> - <deleteData mergeKey="d8" createDataKey="categoryHandle"/> - <deleteData mergeKey="d6" createDataKey="productAttributeHandle"/> + <deleteData stepKey="d2" createDataKey="childProductHandle1"/> + <deleteData stepKey="d3" createDataKey="childProductHandle2"/> + <deleteData stepKey="d7" createDataKey="baseConfigProductHandle"/> + <deleteData stepKey="d8" createDataKey="categoryHandle"/> + <deleteData stepKey="d6" createDataKey="productAttributeHandle"/> </after> <test name="CreateConfigurableProductByApiTest"> </test> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml index bdbca5862a2b5..b202095bea1e4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml @@ -14,10 +14,10 @@ <stories value="Create a Sales Rule By API"/> </annotations> <before> - <createData mergeKey="saleRule" entity="SimpleSalesRule" /> + <createData stepKey="saleRule" entity="SimpleSalesRule" /> </before> <test name="CreateSalesRuleByApiTest"> - <!--see mergeKey="test" userInput="$$saleRule.store_labels[0][store_id]$$" selector="test"/--> + <!--see stepKey="test" userInput="$$saleRule.store_labels[0][store_id]$$" selector="test"/--> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml index b1cfc787acbb7..c571e8694beea 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml @@ -14,7 +14,7 @@ <stories value="Minimum Test"/> </annotations> <after> - <seeInCurrentUrl url="/admin/admin/" mergeKey="seeInCurrentUrl"/> + <seeInCurrentUrl url="/admin/admin/" stepKey="seeInCurrentUrl"/> </after> <test name="MinimumFieldsTest"> <annotations> @@ -26,10 +26,10 @@ <env value="phantomjs"/> <env value="headless"/> </annotations> - <amOnPage url="{{AdminLoginPage.url}}" mergeKey="navigateToAdmin"/> - <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" mergeKey="fillUsername"/> - <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" mergeKey="fillPassword"/> - <click selector="{{AdminLoginFormSection.signIn}}" mergeKey="clickLogin"/> + <amOnPage url="{{AdminLoginPage.url}}" stepKey="navigateToAdmin"/> + <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" stepKey="fillUsername"/> + <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" stepKey="fillPassword"/> + <click selector="{{AdminLoginFormSection.signIn}}" stepKey="clickLogin"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml index 12b2a8774c49b..2985d7a51051b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/PersistMultipleEntitiesCest.xml @@ -10,26 +10,26 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> <cest name="PersistMultipleEntitiesCest"> <before> - <createData entity="simplesubcategory" mergeKey="simplecategory"/> - <createData entity="simpleproduct" mergeKey="simpleproduct1"> + <createData entity="simplesubcategory" stepKey="simplecategory"/> + <createData entity="simpleproduct" stepKey="simpleproduct1"> <required-entity createDataKey="simplecategory"/> </createData> - <createData entity="simpleproduct" mergeKey="simpleproduct2"> + <createData entity="simpleproduct" stepKey="simpleproduct2"> <required-entity createDataKey="categoryLink"/> </createData> </before> <after> - <deleteData createDataKey="simpleproduct1" mergeKey="deleteProduct1"/> - <deleteData createDataKey="simpleproduct2" mergeKey="deleteProduct2"/> - <deleteData createDataKey="simplecategory" mergeKey="deleteCategory"/> + <deleteData createDataKey="simpleproduct1" stepKey="deleteProduct1"/> + <deleteData createDataKey="simpleproduct2" stepKey="deleteProduct2"/> + <deleteData createDataKey="simplecategory" stepKey="deleteCategory"/> </after> <test name="PersistMultipleEntitiesTest"> <annotations> <group value="skip"/> </annotations> - <amOnPage mergeKey="s11" url="/$$simplecategory.name$$.html" /> - <waitForPageLoad mergeKey="s33"/> - <see mergeKey="s35" selector="{{StorefrontCategoryMainSection.productCount}}" userInput="2"/> + <amOnPage stepKey="s11" url="/$$simplecategory.name$$.html" /> + <waitForPageLoad stepKey="s33"/> + <see stepKey="s35" selector="{{StorefrontCategoryMainSection.productCount}}" userInput="2"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml index 6b931ce3f306f..0d2facdb09b3b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml @@ -16,14 +16,14 @@ <group value="skip"/> </annotations> <before> - <amOnUrl url="http://127.0.0.1:32772/admin/" mergeKey="amOnPage"/> - <createData entity="CustomerEntity1" mergeKey="createData1"/> - <createData entity="AssertThis" mergeKey="createData2"/> + <amOnUrl url="http://127.0.0.1:32772/admin/" stepKey="amOnPage"/> + <createData entity="CustomerEntity1" stepKey="createData1"/> + <createData entity="AssertThis" stepKey="createData2"/> </before> <after> - <amOnUrl url="http://127.0.0.1:32772/admin/admin/auth/logout" mergeKey="amOnPage"/> - <deleteData createDataKey="createData1" mergeKey="deleteData1"/> - <deleteData createDataKey="createData2" mergeKey="deleteData2"/> + <amOnUrl url="http://127.0.0.1:32772/admin/admin/auth/logout" stepKey="amOnPage"/> + <deleteData createDataKey="createData1" stepKey="deleteData1"/> + <deleteData createDataKey="createData2" stepKey="deleteData2"/> </after> <test name="AllCodeceptionMethodsTest"> <annotations> @@ -32,146 +32,146 @@ <severity value="CRITICAL"/> <testCaseId value="#"/> </annotations> - <acceptPopup mergeKey="acceptPopup"/> - <amOnPage url="/admin" mergeKey="amOnPage"/> - <amOnSubdomain url="admin" mergeKey="amOnSubdomain"/> - <amOnUrl url="http://www.google.com/" mergeKey="amOnUrl"/> - <appendField userInput="More Words" selector=".stuff" mergeKey="appendField"/> - <attachFile userInput="filename.php" selector="#stuff" mergeKey="attachFile"/> - <cancelPopup mergeKey="cancelPopup"/> - <checkOption selector="#checkbox" mergeKey="checkOption"/> - <clearField selector="#field" mergeKey="clearField"/> - <click selector="#button" userInput="Context" mergeKey="click1"/> - <click selectorArray="['link' => 'Login']" mergeKey="click2"/> - <click selectorArray="['link' => 'Login']" userInput="stuff" mergeKey="click3"/> - <click userInput="Click" mergeKey="click4"/> - <clickWithLeftButton selector="#clickHere" mergeKey="clickWithLeftButton1" x="23" y="324"/> - <clickWithLeftButton selectorArray="['css' => '.checkout']" mergeKey="clickWithLeftButton2" x="23" y="324"/> - <clickWithLeftButton mergeKey="clickWithLeftButton3" x="23" y="324"/> - <clickWithRightButton selector="#clickHere" mergeKey="clickWithRightButton1" x="23" y="324"/> - <clickWithRightButton selectorArray="['css' => '.checkout']" mergeKey="clickWithRightButton2" x="23" y="324"/> - <clickWithRightButton mergeKey="clickWithRightButton3" x="23" y="324"/> - <closeTab mergeKey="closeTab"/> - <comment userInput="This is a Comment." mergeKey="comment"/> - <createData entity="CustomerEntity1" mergeKey="createData1"/> - <deleteData createDataKey="createData1" mergeKey="deleteData1"/> - <dontSee userInput="Text" mergeKey="dontSee1"/> - <dontSee userInput="Text" selector=".title" mergeKey="dontSee2"/> - <dontSee userInput="Text" selectorArray="['css' => 'body h1']" mergeKey="dontSee3"/> - <dontSeeCheckboxIsChecked selector="#checkbox" mergeKey="dontSeeCheckboxIsChecked"/> - <dontSeeCookie userInput="cookieName" mergeKey="dontSeeCookie1"/> - <dontSeeCookie userInput="cookieName" parameterArray="['domainName' => 'stuff']" mergeKey="dontSeeCookie2"/> - <dontSeeCurrentUrlEquals url="/stuff" mergeKey="dontSeeCurrentUrlEquals"/> - <dontSeeCurrentUrlMatches url="~$/users/(\d+)~" mergeKey="dontSeeCurrentUrlMatches"/> - <dontSeeElement selector=".error" mergeKey="dontSeeElement1"/> - <dontSeeElement selector="input" parameterArray="['name' => 'login']" mergeKey="dontSeeElement2"/> - <dontSeeElementInDOM selector="#stuff" mergeKey="dontSeeElementInDOM1"/> - <dontSeeElementInDOM selector="#stuff" parameterArray="['name' => 'login']" mergeKey="dontSeeElementInDOM2"/> - <dontSeeInCurrentUrl url="/users/" mergeKey="dontSeeInCurrentUrl"/> - <dontSeeInField selector=".field" userInput="stuff" mergeKey="dontSeeInField1"/> - <dontSeeInField selectorArray="['name' => 'search']" userInput="Comment Here" mergeKey="dontSeeInField2"/> - <dontSeeInFormFields selector="form[name=myform]" parameterArray="['input1' => 'non-existent value', 'input2' => 'other non-existent value']" mergeKey="dontSeeInFormFields"/> - <dontSeeInPageSource userInput="Stuff in Page Source" mergeKey="dontSeeInPageSource"/> - <!--<dontSeeInSource html="<h1></h1>" mergeKey="dontSeeInSource"/>--> - <dontSeeInTitle userInput="Title" mergeKey="dontSeeInTitle"/> - <dontSeeLink userInput="Logout" mergeKey="dontSeeLink1"/> - <dontSeeLink userInput="Checkout" url="/store/cart.php" mergeKey="dontSeeLink2"/> - <dontSeeOptionIsSelected selector="#form .stuff" userInput="Option Name" mergeKey="dontSeeOptionIsSelected"/> - <doubleClick selector="#click .here" mergeKey="doubleClick"/> - <dragAndDrop selector1="#number1" selector2="#number2" mergeKey="dragAndDrop"/> - <executeInSelenium function="function(\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) {$webdriver->get('http://google.com');}" mergeKey="executeInSelenium"/> - <executeJS function="return $('#myField').val()" mergeKey="executeJS"/> - <fillField selector="#field" userInput="stuff" mergeKey="fillField1"/> - <fillField selectorArray="['name' => 'email']" userInput="stuff" mergeKey="fillField2"/> - <grabAttributeFrom returnVariable="title" selector="#target" userInput="title" mergeKey="grabAttributeFrom"/> - <grabCookie returnVariable="cookie" userInput="cookie" parameterArray="['domain' => 'www.google.com']" mergeKey="grabCookie"/> - <grabFromCurrentUrl returnVariable="uri" url="~$/user/(\d+)/~" mergeKey="grabFromCurrentUrl"/> - <grabMultiple returnVariable="multiple" selector="a" userInput="href" mergeKey="grabMultiple"/> - <grabPageSource returnVariable="pageSource" mergeKey="grabPageSource1"/> - <grabTextFrom returnVariable="text" selector="h1" mergeKey="grabTextFrom1"/> - <grabValueFrom returnVariable="value1" selector=".form" mergeKey="grabValueFrom1"/> - <grabValueFrom returnVariable="value2" selectorArray="['name' => 'username']" mergeKey="grabValueFrom2"/> - <loadSessionSnapshot userInput="stuff" mergeKey="loadSessionSnapshot1"/> - <loadSessionSnapshot returnVariable="snapshot" userInput="stuff" mergeKey="loadSessionSnapshot2"/> - <makeScreenshot userInput="ScreenshotName" mergeKey="makeScreenshot"/> - <maximizeWindow mergeKey="maximizeWindow"/> - <moveBack mergeKey="moveBack"/> - <moveForward mergeKey="moveForward"/> - <moveMouseOver selector="#stuff" mergeKey="moveMouseOver1"/> - <moveMouseOver selectorArray="['css' => '.checkout']" mergeKey="moveMouseOver2"/> - <moveMouseOver x="5" y="5" mergeKey="moveMouseOver3"/> - <moveMouseOver selector="#stuff" x="5" y="5" mergeKey="moveMouseOver4"/> - <moveMouseOver selectorArray="['css' => '.checkout']" x="5" y="5" mergeKey="moveMouseOver5"/> - <openNewTab mergeKey="openNewTab"/> - <pauseExecution mergeKey="pauseExecution"/> - <performOn selector=".rememberMe" function="function (WebDriver $I) { $I->see('Remember me next time'); $I->seeElement('#LoginForm_rememberMe'); $I->dontSee('Login'); }" mergeKey="performOn1"/> - <performOn selector=".rememberMe" function="ActionSequence::build()->see('Warning')->see('Are you sure you want to delete this?')->click('Yes')" mergeKey="performOn2"/> - <pressKey selector="#page" userInput="a" mergeKey="pressKey1"/> - <pressKey selector="#page" parameterArray="[['ctrl','a'],'new']" mergeKey="pressKey2"/> - <pressKey selector="#page" parameterArray="[['shift','111'],'1','x']" mergeKey="pressKey3"/> - <pressKey selector="#page" parameterArray="[['ctrl', 'a'], \Facebook\WebDriver\WebDriverKeys::DELETE]" mergeKey="pressKey4"/> - <!--pressKey selector="descendant-or-self::*[@id='page']" userInput="u" mergeKey="pressKey5"/--> - <reloadPage mergeKey="reloadPage"/> - <resetCookie userInput="cookie" mergeKey="resetCookie1"/> - <resetCookie userInput="cookie" parameterArray="['domainName' => 'www.google.com']" mergeKey="resetCookie2"/> - <resizeWindow width="800" height="600" mergeKey="resizeWindow"/> - <saveSessionSnapshot userInput="stuff" mergeKey="saveSessionSnapshot"/> - <scrollTo selector="#place" x="20" y="50" mergeKey="scrollTo1"/> - <scrollTo selectorArray="['css' => '.checkout']" x="20" y="50" mergeKey="scrollTo2"/> - <see userInput="Stuff" mergeKey="see1"/> - <see userInput="More Stuff" selector=".stuff" mergeKey="see2"/> - <see userInput="More More Stuff" selectorArray="['css' => 'body h1']" mergeKey="see3"/> - <seeCheckboxIsChecked selector="#checkbox" mergeKey="seeCheckboxIsChecked"/> - <seeCookie userInput="PHPSESSID" mergeKey="seeCookie1"/> - <seeCookie userInput="PHPSESSID" parameterArray="['domainName' => 'www.google.com']" mergeKey="seeCookie2"/> - <seeCurrentUrlEquals url="/" mergeKey="seeCurrentUrlEquals"/> - <seeCurrentUrlMatches url="~$/users/(\d+)~" mergeKey="seeCurrentUrlMatches"/> - <seeElement selector=".error" mergeKey="seeElement1"/> - <seeElement selectorArray="['css' => 'form input']" mergeKey="seeElement2"/> - <seeElement selector=".error" parameterArray="['name' => 'login']" mergeKey="seeElement3"/> - <seeElement selectorArray="['css' => 'form input']" parameterArray="['name' => 'login']" mergeKey="seeElement4"/> - <seeElementInDOM selector="//form/input[type=hidden]" mergeKey="seeElementInDOM1"/> - <seeElementInDOM selector="//form/input[type=hidden]" parameterArray="['name' => 'form']" mergeKey="seeElementInDOM2"/> - <seeInCurrentUrl url="home" mergeKey="seeInCurrentUrl1"/> - <seeInCurrentUrl url="/home/" mergeKey="seeInCurrentUrl2"/> - <seeInField userInput="Stuff" selector="#field" mergeKey="seeInField1"/> - <seeInField userInput="Stuff" selectorArray="['name' => 'search']" mergeKey="seeInField2"/> - <seeInFormFields selector="form[name=myform]" parameterArray="['input1' => 'value','input2' => 'other value']" mergeKey="seeInFormFields1"/> - <seeInFormFields selector=".form-class" parameterArray="[['multiselect' => ['value1','value2'],'checkbox[]]' => ['a checked value','another checked value',]]" mergeKey="seeInFormFields2"/> - <!--<seeInPageSource html="<h1></h1>" mergeKey="seeInPageSource"/>--> - <seeInPopup userInput="Yes in Popup" mergeKey="seeInPopup"/> - <!--<seeInSource html="<h1></h1>" mergeKey="seeInSource"/>--> - <seeInTitle userInput="In Title" mergeKey="seeInTitle"/> - <seeLink userInput="Logout" mergeKey="seeLink1"/> - <seeLink userInput="Logout" url="/logout" mergeKey="seeLink2"/> - <seeNumberOfElements selector="tr" userInput="10" mergeKey="seeNumberOfElements1"/> - <seeNumberOfElements selector="tr" userInput="[0, 10]" mergeKey="seeNumberOfElements2"/> - <seeOptionIsSelected selector=".option" userInput="Visa" mergeKey="seeOptionIsSelected"/> - <selectOption selector=".dropDown" userInput="Option Name" mergeKey="selectOption1"/> - <selectOption selector="//form/select[@name=account]" parameterArray="['Windows','Linux']" mergeKey="selectOption2"/> - <selectOption selector="Which OS do you use?" parameterArray="['text' => 'Windows']" mergeKey="selectOption3"/> - <setCookie userInput="PHPSESSID" value="stuff" mergeKey="setCookie1"/> - <setCookie userInput="PHPSESSID" value="stuff" parameterArray="['domainName' => 'www.google.com']" mergeKey="setCookie2"/> - <submitForm selector="#my-form" parameterArray="['field' => ['value','another value',]]" button="#submit" mergeKey="submitForm2"/> - <switchToIFrame mergeKey="switchToIFrame1"/> - <switchToIFrame userInput="another_frame" mergeKey="switchToIFrame2"/> - <switchToNextTab mergeKey="switchToNextTab1"/> - <switchToNextTab userInput="2" mergeKey="switchToNextTab2"/> - <switchToPreviousTab mergeKey="switchToPreviewTab1"/> - <switchToPreviousTab userInput="1" mergeKey="switchToPreviewTab2"/> - <switchToWindow mergeKey="switchToWindow1"/> - <switchToWindow userInput="another_window" mergeKey="switchToWindow2"/> - <typeInPopup userInput="Stuff for popup" mergeKey="typeInPopup"/> - <uncheckOption selector="#option" mergeKey="uncheckOption"/> - <unselectOption selector="#dropDown" userInput="Option" mergeKey="unselectOption"/> - <wait time="15" mergeKey="wait"/> - <waitForElement selector="#button" time="10" mergeKey="waitForElement"/> - <waitForElementChange selector="#menu" function="function(\WebDriverElement $el) {return $el->isDisplayed();}" time="100" mergeKey="waitForElementChange"/> - <waitForElementNotVisible selector="#a_thing .className" time="30" mergeKey="waitForElementNotVisible"/> - <waitForElementVisible selector="#a_thing .className" time="15" mergeKey="waitForElementVisible"/> - <waitForJS function="return $.active == 0;" time="30" mergeKey="waitForJS"/> - <waitForText userInput="foo" time="30" mergeKey="waitForText1"/> - <waitForText userInput="foo" selector=".title" time="30" mergeKey="waitForText2"/> + <acceptPopup stepKey="acceptPopup"/> + <amOnPage url="/admin" stepKey="amOnPage"/> + <amOnSubdomain url="admin" stepKey="amOnSubdomain"/> + <amOnUrl url="http://www.google.com/" stepKey="amOnUrl"/> + <appendField userInput="More Words" selector=".stuff" stepKey="appendField"/> + <attachFile userInput="filename.php" selector="#stuff" stepKey="attachFile"/> + <cancelPopup stepKey="cancelPopup"/> + <checkOption selector="#checkbox" stepKey="checkOption"/> + <clearField selector="#field" stepKey="clearField"/> + <click selector="#button" userInput="Context" stepKey="click1"/> + <click selectorArray="['link' => 'Login']" stepKey="click2"/> + <click selectorArray="['link' => 'Login']" userInput="stuff" stepKey="click3"/> + <click userInput="Click" stepKey="click4"/> + <clickWithLeftButton selector="#clickHere" stepKey="clickWithLeftButton1" x="23" y="324"/> + <clickWithLeftButton selectorArray="['css' => '.checkout']" stepKey="clickWithLeftButton2" x="23" y="324"/> + <clickWithLeftButton stepKey="clickWithLeftButton3" x="23" y="324"/> + <clickWithRightButton selector="#clickHere" stepKey="clickWithRightButton1" x="23" y="324"/> + <clickWithRightButton selectorArray="['css' => '.checkout']" stepKey="clickWithRightButton2" x="23" y="324"/> + <clickWithRightButton stepKey="clickWithRightButton3" x="23" y="324"/> + <closeTab stepKey="closeTab"/> + <comment userInput="This is a Comment." stepKey="comment"/> + <createData entity="CustomerEntity1" stepKey="createData1"/> + <deleteData createDataKey="createData1" stepKey="deleteData1"/> + <dontSee userInput="Text" stepKey="dontSee1"/> + <dontSee userInput="Text" selector=".title" stepKey="dontSee2"/> + <dontSee userInput="Text" selectorArray="['css' => 'body h1']" stepKey="dontSee3"/> + <dontSeeCheckboxIsChecked selector="#checkbox" stepKey="dontSeeCheckboxIsChecked"/> + <dontSeeCookie userInput="cookieName" stepKey="dontSeeCookie1"/> + <dontSeeCookie userInput="cookieName" parameterArray="['domainName' => 'stuff']" stepKey="dontSeeCookie2"/> + <dontSeeCurrentUrlEquals url="/stuff" stepKey="dontSeeCurrentUrlEquals"/> + <dontSeeCurrentUrlMatches url="~$/users/(\d+)~" stepKey="dontSeeCurrentUrlMatches"/> + <dontSeeElement selector=".error" stepKey="dontSeeElement1"/> + <dontSeeElement selector="input" parameterArray="['name' => 'login']" stepKey="dontSeeElement2"/> + <dontSeeElementInDOM selector="#stuff" stepKey="dontSeeElementInDOM1"/> + <dontSeeElementInDOM selector="#stuff" parameterArray="['name' => 'login']" stepKey="dontSeeElementInDOM2"/> + <dontSeeInCurrentUrl url="/users/" stepKey="dontSeeInCurrentUrl"/> + <dontSeeInField selector=".field" userInput="stuff" stepKey="dontSeeInField1"/> + <dontSeeInField selectorArray="['name' => 'search']" userInput="Comment Here" stepKey="dontSeeInField2"/> + <dontSeeInFormFields selector="form[name=myform]" parameterArray="['input1' => 'non-existent value', 'input2' => 'other non-existent value']" stepKey="dontSeeInFormFields"/> + <dontSeeInPageSource userInput="Stuff in Page Source" stepKey="dontSeeInPageSource"/> + <!--<dontSeeInSource html="<h1></h1>" stepKey="dontSeeInSource"/>--> + <dontSeeInTitle userInput="Title" stepKey="dontSeeInTitle"/> + <dontSeeLink userInput="Logout" stepKey="dontSeeLink1"/> + <dontSeeLink userInput="Checkout" url="/store/cart.php" stepKey="dontSeeLink2"/> + <dontSeeOptionIsSelected selector="#form .stuff" userInput="Option Name" stepKey="dontSeeOptionIsSelected"/> + <doubleClick selector="#click .here" stepKey="doubleClick"/> + <dragAndDrop selector1="#number1" selector2="#number2" stepKey="dragAndDrop"/> + <executeInSelenium function="function(\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) {$webdriver->get('http://google.com');}" stepKey="executeInSelenium"/> + <executeJS function="return $('#myField').val()" stepKey="executeJS"/> + <fillField selector="#field" userInput="stuff" stepKey="fillField1"/> + <fillField selectorArray="['name' => 'email']" userInput="stuff" stepKey="fillField2"/> + <grabAttributeFrom returnVariable="title" selector="#target" userInput="title" stepKey="grabAttributeFrom"/> + <grabCookie returnVariable="cookie" userInput="cookie" parameterArray="['domain' => 'www.google.com']" stepKey="grabCookie"/> + <grabFromCurrentUrl returnVariable="uri" url="~$/user/(\d+)/~" stepKey="grabFromCurrentUrl"/> + <grabMultiple returnVariable="multiple" selector="a" userInput="href" stepKey="grabMultiple"/> + <grabPageSource returnVariable="pageSource" stepKey="grabPageSource1"/> + <grabTextFrom returnVariable="text" selector="h1" stepKey="grabTextFrom1"/> + <grabValueFrom returnVariable="value1" selector=".form" stepKey="grabValueFrom1"/> + <grabValueFrom returnVariable="value2" selectorArray="['name' => 'username']" stepKey="grabValueFrom2"/> + <loadSessionSnapshot userInput="stuff" stepKey="loadSessionSnapshot1"/> + <loadSessionSnapshot returnVariable="snapshot" userInput="stuff" stepKey="loadSessionSnapshot2"/> + <makeScreenshot userInput="ScreenshotName" stepKey="makeScreenshot"/> + <maximizeWindow stepKey="maximizeWindow"/> + <moveBack stepKey="moveBack"/> + <moveForward stepKey="moveForward"/> + <moveMouseOver selector="#stuff" stepKey="moveMouseOver1"/> + <moveMouseOver selectorArray="['css' => '.checkout']" stepKey="moveMouseOver2"/> + <moveMouseOver x="5" y="5" stepKey="moveMouseOver3"/> + <moveMouseOver selector="#stuff" x="5" y="5" stepKey="moveMouseOver4"/> + <moveMouseOver selectorArray="['css' => '.checkout']" x="5" y="5" stepKey="moveMouseOver5"/> + <openNewTab stepKey="openNewTab"/> + <pauseExecution stepKey="pauseExecution"/> + <performOn selector=".rememberMe" function="function (WebDriver $I) { $I->see('Remember me next time'); $I->seeElement('#LoginForm_rememberMe'); $I->dontSee('Login'); }" stepKey="performOn1"/> + <performOn selector=".rememberMe" function="ActionSequence::build()->see('Warning')->see('Are you sure you want to delete this?')->click('Yes')" stepKey="performOn2"/> + <pressKey selector="#page" userInput="a" stepKey="pressKey1"/> + <pressKey selector="#page" parameterArray="[['ctrl','a'],'new']" stepKey="pressKey2"/> + <pressKey selector="#page" parameterArray="[['shift','111'],'1','x']" stepKey="pressKey3"/> + <pressKey selector="#page" parameterArray="[['ctrl', 'a'], \Facebook\WebDriver\WebDriverKeys::DELETE]" stepKey="pressKey4"/> + <!--pressKey selector="descendant-or-self::*[@id='page']" userInput="u" stepKey="pressKey5"/--> + <reloadPage stepKey="reloadPage"/> + <resetCookie userInput="cookie" stepKey="resetCookie1"/> + <resetCookie userInput="cookie" parameterArray="['domainName' => 'www.google.com']" stepKey="resetCookie2"/> + <resizeWindow width="800" height="600" stepKey="resizeWindow"/> + <saveSessionSnapshot userInput="stuff" stepKey="saveSessionSnapshot"/> + <scrollTo selector="#place" x="20" y="50" stepKey="scrollTo1"/> + <scrollTo selectorArray="['css' => '.checkout']" x="20" y="50" stepKey="scrollTo2"/> + <see userInput="Stuff" stepKey="see1"/> + <see userInput="More Stuff" selector=".stuff" stepKey="see2"/> + <see userInput="More More Stuff" selectorArray="['css' => 'body h1']" stepKey="see3"/> + <seeCheckboxIsChecked selector="#checkbox" stepKey="seeCheckboxIsChecked"/> + <seeCookie userInput="PHPSESSID" stepKey="seeCookie1"/> + <seeCookie userInput="PHPSESSID" parameterArray="['domainName' => 'www.google.com']" stepKey="seeCookie2"/> + <seeCurrentUrlEquals url="/" stepKey="seeCurrentUrlEquals"/> + <seeCurrentUrlMatches url="~$/users/(\d+)~" stepKey="seeCurrentUrlMatches"/> + <seeElement selector=".error" stepKey="seeElement1"/> + <seeElement selectorArray="['css' => 'form input']" stepKey="seeElement2"/> + <seeElement selector=".error" parameterArray="['name' => 'login']" stepKey="seeElement3"/> + <seeElement selectorArray="['css' => 'form input']" parameterArray="['name' => 'login']" stepKey="seeElement4"/> + <seeElementInDOM selector="//form/input[type=hidden]" stepKey="seeElementInDOM1"/> + <seeElementInDOM selector="//form/input[type=hidden]" parameterArray="['name' => 'form']" stepKey="seeElementInDOM2"/> + <seeInCurrentUrl url="home" stepKey="seeInCurrentUrl1"/> + <seeInCurrentUrl url="/home/" stepKey="seeInCurrentUrl2"/> + <seeInField userInput="Stuff" selector="#field" stepKey="seeInField1"/> + <seeInField userInput="Stuff" selectorArray="['name' => 'search']" stepKey="seeInField2"/> + <seeInFormFields selector="form[name=myform]" parameterArray="['input1' => 'value','input2' => 'other value']" stepKey="seeInFormFields1"/> + <seeInFormFields selector=".form-class" parameterArray="[['multiselect' => ['value1','value2'],'checkbox[]]' => ['a checked value','another checked value',]]" stepKey="seeInFormFields2"/> + <!--<seeInPageSource html="<h1></h1>" stepKey="seeInPageSource"/>--> + <seeInPopup userInput="Yes in Popup" stepKey="seeInPopup"/> + <!--<seeInSource html="<h1></h1>" stepKey="seeInSource"/>--> + <seeInTitle userInput="In Title" stepKey="seeInTitle"/> + <seeLink userInput="Logout" stepKey="seeLink1"/> + <seeLink userInput="Logout" url="/logout" stepKey="seeLink2"/> + <seeNumberOfElements selector="tr" userInput="10" stepKey="seeNumberOfElements1"/> + <seeNumberOfElements selector="tr" userInput="[0, 10]" stepKey="seeNumberOfElements2"/> + <seeOptionIsSelected selector=".option" userInput="Visa" stepKey="seeOptionIsSelected"/> + <selectOption selector=".dropDown" userInput="Option Name" stepKey="selectOption1"/> + <selectOption selector="//form/select[@name=account]" parameterArray="['Windows','Linux']" stepKey="selectOption2"/> + <selectOption selector="Which OS do you use?" parameterArray="['text' => 'Windows']" stepKey="selectOption3"/> + <setCookie userInput="PHPSESSID" value="stuff" stepKey="setCookie1"/> + <setCookie userInput="PHPSESSID" value="stuff" parameterArray="['domainName' => 'www.google.com']" stepKey="setCookie2"/> + <submitForm selector="#my-form" parameterArray="['field' => ['value','another value',]]" button="#submit" stepKey="submitForm2"/> + <switchToIFrame stepKey="switchToIFrame1"/> + <switchToIFrame userInput="another_frame" stepKey="switchToIFrame2"/> + <switchToNextTab stepKey="switchToNextTab1"/> + <switchToNextTab userInput="2" stepKey="switchToNextTab2"/> + <switchToPreviousTab stepKey="switchToPreviewTab1"/> + <switchToPreviousTab userInput="1" stepKey="switchToPreviewTab2"/> + <switchToWindow stepKey="switchToWindow1"/> + <switchToWindow userInput="another_window" stepKey="switchToWindow2"/> + <typeInPopup userInput="Stuff for popup" stepKey="typeInPopup"/> + <uncheckOption selector="#option" stepKey="uncheckOption"/> + <unselectOption selector="#dropDown" userInput="Option" stepKey="unselectOption"/> + <wait time="15" stepKey="wait"/> + <waitForElement selector="#button" time="10" stepKey="waitForElement"/> + <waitForElementChange selector="#menu" function="function(\WebDriverElement $el) {return $el->isDisplayed();}" time="100" stepKey="waitForElementChange"/> + <waitForElementNotVisible selector="#a_thing .className" time="30" stepKey="waitForElementNotVisible"/> + <waitForElementVisible selector="#a_thing .className" time="15" stepKey="waitForElementVisible"/> + <waitForJS function="return $.active == 0;" time="30" stepKey="waitForJS"/> + <waitForText userInput="foo" time="30" stepKey="waitForText1"/> + <waitForText userInput="foo" selector=".title" time="30" stepKey="waitForText2"/> </test> <test name="AllCustomMethodsTest"> <annotations> @@ -180,32 +180,32 @@ <severity value="CRITICAL"/> <testCaseId value="#"/> </annotations> - <assertElementContainsAttribute selector="#username" attribute="class" expectedValue="admin__control-text" mergeKey="assertElementContainsAttribute1"/> - <assertElementContainsAttribute selector="#username" attribute="type" expectedValue="text" mergeKey="assertElementContainsAttribute2"/> - <assertElementContainsAttribute selector="#username" attribute="name" expectedValue="login[username]" mergeKey="assertElementContainsAttribute3"/> - <assertElementContainsAttribute selector="#username" attribute="autofocus" expectedValue="" mergeKey="assertElementContainsAttribute4"/> - <assertElementContainsAttribute selector="#username" attribute="data-validate" expectedValue="{required:true}" mergeKey="assertElementContainsAttribute5"/> - <assertElementContainsAttribute selector="#username" attribute="placeholder" expectedValue="user name" mergeKey="assertElementContainsAttribute6"/> - <assertElementContainsAttribute selector="#username" attribute="autocomplete" expectedValue="off" mergeKey="assertElementContainsAttribute7"/> - <assertElementContainsAttribute selector=".admin__menu-overlay" attribute="style" expectedValue="display: none;" mergeKey="assertElementContainsAttribute8"/> - <assertElementContainsAttribute selector=".admin__menu-overlay" attribute="border" expectedValue="0" mergeKey="assertElementContainsAttribute9"/> - <loginAsAdmin mergeKey="loginAsAdmin1"/> - <loginAsAdmin username="admin" password="123123q" mergeKey="loginAsAdmin2"/> - <closeAdminNotification mergeKey="closeAdminNotification1"/> - <searchAndMultiSelectOption selector="#stuff" parameterArray="['Item 1', 'Item 2']" mergeKey="searchAndMultiSelect1"/> - <searchAndMultiSelectOption selector="#stuff" parameterArray="['Item 1', 'Item 2']" requiredAction="true" mergeKey="searchAndMultiSelect2"/> - <waitForPageLoad mergeKey="waitForPageLoad1"/> - <waitForPageLoad time="15" mergeKey="waitForPageLoad2"/> - <waitForAjaxLoad mergeKey="waitForAjax1"/> - <waitForAjaxLoad time="15" mergeKey="waitForAjax2"/> - <dontSeeJsError mergeKey="dontSeeJsError"/> - <formatMoney userInput="$300,000" mergeKey="formatMoney1"/> - <formatMoney userInput="$300,000" locale="en_US.UTF-8" mergeKey="formatMoney2"/> - <mSetLocale userInput="300" locale="en_US.UTF-8" mergeKey="mSetLocale1"/> - <mResetLocale mergeKey="mResetLocale1"/> - <waitForLoadingMaskToDisappear mergeKey="waitForLoadingMaskToDisappear1"/> - <scrollToTopOfPage mergeKey="scrollToTopOfPage"/> - <parseFloat userInput="300,000.2325" mergeKey="parseFloat1"/> + <assertElementContainsAttribute selector="#username" attribute="class" expectedValue="admin__control-text" stepKey="assertElementContainsAttribute1"/> + <assertElementContainsAttribute selector="#username" attribute="type" expectedValue="text" stepKey="assertElementContainsAttribute2"/> + <assertElementContainsAttribute selector="#username" attribute="name" expectedValue="login[username]" stepKey="assertElementContainsAttribute3"/> + <assertElementContainsAttribute selector="#username" attribute="autofocus" expectedValue="" stepKey="assertElementContainsAttribute4"/> + <assertElementContainsAttribute selector="#username" attribute="data-validate" expectedValue="{required:true}" stepKey="assertElementContainsAttribute5"/> + <assertElementContainsAttribute selector="#username" attribute="placeholder" expectedValue="user name" stepKey="assertElementContainsAttribute6"/> + <assertElementContainsAttribute selector="#username" attribute="autocomplete" expectedValue="off" stepKey="assertElementContainsAttribute7"/> + <assertElementContainsAttribute selector=".admin__menu-overlay" attribute="style" expectedValue="display: none;" stepKey="assertElementContainsAttribute8"/> + <assertElementContainsAttribute selector=".admin__menu-overlay" attribute="border" expectedValue="0" stepKey="assertElementContainsAttribute9"/> + <loginAsAdmin stepKey="loginAsAdmin1"/> + <loginAsAdmin username="admin" password="123123q" stepKey="loginAsAdmin2"/> + <closeAdminNotification stepKey="closeAdminNotification1"/> + <searchAndMultiSelectOption selector="#stuff" parameterArray="['Item 1', 'Item 2']" stepKey="searchAndMultiSelect1"/> + <searchAndMultiSelectOption selector="#stuff" parameterArray="['Item 1', 'Item 2']" requiredAction="true" stepKey="searchAndMultiSelect2"/> + <waitForPageLoad stepKey="waitForPageLoad1"/> + <waitForPageLoad time="15" stepKey="waitForPageLoad2"/> + <waitForAjaxLoad stepKey="waitForAjax1"/> + <waitForAjaxLoad time="15" stepKey="waitForAjax2"/> + <dontSeeJsError stepKey="dontSeeJsError"/> + <formatMoney userInput="$300,000" stepKey="formatMoney1"/> + <formatMoney userInput="$300,000" locale="en_US.UTF-8" stepKey="formatMoney2"/> + <mSetLocale userInput="300" locale="en_US.UTF-8" stepKey="mSetLocale1"/> + <mResetLocale stepKey="mResetLocale1"/> + <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear1"/> + <scrollToTopOfPage stepKey="scrollToTopOfPage"/> + <parseFloat userInput="300,000.2325" stepKey="parseFloat1"/> </test> <test name="AllVariableMethodsTest"> <annotations> @@ -214,51 +214,51 @@ <severity value="CRITICAL"/> <testCaseId value="#"/> </annotations> - <grabFromCurrentUrl returnVariable="randomStuff" mergeKey="grabFromCurrentUrl1"/> - <amOnPage variable="randomStuff" mergeKey="amOnPage1"/> - <amOnSubdomain variable="randomStuff" mergeKey="amOnSubdomain1"/> - <amOnUrl variable="randomStuff" mergeKey="amOnUrl1"/> - <appendField variable="randomStuff" selector="#randomField" mergeKey="appendField1"/> - <attachFile variable="randomStuff" selector="#filePathField" mergeKey="attachFile1"/> - <click variable="randomStuff" mergeKey="click1"/> - <dontSee variable="randomStuff" mergeKey="dontSee1"/> - <dontSeeCookie variable="randomStuff" mergeKey="dontSeeCookie1"/> - <dontSeeCurrentUrlEquals variable="randomStuff" mergeKey="dontSeeCurrentUrlEquals1"/> - <dontSeeCurrentUrlMatches variable="randomStuff" mergeKey="dontSeeCurrentUrlMatches1"/> - <dontSeeInCurrentUrl variable="randomStuff" mergeKey="dontSeeInCurrentUrl1"/> - <dontSeeInField selector="#stuff" variable="randomStuff" mergeKey="dontSeeInField1"/> - <dontSeeInPageSource variable="randomStuff" mergeKey="dontSeeInPageSource1"/> - <dontSeeInTitle variable="randomStuff" mergeKey="dontSeeInTitle1"/> - <dontSeeLink variable="randomStuff" mergeKey="dontSeeLink1"/> - <dontSeeOptionIsSelected selector="#dropdown" variable="randomStuff" mergeKey="dontSeeOptionIsSelected1"/> - <fillField variable="randomStuff" selector="#field" mergeKey="fillField1"/> - <grabAttributeFrom selector="#stuff" returnVariable="moreRandomStuff" variable="randomStuff" mergeKey="grabAttributeFrom1"/> - <grabCookie returnVariable="cookies" variable="randomStuff" mergeKey="grabValueFrom1"/> - <grabFromCurrentUrl returnVariable="url" variable="randomStuff" mergeKey="grabFromCurrentUrl"/> - <grabMultiple returnVariable="multipleThings" selector="a" variable="randomStuff" mergeKey="grabMultiple1"/> - <loadSessionSnapshot variable="randomStuff" mergeKey="loadSessionSnapshot"/> - <pressKey selector="a" variable="randomStuff" mergeKey="pressKey1"/> - <saveSessionSnapshot variable="randomStuff" mergeKey="saveSessionSnapshot1"/> - <see variable="randomStuff" mergeKey="see1"/> - <seeCookie variable="randomStuff" mergeKey="seeCookie1"/> - <seeCurrentUrlEquals variable="randomStuff" mergeKey="seeCurrentUrlEquals1"/> - <seeCurrentUrlMatches variable="randomStuff" mergeKey="seeCurrentUrlMatches1"/> - <seeInCurrentUrl variable="randomStuff" mergeKey="seeInCurrentUrl1"/> - <seeInField selector="a" variable="randomStuff" mergeKey="seeInField1"/> - <seeInPopup variable="randomStuff" mergeKey="seeInPopup"/> - <seeInTitle variable="randomStuff" mergeKey="seeInTitle1"/> - <seeLink variable="randomStuff" mergeKey="seeLink1"/> - <seeNumberOfElements selector="#stuff" variable="randomStuff" mergeKey="seeNumberOfElements1"/> - <seeOptionIsSelected selector="#stuff" variable="randomStuff" mergeKey="seeOptionIsSelected1"/> - <selectOption selector="#stuff" variable="randomStuff" mergeKey="selectOption1"/> - <switchToIFrame variable="randomStuff" mergeKey="switchToIFrame1"/> - <switchToNextTab variable="randomStuff" mergeKey="switchToNextTab1"/> - <switchToPreviousTab variable="randomStuff" mergeKey="switchToPreviousTab1"/> - <switchToNextTab variable="randomStuff" mergeKey="switchToNextTab1"/> - <switchToWindow variable="randomStuff" mergeKey="switchToWindow1"/> - <typeInPopup variable="randomStuff" mergeKey="typeInPopup"/> - <unselectOption selector="#option" variable="randomStuff" mergeKey="unselectOption1"/> - <waitForText variable="randomStuff" time="5" mergeKey="waitForText1"/> + <grabFromCurrentUrl returnVariable="randomStuff" stepKey="grabFromCurrentUrl1"/> + <amOnPage variable="randomStuff" stepKey="amOnPage1"/> + <amOnSubdomain variable="randomStuff" stepKey="amOnSubdomain1"/> + <amOnUrl variable="randomStuff" stepKey="amOnUrl1"/> + <appendField variable="randomStuff" selector="#randomField" stepKey="appendField1"/> + <attachFile variable="randomStuff" selector="#filePathField" stepKey="attachFile1"/> + <click variable="randomStuff" stepKey="click1"/> + <dontSee variable="randomStuff" stepKey="dontSee1"/> + <dontSeeCookie variable="randomStuff" stepKey="dontSeeCookie1"/> + <dontSeeCurrentUrlEquals variable="randomStuff" stepKey="dontSeeCurrentUrlEquals1"/> + <dontSeeCurrentUrlMatches variable="randomStuff" stepKey="dontSeeCurrentUrlMatches1"/> + <dontSeeInCurrentUrl variable="randomStuff" stepKey="dontSeeInCurrentUrl1"/> + <dontSeeInField selector="#stuff" variable="randomStuff" stepKey="dontSeeInField1"/> + <dontSeeInPageSource variable="randomStuff" stepKey="dontSeeInPageSource1"/> + <dontSeeInTitle variable="randomStuff" stepKey="dontSeeInTitle1"/> + <dontSeeLink variable="randomStuff" stepKey="dontSeeLink1"/> + <dontSeeOptionIsSelected selector="#dropdown" variable="randomStuff" stepKey="dontSeeOptionIsSelected1"/> + <fillField variable="randomStuff" selector="#field" stepKey="fillField1"/> + <grabAttributeFrom selector="#stuff" returnVariable="moreRandomStuff" variable="randomStuff" stepKey="grabAttributeFrom1"/> + <grabCookie returnVariable="cookies" variable="randomStuff" stepKey="grabValueFrom1"/> + <grabFromCurrentUrl returnVariable="url" variable="randomStuff" stepKey="grabFromCurrentUrl"/> + <grabMultiple returnVariable="multipleThings" selector="a" variable="randomStuff" stepKey="grabMultiple1"/> + <loadSessionSnapshot variable="randomStuff" stepKey="loadSessionSnapshot"/> + <pressKey selector="a" variable="randomStuff" stepKey="pressKey1"/> + <saveSessionSnapshot variable="randomStuff" stepKey="saveSessionSnapshot1"/> + <see variable="randomStuff" stepKey="see1"/> + <seeCookie variable="randomStuff" stepKey="seeCookie1"/> + <seeCurrentUrlEquals variable="randomStuff" stepKey="seeCurrentUrlEquals1"/> + <seeCurrentUrlMatches variable="randomStuff" stepKey="seeCurrentUrlMatches1"/> + <seeInCurrentUrl variable="randomStuff" stepKey="seeInCurrentUrl1"/> + <seeInField selector="a" variable="randomStuff" stepKey="seeInField1"/> + <seeInPopup variable="randomStuff" stepKey="seeInPopup"/> + <seeInTitle variable="randomStuff" stepKey="seeInTitle1"/> + <seeLink variable="randomStuff" stepKey="seeLink1"/> + <seeNumberOfElements selector="#stuff" variable="randomStuff" stepKey="seeNumberOfElements1"/> + <seeOptionIsSelected selector="#stuff" variable="randomStuff" stepKey="seeOptionIsSelected1"/> + <selectOption selector="#stuff" variable="randomStuff" stepKey="selectOption1"/> + <switchToIFrame variable="randomStuff" stepKey="switchToIFrame1"/> + <switchToNextTab variable="randomStuff" stepKey="switchToNextTab1"/> + <switchToPreviousTab variable="randomStuff" stepKey="switchToPreviousTab1"/> + <switchToNextTab variable="randomStuff" stepKey="switchToNextTab1"/> + <switchToWindow variable="randomStuff" stepKey="switchToWindow1"/> + <typeInPopup variable="randomStuff" stepKey="typeInPopup"/> + <unselectOption selector="#option" variable="randomStuff" stepKey="unselectOption1"/> + <waitForText variable="randomStuff" time="5" stepKey="waitForText1"/> </test> <test name="AllReplacementTest"> <annotations> @@ -268,36 +268,36 @@ <testCaseId value="#"/> </annotations> - <createData entity="CustomerEntity1" mergeKey="testScopeData"/> - <createData entity="AssertThis" mergeKey="testScopeData2"/> + <createData entity="CustomerEntity1" stepKey="testScopeData"/> + <createData entity="AssertThis" stepKey="testScopeData2"/> <!-- parameterized url that uses literal params --> - <amOnPage url="{{SamplePage.url('success','success2')}}" mergeKey="a0"/> + <amOnPage url="{{SamplePage.url('success','success2')}}" stepKey="a0"/> <!-- url referencing data that was created in this <test> --> - <amOnPage url="$testScopeData.firstname$.html" mergeKey="a1"/> + <amOnPage url="$testScopeData.firstname$.html" stepKey="a1"/> <!-- url referencing data that was created in a <before> --> - <amOnPage url="$$createData1.firstname$$.html" mergeKey="a2"/> + <amOnPage url="$$createData1.firstname$$.html" stepKey="a2"/> <!-- parameterized url that uses created data params --> - <amOnPage url="{{SamplePage.url($testScopeData.firstname$,$testScopeData.lastname$)}}" mergeKey="a3"/> - <amOnPage url="{{SamplePage.url($$createData1.firstname$$,$$createData1.lastname$$)}}" mergeKey="a4"/> + <amOnPage url="{{SamplePage.url($testScopeData.firstname$,$testScopeData.lastname$)}}" stepKey="a3"/> + <amOnPage url="{{SamplePage.url($$createData1.firstname$$,$$createData1.lastname$$)}}" stepKey="a4"/> <!-- parameterized selector that uses literal params --> - <click selector="{{SampleSection.oneParamElement('success')}}" mergeKey="c1"/> - <click selector="{{SampleSection.twoParamElement('success','success2')}}" mergeKey="c2"/> + <click selector="{{SampleSection.oneParamElement('success')}}" stepKey="c1"/> + <click selector="{{SampleSection.twoParamElement('success','success2')}}" stepKey="c2"/> <!-- parameterized selector with literal, static data, and created data --> - <click selector="{{SampleSection.threeParamElement('John', SamplePerson.lastname, $testScopeData.lastname$)}}" mergeKey="c3"/> + <click selector="{{SampleSection.threeParamElement('John', SamplePerson.lastname, $testScopeData.lastname$)}}" stepKey="c3"/> <!-- selector that uses created data --> - <click selector="#$testScopeData.firstname$ .$testScopeData.lastname$" mergeKey="c4"/> - <click selector="#$$createData1.firstname$$ .$$createData1.lastname$$" mergeKey="c5"/> + <click selector="#$testScopeData.firstname$ .$testScopeData.lastname$" stepKey="c4"/> + <click selector="#$$createData1.firstname$$ .$$createData1.lastname$$" stepKey="c5"/> <!-- userInput that uses created data --> - <fillField selector="#sample" userInput="Hello $testScopeData.firstname$ $testScopeData.lastname$" mergeKey="f1"/> - <fillField selector="#sample" userInput="Hello $$createData1.firstname$$ $$createData1.lastname$$" mergeKey="f2"/> + <fillField selector="#sample" userInput="Hello $testScopeData.firstname$ $testScopeData.lastname$" stepKey="f1"/> + <fillField selector="#sample" userInput="Hello $$createData1.firstname$$ $$createData1.lastname$$" stepKey="f2"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml index 60b1f945e6b4a..005031284b532 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml @@ -10,12 +10,12 @@ xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> <cest name="SetPaymentConfigurationCest"> <test name="SetPaypalConfigurationTest"> - <createData entity="SamplePaypalConfig" mergeKey="createSamplePaypalConfig"/> - <createData entity="DefaultPayPalConfig" mergeKey="restoreDefaultPaypalConfig"/> + <createData entity="SamplePaypalConfig" stepKey="createSamplePaypalConfig"/> + <createData entity="DefaultPayPalConfig" stepKey="restoreDefaultPaypalConfig"/> </test> <test name="SetBraintreeConfigurationTest"> - <createData entity="SampleBraintreeConfig" mergeKey="createSampleBraintreeConfig"/> - <createData entity="DefaultBraintreeConfig" mergeKey="restoreDefaultBraintreeConfig"/> + <createData entity="SampleBraintreeConfig" stepKey="createSampleBraintreeConfig"/> + <createData entity="DefaultBraintreeConfig" stepKey="restoreDefaultBraintreeConfig"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml index 7d80719a227ef..48e87294411f1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml @@ -18,14 +18,14 @@ <env value="headless"/> </annotations> <before> - <createData mergeKey="categoryHandle" entity="SimpleSubCategory"/> - <createData mergeKey="productHandle" entity="SimpleProduct" > + <createData stepKey="categoryHandle" entity="SimpleSubCategory"/> + <createData stepKey="productHandle" entity="SimpleProduct" > <required-entity createDataKey="categoryHandle"/> </createData> - <updateData mergeKey="updateProduct" entity="NewSimpleProduct" createDataKey="productHandle"/> + <updateData stepKey="updateProduct" entity="NewSimpleProduct" createDataKey="productHandle"/> </before> <after> - <deleteData mergeKey="delete" createDataKey="productHandle"/> + <deleteData stepKey="delete" createDataKey="updateProduct"/> </after> <test name="UpdateSimpleProductByApiTest"> </test> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml index 53692f3f41de6..ef04dfd795a86 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml @@ -17,34 +17,34 @@ <group value="store"/> </annotations> <before> - <createData mergeKey="b1" entity="customStoreGroup"/> - <createData mergeKey="b2" entity="customStoreGroup"/> + <createData stepKey="b1" entity="customStoreGroup"/> + <createData stepKey="b2" entity="customStoreGroup"/> </before> <test name="AdminCreateStoreGroupTest"> <annotations> <title value="Create a store group in admin"/> <description value="Create a store group in admin"/> </annotations> - <amOnPage mergeKey="s1" url="{{AdminLoginPage.url}}"/> - <fillField mergeKey="s3" selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}"/> - <fillField mergeKey="s5" selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}"/> - <click mergeKey="s7" selector="{{AdminLoginFormSection.signIn}}"/> - <amOnPage mergeKey="s9" url="{{AdminSystemStorePage.url}}"/> + <amOnPage stepKey="s1" url="{{AdminLoginPage.url}}"/> + <fillField stepKey="s3" selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}"/> + <fillField stepKey="s5" selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}"/> + <click stepKey="s7" selector="{{AdminLoginFormSection.signIn}}"/> + <amOnPage stepKey="s9" url="{{AdminSystemStorePage.url}}"/> - <click mergeKey="s11" selector="{{AdminStoresGridSection.resetButton}}"/> - <waitForPageLoad mergeKey="s15" time="10"/> + <click stepKey="s11" selector="{{AdminStoresGridSection.resetButton}}"/> + <waitForPageLoad stepKey="s15" time="10"/> - <fillField mergeKey="s17" selector="{{AdminStoresGridSection.storeGrpFilterTextField}}" userInput="$$b1.group[name]$$"/> - <click mergeKey="s19" selector="{{AdminStoresGridSection.searchButton}}"/> - <waitForPageLoad mergeKey="s21" time="10"/> - <see mergeKey="s23" selector="{{AdminStoresGridSection.storeGrpNameInFirstRow}}" userInput="$$b1.group[name]$$"/> + <fillField stepKey="s17" selector="{{AdminStoresGridSection.storeGrpFilterTextField}}" userInput="$$b1.group[name]$$"/> + <click stepKey="s19" selector="{{AdminStoresGridSection.searchButton}}"/> + <waitForPageLoad stepKey="s21" time="10"/> + <see stepKey="s23" selector="{{AdminStoresGridSection.storeGrpNameInFirstRow}}" userInput="$$b1.group[name]$$"/> - <click mergeKey="s31" selector="{{AdminStoresGridSection.resetButton}}"/> - <waitForPageLoad mergeKey="s35" time="10"/> - <fillField mergeKey="s37" selector="{{AdminStoresGridSection.storeGrpFilterTextField}}" userInput="$$b2.group[name]$$"/> - <click mergeKey="s39" selector="{{AdminStoresGridSection.searchButton}}"/> - <waitForPageLoad mergeKey="s41" time="10"/> - <see mergeKey="s43" selector="{{AdminStoresGridSection.storeGrpNameInFirstRow}}" userInput="$$b2.group[name]$$"/> + <click stepKey="s31" selector="{{AdminStoresGridSection.resetButton}}"/> + <waitForPageLoad stepKey="s35" time="10"/> + <fillField stepKey="s37" selector="{{AdminStoresGridSection.storeGrpFilterTextField}}" userInput="$$b2.group[name]$$"/> + <click stepKey="s39" selector="{{AdminStoresGridSection.searchButton}}"/> + <waitForPageLoad stepKey="s41" time="10"/> + <see stepKey="s43" selector="{{AdminStoresGridSection.storeGrpNameInFirstRow}}" userInput="$$b2.group[name]$$"/> </test> </cest> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml index b1f452ac565be..80aa26e20a999 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml @@ -17,41 +17,41 @@ <group value="wishlist"/> </annotations> <before> - <createData mergeKey="category" entity="SimpleSubCategory"/> - <createData mergeKey="product" entity="SimpleProduct" > + <createData stepKey="category" entity="SimpleSubCategory"/> + <createData stepKey="product" entity="SimpleProduct" > <required-entity createDataKey="category"/> </createData> - <createData mergeKey="customer" entity="Simple_US_Customer"/> - <createData mergeKey="wishlist" entity="Wishlist"> + <createData stepKey="customer" entity="Simple_US_Customer"/> + <createData stepKey="wishlist" entity="Wishlist"> <required-entity createDataKey="customer"/> <required-entity createDataKey="product"/> </createData> </before> <after> - <deleteData mergeKey="deleteProduct" createDataKey="product"/> - <deleteData mergeKey="deleteCategory" createDataKey="category"/> - <deleteData mergeKey="deleteCustomer" createDataKey="customer"/> + <deleteData stepKey="deleteProduct" createDataKey="product"/> + <deleteData stepKey="deleteCategory" createDataKey="category"/> + <deleteData stepKey="deleteCustomer" createDataKey="customer"/> </after> <test name="StorefrontDeletePersistedWishlistTest"> <annotations> <title value="Delete a persist wishlist for a customer"/> <description value="Delete a persist wishlist for a customer"/> </annotations> - <amOnPage mergeKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage.url}}"/> - <fillField mergeKey="fillEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> - <fillField mergeKey="fillPassword" userInput="$$customer.password$$" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> - <waitForElementVisible mergeKey="waitForButton" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> - <click mergeKey="clickSignInAccountButton" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> - <see mergeKey="seeFirstName" userInput="$$customer.firstname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> - <see mergeKey="seeLastName" userInput="$$customer.lastname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> - <see mergeKey="seeEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> - <waitForPageLoad mergeKey="15"/> - <amOnPage mergeKey="amOnWishlist" url="{{StorefrontCustomerWishlistPage.url}}"/> - <see mergeKey="seeWishlist" userInput="$$product.name$$" selector="{{StorefrontCustomerWishlistSection.productItemNameText}}"/> - <moveMouseOver mergeKey="mouseOver" selector="{{StorefrontCustomerWishlistSection.productItemNameText}}"/> - <waitForElementVisible mergeKey="waitForRemoveButton" selector="{{StorefrontCustomerWishlistSection.removeWishlistButton}}"/> - <click mergeKey="clickRemove" selector="{{StorefrontCustomerWishlistSection.removeWishlistButton}}"/> - <see mergeKey="seeEmptyWishlist" userInput="You have no items in your wish list" selector="{{StorefrontCustomerWishlistSection.emptyWishlistText}}"/> + <amOnPage stepKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage.url}}"/> + <fillField stepKey="fillEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> + <fillField stepKey="fillPassword" userInput="$$customer.password$$" selector="{{StorefrontCustomerSignInFormSection.passwordField}}"/> + <waitForElementVisible stepKey="waitForButton" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> + <click stepKey="clickSignInAccountButton" selector="{{StorefrontCustomerSignInFormSection.signInAccountButton}}"/> + <see stepKey="seeFirstName" userInput="$$customer.firstname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see stepKey="seeLastName" userInput="$$customer.lastname$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <see stepKey="seeEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerDashboardAccountInformationSection.ContactInformation}}" /> + <waitForPageLoad stepKey="15"/> + <amOnPage stepKey="amOnWishlist" url="{{StorefrontCustomerWishlistPage.url}}"/> + <see stepKey="seeWishlist" userInput="$$product.name$$" selector="{{StorefrontCustomerWishlistSection.productItemNameText}}"/> + <moveMouseOver stepKey="mouseOver" selector="{{StorefrontCustomerWishlistSection.productItemNameText}}"/> + <waitForElementVisible stepKey="waitForRemoveButton" selector="{{StorefrontCustomerWishlistSection.removeWishlistButton}}"/> + <click stepKey="clickRemove" selector="{{StorefrontCustomerWishlistSection.removeWishlistButton}}"/> + <see stepKey="seeEmptyWishlist" userInput="You have no items in your wish list" selector="{{StorefrontCustomerWishlistSection.emptyWishlistText}}"/> </test> </cest> </config> From 2a139884e230e3eab648ee06620a46a34f4bd470 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Fri, 1 Dec 2017 23:34:22 +0200 Subject: [PATCH 477/653] MQE-569: added SampleTests in module blacklist and not allowed to generate them. --- dev/tests/acceptance/.env.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/acceptance/.env.example b/dev/tests/acceptance/.env.example index 01c375010dba0..596252ff6a12a 100644 --- a/dev/tests/acceptance/.env.example +++ b/dev/tests/acceptance/.env.example @@ -20,7 +20,7 @@ # TESTS_BP=/Users/First_Last/GitHub/magento2ce/dev/tests/acceptance/tests/functional # FW_BP=/Users/First_Last/GitHub/magento2-functional-testing-framework # TESTS_MODULE_PATH=/Users/First_Last/GitHub/magento2ce/dev/tests/acceptance/tests/functional/Magento/FunctionalTest -# MODULE_WHITELIST=Magento_SampleTests,Magento_NewModule +# MODULE_WHITELIST=Magento_NewModule # #*** End of example .env ***# From afe1e5bc40443ace3384561ed63cfe85ca05f010 Mon Sep 17 00:00:00 2001 From: Kevin Kozan <kkozan@magento.com> Date: Tue, 5 Dec 2017 23:08:10 +0200 Subject: [PATCH 478/653] MQE-570: Sanitize MAGENTO_BASE_URL (.env file) and Selenium params - Made SELENIUM_VARS optional in .example, as they now can be. --- dev/tests/acceptance/.env.example | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dev/tests/acceptance/.env.example b/dev/tests/acceptance/.env.example index 596252ff6a12a..9cb45c149a9ff 100644 --- a/dev/tests/acceptance/.env.example +++ b/dev/tests/acceptance/.env.example @@ -35,11 +35,11 @@ MAGENTO_BACKEND_NAME= MAGENTO_ADMIN_USERNAME= MAGENTO_ADMIN_PASSWORD= -#*** Selenium Server Protocol, Host, Port, and Path, with local defaults. Change if not running Selenium locally. -SELENIUM_HOST=127.0.0.1 -SELENIUM_PORT=4444 -SELENIUM_PROTOCOL=http -SELENIUM_PATH=/wd/hub +#*** Selenium Server Protocol, Host, Port, and Path, with local defaults. Uncomment and change if not running Selenium locally. +#SELENIUM_HOST=127.0.0.1 +#SELENIUM_PORT=4444 +#SELENIUM_PROTOCOL=http +#SELENIUM_PATH=/wd/hub #*** Uncomment and set host & port if your dev environment needs different value other than MAGENTO_BASE_URL for Rest API Requests ***# #MAGENTO_RESTAPI_SERVER_HOST= From 10c4bf90461abaf8ed351b44ddfdaff117634d2a Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Wed, 6 Dec 2017 18:49:50 +0200 Subject: [PATCH 479/653] MQE-574: selector or selectorArray attribute is required for 'click' action; fixed sample cest. --- .../Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml index 0d2facdb09b3b..022e9a5d064ae 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SampleCest.xml @@ -44,7 +44,6 @@ <click selector="#button" userInput="Context" stepKey="click1"/> <click selectorArray="['link' => 'Login']" stepKey="click2"/> <click selectorArray="['link' => 'Login']" userInput="stuff" stepKey="click3"/> - <click userInput="Click" stepKey="click4"/> <clickWithLeftButton selector="#clickHere" stepKey="clickWithLeftButton1" x="23" y="324"/> <clickWithLeftButton selectorArray="['css' => '.checkout']" stepKey="clickWithLeftButton2" x="23" y="324"/> <clickWithLeftButton stepKey="clickWithLeftButton3" x="23" y="324"/> From ca7bb241b0f843bc875c26b00b636ca7afdddc75 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Thu, 7 Dec 2017 17:53:10 +0200 Subject: [PATCH 480/653] MQE-583: set release version to 1.0.0 and updated composer dependencies. --- .../AdminNotification/README.md | 4 +- .../AdminNotification/composer.json | 40 ++++----- .../AdvancedPricingImportExport/README.md | 4 +- .../AdvancedPricingImportExport/composer.json | 50 +++++------ .../FunctionalTest/Authorization/README.md | 4 +- .../Authorization/composer.json | 38 +++------ .../FunctionalTest/Authorizenet/README.md | 4 +- .../FunctionalTest/Authorizenet/composer.json | 50 +++++------ .../Magento/FunctionalTest/Backend/README.md | 4 +- .../FunctionalTest/Backend/composer.json | 67 +++++++-------- .../Magento/FunctionalTest/Backup/README.md | 4 +- .../FunctionalTest/Backup/composer.json | 41 ++++------ .../FunctionalTest/Braintree/README.md | 4 +- .../FunctionalTest/Braintree/composer.json | 61 ++++++-------- .../Magento/FunctionalTest/Bundle/README.md | 4 +- .../FunctionalTest/Bundle/composer.json | 66 ++++++--------- .../BundleImportExport/README.md | 4 +- .../BundleImportExport/composer.json | 46 ++++------- .../FunctionalTest/CacheInvalidate/README.md | 4 +- .../CacheInvalidate/composer.json | 38 +++------ .../Magento/FunctionalTest/Captcha/README.md | 4 +- .../FunctionalTest/Captcha/composer.json | 44 ++++------ .../Magento/FunctionalTest/Catalog/README.md | 4 +- .../FunctionalTest/Catalog/composer.json | 82 ++++++++----------- .../CatalogImportExport/composer.json | 54 +++++------- .../FunctionalTest/CatalogInventory/README.md | 4 +- .../CatalogInventory/composer.json | 50 +++++------ .../FunctionalTest/CatalogRule/README.md | 4 +- .../FunctionalTest/CatalogRule/composer.json | 50 +++++------ .../CatalogRuleConfigurable/README.md | 4 +- .../CatalogRuleConfigurable/composer.json | 42 ++++------ .../FunctionalTest/CatalogSearch/README.md | 4 +- .../CatalogSearch/composer.json | 56 +++++-------- .../CatalogUrlRewrite/composer.json | 52 +++++------- .../FunctionalTest/CatalogWidget/README.md | 4 +- .../CatalogWidget/composer.json | 52 +++++------- .../Magento/FunctionalTest/Checkout/README.md | 4 +- .../FunctionalTest/Checkout/composer.json | 72 +++++++--------- .../CheckoutAgreements/README.md | 4 +- .../CheckoutAgreements/composer.json | 44 ++++------ .../Magento/FunctionalTest/Cms/README.md | 4 +- .../Magento/FunctionalTest/Cms/composer.json | 54 +++++------- .../FunctionalTest/CmsUrlRewrite/README.md | 7 +- .../CmsUrlRewrite/composer.json | 42 ++++------ .../Magento/FunctionalTest/Config/README.md | 9 +- .../FunctionalTest/Config/composer.json | 48 +++++------ .../ConfigurableImportExport/composer.json | 46 ++++------- .../ConfigurableProduct/README.md | 4 +- .../ConfigurableProduct/composer.json | 58 ++++++------- .../ConfigurableProductSales/README.md | 4 +- .../ConfigurableProductSales/composer.json | 42 ++++------ .../Magento/FunctionalTest/Contact/README.md | 4 +- .../FunctionalTest/Contact/composer.json | 44 ++++------ .../Magento/FunctionalTest/Cookie/README.md | 4 +- .../FunctionalTest/Cookie/composer.json | 38 +++------ .../Magento/FunctionalTest/Cron/LICENSE.txt | 48 +++++++++++ .../FunctionalTest/Cron/LICENSE_AFL.txt | 48 +++++++++++ .../Magento/FunctionalTest/Cron/README.md | 3 + .../Magento/FunctionalTest/Cron/composer.json | 38 +++++++++ .../FunctionalTest/CurrencySymbol/README.md | 4 +- .../CurrencySymbol/composer.json | 46 ++++------- .../Magento/FunctionalTest/Customer/README.md | 4 +- .../FunctionalTest/Customer/composer.json | 74 +++++++---------- .../CustomerImportExport/README.md | 4 +- .../CustomerImportExport/composer.json | 48 ++++------- .../Magento/FunctionalTest/Deploy/LICENSE.txt | 48 +++++++++++ .../FunctionalTest/Deploy/LICENSE_AFL.txt | 48 +++++++++++ .../Magento/FunctionalTest/Deploy/README.md | 3 + .../FunctionalTest/Deploy/composer.json | 41 ++++++++++ .../FunctionalTest/Developer/README.md | 4 +- .../FunctionalTest/Developer/composer.json | 40 ++++----- .../Magento/FunctionalTest/Dhl/README.md | 4 +- .../Magento/FunctionalTest/Dhl/composer.json | 54 +++++------- .../FunctionalTest/Directory/README.md | 4 +- .../FunctionalTest/Directory/composer.json | 42 ++++------ .../FunctionalTest/Downloadable/README.md | 4 +- .../FunctionalTest/Downloadable/composer.json | 68 +++++++-------- .../DownloadableImportExport/README.md | 4 +- .../DownloadableImportExport/composer.json | 48 ++++------- .../Magento/FunctionalTest/Eav/README.md | 4 +- .../Magento/FunctionalTest/Eav/composer.json | 46 ++++------- .../Magento/FunctionalTest/Email/README.md | 4 +- .../FunctionalTest/Email/composer.json | 48 ++++------- .../FunctionalTest/EncryptionKey/README.md | 4 +- .../EncryptionKey/composer.json | 40 ++++----- .../Magento/FunctionalTest/Fedex/README.md | 4 +- .../FunctionalTest/Fedex/composer.json | 52 +++++------- .../FunctionalTest/GiftMessage/README.md | 4 +- .../FunctionalTest/GiftMessage/composer.json | 52 +++++------- .../FunctionalTest/GoogleAdwords/README.md | 4 +- .../GoogleAdwords/composer.json | 40 ++++----- .../FunctionalTest/GoogleAnalytics/README.md | 4 +- .../GoogleAnalytics/composer.json | 42 ++++------ .../FunctionalTest/GoogleOptimizer/README.md | 4 +- .../GoogleOptimizer/composer.json | 48 ++++------- .../FunctionalTest/GraphQl/LICENSE.txt | 48 +++++++++++ .../FunctionalTest/GraphQl/LICENSE_AFL.txt | 48 +++++++++++ .../Magento/FunctionalTest/GraphQl/README.md | 3 + .../FunctionalTest/GraphQl/composer.json | 40 +++++++++ .../GroupedImportExport/composer.json | 46 ++++------- .../FunctionalTest/GroupedProduct/README.md | 4 +- .../GroupedProduct/composer.json | 60 ++++++-------- .../FunctionalTest/ImportExport/README.md | 4 +- .../FunctionalTest/ImportExport/composer.json | 46 ++++------- .../Magento/FunctionalTest/Indexer/README.md | 4 +- .../FunctionalTest/Indexer/composer.json | 38 +++------ .../InstantPurchase/LICENSE.txt | 48 +++++++++++ .../InstantPurchase/LICENSE_AFL.txt | 48 +++++++++++ .../FunctionalTest/InstantPurchase/README.md | 3 + .../InstantPurchase/composer.json | 43 ++++++++++ .../FunctionalTest/Integration/README.md | 4 +- .../FunctionalTest/Integration/composer.json | 48 ++++------- .../LayeredNavigation/README.md | 4 +- .../LayeredNavigation/composer.json | 40 ++++----- .../FunctionalTest/Marketplace/README.md | 4 +- .../FunctionalTest/Marketplace/composer.json | 38 +++------ .../FunctionalTest/MediaStorage/README.md | 4 +- .../FunctionalTest/MediaStorage/composer.json | 42 ++++------ .../Magento/FunctionalTest/Msrp/composer.json | 48 ++++------- .../FunctionalTest/Multishipping/README.md | 4 +- .../Multishipping/composer.json | 52 +++++------- .../NewRelicReporting/README.md | 4 +- .../NewRelicReporting/composer.json | 48 ++++------- .../FunctionalTest/Newsletter/README.md | 4 +- .../FunctionalTest/Newsletter/composer.json | 51 +++++------- .../FunctionalTest/OfflinePayments/README.md | 4 +- .../OfflinePayments/composer.json | 40 ++++----- .../FunctionalTest/OfflineShipping/README.md | 4 +- .../OfflineShipping/composer.json | 53 +++++------- .../FunctionalTest/PageCache/README.md | 4 +- .../FunctionalTest/PageCache/composer.json | 42 ++++------ .../Magento/FunctionalTest/Payment/README.md | 4 +- .../FunctionalTest/Payment/composer.json | 48 ++++------- .../Magento/FunctionalTest/Paypal/README.md | 4 +- .../FunctionalTest/Paypal/composer.json | 67 +++++++-------- .../FunctionalTest/Persistent/README.md | 4 +- .../FunctionalTest/Persistent/composer.json | 47 ++++------- .../FunctionalTest/ProductAlert/README.md | 4 +- .../FunctionalTest/ProductAlert/composer.json | 44 ++++------ .../FunctionalTest/ProductVideo/README.md | 4 +- .../FunctionalTest/ProductVideo/composer.json | 46 ++++------- .../Magento/FunctionalTest/Quote/README.md | 4 +- .../FunctionalTest/Quote/composer.json | 64 ++++++--------- .../Magento/FunctionalTest/Reports/README.md | 4 +- .../FunctionalTest/Reports/composer.json | 68 +++++++-------- .../FunctionalTest/RequireJs/LICENSE.txt | 48 +++++++++++ .../FunctionalTest/RequireJs/LICENSE_AFL.txt | 48 +++++++++++ .../FunctionalTest/RequireJs/README.md | 3 + .../FunctionalTest/RequireJs/composer.json | 35 ++++++++ .../Magento/FunctionalTest/Review/README.md | 4 +- .../FunctionalTest/Review/composer.json | 52 +++++------- .../Magento/FunctionalTest/Robots/README.md | 4 +- .../FunctionalTest/Robots/composer.json | 38 +++------ .../Magento/FunctionalTest/Rss/README.md | 4 +- .../Magento/FunctionalTest/Rss/composer.json | 42 ++++------ .../Magento/FunctionalTest/Rule/README.md | 4 +- .../Magento/FunctionalTest/Rule/composer.json | 44 ++++------ .../Magento/FunctionalTest/Sales/README.md | 4 +- .../FunctionalTest/Sales/composer.json | 82 ++++++++----------- .../FunctionalTest/SalesInventory/README.md | 4 +- .../SalesInventory/composer.json | 44 ++++------ .../FunctionalTest/SalesRule/README.md | 4 +- .../FunctionalTest/SalesRule/composer.json | 70 +++++++--------- .../FunctionalTest/SalesSequence/README.md | 4 +- .../SalesSequence/composer.json | 36 +++----- .../FunctionalTest/SampleData/README.md | 4 +- .../FunctionalTest/SampleData/composer.json | 36 +++----- .../Magento/FunctionalTest/Search/README.md | 4 +- .../FunctionalTest/Search/composer.json | 46 ++++------- .../Magento/FunctionalTest/Security/README.md | 4 +- .../FunctionalTest/Security/composer.json | 40 ++++----- .../FunctionalTest/SendFriend/README.md | 4 +- .../FunctionalTest/SendFriend/composer.json | 42 ++++------ .../Magento/FunctionalTest/Shipping/README.md | 4 +- .../FunctionalTest/Shipping/composer.json | 62 ++++++-------- .../Magento/FunctionalTest/Sitemap/README.md | 4 +- .../FunctionalTest/Sitemap/composer.json | 54 +++++------- .../Magento/FunctionalTest/Store/README.md | 4 +- .../FunctionalTest/Store/composer.json | 46 ++++------- .../Magento/FunctionalTest/Swagger/README.md | 4 +- .../FunctionalTest/Swagger/composer.json | 36 +++----- .../Magento/FunctionalTest/Swatches/README.md | 4 +- .../FunctionalTest/Swatches/composer.json | 54 +++++------- .../SwatchesLayeredNavigation/README.md | 4 +- .../SwatchesLayeredNavigation/composer.json | 36 +++----- .../Magento/FunctionalTest/Tax/README.md | 4 +- .../Magento/FunctionalTest/Tax/composer.json | 62 ++++++-------- .../TaxImportExport/composer.json | 44 ++++------ .../Magento/FunctionalTest/Theme/README.md | 4 +- .../FunctionalTest/Theme/composer.json | 55 +++++-------- .../FunctionalTest/Translation/README.md | 4 +- .../FunctionalTest/Translation/composer.json | 42 ++++------ .../Magento/FunctionalTest/Ui/README.md | 4 +- .../Magento/FunctionalTest/Ui/composer.json | 44 ++++------ .../Magento/FunctionalTest/Ups/README.md | 4 +- .../Magento/FunctionalTest/Ups/composer.json | 50 +++++------ .../FunctionalTest/UrlRewrite/README.md | 4 +- .../FunctionalTest/UrlRewrite/composer.json | 48 ++++------- .../Magento/FunctionalTest/User/README.md | 4 +- .../Magento/FunctionalTest/User/composer.json | 48 ++++------- .../Magento/FunctionalTest/Usps/LICENSE.txt | 48 +++++++++++ .../FunctionalTest/Usps/LICENSE_AFL.txt | 48 +++++++++++ .../Magento/FunctionalTest/Usps/README.md | 3 + .../Magento/FunctionalTest/Usps/composer.json | 45 ++++++++++ .../Magento/FunctionalTest/Variable/README.md | 4 +- .../FunctionalTest/Variable/composer.json | 42 ++++------ .../Magento/FunctionalTest/Vault/README.md | 4 +- .../FunctionalTest/Vault/composer.json | 48 ++++------- .../Magento/FunctionalTest/Version/README.md | 4 +- .../FunctionalTest/Version/composer.json | 37 +++------ .../Magento/FunctionalTest/Webapi/README.md | 4 +- .../FunctionalTest/Webapi/composer.json | 44 ++++------ .../FunctionalTest/WebapiSecurity/README.md | 4 +- .../WebapiSecurity/composer.json | 38 +++------ .../Magento/FunctionalTest/Weee/README.md | 4 +- .../Magento/FunctionalTest/Weee/composer.json | 60 ++++++-------- .../Magento/FunctionalTest/Widget/README.md | 4 +- .../FunctionalTest/Widget/composer.json | 50 +++++------ .../Magento/FunctionalTest/Wishlist/README.md | 4 +- .../FunctionalTest/Wishlist/composer.json | 54 +++++------- 220 files changed, 2905 insertions(+), 3276 deletions(-) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/composer.json diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/README.md index 4a84a064d1c7f..c9275af071fa4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_AdminNotification** Module. +The Functional Tests Module for **Magento_AdminNotification** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json index 328161117f78c..5e4c79075ead1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json @@ -1,46 +1,40 @@ { - "name": "magento/magento2-functional-test-admin-notification", - "description": "Magento 2 Acceptance Test Module Admin Notification", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "name": "magento/magento2-functional-test-module-admin-notification", + "description": "Magento 2 Functional Test Module Admin Notification", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-media-storage": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/AdminNotification" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/README.md index 224e08d3e84c2..2f01efe59522b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_AdvancedPricingImportExport** Module. +The Functional Tests Module for **Magento_AdvancedPricingImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json index 32562af20944b..c104d3f9cf55d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json @@ -1,55 +1,43 @@ { "name": "magento/magento2-functional-test-module-advanced-pricing-import-export", - "description": "Magento 2 Acceptance Test Module Advanced Pricing Import Export", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Advanced Pricing Import Export", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-import-export": "dev-master", - "magento/magento2-functional-test-module-catalog-import-export": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-import-export": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-import-export": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/README.md index b540c210faf92..c21edf02d3bc2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Authorization** Module. +The Functional Tests Module for **Magento_Authorization** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json index 6c0ac32008789..05e88d90f108a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json @@ -1,49 +1,37 @@ { "name": "magento/magento2-functional-test-module-authorization", - "description": "Magento 2 Acceptance Test Module Authorization", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Authorization", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-backend": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Authorization" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/README.md index 86a31896a223d..c3a550699f661 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Authorizenet** Module. +The Functional Tests Module for **Magento_Authorizenet** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json index 898a84016c6b1..69055e95ddd80 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json @@ -1,55 +1,43 @@ { "name": "magento/magento2-functional-test-module-authorizenet", - "description": "Magento 2 Acceptance Test Module Authorizenet", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Authorizenet", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-payment": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-payment": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Authorizenet" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/README.md index 4cbe742ea6baa..0a7d14223c0b2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Backend** Module. +The Functional Tests Module for **Magento_Backend** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json index 6aa559de5c3df..771aeb4af1b6f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json @@ -1,63 +1,52 @@ { "name": "magento/magento2-functional-test-module-backend", - "description": "Magento 2 Acceptance Test Module Backend", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Backend", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-developer": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-reports": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-user": "dev-master", - "magento/magento2-functional-test-module-security": "dev-master", - "magento/magento2-functional-test-module-backup": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-translation": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-require-js": "dev-master" + "magento/magento2-functional-test-module-backup": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-developer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-reports": "1.0.0", + "magento/magento2-functional-test-module-require-js": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-security": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-translation": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0", + "magento/magento2-functional-test-module-user": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Backend" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/README.md index 962fdffd88da5..dc2a3ab06f9d3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Backup** Module. +The Functional Tests Module for **Magento_Backup** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json index 95dc878ef341e..1e1e3e7901e2c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json @@ -1,50 +1,39 @@ { "name": "magento/magento2-functional-test-module-backup", - "description": "Magento 2 Acceptance Test Module Backup", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Backup", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backup": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-cron": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Backup" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/README.md index a4217e846b529..b0b637c9d9621 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Braintree** Module. +The Functional Tests Module for **Magento_Braintree** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json index c9eeab4fdb5d5..b781cadf8bb13 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json @@ -1,60 +1,49 @@ { "name": "magento/magento2-functional-test-module-braintree", - "description": "Magento 2 Acceptance Test Module Braintree", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Braintree", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-payment": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-vault": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-paypal": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-instant-purchase": "1.0.0", + "magento/magento2-functional-test-module-payment": "1.0.0", + "magento/magento2-functional-test-module-paypal": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0", + "magento/magento2-functional-test-module-vault": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Braintree" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/README.md index 95794907f2cfd..9579aec287f4c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Bundle** Module. +The Functional Tests Module for **Magento_Bundle** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json index 649a2f29700d2..4613c5df9fe29 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json @@ -1,63 +1,51 @@ { "name": "magento/magento2-functional-test-module-bundle", - "description": "Magento 2 Acceptance Test Module Bundle", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Bundle", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-catalog-rule": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-gift-message": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-catalog-rule": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-gift-message": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Bundle" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/README.md index 83453308c0c5c..dc155d12f30db 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_BundleImportExport** Module. +The Functional Tests Module for **Magento_BundleImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json index 2abf6a22a8edc..86eeb63a91b83 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json @@ -1,53 +1,41 @@ { "name": "magento/magento2-functional-test-module-bundle-import-export", - "description": "Magento 2 Acceptance Test Module Bundle Import Export", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Bundle Import Export", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-import-export": "dev-master", - "magento/magento2-functional-test-module-catalog-import-export": "dev-master", - "magento/magento2-functional-test-module-bundle": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master" + "magento/magento2-functional-test-module-bundle": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-import-export": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-import-export": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/BundleImportExport" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/README.md index 34d8ae9c36666..47571bdb7f212 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_CacheInvalidate** Module. +The Functional Tests Module for **Magento_CacheInvalidate** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json index 9ac9043f1b1d2..ad7a1575265c3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json @@ -1,49 +1,37 @@ { "name": "magento/magento2-functional-test-module-cache-invalidate", - "description": "Magento 2 Acceptance Test Module Cache Invalidate", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Cache Invalidate", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-page-cache": "dev-master" + "magento/magento2-functional-test-module-page-cache": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/CacheInvalidate" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/README.md index 3eee7b92bd32d..f0d35613be75d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Captcha** Module. +The Functional Tests Module for **Magento_Captcha** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json index 60fff5eb2fecf..7b68ff5beac30 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json @@ -1,52 +1,40 @@ { "name": "magento/magento2-functional-test-module-captcha", - "description": "Magento 2 Acceptance Test Module Captcha", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Captcha", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Captcha" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/README.md index 308f84b867aff..41bb2b0d6042a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Catalog** Module. +The Functional Tests Module for **Magento_Catalog** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json index 53c1bafbe43ad..06739996a4db0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json @@ -1,71 +1,59 @@ { "name": "magento/magento2-functional-test-module-catalog", - "description": "Magento 2 Acceptance Test Module Catalog", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Catalog", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-cms": "dev-master", - "magento/magento2-functional-test-module-indexer": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-theme": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-widget": "dev-master", - "magento/magento2-functional-test-module-wishlist": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-msrp": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-catalog-rule": "dev-master", - "magento/magento2-functional-test-module-product-alert": "dev-master", - "magento/magento2-functional-test-module-url-rewrite": "dev-master", - "magento/magento2-functional-test-module-catalog-url-rewrite": "dev-master", - "magento/magento2-functional-test-module-page-cache": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master", - "magento/magento2-functional-test-module-cookie": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-catalog-rule": "1.0.0", + "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-cms": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-indexer": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-msrp": "1.0.0", + "magento/magento2-functional-test-module-page-cache": "1.0.0", + "magento/magento2-functional-test-module-product-alert": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0", + "magento/magento2-functional-test-module-theme": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0", + "magento/magento2-functional-test-module-url-rewrite": "1.0.0", + "magento/magento2-functional-test-module-widget": "1.0.0", + "magento/magento2-functional-test-module-wishlist": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Catalog" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json index 81ee5ddcfda7d..dd230d8e4d991 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json @@ -1,57 +1,45 @@ { "name": "magento/magento2-functional-test-module-catalog-import-export", - "description": "Magento 2 Acceptance Test Module Catalog Import Export", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Catalog Import Export", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-catalog-url-rewrite": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-import-export": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-import-export": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/CatalogImportExport" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/README.md index 03f581dfd23d8..512a5f319fed4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_CatalogInventory** Module. +The Functional Tests Module for **Magento_CatalogInventory** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json index de845f8f5a88a..aec0f3f3c8023 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json @@ -1,55 +1,43 @@ { "name": "magento/magento2-functional-test-module-catalog-inventory", - "description": "Magento 2 Acceptance Test Module Catalog Inventory", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Catalog Inventory", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/CatalogInventory" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/README.md index 0e318cd24b069..5c67ac5b0ba9c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_CatalogRule** Module. +The Functional Tests Module for **Magento_CatalogRule** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json index 3952c494c78b3..eaab47bcdc353 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json @@ -1,55 +1,43 @@ { "name": "magento/magento2-functional-test-module-catalog-rule", - "description": "Magento 2 Acceptance Test Module Catalog Rule", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Catalog Rule", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-rule": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-rule": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/CatalogRule" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/README.md index 81b8ad8679961..ed2796d211d25 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_CatalogRuleConfigurable** Module. +The Functional Tests Module for **Magento_CatalogRuleConfigurable** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json index a20e6b7a3895d..2ef15bd686870 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json @@ -1,51 +1,39 @@ { "name": "magento/magento2-functional-test-module-catalog-rule-configurable", - "description": "Magento 2 Acceptance Test Module Catalog Rule Configurable", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Catalog Rule Configurable", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-configurable-product": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-catalog-rule": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-rule": "1.0.0", + "magento/magento2-functional-test-module-configurable-product": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/README.md index 85ed3bcf15d65..092e7bc142598 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_CatalogSearch** Module. +The Functional Tests Module for **Magento_CatalogSearch** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json index cb88f4139c886..36d211448940c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json @@ -1,58 +1,46 @@ { "name": "magento/magento2-functional-test-module-catalog-search", - "description": "Magento 2 Acceptance Test Module Catalog Search", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Catalog Search", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-search": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-theme": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-search": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-theme": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/CatalogSearch" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json index a563bff42a491..22f9c95f296ca 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json @@ -1,56 +1,44 @@ { "name": "magento/magento2-functional-test-module-catalog-url-rewrite", - "description": "Magento 2 Acceptance Test Module Catalog Url Rewrite", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Catalog Url Rewrite", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-catalog-import-export": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-import-export": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-url-rewrite": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-import-export": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-import-export": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0", + "magento/magento2-functional-test-module-url-rewrite": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/CatalogUrlRewrite" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/README.md index b05124ac4bb3b..43aa796462c76 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_CatalogWidget** Module. +The Functional Tests Module for **Magento_CatalogWidget** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json index 457c7c30dff31..b5729ebc9ddf3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json @@ -1,56 +1,44 @@ { "name": "magento/magento2-functional-test-module-catalog-widget", - "description": "Magento 2 Acceptance Test Module Catalog Widget", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Catalog Widget", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-widget": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-rule": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-wishlist": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-rule": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-widget": "1.0.0", + "magento/magento2-functional-test-module-wishlist": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/CatalogWidget" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/README.md index b36a7cf6d5de1..fc63b2f394813 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Checkout** Module. +The Functional Tests Module for **Magento_Checkout** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json index aec57da084ffb..e8f08e5708800 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json @@ -1,66 +1,54 @@ { "name": "magento/magento2-functional-test-module-checkout", - "description": "Magento 2 Acceptance Test Module Checkout", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Checkout", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-payment": "dev-master", - "magento/magento2-functional-test-module-shipping": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-page-cache": "dev-master", - "magento/magento2-functional-test-module-sales-rule": "dev-master", - "magento/magento2-functional-test-module-theme": "dev-master", - "magento/magento2-functional-test-module-msrp": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-msrp": "1.0.0", + "magento/magento2-functional-test-module-page-cache": "1.0.0", + "magento/magento2-functional-test-module-payment": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-sales-rule": "1.0.0", + "magento/magento2-functional-test-module-shipping": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0", + "magento/magento2-functional-test-module-theme": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Checkout" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/README.md index a985bc4dfe104..35423659f629f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_CheckoutAgreements** Module. +The Functional Tests Module for **Magento_CheckoutAgreements** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json index ab5629e117db9..fd86cdd03ac90 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json @@ -1,52 +1,40 @@ { "name": "magento/magento2-functional-test-module-checkout-agreements", - "description": "Magento 2 Acceptance Test Module Checkout Agreements", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Checkout Agreements", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/CheckoutAgreements" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/README.md index 4de61c2fb27b0..d1214efec9128 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Cms** Module. +The Functional Tests Module for **Magento_Cms** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json index ad21c6beeaffb..9a2b9f199469b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json @@ -1,57 +1,45 @@ { "name": "magento/magento2-functional-test-module-cms", - "description": "Magento 2 Acceptance Test Module Cms", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Cms", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-theme": "dev-master", - "magento/magento2-functional-test-module-widget": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-email": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master", - "magento/magento2-functional-test-module-variable": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-email": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-theme": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0", + "magento/magento2-functional-test-module-variable": "1.0.0", + "magento/magento2-functional-test-module-widget": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Cms" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/README.md index 1f1b1ca782532..cc52700eba988 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/README.md @@ -1,6 +1,3 @@ -## Overview - -The Magento_CmsUrlRewrite module adds support for URL rewrite rules for CMS pages. See also Magento_UrlRewrite module. +# Magento 2 Functional Tests -The module adds and removes URL rewrite rules as CMS pages are added or removed by a user. -The rules can be edited by an admin user as any other URL rewrite rule. +The Functional Tests Module for **Magento_CmsUrlRewrite** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json index 4c27ee9c61ed3..7036bbdcdb3dc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json @@ -1,51 +1,39 @@ { "name": "magento/magento2-functional-test-module-cms-url-rewrite", - "description": "Magento 2 Acceptance Test Module Cms Url Rewrite", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Cms Url Rewrite", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-cms": "dev-master", - "magento/magento2-functional-test-module-url-rewrite": "dev-master" + "magento/magento2-functional-test-module-cms": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-url-rewrite": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/CmsUrlRewrite" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/README.md index 6214cc94b04a0..eb0b57b2886f2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/README.md @@ -1,8 +1,3 @@ -#Config -The Config module is designed to implement system configuration functionality. -It provides mechanisms to add, edit, store and retrieve the configuration data -for each scope (there can be a default scope as well as scopes for each website and store). +# Magento 2 Functional Tests -Modules can add items to be configured on the system configuration page by creating -system.xml files in their etc/adminhtml directories. These system.xml files get merged -to populate the forms in the config page. +The Functional Tests Module for **Magento_Config** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json index b82ea131819f5..46ee6cfad90a4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json @@ -1,53 +1,43 @@ { "name": "magento/magento2-functional-test-module-config", - "description": "Magento 2 Acceptance Test Module Config", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Config", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-email": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-cron": "1.0.0", + "magento/magento2-functional-test-module-deploy": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-email": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Config" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json index 8af4f9591cfc5..8b956bab819e4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json @@ -1,53 +1,41 @@ { "name": "magento/magento2-functional-test-module-configurable-import-export", - "description": "Magento 2 Acceptance Test Module Configurable Import Export", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Configurable Import Export", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-catalog-import-export": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-import-export": "dev-master", - "magento/magento2-functional-test-module-configurable-product": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-import-export": "1.0.0", + "magento/magento2-functional-test-module-configurable-product": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-import-export": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/ConfigurableImportExport" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/README.md index aa4342bf3a4e1..3db572028f728 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_ConfigurableProduct** Module. +The Functional Tests Module for **Magento_ConfigurableProduct** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json index 6cdd99c2e0cd6..77b33a9fc4cd6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json @@ -1,59 +1,47 @@ { "name": "magento/magento2-functional-test-module-configurable-product", - "description": "Magento 2 Acceptance Test Module Configurable Product", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Configurable Product", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop", - "magento/magento2-functional-test-module-catalog": "dev-master" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-msrp": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-msrp": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/ConfigurableProduct" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/README.md index f64eca364e908..ebd5a01b14fa9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_ConfigurableProductSales** Module. +The Functional Tests Module for **Magento_ConfigurableProductSales** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json index f9cb9a3e40432..65749fe4fd27e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json @@ -1,51 +1,39 @@ { "name": "magento/magento2-functional-test-module-configurable-product-sales", - "description": "Magento 2 Acceptance Test Module Configurable Product Sales", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Configurable Product Sales", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/ConfigurableProductSales" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/README.md index 4b862fdfeea59..1baafbefac03a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Contact** Module. +The Functional Tests Module for **Magento_Contact** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json index 11531b5e5f4cd..642fec7ae824e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json @@ -1,52 +1,40 @@ { "name": "magento/magento2-functional-test-module-contact", - "description": "Magento 2 Acceptance Test Module Contact", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Contact", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-cms": "dev-master" + "magento/magento2-functional-test-module-cms": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Contact" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/README.md index f218201d7c99f..ed80d8f232ca7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Cookie** Module. +The Functional Tests Module for **Magento_Cookie** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json index cf0a7bc2cb481..f120fbf3de4de 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json @@ -1,49 +1,37 @@ { "name": "magento/magento2-functional-test-module-cookie", - "description": "Magento 2 Acceptance Test Module Cookie", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Cookie", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master" + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Cookie" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/README.md new file mode 100644 index 0000000000000..a3394b9a18177 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/README.md @@ -0,0 +1,3 @@ +# Magento 2 Functional Tests + +The Functional Tests Module for **Magento_Cron** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/composer.json new file mode 100644 index 0000000000000..7ca41f026252d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/composer.json @@ -0,0 +1,38 @@ +{ + "name": "magento/magento2-functional-test-module-cron", + "description": "Magento 2 Functional Test Module Cron", + "config": { + "sort-packages": true + }, + "require": { + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "1.0.0" + }, + "type": "magento2-test-module", + "version": "1.0.0", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-4": { + "Magento\\": ["tests/functional/Magento", "generated/Magento"] + } + }, + "extra": { + "map": [ + [ + "*", + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/README.md index 110a01dc96d58..e5e9c0458b1b6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_CurrencySymbol** Module. +The Functional Tests Module for **Magento_CurrencySymbol** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json index 9568fdb29ca38..1127d3ea32fda 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json @@ -1,53 +1,41 @@ { "name": "magento/magento2-functional-test-module-currency-symbol", - "description": "Magento 2 Acceptance Test Module Currency Symbol", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Currency Symbol", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-page-cache": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-page-cache": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/CurrencySymbol" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/README.md index a7c25afc9a39e..cb51dcef8c48e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Customer** Module. +The Functional Tests Module for **Magento_Customer** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json index 61a6eddb0edff..009472f57d651 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json @@ -1,67 +1,55 @@ { "name": "magento/magento2-functional-test-module-customer", - "description": "Magento 2 Acceptance Test Module Customer", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Customer", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop", - "magento/magento2-functional-test-module-catalog": "dev-master" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-newsletter": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-wishlist": "dev-master", - "magento/magento2-functional-test-module-theme": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-review": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-authorization": "dev-master", - "magento/magento2-functional-test-module-integration": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-page-cache": "dev-master" + "magento/magento2-functional-test-module-authorization": "1.0.0", + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-integration": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-newsletter": "1.0.0", + "magento/magento2-functional-test-module-page-cache": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-review": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0", + "magento/magento2-functional-test-module-theme": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0", + "magento/magento2-functional-test-module-wishlist": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Customer" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/README.md index 05e03b11a1b8c..ebeb51bf1e4f2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_CustomerImportExport** Module. +The Functional Tests Module for **Magento_CustomerImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json index df1b19f9e528c..d3f21cfc5ae76 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json @@ -1,54 +1,42 @@ { "name": "magento/magento2-functional-test-module-customer-import-export", - "description": "Magento 2 Acceptance Test Module Customer Import Export", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Customer Import Export", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-import-export": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-import-export": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/CustomerImportExport" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/README.md new file mode 100644 index 0000000000000..20704cfd90ce6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/README.md @@ -0,0 +1,3 @@ +# Magento 2 Functional Tests + +The Functional Tests Module for **Magento_Deploy** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/composer.json new file mode 100644 index 0000000000000..ebdbc83e2c512 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/composer.json @@ -0,0 +1,41 @@ +{ + "name": "magento/magento2-functional-test-module-deploy", + "description": "Magento 2 Functional Test Module Deploy", + "config": { + "sort-packages": true + }, + "require": { + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" + }, + "suggest": { + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-require-js": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-user": "1.0.0" + }, + "type": "magento2-test-module", + "version": "1.0.0", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-4": { + "Magento\\": ["tests/functional/Magento", "generated/Magento"] + } + }, + "extra": { + "map": [ + [ + "*", + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/README.md index f22b6ee1bf829..4aff70291bbf6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Developer** Module. +The Functional Tests Module for **Magento_Developer** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json index dee920ee0319e..1075a5415f0bd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json @@ -1,50 +1,38 @@ { "name": "magento/magento2-functional-test-module-developer", - "description": "Magento 2 Acceptance Test Module Developer", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Developer", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master" + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Developer" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/README.md index aca768d25105a..bda156c74e0ca 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Dhl** Module. +The Functional Tests Module for **Magento_Dhl** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json index 0a9e884bde641..9933fd637171e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json @@ -1,57 +1,45 @@ { "name": "magento/magento2-functional-test-module-dhl", - "description": "Magento 2 Acceptance Test Module Dhl", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Dhl", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-shipping": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-shipping": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Dhl" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/README.md index 450176d56505f..b028b5b4c9ca5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Directory** Module. +The Functional Tests Module for **Magento_Directory** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json index 3289183835004..1485278162dbe 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json @@ -1,51 +1,39 @@ { "name": "magento/magento2-functional-test-module-directory", - "description": "Magento 2 Acceptance Test Module Directory", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Directory", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Directory" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/README.md index b32c7fd5a8d29..cf2e356526c00 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Downloadable** Module. +The Functional Tests Module for **Magento_Downloadable** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json index 7f3a10bdbca74..5622b5246c23c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json @@ -1,64 +1,52 @@ { "name": "magento/magento2-functional-test-module-downloadable", - "description": "Magento 2 Acceptance Test Module Downloadable", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Downloadable", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-theme": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-gift-message": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-gift-message": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0", + "magento/magento2-functional-test-module-theme": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Downloadable" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/README.md index 7d1d4ce593856..7edcc4ffcb395 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_DownloadableImportExport** Module. +The Functional Tests Module for **Magento_DownloadableImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json index a6290026e9cd2..1be41e6ddcf31 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json @@ -1,54 +1,42 @@ { "name": "magento/magento2-functional-test-module-downloadable-import-export", - "description": "Magento 2 Acceptance Test Module Downloadable Import Export", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Downloadable Import Export", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-import-export": "dev-master", - "magento/magento2-functional-test-module-catalog-import-export": "dev-master", - "magento/magento2-functional-test-module-downloadable": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-import-export": "1.0.0", + "magento/magento2-functional-test-module-downloadable": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-import-export": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/DownloadableImportExport" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/README.md index 3ab73a4d5c7db..23724b09bd2cf 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_EAV** Module. +The Functional Tests Module for **Magento_Eav** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json index 8052d51dfb332..c5f4aeabe232e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json @@ -1,53 +1,41 @@ { "name": "magento/magento2-functional-test-module-eav", - "description": "Magento 2 Acceptance Test Module Eav", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Eav", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Eav" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/README.md index af55ead5c200d..413b1bcbbb525 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Email** Module. +The Functional Tests Module for **Magento_Email** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json index 98f01cf7ec5a9..0d13e60cb0e70 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json @@ -1,54 +1,42 @@ { "name": "magento/magento2-functional-test-module-email", - "description": "Magento 2 Acceptance Test Module Email", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Email", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-theme": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-cms": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-variable": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-cms": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-theme": "1.0.0", + "magento/magento2-functional-test-module-variable": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Email" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/README.md index c37fc732b0b87..61aa9a448b743 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_EncryptionKey** Module. +The Functional Tests Module for **Magento_EncryptionKey** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json index 933fe88440199..3718de923dafb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json @@ -1,50 +1,38 @@ { "name": "magento/magento2-functional-test-module-encryption-key", - "description": "Magento 2 Acceptance Test Module Encryption Key", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Encryption Key", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/EncryptionKey" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/README.md index cd33bda917f5c..93d1828ef4ccd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Fedex** Module. +The Functional Tests Module for **Magento_Fedex** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json index f5102092a43c4..b55a5d5efad28 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json @@ -1,56 +1,44 @@ { "name": "magento/magento2-functional-test-module-fedex", - "description": "Magento 2 Acceptance Test Module Fedex", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Fedex", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-shipping": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-shipping": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Fedex" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/README.md index bc57464b7ed2f..49fd114a43a24 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_GiftMessage** Module. +The Functional Tests Module for **Magento_GiftMessage** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json index cf76a42eddc81..8a65032c600e6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json @@ -1,56 +1,44 @@ { "name": "magento/magento2-functional-test-module-gift-message", - "description": "Magento 2 Acceptance Test Module Gift Message", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Gift Message", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/GiftMessage" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/README.md index 14b40663eff16..6e3595cd366c6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_GoogleAdwords** Module. +The Functional Tests Module for **Magento_GoogleAdwords** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json index ca0a31fa03117..e95d81c5168e1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json @@ -1,50 +1,38 @@ { "name": "magento/magento2-functional-test-module-google-adwords", - "description": "Magento 2 Acceptance Test Module Google Adwords", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Google Adwords", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master" + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/GoogleAdwords" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/README.md index 28c1ed435eab4..0fa9dbd614ae7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_GoogleAnalytics** Module. +The Functional Tests Module for **Magento_GoogleAnalytics** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json index 5bbef3c149b6c..46a8d634b7e67 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json @@ -1,51 +1,39 @@ { "name": "magento/magento2-functional-test-module-google-analytics", - "description": "Magento 2 Acceptance Test Module Google Analytics", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Google Analytics", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-cookie": "dev-master" + "magento/magento2-functional-test-module-cookie": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/GoogleAnalytics" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/README.md index cf934ee7882e4..9bdf02b6170ed 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_GoogleOptimizer** Module. +The Functional Tests Module for **Magento_GoogleOptimizer** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json index 1454630bd0a75..820a7ae8b101f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json @@ -1,54 +1,42 @@ { "name": "magento/magento2-functional-test-module-google-optimizer", - "description": "Magento 2 Acceptance Test Module Google Optimizer", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Google Optimizer", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-google-analytics": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-cms": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-cms": "1.0.0", + "magento/magento2-functional-test-module-google-analytics": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/GoogleOptimizer" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/README.md new file mode 100644 index 0000000000000..1f48eef7f97a7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/README.md @@ -0,0 +1,3 @@ +# Magento 2 Functional Tests + +The Functional Tests Module for **Magento_GraphQl** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/composer.json new file mode 100644 index 0000000000000..ff338103d9d62 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/composer.json @@ -0,0 +1,40 @@ +{ + "name": "magento/magento2-functional-test-module-graph-ql", + "description": "Magento 2 Functional Test Module Graph Ql", + "config": { + "sort-packages": true + }, + "require": { + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" + }, + "suggest": { + "magento/magento2-functional-test-module-webapi": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0" + }, + "type": "magento2-test-module", + "version": "1.0.0", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-4": { + "Magento\\": ["tests/functional/Magento", "generated/Magento"] + } + }, + "extra": { + "map": [ + [ + "*", + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json index faafa32659f03..cd96b7a0efe89 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json @@ -1,53 +1,41 @@ { "name": "magento/magento2-functional-test-module-grouped-import-export", - "description": "Magento 2 Acceptance Test Module Grouped Import Export", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Grouped Import Export", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-import-export": "dev-master", - "magento/magento2-functional-test-module-catalog-import-export": "dev-master", - "magento/magento2-functional-test-module-grouped-product": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-import-export": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-grouped-product": "1.0.0", + "magento/magento2-functional-test-module-import-export": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/GroupedImportExport" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/README.md index ed07eaabba75a..edf1e0dc3d2f5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_GroupedProduct** Module. +The Functional Tests Module for **Magento_GroupedProduct** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json index 7b76ef1ad9766..4305a6bdb52c6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json @@ -1,60 +1,48 @@ { "name": "magento/magento2-functional-test-module-grouped-product", - "description": "Magento 2 Acceptance Test Module Grouped Product", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Grouped Product", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master", - "magento/magento2-functional-test-module-msrp": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-msrp": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/GroupedProduct" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/README.md index 5723866dc44c2..b762f5fb7351c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_ImportExport** Module. +The Functional Tests Module for **Magento_ImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json index 1e254c70045a1..20662b4f76d6e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json @@ -1,53 +1,41 @@ { "name": "magento/magento2-functional-test-module-import-export", - "description": "Magento 2 Acceptance Test Module Import Export", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Import Export", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/ImportExport" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/README.md index f59821dc099cd..21212a0fed31e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Indexer** Module. +The Functional Tests Module for **Magento_Indexer** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json index a56ee31fae160..e8372f1d9be20 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json @@ -1,49 +1,37 @@ { "name": "magento/magento2-functional-test-module-indexer", - "description": "Magento 2 Acceptance Test Module Indexer", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Indexer", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-backend": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Indexer" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/README.md new file mode 100644 index 0000000000000..9975174d27ee7 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/README.md @@ -0,0 +1,3 @@ +# Magento 2 Functional Tests + +The Functional Tests Module for **Magento_InstantPurchase** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/composer.json new file mode 100644 index 0000000000000..d525694a3aeb1 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/composer.json @@ -0,0 +1,43 @@ +{ + "name": "magento/magento2-functional-test-module-instant-purchase", + "description": "Magento 2 Functional Test Module Instant Purchase", + "config": { + "sort-packages": true + }, + "require": { + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" + }, + "suggest": { + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-vault": "1.0.0" + }, + "type": "magento2-test-module", + "version": "1.0.0", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-4": { + "Magento\\": ["tests/functional/Magento", "generated/Magento"] + } + }, + "extra": { + "map": [ + [ + "*", + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/README.md index 08c9cd5f24f40..2f024c81e5141 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Integration** Module. +The Functional Tests Module for **Magento_Integration** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json index 2c776a48ae4d6..3e95a348991e5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json @@ -1,54 +1,42 @@ { "name": "magento/magento2-functional-test-module-integration", - "description": "Magento 2 Acceptance Test Module Integration", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Integration", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-user": "dev-master", - "magento/magento2-functional-test-module-security": "dev-master", - "magento/magento2-functional-test-module-authorization": "dev-master" + "magento/magento2-functional-test-module-authorization": "1.0.0", + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-security": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-user": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Integration" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/README.md index 89ac42d6134b1..6c864b9f5eedd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_LayeredNavigation** Module. +The Functional Tests Module for **Magento_LayeredNavigation** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json index 5b74e905bee99..7aa8b370aec44 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json @@ -1,50 +1,38 @@ { "name": "magento/magento2-functional-test-module-layered-navigation", - "description": "Magento 2 Acceptance Test Module Layered Navigation", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Layered Navigation", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/LayeredNavigation" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/README.md index cfd23dfcbace3..5c744ec36f1be 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Marketplace** Module. +The Functional Tests Module for **Magento_Marketplace** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json index d3f589a31a05a..35c4720ce34ed 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json @@ -1,49 +1,37 @@ { "name": "magento/magento2-functional-test-module-marketplace", - "description": "Magento 2 Acceptance Test Module Marketplace", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Marketplace", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-backend": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Marketplace" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/README.md index bd023f6f926d4..ee885969bb127 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_MediaStorage** Module. +The Functional Tests Module for **Magento_MediaStorage** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json index cc893b603f40a..c853fdef3e345 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json @@ -1,51 +1,39 @@ { "name": "magento/magento2-functional-test-module-media-storage", - "description": "Magento 2 Acceptance Test Module Media Storage", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Media Storage", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/MediaStorage" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json index 8b3fcba7e67ee..97eaf57c60e87 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json @@ -1,54 +1,42 @@ { "name": "magento/magento2-functional-test-module-msrp", - "description": "Magento 2 Acceptance Test Module Msrp", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Msrp", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-downloadable": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-grouped-product": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-downloadable": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-grouped-product": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Msrp" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/README.md index 5eac4359473be..b6e1b54d6ac6e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Multishipping** Module. \ No newline at end of file +The Functional Tests Module for **Magento_Multishipping** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json index 809353b1eaa31..e9841884b998b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json @@ -1,56 +1,44 @@ { "name": "magento/magento2-functional-test-module-multishipping", - "description": "Magento 2 Acceptance Test Module Multishipping", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Multishipping", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-payment": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master" + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-payment": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Multishipping" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/README.md index 68dd1d5267af3..c6d4c6906be90 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_NewRelicReporting** Module. \ No newline at end of file +The Functional Tests Module for **Magento_NewRelicReporting** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json index e2ce994efa1e6..b7c0fdd7f4316 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json @@ -1,54 +1,42 @@ { "name": "magento/magento2-functional-test-module-new-relic-reporting", - "description": "Magento 2 Acceptance Test Module New Relic Reporting", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module New Relic Reporting", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-configurable-product": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-configurable-product": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/NewRelicReporting" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/README.md index b38526eec8653..95a365b8b8f79 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Newsletter** Module. \ No newline at end of file +The Functional Tests Module for **Magento_Newsletter** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json index 34046ce9e836c..189fa347b45a6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json @@ -1,55 +1,44 @@ { "name": "magento/magento2-functional-test-module-newsletter", - "description": "Magento 2 Acceptance Test Module Newsletter", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Newsletter", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-widget": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-cms": "dev-master", - "magento/magento2-functional-test-module-email": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-cms": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-email": "1.0.0", + "magento/magento2-functional-test-module-require-js": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-widget": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Newsletter" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/README.md index 46fc09f181aef..ba6e5c9680dbd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_OfflinePayments** Module. \ No newline at end of file +The Functional Tests Module for **Magento_OfflinePayments** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json index aeed68809aceb..f3a5da39e2ae9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json @@ -1,50 +1,38 @@ { "name": "magento/magento2-functional-test-module-offline-payments", - "description": "Magento 2 Acceptance Test Module Offline Payments", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Offline Payments", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-payment": "dev-master" + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-payment": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/OfflinePayments" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/README.md index f430b9b2a1f41..42a12e4398e4f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_OfflineShipping** Module. \ No newline at end of file +The Functional Tests Module for **Magento_OfflineShipping** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json index babeb8ad2ec6d..a3b3a78689911 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json @@ -1,56 +1,45 @@ { "name": "magento/magento2-functional-test-module-offline-shipping", - "description": "Magento 2 Acceptance Test Module Offline Shipping", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Offline Shipping", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-shipping": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-sales-rule": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-sales-rule": "1.0.0", + "magento/magento2-functional-test-module-shipping": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/OfflineShipping" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/README.md index b35a9877c8ba7..8db3000b9408a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_PageCache** Module. \ No newline at end of file +The Functional Tests Module for **Magento_PageCache** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json index 59205152e0d9e..47d5f78e37852 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json @@ -1,51 +1,39 @@ { "name": "magento/magento2-functional-test-module-page-cache", - "description": "Magento 2 Acceptance Test Module Page Cache", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Page Cache", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/PageCache" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/README.md index a87d9a4f12b64..7a8fcc6210c9e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Payment** Module. \ No newline at end of file +The Functional Tests Module for **Magento_Payment** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json index ed77d47082399..575fde56a8474 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json @@ -1,54 +1,42 @@ { "name": "magento/magento2-functional-test-module-payment", - "description": "Magento 2 Acceptance Test Module Payment", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Payment", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master" + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Payment" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/README.md index e6c828ce07206..820d3acc2e101 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_PayPal** Module. \ No newline at end of file +The Functional Tests Module for **Magento_Paypal** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json index d82c9ccb34af7..ad62287e58467 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json @@ -1,63 +1,52 @@ { "name": "magento/magento2-functional-test-module-paypal", - "description": "Magento 2 Acceptance Test Module Paypal", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Paypal", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-payment": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-theme": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master", - "magento/magento2-functional-test-module-vault": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-instant-purchase": "1.0.0", + "magento/magento2-functional-test-module-payment": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0", + "magento/magento2-functional-test-module-theme": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0", + "magento/magento2-functional-test-module-vault": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Paypal" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/README.md index f0678daf757a0..690db182dcb4f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Persistent** Module. \ No newline at end of file +The Functional Tests Module for **Magento_Persistent** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json index 0ee20653fbb80..790578527bff7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json @@ -1,53 +1,42 @@ { "name": "magento/magento2-functional-test-module-persistent", - "description": "Magento 2 Acceptance Test Module Persistent", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Persistent", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-page-cache": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master" + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-cron": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-page-cache": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Persistent" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/README.md index 00b577465e5dc..1a78d82877b01 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_ProductAlert** Module. \ No newline at end of file +The Functional Tests Module for **Magento_ProductAlert** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json index 15988266a2029..8eba5c0e098c7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json @@ -1,52 +1,40 @@ { "name": "magento/magento2-functional-test-module-product-alert", - "description": "Magento 2 Acceptance Test Module Product Alert", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Product Alert", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/ProductAlert" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/README.md index 73ee15ca28f4e..0a19d3a9d1e60 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_ProductVideo** Module. \ No newline at end of file +The Functional Tests Module for **Magento_ProductVideo** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json index bc08abd34a11e..f06f59c18ab33 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json @@ -1,53 +1,41 @@ { "name": "magento/magento2-functional-test-module-product-video", - "description": "Magento 2 Acceptance Test Module Product Video", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Product Video", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/ProductVideo" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/README.md index 510a9d5f16d62..17b0bf4c60516 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Quote** Module. \ No newline at end of file +The Functional Tests Module for **Magento_Quote** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json index 2dba18c3fa428..0b114e03a3609 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json @@ -1,62 +1,50 @@ { "name": "magento/magento2-functional-test-module-quote", - "description": "Magento 2 Acceptance Test Module Quote", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Quote", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-authorization": "dev-master", - "magento/magento2-functional-test-module-payment": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-shipping": "dev-master", - "magento/magento2-functional-test-module-sales-sequence": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master" + "magento/magento2-functional-test-module-authorization": "1.0.0", + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-payment": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-sales-sequence": "1.0.0", + "magento/magento2-functional-test-module-shipping": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Quote" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/README.md index ad49607139a7a..d2bcbe81339ad 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Reports** Module. \ No newline at end of file +The Functional Tests Module for **Magento_Reports** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json index f73c4da907fbd..8c2b3d0b1740d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json @@ -1,64 +1,52 @@ { "name": "magento/magento2-functional-test-module-reports", - "description": "Magento 2 Acceptance Test Module Reports", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Reports", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-cms": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-widget": "dev-master", - "magento/magento2-functional-test-module-wishlist": "dev-master", - "magento/magento2-functional-test-module-review": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-downloadable": "dev-master", - "magento/magento2-functional-test-module-sales-rule": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-cms": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-downloadable": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-review": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-sales-rule": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0", + "magento/magento2-functional-test-module-widget": "1.0.0", + "magento/magento2-functional-test-module-wishlist": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Reports" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/README.md new file mode 100644 index 0000000000000..64e6b0ef6e139 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/README.md @@ -0,0 +1,3 @@ +# Magento 2 Functional Tests + +The Functional Tests Module for **Magento_RequireJs** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/composer.json new file mode 100644 index 0000000000000..7b15bff6f9367 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/composer.json @@ -0,0 +1,35 @@ +{ + "name": "magento/magento2-functional-test-module-require-js", + "description": "Magento 2 Functional Test Module Require Js", + "config": { + "sort-packages": true + }, + "require": { + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" + }, + "type": "magento2-test-module", + "version": "1.0.0", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-4": { + "Magento\\": ["tests/functional/Magento", "generated/Magento"] + } + }, + "extra": { + "map": [ + [ + "*", + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/README.md index b34f3c949e004..71b1cdc87d9d6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Review** Module. \ No newline at end of file +The Functional Tests Module for **Magento_Review** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json index 70f0e295838bd..f63800abaf85f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json @@ -1,56 +1,44 @@ { "name": "magento/magento2-functional-test-module-review", - "description": "Magento 2 Acceptance Test Module Review", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Review", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-theme": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-newsletter": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-newsletter": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-theme": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Review" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/README.md index 864304d41eec8..87ea94e0f1d23 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Robots** Module. \ No newline at end of file +The Functional Tests Module for **Magento_Robots** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json index 082211c40a68f..77f360571a480 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json @@ -1,49 +1,37 @@ { "name": "magento/magento2-functional-test-module-robots", - "description": "Magento 2 Acceptance Test Module Robots", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Robots", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master" + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Robots" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/README.md index 04fc8e1c0d022..5002c878c2e54 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Rss** Module. \ No newline at end of file +The Functional Tests Module for **Magento_Rss** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json index d950390b0e1cd..2b166f4b04835 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json @@ -1,51 +1,39 @@ { "name": "magento/magento2-functional-test-module-rss", - "description": "Magento 2 Acceptance Test Module Rss", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Rss", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Rss" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/README.md index 02eb487f33c52..a797fd63dc668 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Rule** Module. \ No newline at end of file +The Functional Tests Module for **Magento_Rule** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json index 11cefb3a7dff5..d6d98a8223465 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json @@ -1,52 +1,40 @@ { "name": "magento/magento2-functional-test-module-rule", - "description": "Magento 2 Acceptance Test Module Rule", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Rule", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Rule" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/README.md index 8f897de5484a6..dbaf12404d157 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Sales** Module. +The Functional Tests Module for **Magento_Sales** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json index 5805b9a34c9ce..e082d00d109d5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json @@ -1,71 +1,59 @@ { "name": "magento/magento2-functional-test-module-sales", - "description": "Magento 2 Acceptance Test Module Sales", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Sales", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-authorization": "dev-master", - "magento/magento2-functional-test-module-payment": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-theme": "dev-master", - "magento/magento2-functional-test-module-sales-rule": "dev-master", - "magento/magento2-functional-test-module-sales-sequence": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-widget": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-gift-message": "dev-master", - "magento/magento2-functional-test-module-reports": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-wishlist": "dev-master", - "magento/magento2-functional-test-module-shipping": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master" + "magento/magento2-functional-test-module-authorization": "1.0.0", + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-gift-message": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-payment": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-reports": "1.0.0", + "magento/magento2-functional-test-module-sales-rule": "1.0.0", + "magento/magento2-functional-test-module-sales-sequence": "1.0.0", + "magento/magento2-functional-test-module-shipping": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0", + "magento/magento2-functional-test-module-theme": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0", + "magento/magento2-functional-test-module-widget": "1.0.0", + "magento/magento2-functional-test-module-wishlist": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Sales" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/README.md index a0d48d3c62889..beeef87b6e7fd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_SalesInventory** Module. +The Functional Tests Module for **Magento_SalesInventory** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json index aec10499a8681..90cb8ae45ff66 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json @@ -1,52 +1,40 @@ { "name": "magento/magento2-functional-test-module-sales-inventory", - "description": "Magento 2 Acceptance Test Module Sales Inventory", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Sales Inventory", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/SalesInventory" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/README.md index 09f32aad6881f..2180f41bb7e31 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_SalesRule** Module. +The Functional Tests Module for **Magento_SalesRule** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json index dca57e5c34452..b721a3694b118 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json @@ -1,66 +1,52 @@ { "name": "magento/magento2-functional-test-module-sales-rule", - "description": "Magento 2 Acceptance Test Module Sales Rule", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Sales Rule", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-theme": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-shipping": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-rule": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-payment": "dev-master", - "magento/magento2-functional-test-module-reports": "dev-master", - "magento/magento2-functional-test-module-catalog-rule": "dev-master", - "magento/magento2-functional-test-module-widget": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-rule": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-payment": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-reports": "1.0.0", + "magento/magento2-functional-test-module-rule": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-shipping": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0", + "magento/magento2-functional-test-module-widget": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/SalesRule" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/README.md index 8dc5c1445cc95..8b3e36c3fda04 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_SalesSequence** Module. +The Functional Tests Module for **Magento_SalesSequence** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json index c395bbb71c5f2..3d5819045d257 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json @@ -1,46 +1,34 @@ { "name": "magento/magento2-functional-test-module-sales-sequence", - "description": "Magento 2 Acceptance Test Module Sales Sequence", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Sales Sequence", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/SalesSequence" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/README.md index edcd1629bd50f..1dcde417aed6f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_SampleData** Module. +The Functional Tests Module for **Magento_SampleData** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json index ef30780208b19..4b3c2ca9c4e08 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json @@ -1,46 +1,34 @@ { "name": "magento/magento2-functional-test-module-sample-data", - "description": "Magento 2 Acceptance Test Module Sample Data", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Sample Data", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/SampleData" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/README.md index 17d37794fb03d..bb6c6d52df27d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Search** Module. +The Functional Tests Module for **Magento_Search** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json index ef78fc2a19ca6..fdaefcc362bd1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json @@ -1,53 +1,41 @@ { "name": "magento/magento2-functional-test-module-search", - "description": "Magento 2 Acceptance Test Module Search", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Search", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-catalog-search": "dev-master", - "magento/magento2-functional-test-module-reports": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog-search": "1.0.0", + "magento/magento2-functional-test-module-reports": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Search" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/README.md index 2507ca55e068e..26f535867d4bc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Security** Module. +The Functional Tests Module for **Magento_Security** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json index 0490f14838574..17380dda33439 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json @@ -1,50 +1,38 @@ { "name": "magento/magento2-functional-test-module-security", - "description": "Magento 2 Acceptance Test Module Security", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Security", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Security" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/README.md index 00d818d2406b5..8759f1b780d3b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_SendFriend** Module. +The Functional Tests Module for **Magento_SendFriend** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json index 4dbd07d2aefd3..caea753b1a24c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json @@ -1,51 +1,39 @@ { "name": "magento/magento2-functional-test-module-send-friend", - "description": "Magento 2 Acceptance Test Module Send Friend", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Send Friend", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/SendFriend" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/README.md index fbca31f68edbe..2e2ca0df9eaa6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Shipping** Module. +The Functional Tests Module for **Magento_Shipping** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json index e4ad63928ad00..18a2ba3d2858a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json @@ -1,61 +1,49 @@ { "name": "magento/magento2-functional-test-module-shipping", - "description": "Magento 2 Acceptance Test Module Shipping", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Shipping", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-contact": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-payment": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master", - "magento/magento2-functional-test-module-user": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-contact": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-payment": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0", + "magento/magento2-functional-test-module-user": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Shipping" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/README.md index cc89e5a0bce90..9770ead78032c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Sitemap** Module. +The Functional Tests Module for **Magento_Sitemap** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json index 9b7f0c3e184ef..d5453bdecfeea 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json @@ -1,57 +1,45 @@ { "name": "magento/magento2-functional-test-module-sitemap", - "description": "Magento 2 Acceptance Test Module Sitemap", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Sitemap", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-cms": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-catalog-url-rewrite": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-robots": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0", + "magento/magento2-functional-test-module-cms": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-robots": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Sitemap" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/README.md index 108f407dd446f..409824ff7bfc3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Store** Module. +The Functional Tests Module for **Magento_Store** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json index 084ebb97b1158..39d3cb9d58399 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json @@ -1,53 +1,41 @@ { "name": "magento/magento2-functional-test-module-store", - "description": "Magento 2 Acceptance Test Module Store", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Store", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Store" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/README.md index 767c5b0b729a3..b9ad9db966882 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Swagger** Module. +The Functional Tests Module for **Magento_Swagger** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json index 5b62252b3dfb7..8dc3c358c462f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json @@ -1,46 +1,34 @@ { "name": "magento/magento2-functional-test-module-swagger", - "description": "Magento 2 Acceptance Test Module Swagger", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Swagger", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Swagger" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/README.md index cc3852f1ed09b..c117f0005c6b1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Swatches** Module. +The Functional Tests Module for **Magento_Swatches** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json index aa541ddd3a4ef..79689cd586a18 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json @@ -1,57 +1,45 @@ { "name": "magento/magento2-functional-test-module-swatches", - "description": "Magento 2 Acceptance Test Module Swatches", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Swatches", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-configurable-product": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-theme": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-configurable-product": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-theme": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Swatches" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/README.md index b4b81246d1f4d..5f25de111faa6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_SwatchesLayeredNavigation** Module. +The Functional Tests Module for **Magento_SwatchesLayeredNavigation** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json index f195f6b7aad68..16c1ef4eab8fb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json @@ -1,46 +1,34 @@ { "name": "magento/magento2-functional-test-module-swatches-layered-navigation", - "description": "Magento 2 Acceptance Test Module Swatches Layered Navigation", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Swatches Layered Navigation", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/README.md index 0a3794479ecb9..0b2f50e217b0b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Tax** Module. +The Functional Tests Module for **Magento_Tax** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json index ca12ade23381b..29578354bc925 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json @@ -1,61 +1,49 @@ { "name": "magento/magento2-functional-test-module-tax", - "description": "Magento 2 Acceptance Test Module Tax", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Tax", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-shipping": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-reports": "dev-master", - "magento/magento2-functional-test-module-page-cache": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-page-cache": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-reports": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-shipping": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Tax" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json index 563df720db8f8..ee998afdc6e18 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json @@ -1,52 +1,40 @@ { "name": "magento/magento2-functional-test-module-tax-import-export", - "description": "Magento 2 Acceptance Test Module Tax Import Export", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Tax Import Export", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/TaxImportExport" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/README.md index 187985eb18757..d52ba3a230431 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Theme** Module. +The Functional Tests Module for **Magento_Theme** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json index e54095e5ed0c3..2a05bb1be1e79 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json @@ -1,57 +1,46 @@ { "name": "magento/magento2-functional-test-module-theme", - "description": "Magento 2 Acceptance Test Module Theme", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Theme", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-cms": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-widget": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-media-storage": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-cms": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-media-storage": "1.0.0", + "magento/magento2-functional-test-module-require-js": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0", + "magento/magento2-functional-test-module-widget": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Theme" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/README.md index 477d0cca79123..4f3da0b95f39d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Translation** Module. +The Functional Tests Module for **Magento_Translation** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json index 7825f0b22d6e7..8a9e1d516cddf 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json @@ -1,51 +1,39 @@ { "name": "magento/magento2-functional-test-module-translation", - "description": "Magento 2 Acceptance Test Module Translation", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Translation", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-developer": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-developer": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Translation" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/README.md index ca2fc10740951..0e654f6aa5e8f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Ui** Module. +The Functional Tests Module for **Magento_Ui** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json index 652a4ebed3a70..5144284192f28 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json @@ -1,52 +1,40 @@ { "name": "magento/magento2-functional-test-module-ui", - "description": "Magento 2 Acceptance Test Module Ui", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Ui", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-authorization": "dev-master", - "magento/magento2-functional-test-module-user": "dev-master" + "magento/magento2-functional-test-module-authorization": "1.0.0", + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-user": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Ui" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/README.md index 95189beffd426..3a7f99729cad3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Ups** Module. +The Functional Tests Module for **Magento_Ups** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json index 6cb246e0d55a3..86e2ccf62f3fa 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json @@ -1,55 +1,43 @@ { "name": "magento/magento2-functional-test-module-ups", - "description": "Magento 2 Acceptance Test Module Ups", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Ups", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-shipping": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-shipping": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Ups" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/README.md index a0c3a234569c9..645ff970002a1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_UrlRewrite** Module. +The Functional Tests Module for **Magento_UrlRewrite** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json index a8b351fc45b16..9343f1a448c8f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json @@ -1,54 +1,42 @@ { "name": "magento/magento2-functional-test-module-url-rewrite", - "description": "Magento 2 Acceptance Test Module Url Rewrite", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Url Rewrite", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-catalog-url-rewrite": "dev-master", - "magento/magento2-functional-test-module-cms": "dev-master", - "magento/magento2-functional-test-module-cms-url-rewrite": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0", + "magento/magento2-functional-test-module-cms": "1.0.0", + "magento/magento2-functional-test-module-cms-url-rewrite": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/UrlRewrite" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/README.md index 617eb0c0abe7e..77e18cd31e81b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_User** Module. +The Functional Tests Module for **Magento_User** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json index c40a4c122ed8b..b9fc97cbccb2f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json @@ -1,54 +1,42 @@ { "name": "magento/magento2-functional-test-module-user", - "description": "Magento 2 Acceptance Test Module User", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module User", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-authorization": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-security": "dev-master", - "magento/magento2-functional-test-module-integration": "dev-master", - "magento/magento2-functional-test-module-email": "dev-master" + "magento/magento2-functional-test-module-authorization": "1.0.0", + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-email": "1.0.0", + "magento/magento2-functional-test-module-integration": "1.0.0", + "magento/magento2-functional-test-module-security": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/User" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/README.md new file mode 100644 index 0000000000000..0f87c957487ef --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/README.md @@ -0,0 +1,3 @@ +# Magento 2 Functional Tests + +The Functional Tests Module for **Magento_Usps** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/composer.json new file mode 100644 index 0000000000000..d34034b84d456 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/composer.json @@ -0,0 +1,45 @@ +{ + "name": "magento/magento2-functional-test-module-usps", + "description": "Magento 2 Functional Test Module Usps", + "config": { + "sort-packages": true + }, + "require": { + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" + }, + "suggest": { + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-config": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-shipping": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" + }, + "type": "magento2-test-module", + "version": "1.0.0", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "autoload": { + "psr-4": { + "Magento\\": ["tests/functional/Magento", "generated/Magento"] + } + }, + "extra": { + "map": [ + [ + "*", + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/README.md index 454eb1e9164ee..9c847f4db2bdb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Variable** Module. +The Functional Tests Module for **Magento_Variable** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json index 178f0401b9b2e..772dfd4cac66a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json @@ -1,51 +1,39 @@ { "name": "magento/magento2-functional-test-module-variable", - "description": "Magento 2 Acceptance Test Module Variable", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Variable", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-email": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-email": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Variable" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/README.md index c993e275c54fa..9edda871be550 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Vault** Module. +The Functional Tests Module for **Magento_Vault** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json index e1af1518555e4..72f78e07e54a6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json @@ -1,54 +1,42 @@ { "name": "magento/magento2-functional-test-module-vault", - "description": "Magento 2 Acceptance Test Module Vault", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Vault", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-payment": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master" + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-payment": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Vault" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/README.md index c48f288e7293b..ba933541be888 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Version** Module. +The Functional Tests Module for **Magento_Version** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json index 82387c516accb..622210dd19457 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json @@ -1,48 +1,35 @@ { "name": "magento/magento2-functional-test-module-version", - "description": "Magento 2 Acceptance Test Module Version", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Version", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Version" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version" ] ] } } - diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/README.md index 3c8cf910c0194..bb843ce718556 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Webapi** Module. +The Functional Tests Module for **Magento_Webapi** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json index af20f4956e2a0..727fba2cf164a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json @@ -1,52 +1,40 @@ { "name": "magento/magento2-functional-test-module-webapi", - "description": "Magento 2 Acceptance Test Module Webapi", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Webapi", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-authorization": "dev-master", - "magento/magento2-functional-test-module-integration": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master" + "magento/magento2-functional-test-module-authorization": "1.0.0", + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-integration": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Webapi" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/README.md index 24a7953393052..25f93d6962924 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_WebapiSecurity** Module. +The Functional Tests Module for **Magento_WebapiSecurity** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json index 80cfc405e3747..f5de750e36d8b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json @@ -1,49 +1,37 @@ { "name": "magento/magento2-functional-test-module-webapi-security", - "description": "Magento 2 Acceptance Test Module Webapi Security", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Webapi Security", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-webapi": "dev-master" + "magento/magento2-functional-test-module-webapi": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/WebapiSecurity" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/README.md index 5166cfc5d4b26..4f199873079e5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Weee** Module. +The Functional Tests Module for **Magento_Weee** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json index 7e3f3eac4247d..29cff64dff511 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json @@ -1,60 +1,48 @@ { "name": "magento/magento2-functional-test-module-weee", - "description": "Magento 2 Acceptance Test Module Weee", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Weee", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-tax": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-directory": "dev-master", - "magento/magento2-functional-test-module-eav": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-page-cache": "dev-master", - "magento/magento2-functional-test-module-quote": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-directory": "1.0.0", + "magento/magento2-functional-test-module-eav": "1.0.0", + "magento/magento2-functional-test-module-page-cache": "1.0.0", + "magento/magento2-functional-test-module-quote": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-tax": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Weee" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/README.md index b6fd0b4513bb1..2a8996c2f3322 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Widget** Module. +The Functional Tests Module for **Magento_Widget** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json index 7d546965c3a3f..aed96d0056edd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json @@ -1,55 +1,43 @@ { "name": "magento/magento2-functional-test-module-widget", - "description": "Magento 2 Acceptance Test Module Widget", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Widget", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-cms": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-email": "dev-master", - "magento/magento2-functional-test-module-theme": "dev-master", - "magento/magento2-functional-test-module-variable": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-cms": "1.0.0", + "magento/magento2-functional-test-module-email": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-theme": "1.0.0", + "magento/magento2-functional-test-module-variable": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Widget" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget" ] ] } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/README.md index 53615d4273f73..d5b0902bd9cb0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/README.md +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/README.md @@ -1,3 +1,3 @@ -# Magento 2 Acceptance Tests +# Magento 2 Functional Tests -The Acceptance Tests Module for **Magento_Wishlist** Module. +The Functional Tests Module for **Magento_Wishlist** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json index cfb79284ec5a7..496419cea221e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json @@ -1,57 +1,45 @@ { "name": "magento/magento2-functional-test-module-wishlist", - "description": "Magento 2 Acceptance Test Module Wishlist", - "repositories": [ - { - "type" : "composer", - "url" : "https://repo.magento.com/" - } - ], + "description": "Magento 2 Functional Test Module Wishlist", + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" }, "suggest": { - "magento/magento2-functional-test-module-store": "dev-master", - "magento/magento2-functional-test-module-customer": "dev-master", - "magento/magento2-functional-test-module-catalog": "dev-master", - "magento/magento2-functional-test-module-checkout": "dev-master", - "magento/magento2-functional-test-module-catalog-inventory": "dev-master", - "magento/magento2-functional-test-module-rss": "dev-master", - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-sales": "dev-master", - "magento/magento2-functional-test-module-ui": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0", + "magento/magento2-functional-test-module-catalog": "1.0.0", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", + "magento/magento2-functional-test-module-checkout": "1.0.0", + "magento/magento2-functional-test-module-customer": "1.0.0", + "magento/magento2-functional-test-module-rss": "1.0.0", + "magento/magento2-functional-test-module-sales": "1.0.0", + "magento/magento2-functional-test-module-store": "1.0.0", + "magento/magento2-functional-test-module-ui": "1.0.0" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\": ["tests/functional/Magento", "generated/Magento"] } }, "extra": { "map": [ [ "*", - "tests/functional/Magento/FunctionalTest/Wishlist" + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist" ] ] } From 60ce399b8fa58703bffeeaa385c91cfd56889ac6 Mon Sep 17 00:00:00 2001 From: Ji Lu <jilu1@magento.com> Date: Thu, 7 Dec 2017 19:24:53 +0200 Subject: [PATCH 481/653] MQE-583: set release version to 1.0.0 and updated composer dependencies. --- dev/tests/acceptance/composer.json | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100755 dev/tests/acceptance/composer.json diff --git a/dev/tests/acceptance/composer.json b/dev/tests/acceptance/composer.json new file mode 100755 index 0000000000000..4f8abc17b2516 --- /dev/null +++ b/dev/tests/acceptance/composer.json @@ -0,0 +1,34 @@ +{ + "name": "magento/magento2ce-functional-tests", + "description": "Magento 2 Functional Tests", + "type": "project", + "version": "1.0.0", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "config": { + "sort-packages": true + }, + "repositories": [ + { + "type": "git", + "url": "git@github.com:magento/magento2-functional-testing-framework.git" + } + ], + "require": { + "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", + "codeception/codeception": "~2.3.4", + "consolidation/robo": "^1.0.0", + "henrikbjorn/lurker": "^1.2", + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "vlucas/phpdotenv": "~2.4" + }, + "autoload": { + "psr-4": { + "Magento\\": ["tests/functional/Magento", "generated/Magento"] + } + }, + "prefer-stable": true +} From 76ba364782ccb63404b21fef6085c8597ad514c2 Mon Sep 17 00:00:00 2001 From: Ian Meron <imeron@magento.com> Date: Mon, 4 Dec 2017 22:27:59 +0200 Subject: [PATCH 482/653] MQE-347: Use a remove tag instead of a remove attribute - add new debug flag and logic --- dev/tests/acceptance/.env.example | 1 + dev/tests/acceptance/tests/_bootstrap.php | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/dev/tests/acceptance/.env.example b/dev/tests/acceptance/.env.example index 9cb45c149a9ff..7aec49b47bbc7 100644 --- a/dev/tests/acceptance/.env.example +++ b/dev/tests/acceptance/.env.example @@ -50,5 +50,6 @@ MAGENTO_ADMIN_PASSWORD= #FW_BP= #TESTS_MODULE_PATH= #MODULE_WHITELIST= +#MFTF_DEBUG=true #*** End of .env ***# \ No newline at end of file diff --git a/dev/tests/acceptance/tests/_bootstrap.php b/dev/tests/acceptance/tests/_bootstrap.php index 80392c9f53fa5..a3d7b41f397a3 100644 --- a/dev/tests/acceptance/tests/_bootstrap.php +++ b/dev/tests/acceptance/tests/_bootstrap.php @@ -22,3 +22,9 @@ } } defined('FW_BP') || define('FW_BP', PROJECT_ROOT . $RELATIVE_FW_PATH); + +// add the debug flag here +$debug_mode = $_ENV['MFTF_DEBUG'] ?? false; +if (!$debug_mode) { + xdebug_disable(); +} From c2a7c9a78670ae873eee40e4a83a3151a9b01aaf Mon Sep 17 00:00:00 2001 From: Ian Meron <imeron@magento.com> Date: Fri, 1 Dec 2017 18:10:14 +0200 Subject: [PATCH 483/653] MQE-386: MFTF Compatibility with Windows Machine - update Robofile to use DIRECTORY_SEPARATOR constant --- dev/tests/acceptance/RoboFile.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php index c7368c7930912..287dce4d38f1c 100644 --- a/dev/tests/acceptance/RoboFile.php +++ b/dev/tests/acceptance/RoboFile.php @@ -22,7 +22,7 @@ function cloneFiles() { $this->_exec('cp -vn .env.example .env'); $this->_exec('cp -vf codeception.dist.yml codeception.yml'); - $this->_exec('cp -vf tests/functional.suite.dist.yml tests/functional.suite.yml'); + $this->_exec('cp -vf tests'. DIRECTORY_SEPARATOR .'functional.suite.dist.yml tests'. DIRECTORY_SEPARATOR .'functional.suite.yml'); } /** @@ -34,7 +34,7 @@ function cloneFiles() function buildProject() { $this->cloneFiles(); - $this->_exec('./vendor/bin/codecept build'); + $this->_exec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept build'); } /** @@ -78,7 +78,7 @@ function generateSuite(array $args) */ function chrome() { - $this->_exec('./vendor/bin/codecept run functional --env chrome --skip-group skip'); + $this->_exec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --env chrome --skip-group skip'); } /** @@ -88,7 +88,7 @@ function chrome() */ function firefox() { - $this->_exec('./vendor/bin/codecept run functional --env firefox --skip-group skip'); + $this->_exec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --env firefox --skip-group skip'); } /** @@ -98,7 +98,7 @@ function firefox() */ function phantomjs() { - $this->_exec('./vendor/bin/codecept run functional --env phantomjs --skip-group skip'); + $this->_exec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --env phantomjs --skip-group skip'); } /** @@ -108,7 +108,7 @@ function phantomjs() */ function headless() { - $this->_exec('./vendor/bin/codecept run functional --env headless --skip-group skip'); + $this->_exec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --env headless --skip-group skip'); } /** @@ -119,7 +119,7 @@ function headless() */ function group($args = '') { - $this->taskExec('./vendor/bin/codecept run functional --verbose --steps --env chrome --skip-group skip --group')->args($args)->run(); + $this->taskExec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --verbose --steps --env chrome --skip-group skip --group')->args($args)->run(); } /** @@ -130,7 +130,7 @@ function group($args = '') */ function folder($args = '') { - $this->taskExec('./vendor/bin/codecept run functional --env chrome')->args($args)->run(); + $this->taskExec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --env chrome')->args($args)->run(); } /** @@ -140,7 +140,7 @@ function folder($args = '') */ function example() { - $this->_exec('./vendor/bin/codecept run --env chrome --group example --skip-group skip'); + $this->_exec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run --env chrome --group example --skip-group skip'); } /** @@ -150,7 +150,7 @@ function example() */ function allure1Generate() { - return $this->_exec('allure generate tests/_output/allure-results/ -o tests/_output/allure-report/'); + return $this->_exec('allure generate tests'. DIRECTORY_SEPARATOR .'_output'. DIRECTORY_SEPARATOR .'allure-results'. DIRECTORY_SEPARATOR .' -o tests'. DIRECTORY_SEPARATOR .'_output'. DIRECTORY_SEPARATOR .'allure-report'. DIRECTORY_SEPARATOR .''); } /** @@ -160,7 +160,7 @@ function allure1Generate() */ function allure2Generate() { - return $this->_exec('allure generate tests/_output/allure-results/ --output tests/_output/allure-report/ --clean'); + return $this->_exec('allure generate tests'. DIRECTORY_SEPARATOR .'_output'. DIRECTORY_SEPARATOR .'allure-results'. DIRECTORY_SEPARATOR .' --output tests'. DIRECTORY_SEPARATOR .'_output'. DIRECTORY_SEPARATOR .'allure-report'. DIRECTORY_SEPARATOR .' --clean'); } /** @@ -170,7 +170,7 @@ function allure2Generate() */ function allure1Open() { - $this->_exec('allure report open --report-dir tests/_output/allure-report/'); + $this->_exec('allure report open --report-dir tests'. DIRECTORY_SEPARATOR .'_output'. DIRECTORY_SEPARATOR .'allure-report'. DIRECTORY_SEPARATOR .''); } /** @@ -180,7 +180,7 @@ function allure1Open() */ function allure2Open() { - $this->_exec('allure open --port 0 tests/_output/allure-report/'); + $this->_exec('allure open --port 0 tests'. DIRECTORY_SEPARATOR .'_output'. DIRECTORY_SEPARATOR .'allure-report'. DIRECTORY_SEPARATOR .''); } /** From df2be125c91df3724f8035bd216ce8fed40ca888 Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Thu, 7 Dec 2017 17:46:37 +0200 Subject: [PATCH 484/653] MQE-592: Test Case Audit - Removing PhantomJS from Tests. - Unskipping the CMS test. - Skipping the Configurable Product test. - Skipping all Sample Tests. --- .../Backend/Cest/AdminLoginCest.xml | 1 - .../Cms/Cest/AdminCreateCmsPageCest.xml | 1 - .../Cest/AdminCreateConfigurableProductCest.xml | 15 ++++++--------- .../Cest/StorefrontPersistedCustomerLoginCest.xml | 1 - .../Cest/CreateConfigurableProductByApiCest.xml | 1 + .../SampleTests/Cest/CreateSalesRuleByApiCest.xml | 1 + .../SampleTests/Cest/MinimumTestCest.xml | 1 - .../Cest/SetPaymentConfigurationCest.xml | 3 +++ .../Cest/UpdateSimpleProductByApiCest.xml | 6 +----- .../Store/Cest/AdminCreateStoreGroupCest.xml | 1 - .../StorefrontDeletePersistedWishlistCest.xml | 1 - 11 files changed, 12 insertions(+), 20 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml index 67605e2dbe551..f503dd0844b1f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml @@ -23,7 +23,6 @@ <group value="login"/> <env value="chrome"/> <env value="firefox"/> - <env value="phantomjs"/> <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" stepKey="amOnAdminLoginPage"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml index fde1baac0c443..112c57fbb8611 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml @@ -23,7 +23,6 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-25580"/> <group value="cms"/> - <group value="skip"/> <env value="chrome"/> <env value="firefox"/> <env value="headless"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml index 1e1475e154cd3..c68f6ed83bc78 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml @@ -25,13 +25,10 @@ <description value="You should be able to create a Configurable Product via the Admin."/> <severity value="CRITICAL"/> <testCaseId value="MAGETWO-26041"/> - <group value="configurable"/> - <group value="product"/> - <env value="chrome"/> + <group value="skip"/> </annotations> - <amOnPage url="{{AdminCategoryPage.url}}" stepKey="amOnCategoryGridPage"/> - <waitForPageLoad stepKey="waitForPageLoad1"/> + <waitForPageLoad time="30" stepKey="waitForPageLoad1"/> <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" stepKey="clickOnAddSubCategory"/> <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{_defaultCategory.name}}" stepKey="enterCategoryName"/> @@ -41,7 +38,7 @@ <seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="assertSuccessMessage"/> <amOnPage url="{{AdminProductIndexPage.url}}" stepKey="amOnProductGridPage"/> - <waitForPageLoad stepKey="waitForPageLoad2"/> + <waitForPageLoad time="30" stepKey="waitForPageLoad2"/> <click selector="{{AdminProductGridActionSection.addProductToggle}}" stepKey="clickOnAddProductToggle"/> <click selector="{{AdminProductGridActionSection.addConfigurableProduct}}" stepKey="clickOnAddConfigurableProduct"/> <fillField userInput="{{_defaultProduct.name}}" selector="{{AdminProductFormSection.productName}}" stepKey="fillName"/> @@ -110,15 +107,15 @@ <see selector="{{AdminProductFormConfigurationsSection.currentVariationsQuantityCells}}" userInput="{{colorProductAttribute.attribute_quantity}}" stepKey="seeQuantityInField"/> <amOnPage url="/" stepKey="amOnStorefront"/> - <waitForPageLoad stepKey="waitForPageLoad3"/> + <waitForPageLoad time="30" stepKey="waitForPageLoad3"/> <click userInput="{{_defaultCategory.name}}" stepKey="clickOnCategoryName"/> - <waitForPageLoad stepKey="waitForPageLoad4"/> + <waitForPageLoad time="30" stepKey="waitForPageLoad4"/> <see userInput="{{_defaultProduct.name}}" stepKey="assertProductPresent"/> <see userInput="{{colorProductAttribute1.price}}" stepKey="assertProductPricePresent"/> <click userInput="{{_defaultProduct.name}}" stepKey="clickOnProductName"/> - <waitForPageLoad stepKey="waitForPageLoad5"/> + <waitForPageLoad time="30" stepKey="waitForPageLoad5"/> <seeInTitle userInput="{{_defaultProduct.name}}" stepKey="assertProductNameTitle"/> <see userInput="{{_defaultProduct.name}}" selector="{{StorefrontProductInfoMainSection.productName}}" stepKey="assertProductName"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml index 6c79e31478c9a..2ed55e691a038 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml @@ -28,7 +28,6 @@ <group value="customer"/> <env value="chrome"/> <env value="firefox"/> - <env value="phantomjs"/> <env value="headless"/> </annotations> <amOnPage stepKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage.url}}"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml index 0f13decf74090..7daef0fc1ed41 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateConfigurableProductByApiCest.xml @@ -12,6 +12,7 @@ <annotations> <features value="Create a Configurable Product By API"/> <stories value="Create a Configurable Product By API"/> + <group value="skip"/> </annotations> <before> <createData stepKey="categoryHandle" entity="SimpleSubCategory" /> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml index b202095bea1e4..68d7f75a964d2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/CreateSalesRuleByApiCest.xml @@ -12,6 +12,7 @@ <annotations> <features value="Create a Sales Rule By API"/> <stories value="Create a Sales Rule By API"/> + <group value="skip"/> </annotations> <before> <createData stepKey="saleRule" entity="SimpleSalesRule" /> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml index c571e8694beea..350c228bc5071 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml @@ -23,7 +23,6 @@ <group value="example"/> <env value="chrome"/> <env value="firefox"/> - <env value="phantomjs"/> <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" stepKey="navigateToAdmin"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml index 005031284b532..9022ae32a337c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/SetPaymentConfigurationCest.xml @@ -9,6 +9,9 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd"> <cest name="SetPaymentConfigurationCest"> + <annotations> + <group value="skip"/> + </annotations> <test name="SetPaypalConfigurationTest"> <createData entity="SamplePaypalConfig" stepKey="createSamplePaypalConfig"/> <createData entity="DefaultPayPalConfig" stepKey="restoreDefaultPaypalConfig"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml index 48e87294411f1..9fa215e582e3a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/UpdateSimpleProductByApiCest.xml @@ -11,11 +11,7 @@ <annotations> <features value="Update simple product by api test."/> <stories value="Update simple product by api test."/> - <group value="example"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="phantomjs"/> - <env value="headless"/> + <group value="skip"/> </annotations> <before> <createData stepKey="categoryHandle" entity="SimpleSubCategory"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml index ef04dfd795a86..8cfcd7d29ec14 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/Cest/AdminCreateStoreGroupCest.xml @@ -13,7 +13,6 @@ <stories value="Create a store group in admin"/> <env value="chrome"/> <env value="firefox"/> - <env value="phantomjs"/> <group value="store"/> </annotations> <before> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml index 80aa26e20a999..9b21337f94dd9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/Cest/StorefrontDeletePersistedWishlistCest.xml @@ -13,7 +13,6 @@ <stories value="Delete a persist wishlist for a customer"/> <env value="chrome"/> <env value="firefox"/> - <env value="phantomjs"/> <group value="wishlist"/> </annotations> <before> From 5216335286e684fdaa9cfc0d55144d547318a363 Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Thu, 7 Dec 2017 18:24:21 +0200 Subject: [PATCH 485/653] MQE-592: Test Case Audit - Adjusting the waitForPageLoads time values. --- .../Catalog/Cest/AdminCreateCategoryCest.xml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml index 980eae28b6d22..c8ccd3dc26165 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml @@ -26,12 +26,9 @@ <env value="chrome"/> <env value="headless"/> </annotations> - <amOnPage url="{{AdminLoginPage.url}}" stepKey="amOnAdminLoginPage"/> - <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" stepKey="fillUsername"/> - <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" stepKey="fillPassword"/> - <click selector="{{AdminLoginFormSection.signIn}}" stepKey="clickOnSignIn"/> + <loginAsAdmin stepKey="loginAsAdmin"/> <amOnPage url="{{AdminCategoryPage.url}}" stepKey="navigateToCategoryPage"/> - <waitForPageLoad stepKey="waitForPageLoad1"/> + <waitForPageLoad time="30" stepKey="waitForPageLoad1"/> <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" stepKey="clickOnAddSubCategory"/> <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{SimpleSubCategory.name}}" stepKey="enterCategoryName"/> <click selector="{{AdminCategorySEOSection.SectionHeader}}" stepKey="openSEO"/> @@ -41,7 +38,6 @@ <!-- Literal URL below, need to refactor line + StorefrontCategoryPage when support for variable URL is implemented--> <amOnPage url="/{{SimpleSubCategory.name_lwr}}.html" stepKey="goToCategoryFrontPage"/> - <waitForPageLoad stepKey="waitForPageLoad2"/> <seeInTitle userInput="{{SimpleSubCategory.name}}" stepKey="assertTitle"/> <see selector="{{StorefrontCategoryMainSection.CategoryTitle}}" userInput="{{SimpleSubCategory.name_lwr}}" stepKey="assertInfo1"/> </test> From bc55797620ed8e8e0cf7760789d4db40865dac8d Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Thu, 7 Dec 2017 19:04:58 +0200 Subject: [PATCH 486/653] MQE-592: Test Case Audit - Removing the Robo PhantomJS command. --- dev/tests/acceptance/RoboFile.php | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php index 287dce4d38f1c..60b4d287b7d89 100644 --- a/dev/tests/acceptance/RoboFile.php +++ b/dev/tests/acceptance/RoboFile.php @@ -91,16 +91,6 @@ function firefox() $this->_exec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --env firefox --skip-group skip'); } - /** - * Run all Functional tests using the PhantomJS environment. - * - * @return void - */ - function phantomjs() - { - $this->_exec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --env phantomjs --skip-group skip'); - } - /** * Run all Functional tests using the Chrome Headless environment. * From 35d6cf83ebbcafb027bca8a6b6ec8e784ebf4576 Mon Sep 17 00:00:00 2001 From: imeron2433 <imeron@magento.com> Date: Thu, 7 Dec 2017 21:22:08 +0200 Subject: [PATCH 487/653] MQE-592: Audit Test Cases on Firefox/Chrome on Windows/OSX - strip @env tags from Cest.xml files - change test flows to be more robust --- .../FunctionalTest/Backend/Cest/AdminLoginCest.xml | 3 --- .../Catalog/Cest/AdminCreateCategoryCest.xml | 2 -- .../Catalog/Cest/AdminCreateSimpleProductCest.xml | 2 -- .../Checkout/Cest/StorefrontCustomerCheckoutCest.xml | 2 -- .../Checkout/Cest/StorefrontGuestCheckoutCest.xml | 7 +++---- .../Checkout/Section/GuestCheckoutPaymentSection.xml | 2 ++ .../Cms/Cest/AdminCreateCmsPageCest.xml | 4 +--- .../Cest/AdminCreateConfigurableProductCest.xml | 3 ++- .../Customer/Cest/AdminCreateCustomerCest.xml | 5 +---- .../Customer/Cest/StorefrontCreateCustomerCest.xml | 3 --- .../Cest/StorefrontPersistedCustomerLoginCest.xml | 3 --- .../Customer/Section/AdminCustomerFiltersSection.xml | 1 + .../Sales/Cest/AdminCreateInvoiceCest.xml | 11 +++++------ .../SampleTemplates/Cest/TemplateCestFile.xml | 1 - .../SampleTests/Cest/MinimumTestCest.xml | 4 +--- 15 files changed, 16 insertions(+), 37 deletions(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml index f503dd0844b1f..fbce6aa6388dd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/Cest/AdminLoginCest.xml @@ -21,9 +21,6 @@ <testCaseId value="MAGETWO-71572"/> <group value="example"/> <group value="login"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" stepKey="amOnAdminLoginPage"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" stepKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml index c8ccd3dc26165..1d12792785104 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateCategoryCest.xml @@ -23,8 +23,6 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72102"/> <group value="category"/> - <env value="chrome"/> - <env value="headless"/> </annotations> <loginAsAdmin stepKey="loginAsAdmin"/> <amOnPage url="{{AdminCategoryPage.url}}" stepKey="navigateToCategoryPage"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml index c2756445f6268..cbf0cdb4d902c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Cest/AdminCreateSimpleProductCest.xml @@ -23,8 +23,6 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-23414"/> <group value="product"/> - <env value="chrome"/> - <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" stepKey="navigateToAdmin"/> <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" stepKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml index 1da632eaae16f..4531bfb84dcc9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontCustomerCheckoutCest.xml @@ -32,8 +32,6 @@ <severity value="CRITICAL"/> <testCaseId value="#"/> <group value="checkout"/> - <env value="chrome"/> - <env value="headless"/> </annotations> <amOnPage stepKey="s1" url="customer/account/login/"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml index 2aa0a77b0a0d1..69c614cd36268 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Cest/StorefrontGuestCheckoutCest.xml @@ -30,8 +30,6 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72094"/> <group value="checkout"/> - <env value="chrome"/> - <env value="headless"/> </annotations> <amOnPage url="{{StorefrontCategoryPage.url($$createCategory.name$$)}}" stepKey="onCategoryPage"/> <waitForPageLoad stepKey="waitForPageLoad1"/> @@ -56,6 +54,7 @@ <waitForElement selector="{{GuestCheckoutShippingSection.next}}" time="30" stepKey="waitForNextButton"/> <click selector="{{GuestCheckoutShippingSection.next}}" stepKey="clickNext"/> <waitForElement selector="{{GuestCheckoutPaymentSection.placeOrder}}" time="30" stepKey="waitForPlaceOrderButton"/> + <conditionalClick selector="{{GuestCheckoutPaymentSection.cartItemsArea}}" dependentSelector="{{GuestCheckoutPaymentSection.cartItemsAreaActive}}" visible="false" stepKey="exposeMiniCart"/> <see selector="{{GuestCheckoutPaymentSection.cartItems}}" userInput="{{_defaultProduct.name}}" stepKey="seeProductInCart"/> <see selector="{{GuestCheckoutPaymentSection.billingAddress}}" userInput="{{CustomerAddressSimple.street[0]}}" stepKey="seeAddress"/> <click selector="{{GuestCheckoutPaymentSection.placeOrder}}" stepKey="clickPlaceOrder"/> @@ -67,10 +66,10 @@ <fillField selector="{{AdminLoginFormSection.password}}" userInput="{{_ENV.MAGENTO_ADMIN_PASSWORD}}" stepKey="fillPassword"/> <click selector="{{AdminLoginFormSection.signIn}}" stepKey="clickLogin"/> <amOnPage url="{{OrdersPage.url}}" stepKey="onOrdersPage"/> - <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="30" stepKey="waitForOrdersPage"/> + <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappearOnOrdersPage"/> <fillField selector="{{OrdersGridSection.search}}" variable="orderNumber" stepKey="fillOrderNum"/> <click selector="{{OrdersGridSection.submitSearch}}" stepKey="submitSearchOrderNum"/> - <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="30" stepKey="waitForOrdersPage2"/> + <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappearOnSearch"/> <click selector="{{OrdersGridSection.firstRow}}" stepKey="clickOrderRow"/> <see selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Pending" stepKey="seeAdminOrderStatus"/> <see selector="{{OrderDetailsInformationSection.accountInformation}}" userInput="Guest" stepKey="seeAdminOrderGuest"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml index 200a699d2bb51..cc7c019cc4e23 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/Section/GuestCheckoutPaymentSection.xml @@ -9,6 +9,8 @@ <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Page/etc/SectionObject.xsd"> <section name="GuestCheckoutPaymentSection"> + <element name="cartItemsArea" type="textarea" selector=".items-in-cart"/> + <element name="cartItemsAreaActive" type="textarea" selector="div.block.items-in-cart.active"/> <element name="cartItems" type="text" selector=".minicart-items"/> <element name="billingAddress" type="text" selector="div.billing-address-details"/> <element name="placeOrder" type="button" selector="button.action.primary.checkout" timeout="30"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml index 112c57fbb8611..8ac19e41e4b73 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml @@ -23,9 +23,7 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-25580"/> <group value="cms"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="headless"/> + <group value="skip"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" stepKey="navigateToAdmin"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" stepKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml index c68f6ed83bc78..a540feba1f559 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml @@ -25,7 +25,8 @@ <description value="You should be able to create a Configurable Product via the Admin."/> <severity value="CRITICAL"/> <testCaseId value="MAGETWO-26041"/> - <group value="skip"/> + <group value="configurable"/> + <group value="product"/> </annotations> <amOnPage url="{{AdminCategoryPage.url}}" stepKey="amOnCategoryGridPage"/> <waitForPageLoad time="30" stepKey="waitForPageLoad1"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml index da72ffd45ea28..b0a4cb06c0842 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/AdminCreateCustomerCest.xml @@ -21,8 +21,6 @@ <testCaseId value="MAGETWO-72095"/> <group value="customer"/> <group value="create"/> - <env value="chrome"/> - <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" stepKey="navigateToAdmin"/> <fillField userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" selector="{{AdminLoginFormSection.username}}" stepKey="fillUsername"/> @@ -36,9 +34,8 @@ <click selector="{{AdminNewCustomerMainActionsSection.saveButton}}" stepKey="saveCustomer"/> <waitForElementNotVisible selector="div [data-role='spinner']" time="10" stepKey="waitForSpinner1"/> <seeElement selector="{{AdminCustomerMessagesSection.successMessage}}" stepKey="assertSuccessMessage"/> - <click selector="{{AdminCustomerFiltersSection.filtersButton}}" stepKey="openFilter"/> - <fillField userInput="{{CustomerEntityOne.firstname}}" selector="{{AdminCustomerFiltersSection.nameInput}}" stepKey="filterFirstName"/> + <fillField userInput="{{CustomerEntityOne.email}}" selector="{{AdminCustomerFiltersSection.emailInput}}" stepKey="filterEmail"/> <click selector="{{AdminCustomerFiltersSection.apply}}" stepKey="applyFilter"/> <waitForElementNotVisible selector="div [data-role='spinner']" time="10" stepKey="waitForSpinner2"/> <see userInput="{{CustomerEntityOne.firstname}}" selector="{{AdminCustomerGridSection.customerGrid}}" stepKey="assertFirstName"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml index 36c97c56d0f7d..80ab4ea6d9c13 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontCreateCustomerCest.xml @@ -21,9 +21,6 @@ <testCaseId value="MAGETWO-23546"/> <group value="customer"/> <group value="create"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="headless"/> </annotations> <amOnPage stepKey="amOnStorefrontPage" url="/"/> <click stepKey="clickOnCreateAccountLink" selector="{{StorefrontPanelHeaderSection.createAnAccountLink}}"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml index 2ed55e691a038..2045fd3a97a22 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Cest/StorefrontPersistedCustomerLoginCest.xml @@ -26,9 +26,6 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-72103"/> <group value="customer"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="headless"/> </annotations> <amOnPage stepKey="amOnSignInPage" url="{{StorefrontCustomerSignInPage.url}}"/> <fillField stepKey="fillEmail" userInput="$$customer.email$$" selector="{{StorefrontCustomerSignInFormSection.emailField}}"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml index 57449d2b22bfb..8e21effe98df9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/Section/AdminCustomerFiltersSection.xml @@ -11,6 +11,7 @@ <section name="AdminCustomerFiltersSection"> <element name="filtersButton" type="button" selector="#container > div > div.admin__data-grid-header > div:nth-child(1) > div.data-grid-filters-actions-wrap > div > button" timeout="30"/> <element name="nameInput" type="input" selector="input[name=name]"/> + <element name="emailInput" type="input" selector="input[name=email]"/> <element name="apply" type="button" selector="button[data-action=grid-filter-apply]" timeout="30"/> </section> </config> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml index f27ac7d37af33..e0279c22d9693 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/Cest/AdminCreateInvoiceCest.xml @@ -27,8 +27,6 @@ <severity value="NORMAL"/> <testCaseId value="MAGETWO-72096"/> <group value="sales"/> - <env value="chrome"/> - <env value="headless"/> </annotations> <!-- todo: Create an order via the api instead of driving the browser --> @@ -50,6 +48,7 @@ <fillField selector="{{CheckoutShippingGuestInfoSection.telephone}}" userInput="{{CustomerAddressSimple.telephone}}" stepKey="enterTelephone"/> <waitForLoadingMaskToDisappear stepKey="waitForLoadingMask"/> <click selector="{{CheckoutShippingMethodsSection.firstShippingMethod}}" stepKey="selectFirstShippingMethod"/> + <waitForLoadingMaskToDisappear stepKey="waitForLoadingMask2"/> <waitForElement selector="{{CheckoutShippingMethodsSection.next}}" time="30" stepKey="waitForNextButton"/> <click selector="{{CheckoutShippingMethodsSection.next}}" stepKey="clickNext"/> <waitForElement selector="{{CheckoutPaymentSection.placeOrder}}" time="30" stepKey="waitForPlaceOrderButton"/> @@ -64,23 +63,23 @@ <click selector="{{AdminLoginFormSection.signIn}}" stepKey="clickLogin"/> <amOnPage url="{{OrdersPage.url}}" stepKey="onOrdersPage"/> - <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="10" stepKey="waitSpinner1"/> + <waitForLoadingMaskToDisappear stepKey="waitForLoadingMask3"/> <fillField selector="{{OrdersGridSection.search}}" variable="orderNumber" stepKey="searchOrderNum"/> <click selector="{{OrdersGridSection.submitSearch}}" stepKey="submitSearch"/> - <waitForElementNotVisible selector="{{OrdersGridSection.spinner}}" time="10" stepKey="waitSpinner2"/> + <waitForLoadingMaskToDisappear stepKey="waitForLoadingMask4"/> <click selector="{{OrdersGridSection.firstRow}}" stepKey="clickOrderRow"/> <click selector="{{OrderDetailsMainActionsSection.invoice}}" stepKey="clickInvoice"/> <click selector="{{InvoiceNewSection.submitInvoice}}" stepKey="clickSubmitInvoice"/> <see selector="{{OrderDetailsMessagesSection.successMessage}}" userInput="The invoice has been created." stepKey="seeSuccessMessage"/> <click selector="{{OrderDetailsOrderViewSection.invoices}}" stepKey="clickInvoices"/> - <waitForElementNotVisible selector="{{OrderDetailsInvoicesSection.spinner}}" time="10" stepKey="waitSpinner3"/> + <waitForLoadingMaskToDisappear stepKey="waitForLoadingMask5" /> <see selector="{{OrderDetailsInvoicesSection.content}}" variable="orderNumber" stepKey="seeInvoice1"/> <see selector="{{OrderDetailsInvoicesSection.content}}" userInput="John Doe" stepKey="seeInvoice2"/> <click selector="{{OrderDetailsOrderViewSection.information}}" stepKey="clickInformation"/> <see selector="{{OrderDetailsInformationSection.orderStatus}}" userInput="Processing" stepKey="seeOrderStatus"/> <amOnPage url="{{InvoicesPage.url}}" stepKey="goToInvoices"/> - <waitForElementNotVisible selector="{{InvoicesGridSection.spinner}}" time="10" stepKey="waitSpinner4"/> + <waitForLoadingMaskToDisappear stepKey="waitForLoadingMask6" /> <click selector="{{InvoicesGridSection.filter}}" stepKey="clickFilters"/> <fillField selector="{{InvoicesFiltersSection.orderNum}}" variable="orderNumber" stepKey="searchOrderNum2"/> <click selector="{{InvoicesGridSection.firstRow}}" stepKey="clickInvoice2"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml index bc29e788f9025..18b8a30d44193 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/Cest/TemplateCestFile.xml @@ -26,7 +26,6 @@ <severity value=""/> <testCaseId value=""/> <group value=""/> - <env value=""/> </annotations> <!-- ADD TEST STEPS HERE --> </test> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml index 350c228bc5071..440a14c9603f4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml @@ -1,3 +1,4 @@ +<<<<<<< Updated upstream <?xml version="1.0" encoding="UTF-8"?> <!-- /** @@ -21,9 +22,6 @@ <title value="Minimum Test"/> <description value="Minimum Test"/> <group value="example"/> - <env value="chrome"/> - <env value="firefox"/> - <env value="headless"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" stepKey="navigateToAdmin"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" stepKey="fillUsername"/> From 0344c718d8aa6896c5845ff327bb37d27d6ead8e Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Thu, 7 Dec 2017 23:01:38 +0200 Subject: [PATCH 488/653] MQE-592: Test Case Audit - Removing the Robo environment commands. - Adding a Functional command to Robo. - Removing the "skip" group from the CMS test. - Adding the "skip" group to the Configurable Product test. --- dev/tests/acceptance/RoboFile.php | 38 +++++-------------- .../Cms/Cest/AdminCreateCmsPageCest.xml | 1 - .../AdminCreateConfigurableProductCest.xml | 1 + 3 files changed, 10 insertions(+), 30 deletions(-) diff --git a/dev/tests/acceptance/RoboFile.php b/dev/tests/acceptance/RoboFile.php index 60b4d287b7d89..8ae973ea81dc5 100644 --- a/dev/tests/acceptance/RoboFile.php +++ b/dev/tests/acceptance/RoboFile.php @@ -72,65 +72,45 @@ function generateSuite(array $args) } /** - * Run all Functional tests using the Chrome environment. + * Run all Functional tests. * * @return void */ - function chrome() + function functional() { - $this->_exec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --env chrome --skip-group skip'); + $this->_exec('.' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'codecept run functional --skip-group skip'); } /** - * Run all Functional tests using the FireFox environment. - * - * @return void - */ - function firefox() - { - $this->_exec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --env firefox --skip-group skip'); - } - - /** - * Run all Functional tests using the Chrome Headless environment. - * - * @return void - */ - function headless() - { - $this->_exec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --env headless --skip-group skip'); - } - - /** - * Run all Tests with the specified @group tag, excluding @group 'skip', using the Chrome environment. + * Run all Tests with the specified @group tag, excluding @group 'skip'. * * @param string $args * @return void */ function group($args = '') { - $this->taskExec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --verbose --steps --env chrome --skip-group skip --group')->args($args)->run(); + $this->taskExec('.' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'codecept run functional --verbose --steps --skip-group skip --group')->args($args)->run(); } /** - * Run all Functional tests located under the Directory Path provided using the Chrome environment. + * Run all Functional tests located under the Directory Path provided. * * @param string $args * @return void */ function folder($args = '') { - $this->taskExec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run functional --env chrome')->args($args)->run(); + $this->taskExec('.' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'codecept run functional')->args($args)->run(); } /** - * Run all Tests marked with the @group tag 'example', using the Chrome environment. + * Run all Tests marked with the @group tag 'example'. * * @return void */ function example() { - $this->_exec('vendor'. DIRECTORY_SEPARATOR .'bin'. DIRECTORY_SEPARATOR .'codecept run --env chrome --group example --skip-group skip'); + $this->_exec('.' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'codecept run --group example --skip-group skip'); } /** diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml index 8ac19e41e4b73..0a321690dd5d0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/Cest/AdminCreateCmsPageCest.xml @@ -23,7 +23,6 @@ <severity value="CRITICAL"/> <testCaseId value="MAGETWO-25580"/> <group value="cms"/> - <group value="skip"/> </annotations> <amOnPage url="{{AdminLoginPage.url}}" stepKey="navigateToAdmin"/> <fillField selector="{{AdminLoginFormSection.username}}" userInput="{{_ENV.MAGENTO_ADMIN_USERNAME}}" stepKey="fillUsername"/> diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml index a540feba1f559..f861167972882 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/Cest/AdminCreateConfigurableProductCest.xml @@ -27,6 +27,7 @@ <testCaseId value="MAGETWO-26041"/> <group value="configurable"/> <group value="product"/> + <group value="skip"/> </annotations> <amOnPage url="{{AdminCategoryPage.url}}" stepKey="amOnCategoryGridPage"/> <waitForPageLoad time="30" stepKey="waitForPageLoad1"/> From ca831701b2dbc0c1e6a74db394ef4ff7e5ca167f Mon Sep 17 00:00:00 2001 From: John Stennett <john00ivy@gmail.com> Date: Thu, 7 Dec 2017 23:54:35 +0200 Subject: [PATCH 489/653] MQE-592: Test Case Audit - Removing git message in the MinimumTestCest XML. --- .../Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml index 440a14c9603f4..e9c971f7e10fb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/Cest/MinimumTestCest.xml @@ -1,4 +1,3 @@ -<<<<<<< Updated upstream <?xml version="1.0" encoding="UTF-8"?> <!-- /** From 6d7cea4dcadd0888d75cdbb6953259746953c0ff Mon Sep 17 00:00:00 2001 From: Ian Meron <imeron@magento.com> Date: Fri, 8 Dec 2017 00:49:19 +0200 Subject: [PATCH 490/653] MQE-592: Audit Test Cases on Firefox/Chrome on Windows/OSX - add default chrome config to function.dist.yml file --- dev/tests/acceptance/tests/functional.suite.dist.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dev/tests/acceptance/tests/functional.suite.dist.yml b/dev/tests/acceptance/tests/functional.suite.dist.yml index 9bae4de6edb26..f15d66d983a71 100644 --- a/dev/tests/acceptance/tests/functional.suite.dist.yml +++ b/dev/tests/acceptance/tests/functional.suite.dist.yml @@ -35,4 +35,7 @@ modules: port: %SELENIUM_PORT% protocol: %SELENIUM_PROTOCOL% path: %SELENIUM_PATH% + capabilities: + chromeOptions: + args: ["--start-maximized", "--disable-extensions", "--enable-automation"] From cb48c655cca143f8dcfeffd74c4a43644d28a0d6 Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Fri, 8 Dec 2017 15:09:17 +0200 Subject: [PATCH 491/653] MQE-599: Move composer.json, README.MD, etc to CE - updated compose.json files prepared to MFTF release --- dev/tests/acceptance/composer.json | 12 +--- .../AdminNotification/composer.json | 19 +++---- .../AdvancedPricingImportExport/composer.json | 25 ++++---- .../FunctionalTest/Analytics/composer.json | 37 +++++------- .../Authorization/composer.json | 13 ++--- .../FunctionalTest/Authorizenet/composer.json | 25 ++++---- .../FunctionalTest/Backend/composer.json | 43 +++++++------- .../FunctionalTest/Backup/composer.json | 17 ++---- .../FunctionalTest/Braintree/composer.json | 37 ++++++------ .../FunctionalTest/Bundle/composer.json | 41 ++++++------- .../BundleImportExport/composer.json | 21 +++---- .../CacheInvalidate/composer.json | 13 ++--- .../FunctionalTest/Captcha/composer.json | 19 +++---- .../FunctionalTest/Catalog/composer.json | 57 +++++++++---------- .../CatalogAnalytics/composer.json | 31 ++++------ .../CatalogImportExport/composer.json | 29 ++++------ .../CatalogInventory/composer.json | 25 ++++---- .../FunctionalTest/CatalogRule/composer.json | 25 ++++---- .../CatalogRuleConfigurable/composer.json | 17 ++---- .../CatalogSearch/composer.json | 31 +++++----- .../CatalogUrlRewrite/composer.json | 27 ++++----- .../CatalogWidget/composer.json | 27 ++++----- .../FunctionalTest/Checkout/composer.json | 47 +++++++-------- .../CheckoutAgreements/composer.json | 19 +++---- .../Magento/FunctionalTest/Cms/composer.json | 29 ++++------ .../CmsUrlRewrite/composer.json | 17 ++---- .../FunctionalTest/Config/composer.json | 25 ++++---- .../ConfigurableImportExport/composer.json | 21 +++---- .../ConfigurableProduct/composer.json | 33 +++++------ .../ConfigurableProductSales/composer.json | 17 ++---- .../FunctionalTest/Contact/composer.json | 19 +++---- .../FunctionalTest/Cookie/composer.json | 13 ++--- .../Magento/FunctionalTest/Cron/composer.json | 13 ++--- .../CurrencySymbol/composer.json | 21 +++---- .../FunctionalTest/Customer/composer.json | 49 +++++++--------- .../CustomerAnalytics/composer.json | 31 ++++------ .../CustomerImportExport/composer.json | 23 +++----- .../FunctionalTest/Deploy/composer.json | 19 +++---- .../FunctionalTest/Developer/composer.json | 15 ++--- .../Magento/FunctionalTest/Dhl/composer.json | 29 ++++------ .../FunctionalTest/Directory/composer.json | 17 ++---- .../FunctionalTest/Downloadable/composer.json | 43 +++++++------- .../DownloadableImportExport/composer.json | 23 +++----- .../Magento/FunctionalTest/Eav/composer.json | 21 +++---- .../FunctionalTest/Email/composer.json | 23 +++----- .../EncryptionKey/composer.json | 15 ++--- .../FunctionalTest/Fedex/composer.json | 27 ++++----- .../FunctionalTest/GiftMessage/composer.json | 27 ++++----- .../GoogleAdwords/composer.json | 15 ++--- .../GoogleAnalytics/composer.json | 17 ++---- .../GoogleOptimizer/composer.json | 23 +++----- .../FunctionalTest/GraphQl/composer.json | 17 ++---- .../GroupedImportExport/composer.json | 21 +++---- .../GroupedProduct/composer.json | 35 +++++------- .../FunctionalTest/ImportExport/composer.json | 21 +++---- .../FunctionalTest/Indexer/composer.json | 13 ++--- .../InstantPurchase/composer.json | 23 +++----- .../FunctionalTest/Integration/composer.json | 23 +++----- .../LayeredNavigation/composer.json | 15 ++--- .../FunctionalTest/Marketplace/composer.json | 13 ++--- .../FunctionalTest/MediaStorage/composer.json | 17 ++---- .../Magento/FunctionalTest/Msrp/composer.json | 23 +++----- .../Multishipping/composer.json | 27 ++++----- .../NewRelicReporting/composer.json | 23 +++----- .../FunctionalTest/Newsletter/composer.json | 27 ++++----- .../OfflinePayments/composer.json | 15 ++--- .../OfflineShipping/composer.json | 29 ++++------ .../FunctionalTest/PageCache/composer.json | 17 ++---- .../FunctionalTest/Payment/composer.json | 23 +++----- .../FunctionalTest/Paypal/composer.json | 43 +++++++------- .../FunctionalTest/Persistent/composer.json | 23 +++----- .../FunctionalTest/ProductAlert/composer.json | 19 +++---- .../FunctionalTest/ProductVideo/composer.json | 21 +++---- .../FunctionalTest/Quote/composer.json | 39 ++++++------- .../QuoteAnalytics/composer.json | 31 ++++------ .../FunctionalTest/Reports/composer.json | 43 +++++++------- .../FunctionalTest/RequireJs/composer.json | 14 ++--- .../FunctionalTest/Review/composer.json | 27 ++++----- .../ReviewAnalytics/composer.json | 31 ++++------ .../FunctionalTest/Robots/composer.json | 13 ++--- .../Magento/FunctionalTest/Rss/composer.json | 17 ++---- .../Magento/FunctionalTest/Rule/composer.json | 19 +++---- .../FunctionalTest/Sales/composer.json | 57 +++++++++---------- .../SalesAnalytics/composer.json | 31 ++++------ .../SalesInventory/composer.json | 19 +++---- .../FunctionalTest/SalesRule/composer.json | 43 +++++++------- .../SalesSequence/composer.json | 14 ++--- .../FunctionalTest/SampleData/composer.json | 14 ++--- .../FunctionalTest/Search/composer.json | 21 +++---- .../FunctionalTest/Security/composer.json | 15 ++--- .../FunctionalTest/SendFriend/composer.json | 17 ++---- .../FunctionalTest/Shipping/composer.json | 37 ++++++------ .../FunctionalTest/Sitemap/composer.json | 29 ++++------ .../FunctionalTest/Store/composer.json | 21 +++---- .../FunctionalTest/Swagger/composer.json | 14 ++--- .../FunctionalTest/Swatches/composer.json | 29 ++++------ .../SwatchesLayeredNavigation/composer.json | 14 ++--- .../Magento/FunctionalTest/Tax/composer.json | 37 ++++++------ .../TaxImportExport/composer.json | 19 +++---- .../FunctionalTest/Theme/composer.json | 31 +++++----- .../FunctionalTest/Translation/composer.json | 17 ++---- .../Magento/FunctionalTest/Ui/composer.json | 19 +++---- .../Magento/FunctionalTest/Ups/composer.json | 25 ++++---- .../FunctionalTest/UrlRewrite/composer.json | 23 +++----- .../Magento/FunctionalTest/User/composer.json | 23 +++----- .../Magento/FunctionalTest/Usps/composer.json | 27 ++++----- .../FunctionalTest/Variable/composer.json | 17 ++---- .../FunctionalTest/Vault/composer.json | 23 +++----- .../FunctionalTest/Version/composer.json | 14 ++--- .../FunctionalTest/Webapi/composer.json | 19 +++---- .../WebapiSecurity/composer.json | 13 ++--- .../Magento/FunctionalTest/Weee/composer.json | 35 +++++------- .../FunctionalTest/Widget/composer.json | 25 ++++---- .../FunctionalTest/Wishlist/composer.json | 29 ++++------ .../WishlistAnalytics/composer.json | 31 ++++------ 115 files changed, 1097 insertions(+), 1709 deletions(-) diff --git a/dev/tests/acceptance/composer.json b/dev/tests/acceptance/composer.json index 4f8abc17b2516..c6bdf643db098 100755 --- a/dev/tests/acceptance/composer.json +++ b/dev/tests/acceptance/composer.json @@ -1,8 +1,8 @@ { "name": "magento/magento2ce-functional-tests", - "description": "Magento 2 Functional Tests", + "description": "Magento 2 (Open Source) Functional Tests", "type": "project", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" @@ -10,12 +10,6 @@ "config": { "sort-packages": true }, - "repositories": [ - { - "type": "git", - "url": "git@github.com:magento/magento2-functional-testing-framework.git" - } - ], "require": { "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", "codeception/codeception": "~2.3.4", @@ -27,7 +21,7 @@ }, "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\": "tests/functional/Magento" } }, "prefer-stable": true diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json index 5e4c79075ead1..7020a2b9ee9d4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json @@ -5,29 +5,24 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\AdminNotification\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json index c104d3f9cf55d..9a65ed242d6c5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json @@ -5,32 +5,27 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-import-export": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-import-export": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-import-export": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-import-export": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\AdvancedPricingImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/composer.json index 21e343f416927..a5f609f112799 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/composer.json @@ -3,43 +3,32 @@ "description": "Magento 2 Acceptance Test Module Analytics", "repositories": [ { - "type" : "composer", - "url" : "https://repo.magento.com/" + "type": "composer", + "url": "https://repo.magento.com/" } ], + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "dev-master", - "magento/magento2-functional-test-module-config": "dev-master", - "magento/magento2-functional-test-module-integration": "dev-master", - "magento/magento2-functional-test-module-store": "dev-master" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-integration": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\Analytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json index 05e88d90f108a..27b1f27a4c478 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json @@ -5,26 +5,21 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Authorization\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json index 69055e95ddd80..cfae2dac57147 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json @@ -5,32 +5,27 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-payment": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-payment": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Authorizenet\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json index 771aeb4af1b6f..680d5ed031ee2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json @@ -5,41 +5,36 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backup": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-developer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-reports": "1.0.0", - "magento/magento2-functional-test-module-require-js": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-security": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-translation": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0", - "magento/magento2-functional-test-module-user": "1.0.0" + "magento/magento2-functional-test-module-backup": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-developer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-reports": "1.0.0-dev", + "magento/magento2-functional-test-module-require-js": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-security": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-translation": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev", + "magento/magento2-functional-test-module-user": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Backend\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json index 1e1e3e7901e2c..7f67d4c1002ef 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-cron": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-cron": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Backup\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json index b781cadf8bb13..7159b1a4bbf4d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json @@ -5,38 +5,33 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-instant-purchase": "1.0.0", - "magento/magento2-functional-test-module-payment": "1.0.0", - "magento/magento2-functional-test-module-paypal": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0", - "magento/magento2-functional-test-module-vault": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-instant-purchase": "1.0.0-dev", + "magento/magento2-functional-test-module-payment": "1.0.0-dev", + "magento/magento2-functional-test-module-paypal": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev", + "magento/magento2-functional-test-module-vault": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Braintree\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json index 4613c5df9fe29..96dc014d9704c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json @@ -5,40 +5,35 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-catalog-rule": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-gift-message": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-rule": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-gift-message": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Bundle\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json index 86eeb63a91b83..afc00529ac036 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json @@ -5,30 +5,25 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-bundle": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-import-export": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-import-export": "1.0.0" + "magento/magento2-functional-test-module-bundle": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-import-export": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-import-export": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\BundleImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json index ad7a1575265c3..f9d8c204be290 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json @@ -5,26 +5,21 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-page-cache": "1.0.0" + "magento/magento2-functional-test-module-page-cache": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\CacheInvalidate\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json index 7b68ff5beac30..1fcbaeb9f4996 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json @@ -5,29 +5,24 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Captcha\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json index 06739996a4db0..ac8272b7ff754 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json @@ -5,48 +5,43 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-catalog-rule": "1.0.0", - "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-cms": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-indexer": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-msrp": "1.0.0", - "magento/magento2-functional-test-module-page-cache": "1.0.0", - "magento/magento2-functional-test-module-product-alert": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0", - "magento/magento2-functional-test-module-theme": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0", - "magento/magento2-functional-test-module-url-rewrite": "1.0.0", - "magento/magento2-functional-test-module-widget": "1.0.0", - "magento/magento2-functional-test-module-wishlist": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-rule": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-cms": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-indexer": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-msrp": "1.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", + "magento/magento2-functional-test-module-product-alert": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev", + "magento/magento2-functional-test-module-theme": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev", + "magento/magento2-functional-test-module-url-rewrite": "1.0.0-dev", + "magento/magento2-functional-test-module-widget": "1.0.0-dev", + "magento/magento2-functional-test-module-wishlist": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Catalog\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/composer.json index 3b45c0b6b63c7..12ebf6e0befac 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/composer.json @@ -3,40 +3,29 @@ "description": "Magento 2 Acceptance Test Module Catalog Analytics", "repositories": [ { - "type" : "composer", - "url" : "https://repo.magento.com/" + "type": "composer", + "url": "https://repo.magento.com/" } ], + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "dev-master" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\CatalogAnalytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json index dd230d8e4d991..be97c72452b20 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json @@ -5,34 +5,29 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-import-export": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-import-export": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\CatalogImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json index aec0f3f3c8023..cfb006dd9bdeb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json @@ -5,32 +5,27 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\CatalogInventory\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json index eaab47bcdc353..5b8703ba975ce 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json @@ -5,32 +5,27 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-rule": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-rule": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\CatalogRule\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json index 2ef15bd686870..e554887f5b748 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-rule": "1.0.0", - "magento/magento2-functional-test-module-configurable-product": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-rule": "1.0.0-dev", + "magento/magento2-functional-test-module-configurable-product": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\CatalogRuleConfigurable\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json index 36d211448940c..3848ae4829a4e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json @@ -5,35 +5,30 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-search": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-theme": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-search": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-theme": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\CatalogSearch\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json index 22f9c95f296ca..971c4173918d2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json @@ -5,33 +5,28 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-import-export": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-import-export": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0", - "magento/magento2-functional-test-module-url-rewrite": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-import-export": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-import-export": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev", + "magento/magento2-functional-test-module-url-rewrite": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\CatalogUrlRewrite\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json index b5729ebc9ddf3..2dc7b905855bf 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json @@ -5,33 +5,28 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-rule": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-widget": "1.0.0", - "magento/magento2-functional-test-module-wishlist": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-rule": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-widget": "1.0.0-dev", + "magento/magento2-functional-test-module-wishlist": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\CatalogWidget\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json index e8f08e5708800..4c6fd9c49da5a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json @@ -5,43 +5,38 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-msrp": "1.0.0", - "magento/magento2-functional-test-module-page-cache": "1.0.0", - "magento/magento2-functional-test-module-payment": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-sales-rule": "1.0.0", - "magento/magento2-functional-test-module-shipping": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0", - "magento/magento2-functional-test-module-theme": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-msrp": "1.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", + "magento/magento2-functional-test-module-payment": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-sales-rule": "1.0.0-dev", + "magento/magento2-functional-test-module-shipping": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev", + "magento/magento2-functional-test-module-theme": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Checkout\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json index fd86cdd03ac90..f852f4ca4580a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json @@ -5,29 +5,24 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\CheckoutAgreements\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json index 9a2b9f199469b..9420585a31a2e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json @@ -5,34 +5,29 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-email": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-theme": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0", - "magento/magento2-functional-test-module-variable": "1.0.0", - "magento/magento2-functional-test-module-widget": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-email": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-theme": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev", + "magento/magento2-functional-test-module-variable": "1.0.0-dev", + "magento/magento2-functional-test-module-widget": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Cms\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json index 7036bbdcdb3dc..6e7dbf3d4e757 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-cms": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-url-rewrite": "1.0.0" + "magento/magento2-functional-test-module-cms": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-url-rewrite": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\CmsUrlRewrite\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json index 46ee6cfad90a4..2c1965c6a41e6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json @@ -5,32 +5,27 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-cron": "1.0.0", - "magento/magento2-functional-test-module-deploy": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-email": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-cron": "1.0.0-dev", + "magento/magento2-functional-test-module-deploy": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-email": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Config\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json index 8b956bab819e4..2a05a5c46b891 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json @@ -5,30 +5,25 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-import-export": "1.0.0", - "magento/magento2-functional-test-module-configurable-product": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-import-export": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-import-export": "1.0.0-dev", + "magento/magento2-functional-test-module-configurable-product": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-import-export": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\ConfigurableImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json index 77b33a9fc4cd6..9aa7e86c8c9fc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json @@ -5,36 +5,31 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-msrp": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-msrp": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\ConfigurableProduct\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json index 65749fe4fd27e..ba94b03134bae 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\ConfigurableProductSales\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json index 642fec7ae824e..d2fa2c68db652 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json @@ -5,29 +5,24 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-cms": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-cms": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Contact\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json index f120fbf3de4de..100c82d511199 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json @@ -5,26 +5,21 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Cookie\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/composer.json index 7ca41f026252d..cfe9b151565a3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/composer.json @@ -5,26 +5,21 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Cron\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json index 1127d3ea32fda..ae53c529bcc24 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json @@ -5,30 +5,25 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-page-cache": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\CurrencySymbol\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json index 009472f57d651..6d4462eae7a87 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json @@ -5,44 +5,39 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0", - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-integration": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-newsletter": "1.0.0", - "magento/magento2-functional-test-module-page-cache": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-review": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0", - "magento/magento2-functional-test-module-theme": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0", - "magento/magento2-functional-test-module-wishlist": "1.0.0" + "magento/magento2-functional-test-module-authorization": "1.0.0-dev", + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-integration": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-newsletter": "1.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-review": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev", + "magento/magento2-functional-test-module-theme": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev", + "magento/magento2-functional-test-module-wishlist": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Customer\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/composer.json index 2f6c9d54e2b24..24e5dfbe31c65 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/composer.json @@ -3,40 +3,29 @@ "description": "Magento 2 Acceptance Test Module Customer Analytics", "repositories": [ { - "type" : "composer", - "url" : "https://repo.magento.com/" + "type": "composer", + "url": "https://repo.magento.com/" } ], + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-customer": "dev-master" + "magento/magento2-functional-test-module-customer": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\CustomerAnalytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json index d3f21cfc5ae76..096f94ddcd53a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-import-export": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-import-export": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\CustomerImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/composer.json index ebdbc83e2c512..390a3891762e4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/composer.json @@ -5,29 +5,24 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-require-js": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-user": "1.0.0" + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-require-js": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-user": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Deploy\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json index 1075a5415f0bd..94ad99566180b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json @@ -5,27 +5,22 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Developer\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json index 9933fd637171e..d3004456843f0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json @@ -5,34 +5,29 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-shipping": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-shipping": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Dhl\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json index 1485278162dbe..eca5738cc5cda 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Directory\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json index 5622b5246c23c..da969015270fc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json @@ -5,41 +5,36 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-gift-message": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0", - "magento/magento2-functional-test-module-theme": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-gift-message": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev", + "magento/magento2-functional-test-module-theme": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Downloadable\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json index 1be41e6ddcf31..1c2511d9b9dac 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-import-export": "1.0.0", - "magento/magento2-functional-test-module-downloadable": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-import-export": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-import-export": "1.0.0-dev", + "magento/magento2-functional-test-module-downloadable": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-import-export": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\DownloadableImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json index c5f4aeabe232e..8865b797d081e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json @@ -5,30 +5,25 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Eav\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json index 0d13e60cb0e70..bd6d0699d5ddc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-cms": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-theme": "1.0.0", - "magento/magento2-functional-test-module-variable": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-cms": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-theme": "1.0.0-dev", + "magento/magento2-functional-test-module-variable": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Email\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json index 3718de923dafb..347d3e07c5d47 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json @@ -5,27 +5,22 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\EncryptionKey\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json index b55a5d5efad28..bfe94e834c358 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json @@ -5,33 +5,28 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-shipping": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-shipping": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Fedex\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json index 8a65032c600e6..97fdfe9ca40ad 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json @@ -5,33 +5,28 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\GiftMessage\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json index e95d81c5168e1..265dad6924696 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json @@ -5,27 +5,22 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\GoogleAdwords\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json index 46a8d634b7e67..9fc3d17c75dcc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-cookie": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-cookie": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\GoogleAnalytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json index 820a7ae8b101f..5a5542539aa09 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-cms": "1.0.0", - "magento/magento2-functional-test-module-google-analytics": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-cms": "1.0.0-dev", + "magento/magento2-functional-test-module-google-analytics": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\GoogleOptimizer\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/composer.json index ff338103d9d62..b2ddecd987d1c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-webapi": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0" + "magento/magento2-functional-test-module-webapi": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\GraphQl\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json index cd96b7a0efe89..0a0c3364faa66 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json @@ -5,30 +5,25 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-import-export": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-grouped-product": "1.0.0", - "magento/magento2-functional-test-module-import-export": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-import-export": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-grouped-product": "1.0.0-dev", + "magento/magento2-functional-test-module-import-export": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\GroupedImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json index 4305a6bdb52c6..7254d77ba4276 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json @@ -5,37 +5,32 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-msrp": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-msrp": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\GroupedProduct\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json index 20662b4f76d6e..61b4747da1cc2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json @@ -5,30 +5,25 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\ImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json index e8372f1d9be20..3077c21719893 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json @@ -5,26 +5,21 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Indexer\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/composer.json index d525694a3aeb1..0ffaf50c91228 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-vault": "1.0.0" + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-vault": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\InstantPurchase\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json index 3e95a348991e5..8e9d51bc67f9a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0", - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-security": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-user": "1.0.0" + "magento/magento2-functional-test-module-authorization": "1.0.0-dev", + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-security": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-user": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Integration\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json index 7aa8b370aec44..31e6ee720a43e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json @@ -5,27 +5,22 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\LayeredNavigation\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json index 35c4720ce34ed..3c46a479567bf 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json @@ -5,26 +5,21 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Marketplace\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json index c853fdef3e345..7367ba3cc524e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\MediaStorage\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json index 97eaf57c60e87..7941442a7701b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-downloadable": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-grouped-product": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-downloadable": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-grouped-product": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Msrp\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json index e9841884b998b..7173e96e9a79a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json @@ -5,33 +5,28 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-payment": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0" + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-payment": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Multishipping\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json index b7c0fdd7f4316..0f663c82dcc77 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-configurable-product": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-configurable-product": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\NewRelicReporting\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json index 189fa347b45a6..9085ac604e2b7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json @@ -5,33 +5,28 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-cms": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-email": "1.0.0", - "magento/magento2-functional-test-module-require-js": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-widget": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-cms": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-email": "1.0.0-dev", + "magento/magento2-functional-test-module-require-js": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-widget": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Newsletter\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json index f3a5da39e2ae9..0631ae3f7f00c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json @@ -5,27 +5,22 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-payment": "1.0.0" + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-payment": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\OfflinePayments\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json index a3b3a78689911..d3d3ef506a628 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json @@ -5,34 +5,29 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-sales-rule": "1.0.0", - "magento/magento2-functional-test-module-shipping": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-sales-rule": "1.0.0-dev", + "magento/magento2-functional-test-module-shipping": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\OfflineShipping\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json index 47d5f78e37852..4eed53f7def7f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\PageCache\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json index 575fde56a8474..c275682aef4a9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Payment\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json index ad62287e58467..6de5394fe90e2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json @@ -5,41 +5,36 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-instant-purchase": "1.0.0", - "magento/magento2-functional-test-module-payment": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0", - "magento/magento2-functional-test-module-theme": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0", - "magento/magento2-functional-test-module-vault": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-instant-purchase": "1.0.0-dev", + "magento/magento2-functional-test-module-payment": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev", + "magento/magento2-functional-test-module-theme": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev", + "magento/magento2-functional-test-module-vault": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Paypal\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json index 790578527bff7..ac984fed22058 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-cron": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-page-cache": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-cron": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Persistent\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json index 8eba5c0e098c7..cbc9c7f6b8fad 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json @@ -5,29 +5,24 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\ProductAlert\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json index f06f59c18ab33..62efdd818358d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json @@ -5,30 +5,25 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\ProductVideo\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json index 0b114e03a3609..a5d5c9553d3b7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json @@ -5,39 +5,34 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0", - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-payment": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-sales-sequence": "1.0.0", - "magento/magento2-functional-test-module-shipping": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0" + "magento/magento2-functional-test-module-authorization": "1.0.0-dev", + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-payment": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-sales-sequence": "1.0.0-dev", + "magento/magento2-functional-test-module-shipping": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Quote\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/composer.json index b86c40e02fe43..560dd1838ef2d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/composer.json @@ -3,40 +3,29 @@ "description": "Magento 2 Acceptance Test Module Quote Analytics", "repositories": [ { - "type" : "composer", - "url" : "https://repo.magento.com/" + "type": "composer", + "url": "https://repo.magento.com/" } ], + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-quote": "dev-master" + "magento/magento2-functional-test-module-quote": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\QuoteAnalytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json index 8c2b3d0b1740d..d2b61833ece30 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json @@ -5,41 +5,36 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-cms": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-downloadable": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-review": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-sales-rule": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0", - "magento/magento2-functional-test-module-widget": "1.0.0", - "magento/magento2-functional-test-module-wishlist": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-cms": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-downloadable": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-review": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-sales-rule": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev", + "magento/magento2-functional-test-module-widget": "1.0.0-dev", + "magento/magento2-functional-test-module-wishlist": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Reports\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/composer.json index 7b15bff6f9367..ef0b6c466e65b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/composer.json @@ -5,23 +5,18 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\RequireJs\\": "" } }, "extra": { @@ -31,5 +26,6 @@ "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs" ] ] - } + }, + "suggest": null } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json index f63800abaf85f..987d5159bca6c 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json @@ -5,33 +5,28 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-newsletter": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-theme": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-newsletter": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-theme": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Review\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/composer.json index 01772112b17e8..f6cbbd17193a3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/composer.json @@ -3,40 +3,29 @@ "description": "Magento 2 Acceptance Test Module Review Analytics", "repositories": [ { - "type" : "composer", - "url" : "https://repo.magento.com/" + "type": "composer", + "url": "https://repo.magento.com/" } ], + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-review": "dev-master" + "magento/magento2-functional-test-module-review": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\ReviewAnalytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json index 77f360571a480..bbf0fc5edde75 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json @@ -5,26 +5,21 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Robots\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json index 2b166f4b04835..1eb7d17a8a699 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Rss\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json index d6d98a8223465..cc33ad7c9fa4d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json @@ -5,29 +5,24 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Rule\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json index e082d00d109d5..a33c0c8171e25 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json @@ -5,48 +5,43 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0", - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-gift-message": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-payment": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-reports": "1.0.0", - "magento/magento2-functional-test-module-sales-rule": "1.0.0", - "magento/magento2-functional-test-module-sales-sequence": "1.0.0", - "magento/magento2-functional-test-module-shipping": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0", - "magento/magento2-functional-test-module-theme": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0", - "magento/magento2-functional-test-module-widget": "1.0.0", - "magento/magento2-functional-test-module-wishlist": "1.0.0" + "magento/magento2-functional-test-module-authorization": "1.0.0-dev", + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-gift-message": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-payment": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-reports": "1.0.0-dev", + "magento/magento2-functional-test-module-sales-rule": "1.0.0-dev", + "magento/magento2-functional-test-module-sales-sequence": "1.0.0-dev", + "magento/magento2-functional-test-module-shipping": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev", + "magento/magento2-functional-test-module-theme": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev", + "magento/magento2-functional-test-module-widget": "1.0.0-dev", + "magento/magento2-functional-test-module-wishlist": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Sales\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/composer.json index afba02c119a55..1b92df693dc2b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/composer.json @@ -3,40 +3,29 @@ "description": "Magento 2 Acceptance Test Module Sales Analytics", "repositories": [ { - "type" : "composer", - "url" : "https://repo.magento.com/" + "type": "composer", + "url": "https://repo.magento.com/" } ], + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-sales": "dev-master" + "magento/magento2-functional-test-module-sales": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\SalesAnalytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json index 90cb8ae45ff66..dadb08dac12ce 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json @@ -5,29 +5,24 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\SalesInventory\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json index b721a3694b118..c6591bd79bea9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json @@ -5,41 +5,36 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-rule": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-payment": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-reports": "1.0.0", - "magento/magento2-functional-test-module-rule": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-shipping": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0", - "magento/magento2-functional-test-module-widget": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-rule": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-payment": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-reports": "1.0.0-dev", + "magento/magento2-functional-test-module-rule": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-shipping": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev", + "magento/magento2-functional-test-module-widget": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\SalesRule\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json index 3d5819045d257..81c2f16f344d1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json @@ -5,23 +5,18 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\SalesSequence\\": "" } }, "extra": { @@ -31,5 +26,6 @@ "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence" ] ] - } + }, + "suggest": null } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json index 4b3c2ca9c4e08..80426872ef6ad 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json @@ -5,23 +5,18 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\SampleData\\": "" } }, "extra": { @@ -31,5 +26,6 @@ "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData" ] ] - } + }, + "suggest": null } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json index fdaefcc362bd1..446f4303e7602 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json @@ -5,30 +5,25 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog-search": "1.0.0", - "magento/magento2-functional-test-module-reports": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-search": "1.0.0-dev", + "magento/magento2-functional-test-module-reports": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Search\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json index 17380dda33439..4350ca6810b34 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json @@ -5,27 +5,22 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Security\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json index caea753b1a24c..c93c457816d95 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\SendFriend\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json index 18a2ba3d2858a..cd82c92da1975 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json @@ -5,38 +5,33 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-contact": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-payment": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0", - "magento/magento2-functional-test-module-user": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-contact": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-payment": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev", + "magento/magento2-functional-test-module-user": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Shipping\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json index d5453bdecfeea..ef33b62ac5e8e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json @@ -5,34 +5,29 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0", - "magento/magento2-functional-test-module-cms": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-robots": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0-dev", + "magento/magento2-functional-test-module-cms": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-robots": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Sitemap\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json index 39d3cb9d58399..7e768c4b90ec8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json @@ -5,30 +5,25 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Store\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json index 8dc3c358c462f..213b3d1bdff61 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json @@ -5,23 +5,18 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Swagger\\": "" } }, "extra": { @@ -31,5 +26,6 @@ "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger" ] ] - } + }, + "suggest": null } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json index 79689cd586a18..3cfab737aa48e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json @@ -5,34 +5,29 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-configurable-product": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-theme": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-configurable-product": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-theme": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Swatches\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json index 16c1ef4eab8fb..bb7df9b687e1e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json @@ -5,23 +5,18 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\SwatchesLayeredNavigation\\": "" } }, "extra": { @@ -31,5 +26,6 @@ "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation" ] ] - } + }, + "suggest": null } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json index 29578354bc925..cbcbbea1f2519 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json @@ -5,38 +5,33 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-page-cache": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-reports": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-shipping": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-reports": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-shipping": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Tax\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json index ee998afdc6e18..b9c550fda243d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json @@ -5,29 +5,24 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\TaxImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json index 2a05bb1be1e79..4fcba7e8baba3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json @@ -5,35 +5,30 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-cms": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-media-storage": "1.0.0", - "magento/magento2-functional-test-module-require-js": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0", - "magento/magento2-functional-test-module-widget": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-cms": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", + "magento/magento2-functional-test-module-require-js": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev", + "magento/magento2-functional-test-module-widget": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Theme\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json index 8a9e1d516cddf..9f1ff7470fea9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-developer": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-developer": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Translation\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json index 5144284192f28..3411d25cdb8ee 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json @@ -5,29 +5,24 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0", - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-user": "1.0.0" + "magento/magento2-functional-test-module-authorization": "1.0.0-dev", + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-user": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Ui\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json index 86e2ccf62f3fa..e3100ca49bcf5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json @@ -5,32 +5,27 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-shipping": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-shipping": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Ups\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json index 9343f1a448c8f..4ecae5ca48043 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0", - "magento/magento2-functional-test-module-cms": "1.0.0", - "magento/magento2-functional-test-module-cms-url-rewrite": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0-dev", + "magento/magento2-functional-test-module-cms": "1.0.0-dev", + "magento/magento2-functional-test-module-cms-url-rewrite": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\UrlRewrite\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json index b9fc97cbccb2f..945e3383a94e0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0", - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-email": "1.0.0", - "magento/magento2-functional-test-module-integration": "1.0.0", - "magento/magento2-functional-test-module-security": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-authorization": "1.0.0-dev", + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-email": "1.0.0-dev", + "magento/magento2-functional-test-module-integration": "1.0.0-dev", + "magento/magento2-functional-test-module-security": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\User\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/composer.json index d34034b84d456..c8815b5d49010 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/composer.json @@ -5,33 +5,28 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-config": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-shipping": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-config": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-shipping": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Usps\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json index 772dfd4cac66a..4886a968b11da 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json @@ -5,28 +5,23 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-email": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-email": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Variable\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json index 72f78e07e54a6..51bbeb652ab79 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json @@ -5,31 +5,26 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-payment": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-payment": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Vault\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json index 622210dd19457..119aa2fca5461 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json @@ -5,23 +5,18 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Version\\": "" } }, "extra": { @@ -31,5 +26,6 @@ "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version" ] ] - } + }, + "suggest": null } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json index 727fba2cf164a..e9a12a1c055e6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json @@ -5,29 +5,24 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0", - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-integration": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0" + "magento/magento2-functional-test-module-authorization": "1.0.0-dev", + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-integration": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Webapi\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json index f5de750e36d8b..bda7e23dacbdf 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json @@ -5,26 +5,21 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-webapi": "1.0.0" + "magento/magento2-functional-test-module-webapi": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\WebapiSecurity\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json index 29cff64dff511..1698a517349ff 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json @@ -5,37 +5,32 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-directory": "1.0.0", - "magento/magento2-functional-test-module-eav": "1.0.0", - "magento/magento2-functional-test-module-page-cache": "1.0.0", - "magento/magento2-functional-test-module-quote": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-tax": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-directory": "1.0.0-dev", + "magento/magento2-functional-test-module-eav": "1.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", + "magento/magento2-functional-test-module-quote": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-tax": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Weee\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json index aed96d0056edd..0fdf707a3befd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json @@ -5,32 +5,27 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-cms": "1.0.0", - "magento/magento2-functional-test-module-email": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-theme": "1.0.0", - "magento/magento2-functional-test-module-variable": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-cms": "1.0.0-dev", + "magento/magento2-functional-test-module-email": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-theme": "1.0.0-dev", + "magento/magento2-functional-test-module-variable": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Widget\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json index 496419cea221e..1c8dcf9dbdee4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json @@ -5,34 +5,29 @@ "sort-packages": true }, "require": { - "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", - "codeception/codeception": "~2.3.4", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "vlucas/phpdotenv": "~2.4" + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0", - "magento/magento2-functional-test-module-catalog": "1.0.0", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0", - "magento/magento2-functional-test-module-checkout": "1.0.0", - "magento/magento2-functional-test-module-customer": "1.0.0", - "magento/magento2-functional-test-module-rss": "1.0.0", - "magento/magento2-functional-test-module-sales": "1.0.0", - "magento/magento2-functional-test-module-store": "1.0.0", - "magento/magento2-functional-test-module-ui": "1.0.0" + "magento/magento2-functional-test-module-backend": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog": "1.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", + "magento/magento2-functional-test-module-checkout": "1.0.0-dev", + "magento/magento2-functional-test-module-customer": "1.0.0-dev", + "magento/magento2-functional-test-module-rss": "1.0.0-dev", + "magento/magento2-functional-test-module-sales": "1.0.0-dev", + "magento/magento2-functional-test-module-store": "1.0.0-dev", + "magento/magento2-functional-test-module-ui": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "1.0.0", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "psr-4": { - "Magento\\": ["tests/functional/Magento", "generated/Magento"] + "Magento\\Wishlist\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/composer.json index 19dba845461e7..0c09eacb90df2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/composer.json @@ -3,40 +3,29 @@ "description": "Magento 2 Acceptance Test Module WishlistAnalytics", "repositories": [ { - "type" : "composer", - "url" : "https://repo.magento.com/" + "type": "composer", + "url": "https://repo.magento.com/" } ], + "config": { + "sort-packages": true + }, "require": { - "php": "~7.0", - "codeception/codeception": "2.2|2.3", - "allure-framework/allure-codeception": "dev-master", - "consolidation/robo": "^1.0.0", - "henrikbjorn/lurker": "^1.2", - "vlucas/phpdotenv": "~2.4", - "magento/magento2-functional-testing-framework": "dev-develop" + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-wishlist": "dev-master" + "magento/magento2-functional-test-module-wishlist": "1.0.0-dev" }, "type": "magento2-test-module", - "version": "dev-master", + "version": "1.0.0-dev", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { - "psr-0": { - "Yandex": "vendor/allure-framework/allure-codeception/src/" - }, "psr-4": { - "Magento\\FunctionalTestingFramework\\": [ - "vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework" - ], - "Magento\\FunctionalTest\\": [ - "tests/functional/Magento/FunctionalTest", - "generated/Magento/FunctionalTest" - ] + "Magento\\WishlistAnalytics\\": "" } }, "extra": { From 5573e174e9fb8e9d8a4cb7274bb35ed4bfa2bfab Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Fri, 8 Dec 2017 16:29:34 +0200 Subject: [PATCH 492/653] MQE-599: Move composer.json, README.MD, etc to CE - updated compose.json files prepared to MFTF release --- .../AdminNotification/composer.json | 22 +++---- .../AdvancedPricingImportExport/composer.json | 28 ++++----- .../FunctionalTest/Analytics/composer.json | 26 ++++---- .../Authorization/composer.json | 16 ++--- .../FunctionalTest/Authorizenet/composer.json | 28 ++++----- .../FunctionalTest/Backend/composer.json | 46 +++++++------- .../FunctionalTest/Backup/composer.json | 20 +++---- .../FunctionalTest/Braintree/composer.json | 40 ++++++------- .../FunctionalTest/Bundle/composer.json | 44 +++++++------- .../BundleImportExport/composer.json | 24 ++++---- .../CacheInvalidate/composer.json | 16 ++--- .../FunctionalTest/Captcha/composer.json | 22 +++---- .../FunctionalTest/Catalog/composer.json | 60 +++++++++---------- .../CatalogAnalytics/composer.json | 20 +++---- .../CatalogImportExport/composer.json | 32 +++++----- .../CatalogInventory/composer.json | 28 ++++----- .../FunctionalTest/CatalogRule/composer.json | 28 ++++----- .../CatalogRuleConfigurable/composer.json | 20 +++---- .../CatalogSearch/composer.json | 34 +++++------ .../CatalogUrlRewrite/composer.json | 30 +++++----- .../CatalogWidget/composer.json | 30 +++++----- .../FunctionalTest/Checkout/composer.json | 50 ++++++++-------- .../CheckoutAgreements/composer.json | 22 +++---- .../Magento/FunctionalTest/Cms/composer.json | 32 +++++----- .../CmsUrlRewrite/composer.json | 20 +++---- .../FunctionalTest/Config/composer.json | 28 ++++----- .../ConfigurableImportExport/README.md | 3 + .../ConfigurableImportExport/composer.json | 24 ++++---- .../ConfigurableProduct/composer.json | 36 +++++------ .../ConfigurableProductSales/composer.json | 20 +++---- .../FunctionalTest/Contact/composer.json | 22 +++---- .../FunctionalTest/Cookie/composer.json | 16 ++--- .../Magento/FunctionalTest/Cron/composer.json | 16 ++--- .../CurrencySymbol/composer.json | 24 ++++---- .../FunctionalTest/Customer/composer.json | 52 ++++++++-------- .../CustomerAnalytics/composer.json | 20 +++---- .../CustomerImportExport/composer.json | 26 ++++---- .../FunctionalTest/Deploy/composer.json | 22 +++---- .../FunctionalTest/Developer/composer.json | 18 +++--- .../Magento/FunctionalTest/Dhl/composer.json | 32 +++++----- .../FunctionalTest/Directory/composer.json | 20 +++---- .../FunctionalTest/Downloadable/composer.json | 46 +++++++------- .../DownloadableImportExport/composer.json | 26 ++++---- .../Magento/FunctionalTest/Eav/composer.json | 24 ++++---- .../FunctionalTest/Email/composer.json | 26 ++++---- .../EncryptionKey/composer.json | 18 +++--- .../FunctionalTest/Fedex/composer.json | 30 +++++----- .../FunctionalTest/GiftMessage/composer.json | 30 +++++----- .../GoogleAdwords/composer.json | 18 +++--- .../GoogleAnalytics/composer.json | 20 +++---- .../GoogleOptimizer/composer.json | 26 ++++---- .../FunctionalTest/GraphQl/composer.json | 20 +++---- .../GroupedImportExport/composer.json | 24 ++++---- .../GroupedProduct/composer.json | 38 ++++++------ .../FunctionalTest/ImportExport/composer.json | 24 ++++---- .../FunctionalTest/Indexer/composer.json | 16 ++--- .../InstantPurchase/composer.json | 26 ++++---- .../FunctionalTest/Integration/composer.json | 26 ++++---- .../LayeredNavigation/composer.json | 18 +++--- .../FunctionalTest/Marketplace/composer.json | 16 ++--- .../FunctionalTest/MediaStorage/composer.json | 20 +++---- .../Magento/FunctionalTest/Msrp/composer.json | 26 ++++---- .../Multishipping/composer.json | 30 +++++----- .../NewRelicReporting/composer.json | 26 ++++---- .../FunctionalTest/Newsletter/composer.json | 30 +++++----- .../OfflinePayments/composer.json | 18 +++--- .../OfflineShipping/composer.json | 32 +++++----- .../FunctionalTest/PageCache/composer.json | 20 +++---- .../FunctionalTest/Payment/composer.json | 26 ++++---- .../FunctionalTest/Paypal/composer.json | 46 +++++++------- .../FunctionalTest/Persistent/composer.json | 26 ++++---- .../FunctionalTest/ProductAlert/composer.json | 22 +++---- .../FunctionalTest/ProductVideo/composer.json | 24 ++++---- .../FunctionalTest/Quote/composer.json | 42 ++++++------- .../QuoteAnalytics/composer.json | 20 +++---- .../FunctionalTest/Reports/composer.json | 46 +++++++------- .../FunctionalTest/RequireJs/composer.json | 17 +++--- .../FunctionalTest/Review/composer.json | 30 +++++----- .../ReviewAnalytics/composer.json | 20 +++---- .../FunctionalTest/Robots/composer.json | 16 ++--- .../Magento/FunctionalTest/Rss/composer.json | 20 +++---- .../Magento/FunctionalTest/Rule/composer.json | 22 +++---- .../FunctionalTest/Sales/composer.json | 60 +++++++++---------- .../SalesAnalytics/composer.json | 20 +++---- .../SalesInventory/composer.json | 22 +++---- .../FunctionalTest/SalesRule/composer.json | 46 +++++++------- .../SalesSequence/composer.json | 17 +++--- .../FunctionalTest/SampleData/composer.json | 17 +++--- .../SampleTemplates/LICENSE.txt | 48 +++++++++++++++ .../SampleTemplates/LICENSE_AFL.txt | 48 +++++++++++++++ .../FunctionalTest/SampleTemplates/README.md | 3 + .../SampleTemplates/composer.json | 30 ++++++++++ .../FunctionalTest/SampleTests/LICENSE.txt | 48 +++++++++++++++ .../SampleTests/LICENSE_AFL.txt | 48 +++++++++++++++ .../FunctionalTest/SampleTests/README.md | 3 + .../FunctionalTest/SampleTests/composer.json | 30 ++++++++++ .../FunctionalTest/Search/composer.json | 24 ++++---- .../FunctionalTest/Security/composer.json | 18 +++--- .../FunctionalTest/SendFriend/composer.json | 20 +++---- .../FunctionalTest/Shipping/composer.json | 40 ++++++------- .../FunctionalTest/Sitemap/composer.json | 32 +++++----- .../FunctionalTest/Store/composer.json | 24 ++++---- .../FunctionalTest/Swagger/composer.json | 17 +++--- .../FunctionalTest/Swatches/composer.json | 32 +++++----- .../SwatchesLayeredNavigation/composer.json | 17 +++--- .../Magento/FunctionalTest/Tax/composer.json | 40 ++++++------- .../TaxImportExport/composer.json | 22 +++---- .../FunctionalTest/Theme/composer.json | 34 +++++------ .../FunctionalTest/Translation/composer.json | 20 +++---- .../Magento/FunctionalTest/Ui/composer.json | 22 +++---- .../Magento/FunctionalTest/Ups/composer.json | 28 ++++----- .../FunctionalTest/UrlRewrite/composer.json | 26 ++++---- .../Magento/FunctionalTest/User/composer.json | 26 ++++---- .../Magento/FunctionalTest/Usps/composer.json | 30 +++++----- .../FunctionalTest/Variable/composer.json | 20 +++---- .../FunctionalTest/Vault/composer.json | 26 ++++---- .../FunctionalTest/Version/composer.json | 17 +++--- .../FunctionalTest/Webapi/composer.json | 22 +++---- .../WebapiSecurity/composer.json | 16 ++--- .../Magento/FunctionalTest/Weee/composer.json | 38 ++++++------ .../FunctionalTest/Widget/composer.json | 28 ++++----- .../FunctionalTest/Wishlist/composer.json | 32 +++++----- .../WishlistAnalytics/composer.json | 20 +++---- 123 files changed, 1756 insertions(+), 1543 deletions(-) create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/composer.json create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/LICENSE.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/LICENSE_AFL.txt create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/README.md create mode 100644 dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/composer.json diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json index 7020a2b9ee9d4..31ce654f6c780 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdminNotification/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-admin-notification", "description": "Magento 2 Functional Test Module Admin Notification", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,20 +15,14 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\AdminNotification\\": "" + "Magento\\FunctionalTest\\AdminNotification\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json index 9a65ed242d6c5..7cba5e091bc0a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/AdvancedPricingImportExport/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-advanced-pricing-import-export", "description": "Magento 2 Functional Test Module Advanced Pricing Import Export", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,23 +15,17 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-import-export": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-import-export": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-import-export": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-import-export": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\AdvancedPricingImportExport\\": "" + "Magento\\FunctionalTest\\AdvancedPricingImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/composer.json index a5f609f112799..9245dc6e40766 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Analytics/composer.json @@ -1,11 +1,11 @@ { "name": "magento/magento2-functional-test-module-analytics", "description": "Magento 2 Acceptance Test Module Analytics", - "repositories": [ - { - "type": "composer", - "url": "https://repo.magento.com/" - } + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" ], "config": { "sort-packages": true @@ -15,20 +15,14 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-integration": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-integration": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Analytics\\": "" + "Magento\\FunctionalTest\\Analytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json index 27b1f27a4c478..e69220b9ca44d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorization/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-authorization", "description": "Magento 2 Functional Test Module Authorization", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Authorization\\": "" + "Magento\\FunctionalTest\\Authorization\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json index cfae2dac57147..9b67e3ea37154 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Authorizenet/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-authorizenet", "description": "Magento 2 Functional Test Module Authorizenet", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,23 +15,17 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-payment": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-payment": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Authorizenet\\": "" + "Magento\\FunctionalTest\\Authorizenet\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json index 680d5ed031ee2..ffebc321c4dee 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backend/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-backend", "description": "Magento 2 Functional Test Module Backend", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,32 +15,26 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backup": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-developer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-reports": "1.0.0-dev", - "magento/magento2-functional-test-module-require-js": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-security": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-translation": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev", - "magento/magento2-functional-test-module-user": "1.0.0-dev" + "magento/magento2-functional-test-module-backup": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-developer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-reports": "100.0.0-dev", + "magento/magento2-functional-test-module-require-js": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-security": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-translation": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev", + "magento/magento2-functional-test-module-user": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Backend\\": "" + "Magento\\FunctionalTest\\Backend\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json index 7f67d4c1002ef..d4f0c49d2b1a8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Backup/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-backup", "description": "Magento 2 Functional Test Module Backup", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-cron": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-cron": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Backup\\": "" + "Magento\\FunctionalTest\\Backup\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json index 7159b1a4bbf4d..e66481c501f06 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Braintree/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-braintree", "description": "Magento 2 Functional Test Module Braintree", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,29 +15,23 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-instant-purchase": "1.0.0-dev", - "magento/magento2-functional-test-module-payment": "1.0.0-dev", - "magento/magento2-functional-test-module-paypal": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev", - "magento/magento2-functional-test-module-vault": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-instant-purchase": "100.0.0-dev", + "magento/magento2-functional-test-module-payment": "100.0.0-dev", + "magento/magento2-functional-test-module-paypal": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev", + "magento/magento2-functional-test-module-vault": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Braintree\\": "" + "Magento\\FunctionalTest\\Braintree\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json index 96dc014d9704c..cab7dce6a95e5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Bundle/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-bundle", "description": "Magento 2 Functional Test Module Bundle", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,31 +15,25 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-rule": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-gift-message": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-rule": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-gift-message": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Bundle\\": "" + "Magento\\FunctionalTest\\Bundle\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json index afc00529ac036..9fd81822a1803 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/BundleImportExport/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-bundle-import-export", "description": "Magento 2 Functional Test Module Bundle Import Export", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,21 +15,15 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-bundle": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-import-export": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-import-export": "1.0.0-dev" + "magento/magento2-functional-test-module-bundle": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-import-export": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-import-export": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\BundleImportExport\\": "" + "Magento\\FunctionalTest\\BundleImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json index f9d8c204be290..e8c58ac7a2d0a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CacheInvalidate/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-cache-invalidate", "description": "Magento 2 Functional Test Module Cache Invalidate", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-page-cache": "1.0.0-dev" + "magento/magento2-functional-test-module-page-cache": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CacheInvalidate\\": "" + "Magento\\FunctionalTest\\CacheInvalidate\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json index 1fcbaeb9f4996..5c3f0acfc8fcb 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Captcha/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-captcha", "description": "Magento 2 Functional Test Module Captcha", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,20 +15,14 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Captcha\\": "" + "Magento\\FunctionalTest\\Captcha\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json index ac8272b7ff754..a1dc628f04c29 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-catalog", "description": "Magento 2 Functional Test Module Catalog", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,39 +15,33 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-rule": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-cms": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-indexer": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-msrp": "1.0.0-dev", - "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", - "magento/magento2-functional-test-module-product-alert": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev", - "magento/magento2-functional-test-module-theme": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev", - "magento/magento2-functional-test-module-url-rewrite": "1.0.0-dev", - "magento/magento2-functional-test-module-widget": "1.0.0-dev", - "magento/magento2-functional-test-module-wishlist": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-rule": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-url-rewrite": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-cms": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-indexer": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-msrp": "100.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "100.0.0-dev", + "magento/magento2-functional-test-module-product-alert": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev", + "magento/magento2-functional-test-module-theme": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev", + "magento/magento2-functional-test-module-url-rewrite": "100.0.0-dev", + "magento/magento2-functional-test-module-widget": "100.0.0-dev", + "magento/magento2-functional-test-module-wishlist": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Catalog\\": "" + "Magento\\FunctionalTest\\Catalog\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/composer.json index 12ebf6e0befac..b742218731f84 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogAnalytics/composer.json @@ -1,11 +1,11 @@ { "name": "magento/magento2-functional-test-module-catalog-analytics", "description": "Magento 2 Acceptance Test Module Catalog Analytics", - "repositories": [ - { - "type": "composer", - "url": "https://repo.magento.com/" - } + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" ], "config": { "sort-packages": true @@ -15,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CatalogAnalytics\\": "" + "Magento\\FunctionalTest\\CatalogAnalytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json index be97c72452b20..3f1d805ca2757 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogImportExport/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-catalog-import-export", "description": "Magento 2 Functional Test Module Catalog Import Export", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,25 +15,19 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-import-export": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-url-rewrite": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-import-export": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CatalogImportExport\\": "" + "Magento\\FunctionalTest\\CatalogImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json index cfb006dd9bdeb..4060f8906efd7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogInventory/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-catalog-inventory", "description": "Magento 2 Functional Test Module Catalog Inventory", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,23 +15,17 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CatalogInventory\\": "" + "Magento\\FunctionalTest\\CatalogInventory\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json index 5b8703ba975ce..3d0fb94a4df09 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRule/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-catalog-rule", "description": "Magento 2 Functional Test Module Catalog Rule", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,23 +15,17 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-rule": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-rule": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CatalogRule\\": "" + "Magento\\FunctionalTest\\CatalogRule\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json index e554887f5b748..0bee96876c84d 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogRuleConfigurable/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-catalog-rule-configurable", "description": "Magento 2 Functional Test Module Catalog Rule Configurable", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-rule": "1.0.0-dev", - "magento/magento2-functional-test-module-configurable-product": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-rule": "100.0.0-dev", + "magento/magento2-functional-test-module-configurable-product": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CatalogRuleConfigurable\\": "" + "Magento\\FunctionalTest\\CatalogRuleConfigurable\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json index 3848ae4829a4e..0115d362d3b7f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogSearch/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-catalog-search", "description": "Magento 2 Functional Test Module Catalog Search", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,26 +15,20 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-search": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-theme": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-search": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-theme": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CatalogSearch\\": "" + "Magento\\FunctionalTest\\CatalogSearch\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json index 971c4173918d2..a51be94ebafb7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogUrlRewrite/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-catalog-url-rewrite", "description": "Magento 2 Functional Test Module Catalog Url Rewrite", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,24 +15,18 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-import-export": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-import-export": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev", - "magento/magento2-functional-test-module-url-rewrite": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-import-export": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-import-export": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev", + "magento/magento2-functional-test-module-url-rewrite": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CatalogUrlRewrite\\": "" + "Magento\\FunctionalTest\\CatalogUrlRewrite\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json index 2dc7b905855bf..8ff933bd50a9a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CatalogWidget/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-catalog-widget", "description": "Magento 2 Functional Test Module Catalog Widget", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,24 +15,18 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-rule": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-widget": "1.0.0-dev", - "magento/magento2-functional-test-module-wishlist": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-rule": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-widget": "100.0.0-dev", + "magento/magento2-functional-test-module-wishlist": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CatalogWidget\\": "" + "Magento\\FunctionalTest\\CatalogWidget\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json index 4c6fd9c49da5a..f84ed60ac922e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Checkout/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-checkout", "description": "Magento 2 Functional Test Module Checkout", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,34 +15,28 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-msrp": "1.0.0-dev", - "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", - "magento/magento2-functional-test-module-payment": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-sales-rule": "1.0.0-dev", - "magento/magento2-functional-test-module-shipping": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev", - "magento/magento2-functional-test-module-theme": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-msrp": "100.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "100.0.0-dev", + "magento/magento2-functional-test-module-payment": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-sales-rule": "100.0.0-dev", + "magento/magento2-functional-test-module-shipping": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev", + "magento/magento2-functional-test-module-theme": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Checkout\\": "" + "Magento\\FunctionalTest\\Checkout\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json index f852f4ca4580a..54f8e269d39a2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CheckoutAgreements/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-checkout-agreements", "description": "Magento 2 Functional Test Module Checkout Agreements", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,20 +15,14 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CheckoutAgreements\\": "" + "Magento\\FunctionalTest\\CheckoutAgreements\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json index 9420585a31a2e..5f55a2cabb350 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cms/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-cms", "description": "Magento 2 Functional Test Module Cms", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,25 +15,19 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-email": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-theme": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev", - "magento/magento2-functional-test-module-variable": "1.0.0-dev", - "magento/magento2-functional-test-module-widget": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-email": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-theme": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev", + "magento/magento2-functional-test-module-variable": "100.0.0-dev", + "magento/magento2-functional-test-module-widget": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Cms\\": "" + "Magento\\FunctionalTest\\Cms\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json index 6e7dbf3d4e757..764444c8e7235 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CmsUrlRewrite/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-cms-url-rewrite", "description": "Magento 2 Functional Test Module Cms Url Rewrite", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-cms": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-url-rewrite": "1.0.0-dev" + "magento/magento2-functional-test-module-cms": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-url-rewrite": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CmsUrlRewrite\\": "" + "Magento\\FunctionalTest\\CmsUrlRewrite\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json index 2c1965c6a41e6..c6aa7ca8ab453 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Config/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-config", "description": "Magento 2 Functional Test Module Config", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,23 +15,17 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-cron": "1.0.0-dev", - "magento/magento2-functional-test-module-deploy": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-email": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-cron": "100.0.0-dev", + "magento/magento2-functional-test-module-deploy": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-email": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Config\\": "" + "Magento\\FunctionalTest\\Config\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/README.md new file mode 100644 index 0000000000000..1cf979955a3cd --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/README.md @@ -0,0 +1,3 @@ +# Magento 2 Functional Tests + +The Functional Tests Module for **Magento_ConfigurableImportExport** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json index 2a05a5c46b891..1b2fb5e35ae35 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableImportExport/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-configurable-import-export", "description": "Magento 2 Functional Test Module Configurable Import Export", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,21 +15,15 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-import-export": "1.0.0-dev", - "magento/magento2-functional-test-module-configurable-product": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-import-export": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-import-export": "100.0.0-dev", + "magento/magento2-functional-test-module-configurable-product": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-import-export": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\ConfigurableImportExport\\": "" + "Magento\\FunctionalTest\\ConfigurableImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json index 9aa7e86c8c9fc..580578d805f40 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProduct/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-configurable-product", "description": "Magento 2 Functional Test Module Configurable Product", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,27 +15,21 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-msrp": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-msrp": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\ConfigurableProduct\\": "" + "Magento\\FunctionalTest\\ConfigurableProduct\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json index ba94b03134bae..eb1f9891fa068 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ConfigurableProductSales/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-configurable-product-sales", "description": "Magento 2 Functional Test Module Configurable Product Sales", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\ConfigurableProductSales\\": "" + "Magento\\FunctionalTest\\ConfigurableProductSales\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json index d2fa2c68db652..55311d1c6fcd0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Contact/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-contact", "description": "Magento 2 Functional Test Module Contact", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,20 +15,14 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-cms": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-cms": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Contact\\": "" + "Magento\\FunctionalTest\\Contact\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json index 100c82d511199..2fd3ec251ae38 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cookie/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-cookie", "description": "Magento 2 Functional Test Module Cookie", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Cookie\\": "" + "Magento\\FunctionalTest\\Cookie\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/composer.json index cfe9b151565a3..7982a6dd9c4e8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Cron/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-cron", "description": "Magento 2 Functional Test Module Cron", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Cron\\": "" + "Magento\\FunctionalTest\\Cron\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json index ae53c529bcc24..abd3fe78abde0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CurrencySymbol/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-currency-symbol", "description": "Magento 2 Functional Test Module Currency Symbol", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,21 +15,15 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CurrencySymbol\\": "" + "Magento\\FunctionalTest\\CurrencySymbol\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json index 6d4462eae7a87..619e4f895373b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Customer/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-customer", "description": "Magento 2 Functional Test Module Customer", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,35 +15,29 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0-dev", - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-integration": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-newsletter": "1.0.0-dev", - "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-review": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev", - "magento/magento2-functional-test-module-theme": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev", - "magento/magento2-functional-test-module-wishlist": "1.0.0-dev" + "magento/magento2-functional-test-module-authorization": "100.0.0-dev", + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-integration": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-newsletter": "100.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-review": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev", + "magento/magento2-functional-test-module-theme": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev", + "magento/magento2-functional-test-module-wishlist": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Customer\\": "" + "Magento\\FunctionalTest\\Customer\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/composer.json index 24e5dfbe31c65..84a73e12eb4ff 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerAnalytics/composer.json @@ -1,11 +1,11 @@ { "name": "magento/magento2-functional-test-module-customer-analytics", "description": "Magento 2 Acceptance Test Module Customer Analytics", - "repositories": [ - { - "type": "composer", - "url": "https://repo.magento.com/" - } + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" ], "config": { "sort-packages": true @@ -15,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-customer": "1.0.0-dev" + "magento/magento2-functional-test-module-customer": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CustomerAnalytics\\": "" + "Magento\\FunctionalTest\\CustomerAnalytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json index 096f94ddcd53a..dfa5a2761e5a4 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/CustomerImportExport/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-customer-import-export", "description": "Magento 2 Functional Test Module Customer Import Export", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-import-export": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-import-export": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\CustomerImportExport\\": "" + "Magento\\FunctionalTest\\CustomerImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/composer.json index 390a3891762e4..8f5f42b11e85a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Deploy/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-deploy", "description": "Magento 2 Functional Test Module Deploy", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,20 +15,14 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-require-js": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-user": "1.0.0-dev" + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-require-js": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-user": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Deploy\\": "" + "Magento\\FunctionalTest\\Deploy\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json index 94ad99566180b..ed52481f544f0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Developer/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-developer", "description": "Magento 2 Functional Test Module Developer", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,18 +15,12 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Developer\\": "" + "Magento\\FunctionalTest\\Developer\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json index d3004456843f0..a7c5fd0f6cf5f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Dhl/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-dhl", "description": "Magento 2 Functional Test Module Dhl", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,25 +15,19 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-shipping": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-shipping": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Dhl\\": "" + "Magento\\FunctionalTest\\Dhl\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json index eca5738cc5cda..9efba5d2592bd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Directory/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-directory", "description": "Magento 2 Functional Test Module Directory", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Directory\\": "" + "Magento\\FunctionalTest\\Directory\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json index da969015270fc..242492bc7e013 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Downloadable/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-downloadable", "description": "Magento 2 Functional Test Module Downloadable", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,32 +15,26 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-gift-message": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev", - "magento/magento2-functional-test-module-theme": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-gift-message": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev", + "magento/magento2-functional-test-module-theme": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Downloadable\\": "" + "Magento\\FunctionalTest\\Downloadable\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json index 1c2511d9b9dac..1d45efe751cc3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/DownloadableImportExport/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-downloadable-import-export", "description": "Magento 2 Functional Test Module Downloadable Import Export", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-import-export": "1.0.0-dev", - "magento/magento2-functional-test-module-downloadable": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-import-export": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-import-export": "100.0.0-dev", + "magento/magento2-functional-test-module-downloadable": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-import-export": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\DownloadableImportExport\\": "" + "Magento\\FunctionalTest\\DownloadableImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json index 8865b797d081e..457543c13e020 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Eav/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-eav", "description": "Magento 2 Functional Test Module Eav", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,21 +15,15 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Eav\\": "" + "Magento\\FunctionalTest\\Eav\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json index bd6d0699d5ddc..0f8d5b27a3ed5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Email/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-email", "description": "Magento 2 Functional Test Module Email", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-cms": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-theme": "1.0.0-dev", - "magento/magento2-functional-test-module-variable": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-cms": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-theme": "100.0.0-dev", + "magento/magento2-functional-test-module-variable": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Email\\": "" + "Magento\\FunctionalTest\\Email\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json index 347d3e07c5d47..4e8debbc89755 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/EncryptionKey/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-encryption-key", "description": "Magento 2 Functional Test Module Encryption Key", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,18 +15,12 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\EncryptionKey\\": "" + "Magento\\FunctionalTest\\EncryptionKey\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json index bfe94e834c358..ecc4a6e388683 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Fedex/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-fedex", "description": "Magento 2 Functional Test Module Fedex", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,24 +15,18 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-shipping": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-shipping": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Fedex\\": "" + "Magento\\FunctionalTest\\Fedex\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json index 97fdfe9ca40ad..15bc979a7e7b8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GiftMessage/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-gift-message", "description": "Magento 2 Functional Test Module Gift Message", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,24 +15,18 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\GiftMessage\\": "" + "Magento\\FunctionalTest\\GiftMessage\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json index 265dad6924696..b91c49343d103 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAdwords/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-google-adwords", "description": "Magento 2 Functional Test Module Google Adwords", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,18 +15,12 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\GoogleAdwords\\": "" + "Magento\\FunctionalTest\\GoogleAdwords\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json index 9fc3d17c75dcc..d020e266ca9c5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleAnalytics/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-google-analytics", "description": "Magento 2 Functional Test Module Google Analytics", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-cookie": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-cookie": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\GoogleAnalytics\\": "" + "Magento\\FunctionalTest\\GoogleAnalytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json index 5a5542539aa09..8dc7207d42b77 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GoogleOptimizer/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-google-optimizer", "description": "Magento 2 Functional Test Module Google Optimizer", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-cms": "1.0.0-dev", - "magento/magento2-functional-test-module-google-analytics": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-cms": "100.0.0-dev", + "magento/magento2-functional-test-module-google-analytics": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\GoogleOptimizer\\": "" + "Magento\\FunctionalTest\\GoogleOptimizer\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/composer.json index b2ddecd987d1c..296a254a4d213 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GraphQl/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-graph-ql", "description": "Magento 2 Functional Test Module Graph Ql", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-webapi": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev" + "magento/magento2-functional-test-module-webapi": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\GraphQl\\": "" + "Magento\\FunctionalTest\\GraphQl\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json index 0a0c3364faa66..05f0d72d0e740 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedImportExport/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-grouped-import-export", "description": "Magento 2 Functional Test Module Grouped Import Export", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,21 +15,15 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-import-export": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-grouped-product": "1.0.0-dev", - "magento/magento2-functional-test-module-import-export": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-import-export": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-grouped-product": "100.0.0-dev", + "magento/magento2-functional-test-module-import-export": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\GroupedImportExport\\": "" + "Magento\\FunctionalTest\\GroupedImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json index 7254d77ba4276..036d0130867c8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/GroupedProduct/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-grouped-product", "description": "Magento 2 Functional Test Module Grouped Product", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,28 +15,22 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-msrp": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-msrp": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\GroupedProduct\\": "" + "Magento\\FunctionalTest\\GroupedProduct\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json index 61b4747da1cc2..ccd2b010ff738 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ImportExport/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-import-export", "description": "Magento 2 Functional Test Module Import Export", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,21 +15,15 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\ImportExport\\": "" + "Magento\\FunctionalTest\\ImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json index 3077c21719893..7f118d8d4e0aa 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Indexer/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-indexer", "description": "Magento 2 Functional Test Module Indexer", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Indexer\\": "" + "Magento\\FunctionalTest\\Indexer\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/composer.json index 0ffaf50c91228..2004570a0cad6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/InstantPurchase/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-instant-purchase", "description": "Magento 2 Functional Test Module Instant Purchase", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-vault": "1.0.0-dev" + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-vault": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\InstantPurchase\\": "" + "Magento\\FunctionalTest\\InstantPurchase\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json index 8e9d51bc67f9a..8ff747736c94a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Integration/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-integration", "description": "Magento 2 Functional Test Module Integration", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0-dev", - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-security": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-user": "1.0.0-dev" + "magento/magento2-functional-test-module-authorization": "100.0.0-dev", + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-security": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-user": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Integration\\": "" + "Magento\\FunctionalTest\\Integration\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json index 31e6ee720a43e..4579bbc1cbbd8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/LayeredNavigation/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-layered-navigation", "description": "Magento 2 Functional Test Module Layered Navigation", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,18 +15,12 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\LayeredNavigation\\": "" + "Magento\\FunctionalTest\\LayeredNavigation\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json index 3c46a479567bf..b1249f0ef9cc0 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Marketplace/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-marketplace", "description": "Magento 2 Functional Test Module Marketplace", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Marketplace\\": "" + "Magento\\FunctionalTest\\Marketplace\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json index 7367ba3cc524e..6326c8e7af73e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/MediaStorage/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-media-storage", "description": "Magento 2 Functional Test Module Media Storage", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\MediaStorage\\": "" + "Magento\\FunctionalTest\\MediaStorage\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json index 7941442a7701b..fe8ddd6d3b55b 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Msrp/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-msrp", "description": "Magento 2 Functional Test Module Msrp", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-downloadable": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-grouped-product": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-downloadable": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-grouped-product": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Msrp\\": "" + "Magento\\FunctionalTest\\Msrp\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json index 7173e96e9a79a..177fc24b9d0d7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Multishipping/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-multishipping", "description": "Magento 2 Functional Test Module Multishipping", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,24 +15,18 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-payment": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev" + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-payment": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Multishipping\\": "" + "Magento\\FunctionalTest\\Multishipping\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json index 0f663c82dcc77..2a2cda0f85f46 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/NewRelicReporting/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-new-relic-reporting", "description": "Magento 2 Functional Test Module New Relic Reporting", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-configurable-product": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-configurable-product": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\NewRelicReporting\\": "" + "Magento\\FunctionalTest\\NewRelicReporting\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json index 9085ac604e2b7..eb952a34a0483 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Newsletter/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-newsletter", "description": "Magento 2 Functional Test Module Newsletter", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,24 +15,18 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-cms": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-email": "1.0.0-dev", - "magento/magento2-functional-test-module-require-js": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-widget": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-cms": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-email": "100.0.0-dev", + "magento/magento2-functional-test-module-require-js": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-widget": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Newsletter\\": "" + "Magento\\FunctionalTest\\Newsletter\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json index 0631ae3f7f00c..30c236974bc50 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflinePayments/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-offline-payments", "description": "Magento 2 Functional Test Module Offline Payments", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,18 +15,12 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-payment": "1.0.0-dev" + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-payment": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\OfflinePayments\\": "" + "Magento\\FunctionalTest\\OfflinePayments\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json index d3d3ef506a628..4decb42f0c1e3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/OfflineShipping/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-offline-shipping", "description": "Magento 2 Functional Test Module Offline Shipping", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,25 +15,19 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-sales-rule": "1.0.0-dev", - "magento/magento2-functional-test-module-shipping": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-sales-rule": "100.0.0-dev", + "magento/magento2-functional-test-module-shipping": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\OfflineShipping\\": "" + "Magento\\FunctionalTest\\OfflineShipping\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json index 4eed53f7def7f..496108b6f68d9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/PageCache/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-page-cache", "description": "Magento 2 Functional Test Module Page Cache", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\PageCache\\": "" + "Magento\\FunctionalTest\\PageCache\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json index c275682aef4a9..354652c143641 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Payment/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-payment", "description": "Magento 2 Functional Test Module Payment", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Payment\\": "" + "Magento\\FunctionalTest\\Payment\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json index 6de5394fe90e2..b6df1314b0efc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Paypal/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-paypal", "description": "Magento 2 Functional Test Module Paypal", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,32 +15,26 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-instant-purchase": "1.0.0-dev", - "magento/magento2-functional-test-module-payment": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev", - "magento/magento2-functional-test-module-theme": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev", - "magento/magento2-functional-test-module-vault": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-instant-purchase": "100.0.0-dev", + "magento/magento2-functional-test-module-payment": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev", + "magento/magento2-functional-test-module-theme": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev", + "magento/magento2-functional-test-module-vault": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Paypal\\": "" + "Magento\\FunctionalTest\\Paypal\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json index ac984fed22058..bd7db62c88616 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Persistent/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-persistent", "description": "Magento 2 Functional Test Module Persistent", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-cron": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-cron": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Persistent\\": "" + "Magento\\FunctionalTest\\Persistent\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json index cbc9c7f6b8fad..7ef8a4a3da737 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductAlert/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-product-alert", "description": "Magento 2 Functional Test Module Product Alert", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,20 +15,14 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\ProductAlert\\": "" + "Magento\\FunctionalTest\\ProductAlert\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json index 62efdd818358d..daa23cb4d48c9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ProductVideo/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-product-video", "description": "Magento 2 Functional Test Module Product Video", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,21 +15,15 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\ProductVideo\\": "" + "Magento\\FunctionalTest\\ProductVideo\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json index a5d5c9553d3b7..9468fdf072ebf 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Quote/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-quote", "description": "Magento 2 Functional Test Module Quote", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,30 +15,24 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0-dev", - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-payment": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-sales-sequence": "1.0.0-dev", - "magento/magento2-functional-test-module-shipping": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev" + "magento/magento2-functional-test-module-authorization": "100.0.0-dev", + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-payment": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-sales-sequence": "100.0.0-dev", + "magento/magento2-functional-test-module-shipping": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Quote\\": "" + "Magento\\FunctionalTest\\Quote\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/composer.json index 560dd1838ef2d..4bd28d1b3c903 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/QuoteAnalytics/composer.json @@ -1,11 +1,11 @@ { "name": "magento/magento2-functional-test-module-quote-analytics", "description": "Magento 2 Acceptance Test Module Quote Analytics", - "repositories": [ - { - "type": "composer", - "url": "https://repo.magento.com/" - } + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" ], "config": { "sort-packages": true @@ -15,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-quote": "1.0.0-dev" + "magento/magento2-functional-test-module-quote": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\QuoteAnalytics\\": "" + "Magento\\FunctionalTest\\QuoteAnalytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json index d2b61833ece30..0ed1758889509 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Reports/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-reports", "description": "Magento 2 Functional Test Module Reports", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,32 +15,26 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-cms": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-downloadable": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-review": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-sales-rule": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev", - "magento/magento2-functional-test-module-widget": "1.0.0-dev", - "magento/magento2-functional-test-module-wishlist": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-cms": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-downloadable": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-review": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-sales-rule": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev", + "magento/magento2-functional-test-module-widget": "100.0.0-dev", + "magento/magento2-functional-test-module-wishlist": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Reports\\": "" + "Magento\\FunctionalTest\\Reports\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/composer.json index ef0b6c466e65b..91ad289e04288 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-require-js", "description": "Magento 2 Functional Test Module Require Js", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -8,15 +14,9 @@ "magento/magento2-functional-testing-framework": "1.0.0", "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\RequireJs\\": "" + "Magento\\FunctionalTest\\RequireJs\\": "" } }, "extra": { @@ -26,6 +26,5 @@ "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/RequireJs" ] ] - }, - "suggest": null + } } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json index 987d5159bca6c..6b68bb0edc757 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Review/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-review", "description": "Magento 2 Functional Test Module Review", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,24 +15,18 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-newsletter": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-theme": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-newsletter": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-theme": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Review\\": "" + "Magento\\FunctionalTest\\Review\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/composer.json index f6cbbd17193a3..546a20fe50c0f 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/ReviewAnalytics/composer.json @@ -1,11 +1,11 @@ { "name": "magento/magento2-functional-test-module-review-analytics", "description": "Magento 2 Acceptance Test Module Review Analytics", - "repositories": [ - { - "type": "composer", - "url": "https://repo.magento.com/" - } + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" ], "config": { "sort-packages": true @@ -15,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-review": "1.0.0-dev" + "magento/magento2-functional-test-module-review": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\ReviewAnalytics\\": "" + "Magento\\FunctionalTest\\ReviewAnalytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json index bbf0fc5edde75..27945d5e16138 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Robots/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-robots", "description": "Magento 2 Functional Test Module Robots", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Robots\\": "" + "Magento\\FunctionalTest\\Robots\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json index 1eb7d17a8a699..e8d57dd2456cc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rss/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-rss", "description": "Magento 2 Functional Test Module Rss", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Rss\\": "" + "Magento\\FunctionalTest\\Rss\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json index cc33ad7c9fa4d..1d19dad8e30a8 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Rule/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-rule", "description": "Magento 2 Functional Test Module Rule", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,20 +15,14 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Rule\\": "" + "Magento\\FunctionalTest\\Rule\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json index a33c0c8171e25..f9b37ac3d18c3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sales/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-sales", "description": "Magento 2 Functional Test Module Sales", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,39 +15,33 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0-dev", - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-gift-message": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-payment": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-reports": "1.0.0-dev", - "magento/magento2-functional-test-module-sales-rule": "1.0.0-dev", - "magento/magento2-functional-test-module-sales-sequence": "1.0.0-dev", - "magento/magento2-functional-test-module-shipping": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev", - "magento/magento2-functional-test-module-theme": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev", - "magento/magento2-functional-test-module-widget": "1.0.0-dev", - "magento/magento2-functional-test-module-wishlist": "1.0.0-dev" + "magento/magento2-functional-test-module-authorization": "100.0.0-dev", + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-gift-message": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-payment": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-reports": "100.0.0-dev", + "magento/magento2-functional-test-module-sales-rule": "100.0.0-dev", + "magento/magento2-functional-test-module-sales-sequence": "100.0.0-dev", + "magento/magento2-functional-test-module-shipping": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev", + "magento/magento2-functional-test-module-theme": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev", + "magento/magento2-functional-test-module-widget": "100.0.0-dev", + "magento/magento2-functional-test-module-wishlist": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Sales\\": "" + "Magento\\FunctionalTest\\Sales\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/composer.json index 1b92df693dc2b..0b37233aa5927 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesAnalytics/composer.json @@ -1,11 +1,11 @@ { "name": "magento/magento2-functional-test-module-sales-analytics", "description": "Magento 2 Acceptance Test Module Sales Analytics", - "repositories": [ - { - "type": "composer", - "url": "https://repo.magento.com/" - } + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" ], "config": { "sort-packages": true @@ -15,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-sales": "1.0.0-dev" + "magento/magento2-functional-test-module-sales": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\SalesAnalytics\\": "" + "Magento\\FunctionalTest\\SalesAnalytics\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json index dadb08dac12ce..75f35cd1d29fd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesInventory/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-sales-inventory", "description": "Magento 2 Functional Test Module Sales Inventory", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,20 +15,14 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\SalesInventory\\": "" + "Magento\\FunctionalTest\\SalesInventory\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json index c6591bd79bea9..0bb3ad9cf6330 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesRule/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-sales-rule", "description": "Magento 2 Functional Test Module Sales Rule", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,32 +15,26 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-rule": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-payment": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-reports": "1.0.0-dev", - "magento/magento2-functional-test-module-rule": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-shipping": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev", - "magento/magento2-functional-test-module-widget": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-rule": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-payment": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-reports": "100.0.0-dev", + "magento/magento2-functional-test-module-rule": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-shipping": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev", + "magento/magento2-functional-test-module-widget": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\SalesRule\\": "" + "Magento\\FunctionalTest\\SalesRule\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json index 81c2f16f344d1..218a5e4ce1ff9 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-sales-sequence", "description": "Magento 2 Functional Test Module Sales Sequence", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -8,15 +14,9 @@ "magento/magento2-functional-testing-framework": "1.0.0", "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\SalesSequence\\": "" + "Magento\\FunctionalTest\\SalesSequence\\": "" } }, "extra": { @@ -26,6 +26,5 @@ "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SalesSequence" ] ] - }, - "suggest": null + } } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json index 80426872ef6ad..6e6229ae322ba 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-sample-data", "description": "Magento 2 Functional Test Module Sample Data", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -8,15 +14,9 @@ "magento/magento2-functional-testing-framework": "1.0.0", "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\SampleData\\": "" + "Magento\\FunctionalTest\\SampleData\\": "" } }, "extra": { @@ -26,6 +26,5 @@ "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleData" ] ] - }, - "suggest": null + } } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/README.md new file mode 100644 index 0000000000000..986c2af6164e9 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/README.md @@ -0,0 +1,3 @@ +# Magento 2 Functional Tests + +The Functional Tests Module for **Magento_SampleTemplates** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/composer.json new file mode 100644 index 0000000000000..da0d8598f8d7d --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates/composer.json @@ -0,0 +1,30 @@ +{ + "name": "magento/magento2-functional-test-module-sample-templates", + "description": "Magento 2 Functional Test Module Sample Templates", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "config": { + "sort-packages": true + }, + "require": { + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" + }, + "autoload": { + "psr-4": { + "Magento\\FunctionalTest\\SampleTemplates\\": "" + } + }, + "extra": { + "map": [ + [ + "*", + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTemplates" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/LICENSE.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/LICENSE.txt new file mode 100644 index 0000000000000..49525fd99da9c --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/LICENSE.txt @@ -0,0 +1,48 @@ + +Open Software License ("OSL") v. 3.0 + +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Open Software License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute or communicate shall be licensed under this Open Software License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 'fair use' or 'fair dealing'). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright (C) 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Open Software License" or "OSL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. \ No newline at end of file diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/LICENSE_AFL.txt b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/LICENSE_AFL.txt new file mode 100644 index 0000000000000..f39d641b18a19 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/LICENSE_AFL.txt @@ -0,0 +1,48 @@ + +Academic Free License ("AFL") v. 3.0 + +This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work: + +Licensed under the Academic Free License version 3.0 + + 1. Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following: + + 1. to reproduce the Original Work in copies, either alone or as part of a collective work; + + 2. to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work; + + 3. to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License; + + 4. to perform the Original Work publicly; and + + 5. to display the Original Work publicly. + + 2. Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works. + + 3. Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work. + + 4. Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license. + + 5. External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c). + + 6. Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. + + 7. Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer. + + 8. Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation. + + 9. Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c). + + 10. Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. + + 11. Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License. + + 12. Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. + + 13. Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. + + 14. Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + 15. Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. + + 16. Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/README.md b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/README.md new file mode 100644 index 0000000000000..f3340b205f1a3 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/README.md @@ -0,0 +1,3 @@ +# Magento 2 Functional Tests + +The Functional Tests Module for **Magento_SampleTests** Module. diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/composer.json new file mode 100644 index 0000000000000..70a9e9806b7b6 --- /dev/null +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests/composer.json @@ -0,0 +1,30 @@ +{ + "name": "magento/magento2-functional-test-module-sample-tests", + "description": "Magento 2 Functional Test Module Sample Tests", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "config": { + "sort-packages": true + }, + "require": { + "magento/magento2-functional-testing-framework": "1.0.0", + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" + }, + "autoload": { + "psr-4": { + "Magento\\FunctionalTest\\SampleTests\\": "" + } + }, + "extra": { + "map": [ + [ + "*", + "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SampleTests" + ] + ] + } +} diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json index 446f4303e7602..c49c01d906ec3 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Search/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-search", "description": "Magento 2 Functional Test Module Search", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,21 +15,15 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-search": "1.0.0-dev", - "magento/magento2-functional-test-module-reports": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-search": "100.0.0-dev", + "magento/magento2-functional-test-module-reports": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Search\\": "" + "Magento\\FunctionalTest\\Search\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json index 4350ca6810b34..49278c3877af1 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Security/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-security", "description": "Magento 2 Functional Test Module Security", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,18 +15,12 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Security\\": "" + "Magento\\FunctionalTest\\Security\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json index c93c457816d95..34c4fe3b466f2 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SendFriend/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-send-friend", "description": "Magento 2 Functional Test Module Send Friend", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\SendFriend\\": "" + "Magento\\FunctionalTest\\SendFriend\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json index cd82c92da1975..007c4a85ee919 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Shipping/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-shipping", "description": "Magento 2 Functional Test Module Shipping", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,29 +15,23 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-contact": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-payment": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev", - "magento/magento2-functional-test-module-user": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-contact": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-payment": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev", + "magento/magento2-functional-test-module-user": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Shipping\\": "" + "Magento\\FunctionalTest\\Shipping\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json index ef33b62ac5e8e..35cfb059ee516 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Sitemap/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-sitemap", "description": "Magento 2 Functional Test Module Sitemap", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,25 +15,19 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0-dev", - "magento/magento2-functional-test-module-cms": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-robots": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-url-rewrite": "100.0.0-dev", + "magento/magento2-functional-test-module-cms": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-robots": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Sitemap\\": "" + "Magento\\FunctionalTest\\Sitemap\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json index 7e768c4b90ec8..e456d4113c430 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Store/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-store", "description": "Magento 2 Functional Test Module Store", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,21 +15,15 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Store\\": "" + "Magento\\FunctionalTest\\Store\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json index 213b3d1bdff61..9d6c6ac8a8e22 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-swagger", "description": "Magento 2 Functional Test Module Swagger", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -8,15 +14,9 @@ "magento/magento2-functional-testing-framework": "1.0.0", "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Swagger\\": "" + "Magento\\FunctionalTest\\Swagger\\": "" } }, "extra": { @@ -26,6 +26,5 @@ "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swagger" ] ] - }, - "suggest": null + } } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json index 3cfab737aa48e..60588d548aacc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Swatches/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-swatches", "description": "Magento 2 Functional Test Module Swatches", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,25 +15,19 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-configurable-product": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-theme": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-configurable-product": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-theme": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Swatches\\": "" + "Magento\\FunctionalTest\\Swatches\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json index bb7df9b687e1e..64d374145ce97 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-swatches-layered-navigation", "description": "Magento 2 Functional Test Module Swatches Layered Navigation", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -8,15 +14,9 @@ "magento/magento2-functional-testing-framework": "1.0.0", "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\SwatchesLayeredNavigation\\": "" + "Magento\\FunctionalTest\\SwatchesLayeredNavigation\\": "" } }, "extra": { @@ -26,6 +26,5 @@ "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/SwatchesLayeredNavigation" ] ] - }, - "suggest": null + } } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json index cbcbbea1f2519..c81eac8e64e83 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Tax/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-tax", "description": "Magento 2 Functional Test Module Tax", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,29 +15,23 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-reports": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-shipping": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-reports": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-shipping": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Tax\\": "" + "Magento\\FunctionalTest\\Tax\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json index b9c550fda243d..92c8043066c3a 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/TaxImportExport/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-tax-import-export", "description": "Magento 2 Functional Test Module Tax Import Export", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,20 +15,14 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\TaxImportExport\\": "" + "Magento\\FunctionalTest\\TaxImportExport\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json index 4fcba7e8baba3..5e0e44f3b1f68 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Theme/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-theme", "description": "Magento 2 Functional Test Module Theme", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,26 +15,20 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-cms": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-media-storage": "1.0.0-dev", - "magento/magento2-functional-test-module-require-js": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev", - "magento/magento2-functional-test-module-widget": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-cms": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-media-storage": "100.0.0-dev", + "magento/magento2-functional-test-module-require-js": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev", + "magento/magento2-functional-test-module-widget": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Theme\\": "" + "Magento\\FunctionalTest\\Theme\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json index 9f1ff7470fea9..3c41daeb23705 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Translation/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-translation", "description": "Magento 2 Functional Test Module Translation", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-developer": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-developer": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Translation\\": "" + "Magento\\FunctionalTest\\Translation\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json index 3411d25cdb8ee..c8b9594133978 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ui/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-ui", "description": "Magento 2 Functional Test Module Ui", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,20 +15,14 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0-dev", - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-user": "1.0.0-dev" + "magento/magento2-functional-test-module-authorization": "100.0.0-dev", + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-user": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Ui\\": "" + "Magento\\FunctionalTest\\Ui\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json index e3100ca49bcf5..d972a81232963 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Ups/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-ups", "description": "Magento 2 Functional Test Module Ups", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,23 +15,17 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-shipping": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-shipping": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Ups\\": "" + "Magento\\FunctionalTest\\Ups\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json index 4ecae5ca48043..b0b8e5ff73a72 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/UrlRewrite/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-url-rewrite", "description": "Magento 2 Functional Test Module Url Rewrite", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-url-rewrite": "1.0.0-dev", - "magento/magento2-functional-test-module-cms": "1.0.0-dev", - "magento/magento2-functional-test-module-cms-url-rewrite": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-url-rewrite": "100.0.0-dev", + "magento/magento2-functional-test-module-cms": "100.0.0-dev", + "magento/magento2-functional-test-module-cms-url-rewrite": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\UrlRewrite\\": "" + "Magento\\FunctionalTest\\UrlRewrite\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json index 945e3383a94e0..5263f08825394 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/User/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-user", "description": "Magento 2 Functional Test Module User", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0-dev", - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-email": "1.0.0-dev", - "magento/magento2-functional-test-module-integration": "1.0.0-dev", - "magento/magento2-functional-test-module-security": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-authorization": "100.0.0-dev", + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-email": "100.0.0-dev", + "magento/magento2-functional-test-module-integration": "100.0.0-dev", + "magento/magento2-functional-test-module-security": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\User\\": "" + "Magento\\FunctionalTest\\User\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/composer.json index c8815b5d49010..a4f4b182caecc 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Usps/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-usps", "description": "Magento 2 Functional Test Module Usps", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,24 +15,18 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-config": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-shipping": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-config": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-shipping": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Usps\\": "" + "Magento\\FunctionalTest\\Usps\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json index 4886a968b11da..4b38be8f11dfd 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Variable/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-variable", "description": "Magento 2 Functional Test Module Variable", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,19 +15,13 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-email": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-email": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Variable\\": "" + "Magento\\FunctionalTest\\Variable\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json index 51bbeb652ab79..c5a28256b7aa5 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Vault/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-vault", "description": "Magento 2 Functional Test Module Vault", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,22 +15,16 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-payment": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-payment": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Vault\\": "" + "Magento\\FunctionalTest\\Vault\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json index 119aa2fca5461..3e222e5641ab6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-version", "description": "Magento 2 Functional Test Module Version", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -8,15 +14,9 @@ "magento/magento2-functional-testing-framework": "1.0.0", "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Version\\": "" + "Magento\\FunctionalTest\\Version\\": "" } }, "extra": { @@ -26,6 +26,5 @@ "dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Version" ] ] - }, - "suggest": null + } } diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json index e9a12a1c055e6..00916f722e3d6 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Webapi/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-webapi", "description": "Magento 2 Functional Test Module Webapi", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,20 +15,14 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-authorization": "1.0.0-dev", - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-integration": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev" + "magento/magento2-functional-test-module-authorization": "100.0.0-dev", + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-integration": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Webapi\\": "" + "Magento\\FunctionalTest\\Webapi\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json index bda7e23dacbdf..f66e3e65d26d7 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WebapiSecurity/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-webapi-security", "description": "Magento 2 Functional Test Module Webapi Security", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-webapi": "1.0.0-dev" + "magento/magento2-functional-test-module-webapi": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\WebapiSecurity\\": "" + "Magento\\FunctionalTest\\WebapiSecurity\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json index 1698a517349ff..9bc06706ee75e 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Weee/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-weee", "description": "Magento 2 Functional Test Module Weee", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,28 +15,22 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-directory": "1.0.0-dev", - "magento/magento2-functional-test-module-eav": "1.0.0-dev", - "magento/magento2-functional-test-module-page-cache": "1.0.0-dev", - "magento/magento2-functional-test-module-quote": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-tax": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-directory": "100.0.0-dev", + "magento/magento2-functional-test-module-eav": "100.0.0-dev", + "magento/magento2-functional-test-module-page-cache": "100.0.0-dev", + "magento/magento2-functional-test-module-quote": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-tax": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Weee\\": "" + "Magento\\FunctionalTest\\Weee\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json index 0fdf707a3befd..40445beb03c09 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Widget/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-widget", "description": "Magento 2 Functional Test Module Widget", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,23 +15,17 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-cms": "1.0.0-dev", - "magento/magento2-functional-test-module-email": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-theme": "1.0.0-dev", - "magento/magento2-functional-test-module-variable": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-cms": "100.0.0-dev", + "magento/magento2-functional-test-module-email": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-theme": "100.0.0-dev", + "magento/magento2-functional-test-module-variable": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Widget\\": "" + "Magento\\FunctionalTest\\Widget\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json index 1c8dcf9dbdee4..70e8df41e7313 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Wishlist/composer.json @@ -1,6 +1,12 @@ { "name": "magento/magento2-functional-test-module-wishlist", "description": "Magento 2 Functional Test Module Wishlist", + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, @@ -9,25 +15,19 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-backend": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog": "1.0.0-dev", - "magento/magento2-functional-test-module-catalog-inventory": "1.0.0-dev", - "magento/magento2-functional-test-module-checkout": "1.0.0-dev", - "magento/magento2-functional-test-module-customer": "1.0.0-dev", - "magento/magento2-functional-test-module-rss": "1.0.0-dev", - "magento/magento2-functional-test-module-sales": "1.0.0-dev", - "magento/magento2-functional-test-module-store": "1.0.0-dev", - "magento/magento2-functional-test-module-ui": "1.0.0-dev" + "magento/magento2-functional-test-module-backend": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog": "100.0.0-dev", + "magento/magento2-functional-test-module-catalog-inventory": "100.0.0-dev", + "magento/magento2-functional-test-module-checkout": "100.0.0-dev", + "magento/magento2-functional-test-module-customer": "100.0.0-dev", + "magento/magento2-functional-test-module-rss": "100.0.0-dev", + "magento/magento2-functional-test-module-sales": "100.0.0-dev", + "magento/magento2-functional-test-module-store": "100.0.0-dev", + "magento/magento2-functional-test-module-ui": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\Wishlist\\": "" + "Magento\\FunctionalTest\\Wishlist\\": "" } }, "extra": { diff --git a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/composer.json b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/composer.json index 0c09eacb90df2..b49a321f44884 100644 --- a/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/composer.json +++ b/dev/tests/acceptance/tests/functional/Magento/FunctionalTest/WishlistAnalytics/composer.json @@ -1,11 +1,11 @@ { "name": "magento/magento2-functional-test-module-wishlist-analytics", "description": "Magento 2 Acceptance Test Module WishlistAnalytics", - "repositories": [ - { - "type": "composer", - "url": "https://repo.magento.com/" - } + "type": "magento2-test-module", + "version": "100.0.0-dev", + "license": [ + "OSL-3.0", + "AFL-3.0" ], "config": { "sort-packages": true @@ -15,17 +15,11 @@ "php": "7.0.2|7.0.4|~7.0.6|~7.1.0" }, "suggest": { - "magento/magento2-functional-test-module-wishlist": "1.0.0-dev" + "magento/magento2-functional-test-module-wishlist": "100.0.0-dev" }, - "type": "magento2-test-module", - "version": "1.0.0-dev", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "psr-4": { - "Magento\\WishlistAnalytics\\": "" + "Magento\\FunctionalTest\\WishlistAnalytics\\": "" } }, "extra": { From ce4c05e1224c7e956d78bdfc81b17dc95b252812 Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Fri, 8 Dec 2017 16:39:55 +0200 Subject: [PATCH 493/653] MQE-599: Move composer.json, README.MD, etc to CE - created README.MD in Magento (Open Source) --- dev/tests/acceptance/README.md | 70 ++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100755 dev/tests/acceptance/README.md diff --git a/dev/tests/acceptance/README.md b/dev/tests/acceptance/README.md new file mode 100755 index 0000000000000..a124e63e814b4 --- /dev/null +++ b/dev/tests/acceptance/README.md @@ -0,0 +1,70 @@ +# Magento Functional Testing Framework + +---- + +## System Requirements +[Magento Functional Testing Framework system requirements](http://devdocs.magento.com/guides/v2.2/magento-functional-testing-framework/getting-started.html#prepare-environment) + +## Installation +To install the Magento Functional Testing Framework, see [Getting Started](http://devdocs.magento.com/guides/v2.2/magento-functional-testing-framework/getting-started.html) + +## Contributing +Contributions can take the form of new components or features, changes to existing features, tests, documentation (such as developer guides, user guides, examples, or specifications), bug fixes, optimizations, or just good suggestions. + +To learn about how to make a contribution, click [here][1]. + +To open an issue, click [here][2]. + +To suggest documentation improvements, click [here][3]. + +[1]: <http://devdocs.magento.com/guides/v2.2/magento-functional-testing-framework/contribution-guidelines.html> +[2]: <https://github.com/magento/magento2-functional-testing-framework/issues> +[3]: <http://devdocs.magento.com> + +### Labels applied by the MFTF team + +Refer to the tables with descriptions of each label below. These labels are applied by the MFTF development team to community contributed issues and pull requests, to communicate status, impact, or which team is working on it. + +### Pull Request Status + +Label| Description +---|--- +**accept**| The pull request has been accepted and will be merged into mainline code. +**reject**| The pull request has been rejected and will not be merged into mainline code. Possible reasons can include but are not limited to: issue has already been fixed in another code contribution, or there is an issue with the code contribution. +**needsUpdate**| The Magento Team needs additional information from the reporter to properly prioritize and process the pull request. + +### Issue Resolution Status + +Label| Description +---|--- +**acknowledged**| The Magento Team has validated the issue and an internal ticket has been created. +**needsUpdate**| The Magento Team needs additional information from the reporter to properly prioritize and process the issue or pull request. +**cannot reproduce**| The Magento Team has not confirmed that this issue contains the minimum required information to reproduce. +**non-issue**| The Magento Team has not recognised any issue according to provided information. + +### Domains Impacted + +Label| Description +---|--- +**PROD**| Affects the Product team (mostly feature requests or business logic change). +**DOC**| Affects Documentation domain. +**TECH**| Affects Architect Group (mostly to make decisions around technology changes). + +### Type + +Label| Description +---|--- +**bugfix**| The issue or pull request relates to bug fixing. +**enhancement**| The issue or pull request that raises the MFTF to a higher degree (for example new features, optimization, refactoring, etc). + +## Reporting security issues + +To report security vulnerabilities in Magento software or web sites, please e-mail <a href="mailto:security@magento.com">security@magento.com</a>. Please do not report security issues using GitHub. Be sure to encrypt your e-mail with our <a href="https://info2.magento.com/rs/magentoenterprise/images/security_at_magento.asc">encryption key</a> if it includes sensitive information. Learn more about reporting security issues <a href="https://magento.com/security/reporting-magento-security-issue">here</a>. + +Stay up-to-date on the latest security news and patches for Magento by signing up for <a href="https://magento.com/security/sign-up">Security Alert Notifications</a>. + +## License + +Each Magento source file included in this distribution is licensed under APL 3.0 + +Please see LICENSE_APL3.txt for the full text of the APL 3.0 license or contact license@magentocommerce.com for a copy. From d11319191d13934d6b990147782097cb37ebaf87 Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Fri, 8 Dec 2017 17:24:11 +0200 Subject: [PATCH 494/653] MQE-599: Move composer.json, README, etc from EE to CE - update functional composer.json --- dev/tests/functional/composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/tests/functional/composer.json b/dev/tests/functional/composer.json index 08ac79f0ab600..05ef221a0940f 100644 --- a/dev/tests/functional/composer.json +++ b/dev/tests/functional/composer.json @@ -6,6 +6,7 @@ "php": "7.0.2|~7.0.6|~7.1.0", "allure-framework/allure-phpunit": "~1.2.0", "magento/mtf": "1.0.0-rc57", + "allure-framework/allure-phpunit": "~1.2.0", "phpunit/phpunit": "~4.8.0|~5.5.0", "phpunit/phpunit-selenium": ">=1.2" }, From 84e5aaef5956f8b87f37f7da30337f75e985a015 Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Fri, 8 Dec 2017 18:04:12 +0200 Subject: [PATCH 495/653] MQE-599: Move composer.json, README, etc from EE to CE - revert repositories node --- dev/tests/acceptance/composer.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dev/tests/acceptance/composer.json b/dev/tests/acceptance/composer.json index c6bdf643db098..28627418eb1eb 100755 --- a/dev/tests/acceptance/composer.json +++ b/dev/tests/acceptance/composer.json @@ -10,6 +10,12 @@ "config": { "sort-packages": true }, + "repositories": [ + { + "type": "git", + "url": "git@github.com:magento/magento2-functional-testing-framework.git" + } + ], "require": { "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", "codeception/codeception": "~2.3.4", From 99a8f324ec2f6de04c97449262bc7b86128e0207 Mon Sep 17 00:00:00 2001 From: Ian Meron <imeron@magento.com> Date: Fri, 8 Dec 2017 20:09:14 +0200 Subject: [PATCH 496/653] MQE-386: MFTF Compatibility with Windows Machine - fix composer entry breaking windows robo commands --- dev/tests/acceptance/composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/tests/acceptance/composer.json b/dev/tests/acceptance/composer.json index 28627418eb1eb..a380c325a5e28 100755 --- a/dev/tests/acceptance/composer.json +++ b/dev/tests/acceptance/composer.json @@ -20,6 +20,7 @@ "allure-framework/allure-codeception": "dev-master#af40af5ae2b717618a42fe3e137d75878508c75d", "codeception/codeception": "~2.3.4", "consolidation/robo": "^1.0.0", + "symfony/process": ">=2.7 <3.4", "henrikbjorn/lurker": "^1.2", "magento/magento2-functional-testing-framework": "1.0.0", "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", From f1fa4594d8ff9368cf36dba5c09ccb517ece1a76 Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Fri, 8 Dec 2017 20:43:52 +0200 Subject: [PATCH 497/653] MQE-599: Move composer.json, README, etc from EE to CE --- dev/tests/acceptance/README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/dev/tests/acceptance/README.md b/dev/tests/acceptance/README.md index a124e63e814b4..6350b9cabcdfa 100755 --- a/dev/tests/acceptance/README.md +++ b/dev/tests/acceptance/README.md @@ -57,12 +57,6 @@ Label| Description **bugfix**| The issue or pull request relates to bug fixing. **enhancement**| The issue or pull request that raises the MFTF to a higher degree (for example new features, optimization, refactoring, etc). -## Reporting security issues - -To report security vulnerabilities in Magento software or web sites, please e-mail <a href="mailto:security@magento.com">security@magento.com</a>. Please do not report security issues using GitHub. Be sure to encrypt your e-mail with our <a href="https://info2.magento.com/rs/magentoenterprise/images/security_at_magento.asc">encryption key</a> if it includes sensitive information. Learn more about reporting security issues <a href="https://magento.com/security/reporting-magento-security-issue">here</a>. - -Stay up-to-date on the latest security news and patches for Magento by signing up for <a href="https://magento.com/security/sign-up">Security Alert Notifications</a>. - ## License Each Magento source file included in this distribution is licensed under APL 3.0 From 0f0f1404ea651c5e7ed92131c44b51f943a604a0 Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Fri, 8 Dec 2017 21:53:03 +0200 Subject: [PATCH 498/653] MQE-592: Audit Test Cases on Firefox/Chrome on Windows/OSX --- dev/tests/acceptance/tests/_bootstrap.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/acceptance/tests/_bootstrap.php b/dev/tests/acceptance/tests/_bootstrap.php index a3d7b41f397a3..78d69c1ce9ff5 100644 --- a/dev/tests/acceptance/tests/_bootstrap.php +++ b/dev/tests/acceptance/tests/_bootstrap.php @@ -24,7 +24,7 @@ defined('FW_BP') || define('FW_BP', PROJECT_ROOT . $RELATIVE_FW_PATH); // add the debug flag here -$debug_mode = $_ENV['MFTF_DEBUG'] ?? false; -if (!$debug_mode) { +$debug_mode = (bool)$_ENV['MFTF_DEBUG'] ?? false; +if (!$debug_mode && extension_loaded('xdebug')) { xdebug_disable(); } From bf611beabbfcb95d78cb6286b5ba803bea6cdb37 Mon Sep 17 00:00:00 2001 From: Alan Hardman <ahardman@thrivelife.com> Date: Fri, 8 Dec 2017 13:10:57 -0700 Subject: [PATCH 499/653] Check that $parentPathPieces is an array This fixes an issue loading theme configuration on PHP 7.2 --- lib/internal/Magento/Framework/View/Design/Theme/ThemeList.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/View/Design/Theme/ThemeList.php b/lib/internal/Magento/Framework/View/Design/Theme/ThemeList.php index 826811b55b4bf..000fba24f0822 100644 --- a/lib/internal/Magento/Framework/View/Design/Theme/ThemeList.php +++ b/lib/internal/Magento/Framework/View/Design/Theme/ThemeList.php @@ -234,7 +234,7 @@ protected function _prepareConfigurationData($themePackage) $media = $themeConfig->getMedia(); $parentPathPieces = $themeConfig->getParentTheme(); - if (count($parentPathPieces) == 1) { + if (is_array($parentPathPieces) && count($parentPathPieces) == 1) { $pathPieces = $pathData['theme_path_pieces']; array_pop($pathPieces); $parentPathPieces = array_merge($pathPieces, $parentPathPieces); From a8e06f436110b2c95f36b387aead1c488f3ad432 Mon Sep 17 00:00:00 2001 From: Alex Kolesnyk <okolesnyk@magento.com> Date: Fri, 8 Dec 2017 22:46:05 +0200 Subject: [PATCH 500/653] MQE-592: Audit Test Cases on Firefox/Chrome on Windows/OSX --- dev/tests/acceptance/tests/_bootstrap.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/acceptance/tests/_bootstrap.php b/dev/tests/acceptance/tests/_bootstrap.php index 78d69c1ce9ff5..4313999476197 100644 --- a/dev/tests/acceptance/tests/_bootstrap.php +++ b/dev/tests/acceptance/tests/_bootstrap.php @@ -24,7 +24,7 @@ defined('FW_BP') || define('FW_BP', PROJECT_ROOT . $RELATIVE_FW_PATH); // add the debug flag here -$debug_mode = (bool)$_ENV['MFTF_DEBUG'] ?? false; -if (!$debug_mode && extension_loaded('xdebug')) { +$debug_mode = $_ENV['MFTF_DEBUG'] ?? false; +if (!(bool)$debug_mode && extension_loaded('xdebug')) { xdebug_disable(); } From e9ba7eb2d8cb4d5603401e72321a618aec223149 Mon Sep 17 00:00:00 2001 From: Michele Fantetti <michele.fantetti@gmail.com> Date: Sat, 9 Dec 2017 18:10:10 +0100 Subject: [PATCH 501/653] Update CrontabManager.php If crontab is already populated, 'php bin/magento cron:install' adds '#~ MAGENTO START' and the rest of code directly to the last row of crontab without any spaces. --- lib/internal/Magento/Framework/Crontab/CrontabManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/Crontab/CrontabManager.php b/lib/internal/Magento/Framework/Crontab/CrontabManager.php index cd0dcdaeaa6a1..b06e12a7736e3 100644 --- a/lib/internal/Magento/Framework/Crontab/CrontabManager.php +++ b/lib/internal/Magento/Framework/Crontab/CrontabManager.php @@ -114,7 +114,7 @@ public function removeTasks() private function generateSection($content, $tasks = []) { if ($tasks) { - $content .= self::TASKS_BLOCK_START . PHP_EOL; + $content .= PHP_EOL . self::TASKS_BLOCK_START . PHP_EOL; foreach ($tasks as $task) { $content .= $task['expression'] . ' ' . PHP_BINARY . ' '. $task['command'] . PHP_EOL; } From 137117a9d9114d8d79e0cae4db7c80c11a148667 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Mon, 11 Dec 2017 10:19:37 +0200 Subject: [PATCH 502/653] magento/magento2#12259: Save and Duplicated product not working --- app/code/Magento/Catalog/Model/Product/Copier.php | 3 +++ .../testsuite/Magento/Catalog/Model/Product/CopierTest.php | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Model/Product/Copier.php b/app/code/Magento/Catalog/Model/Product/Copier.php index 906280257d49b..70f8b9883325a 100644 --- a/app/code/Magento/Catalog/Model/Product/Copier.php +++ b/app/code/Magento/Catalog/Model/Product/Copier.php @@ -9,6 +9,9 @@ use Magento\Catalog\Api\Data\ProductInterface; +/** + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + */ class Copier { /** diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/CopierTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/CopierTest.php index 8c91f5689f683..ec9c2752b1805 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/CopierTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/CopierTest.php @@ -6,7 +6,6 @@ namespace Magento\Catalog\Model\Product; - use Magento\Catalog\Model\ProductRepository; class CopierTest extends \PHPUnit\Framework\TestCase From 74dbd7d3b2146e1dacd1f0c9b49708ff2420c58f Mon Sep 17 00:00:00 2001 From: nmalevanec <mikola.malevanec@transoftgroup.com> Date: Mon, 11 Dec 2017 10:26:31 +0200 Subject: [PATCH 503/653] 12613: Verbiage Update Required: Product Image Watermark size Validation Message. --- app/code/Magento/Catalog/i18n/en_US.csv | 2 +- .../Catalog/view/adminhtml/web/component/image-size-field.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/i18n/en_US.csv b/app/code/Magento/Catalog/i18n/en_US.csv index de9f5e1975870..a316bac5d3584 100644 --- a/app/code/Magento/Catalog/i18n/en_US.csv +++ b/app/code/Magento/Catalog/i18n/en_US.csv @@ -615,7 +615,7 @@ Submit,Submit "We don't recognize or support this file extension type.","We don't recognize or support this file extension type." "Configure Product","Configure Product" OK,OK -"This value does not follow the specified format (for example, 200X300).","This value does not follow the specified format (for example, 200X300)." +"This value does not follow the specified format (for example, 200x300).","This value does not follow the specified format (for example, 200x300)." "Select type of option.","Select type of option." "Please add rows to option.","Please add rows to option." "Please select items.","Please select items." diff --git a/app/code/Magento/Catalog/view/adminhtml/web/component/image-size-field.js b/app/code/Magento/Catalog/view/adminhtml/web/component/image-size-field.js index 3ebd4bdf9c804..11a1a65cbab47 100644 --- a/app/code/Magento/Catalog/view/adminhtml/web/component/image-size-field.js +++ b/app/code/Magento/Catalog/view/adminhtml/web/component/image-size-field.js @@ -26,7 +26,7 @@ define([ return !!(m && m[1] > 0 && m[2] > 0); }, - $.mage.__('This value does not follow the specified format (for example, 200X300).') + $.mage.__('This value does not follow the specified format (for example, 200x300).') ); return Abstract.extend({ From f7289237a8a2c352c5d732125a1b5e8a2f7b2bcf Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Mon, 11 Dec 2017 10:33:30 +0200 Subject: [PATCH 504/653] 8410: Custom Checkout Step and Shipping Step are Highlighted --- app/code/Magento/Checkout/view/frontend/web/js/view/payment.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js index 3753091f0db3b..309395d4475ab 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js @@ -47,6 +47,7 @@ define([ /** @inheritdoc */ initialize: function () { var self = this; + this._super(); checkoutDataResolver.resolvePaymentMethod(); From 98e7951b5a55e5f1fe2e8a3f63c4386623000c6c Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko <omiroshnichenko@magento.com> Date: Mon, 11 Dec 2017 11:17:43 +0200 Subject: [PATCH 505/653] 8410: Custom Checkout Step and Shipping Step are Highlighted --- .../view/frontend/web/js/model/step-navigator.js | 14 ++++++++++++-- .../Checkout/view/frontend/web/js/view/payment.js | 14 -------------- .../Checkout/view/frontend/web/js/view/shipping.js | 11 ----------- .../Checkout/frontend/js/view/shipping.test.js | 2 +- 4 files changed, 13 insertions(+), 28 deletions(-) diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/step-navigator.js b/app/code/Magento/Checkout/view/frontend/web/js/model/step-navigator.js index bfcd0d02585bb..2341748bc4e4a 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/model/step-navigator.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/model/step-navigator.js @@ -66,7 +66,7 @@ define([ * @param {*} sortOrder */ registerStep: function (code, alias, title, isVisible, navigate, sortOrder) { - var hash; + var hash, active; if ($.inArray(code, this.validCodes) !== -1) { throw new DOMException('Step code [' + code + '] already registered in step navigator'); @@ -87,6 +87,12 @@ define([ navigate: navigate, sortOrder: sortOrder }); + active = this.getActiveItemIndex(); + steps.each(function (elem, index) { + if (active !== index) { + elem.isVisible(false); + } + }); this.stepCodes.push(code); hash = window.location.hash.replace('#', ''); @@ -111,10 +117,14 @@ define([ getActiveItemIndex: function () { var activeIndex = 0; - steps.sort(this.sortItems).forEach(function (element, index) { + steps.sort(this.sortItems).some(function (element, index) { if (element.isVisible()) { activeIndex = index; + + return true; } + + return false; }); return activeIndex; diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js index 309395d4475ab..c17e5e40d5c98 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment.js @@ -46,22 +46,8 @@ define([ /** @inheritdoc */ initialize: function () { - var self = this; - this._super(); checkoutDataResolver.resolvePaymentMethod(); - - //If some step is active this step will become inactive. - if (stepNavigator.steps()) { - stepNavigator.steps().some(function (element) { - if (element.isVisible()) { - self.isVisible(false); - - return true; - } - }); - } - stepNavigator.registerStep( 'payment', null, diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js index 52078488af4ad..619de95e467f0 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js @@ -82,17 +82,6 @@ define([ this._super(); if (!quote.isVirtual()) { - //If some step is active this step will become inactive. - if (stepNavigator.steps()) { - stepNavigator.steps().some(function (element) { - if (element.isVisible()) { - self.visible(false); - - return true; - } - }); - } - stepNavigator.registerStep( 'shipping', '', diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/view/shipping.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/view/shipping.test.js index b25c36de28a0c..be27e16a13786 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/view/shipping.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/view/shipping.test.js @@ -42,7 +42,7 @@ define(['squire', 'ko', 'jquery', 'jquery/validate'], function (Squire, ko, $) { 'Magento_Checkout/js/action/select-shipping-method': jasmine.createSpy(), 'Magento_Checkout/js/model/shipping-rate-registry': jasmine.createSpy(), 'Magento_Checkout/js/action/set-shipping-information': jasmine.createSpy(), - 'Magento_Checkout/js/model/step-navigator': jasmine.createSpyObj('navigator', ['registerStep', 'steps']), + 'Magento_Checkout/js/model/step-navigator': jasmine.createSpyObj('navigator', ['registerStep']), 'Magento_Ui/js/modal/modal': jasmine.createSpy('modal').and.returnValue(modalStub), 'Magento_Checkout/js/model/checkout-data-resolver': jasmine.createSpyObj( 'dataResolver', From 28cd0926589bf493c906fe340419ec33af5375d4 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Mon, 11 Dec 2017 11:28:42 +0200 Subject: [PATCH 506/653] magento/magento2#12582: Can't remove item description from wishlist --- .../Wishlist/Controller/UpdateTest.php | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Wishlist/Controller/UpdateTest.php b/dev/tests/integration/testsuite/Magento/Wishlist/Controller/UpdateTest.php index 4af27d705f5c9..48f738763b672 100644 --- a/dev/tests/integration/testsuite/Magento/Wishlist/Controller/UpdateTest.php +++ b/dev/tests/integration/testsuite/Magento/Wishlist/Controller/UpdateTest.php @@ -6,11 +6,14 @@ namespace Magento\Wishlist\Controller; +use Magento\Customer\Api\AccountManagementInterface; use Magento\Customer\Helper\View; +use Magento\Customer\Model\Customer; use Magento\Customer\Model\Session; use Magento\Framework\Data\Form\FormKey; use Magento\Framework\Message\ManagerInterface; use Magento\Wishlist\Model\Item; +use Magento\Wishlist\Model\Wishlist; use Psr\Log\LoggerInterface; use Zend\Http\Request; @@ -18,7 +21,7 @@ * Tests updating wishlist item comment. * * @magentoAppIsolation enabled - * @magentoDbIsolation disabled + * @magentoDbIsolation enabled * @magentoAppArea frontend */ class UpdateTest extends \Magento\TestFramework\TestCase\AbstractController @@ -50,14 +53,22 @@ class UpdateTest extends \Magento\TestFramework\TestCase\AbstractController * * @magentoDataFixture Magento/Wishlist/_files/wishlist.php * @dataProvider commentDataProvider + * @param string|null $postDescription + * @param string $expectedResult + * @param boolean $presetComment */ - public function testUpdateComment($postDescription, $postQty, $expectedResult, $presetComment) + public function testUpdateComment($postDescription, $expectedResult, $presetComment) { - $itemId = 1; - $wishlistId = 1; + /** @var Customer $customer */ + $customer = $this->customerSession->getCustomer(); + /** @var Wishlist $wishlist */ + $wishlist = $this->_objectManager + ->get(Wishlist::class) + ->loadByCustomerId($customer->getId(), true); + /** @var Item $item */ + $item = $wishlist->getItemCollection()->getFirstItem(); if ($presetComment) { - $item = $this->_objectManager->create(Item::class)->load($itemId); $item->setDescription($this->description); $item->save(); } @@ -65,16 +76,16 @@ public function testUpdateComment($postDescription, $postQty, $expectedResult, $ $formKey = $this->_objectManager->get(FormKey::class); $this->getRequest()->setPostValue( [ - 'description' => $postDescription, - 'qty' => $postQty, + 'description' => isset($postDescription) ? [$item->getId() => $postDescription] : [], + 'qty' => isset($postDescription) ? [$item->getId() => 1] : [], 'do' => '', 'form_key' => $formKey->getFormKey() ] )->setMethod(Request::METHOD_POST); - $this->dispatch('wishlist/index/update/wishlist_id/' . $wishlistId); - - $item = $this->_objectManager->create(Item::class)->load($itemId); + $this->dispatch('wishlist/index/update/wishlist_id/' . $wishlist->getId()); + // Reload item + $item = $this->_objectManager->get(Item::class)->load($item->getId()); self::assertEquals( $expectedResult, $item->getDescription() @@ -88,22 +99,20 @@ public function testUpdateComment($postDescription, $postQty, $expectedResult, $ */ public function commentDataProvider() { + return [ 'test adding comment' => [ - 'postDescription' => [1 => $this->description], - 'postQty' => [1 => '1'], + 'postDescription' => $this->description, 'expectedResult' => $this->description, 'presetComment' => false ], 'test removing comment' => [ - 'postDescription' => [1 => ''], - 'postQty' => [1 => '1'], + 'postDescription' => '', 'expectedResult' => '', 'presetComment' => true ], 'test not changing comment' => [ - 'postDescription' => [], - 'postQty' => [1 => '1'], + 'postDescription' => null, 'expectedResult' => $this->description, 'presetComment' => true ], @@ -118,9 +127,9 @@ protected function setUp() Session::class, [$logger] ); - /** @var \Magento\Customer\Api\AccountManagementInterface $service */ + /** @var AccountManagementInterface $service */ $service = $this->_objectManager->create( - \Magento\Customer\Api\AccountManagementInterface::class + AccountManagementInterface::class ); $customer = $service->authenticate('customer@example.com', 'password'); $this->customerSession->setCustomerDataAsLoggedIn($customer); From 6fc8031a250d48ef3a6e93f1a02397c15f1d39ca Mon Sep 17 00:00:00 2001 From: Vitaliy Honcharenko <vgoncharenko@magento.com> Date: Mon, 11 Dec 2017 12:35:00 +0200 Subject: [PATCH 507/653] MAGETWO-83644: Update Changelog based on delivered scope --- CHANGELOG.md | 226 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8270f8908a3c7..a5e94e46f89d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,229 @@ +2.2.2 +============= +* GitHub issues: + * [#9968](https://github.com/magento/magento2/issues/9968) -- Canceled invoice can be canceled again (fixed in [#11261](https://github.com/magento/magento2/pull/11261)) + * [#11310](https://github.com/magento/magento2/issues/11310) -- Method "getChildren" sort ordering (fixed in [#11342](https://github.com/magento/magento2/pull/11342)) + * [#11332](https://github.com/magento/magento2/issues/11332) -- How to Fix the wrong input format of Customer date of birth (fixed in [#11351](https://github.com/magento/magento2/pull/11351)) + * [#11207](https://github.com/magento/magento2/issues/11207) -- Shipment API won't append comment to email (fixed in [#11383](https://github.com/magento/magento2/pull/11383)) + * [#10795](https://github.com/magento/magento2/issues/10795) -- Shipping method radios have duplicate IDs on cart page (fixed in [#11406](https://github.com/magento/magento2/pull/11406)) + * [#10941](https://github.com/magento/magento2/issues/10941) -- Responsive Design Issue on Mobile with Magento 2.1.9 (fixed in [#11430](https://github.com/magento/magento2/pull/11430)) + * [#10007](https://github.com/magento/magento2/issues/10007) -- ProductAlert: Product alerts not showing in admin side product edit page (fixed in [#11445](https://github.com/magento/magento2/pull/11445)) + * [#10231](https://github.com/magento/magento2/issues/10231) -- Custom URL Rewrite Not working (fixed in [#11470](https://github.com/magento/magento2/pull/11470)) + * [#11176](https://github.com/magento/magento2/issues/11176) -- Configured table prefix is not recognized in CLI admin:user:create (fixed in [#11199](https://github.com/magento/magento2/pull/11199)) + * [#11275](https://github.com/magento/magento2/issues/11275) -- Call to a member function addCrumb() (fixed in [#11299](https://github.com/magento/magento2/pull/11299)) + * [#10441](https://github.com/magento/magento2/issues/10441) -- State/Province Not displayed after edit Billing Address on Sales Orders - Backend Admin. (fixed in [#11381](https://github.com/magento/magento2/pull/11381)) + * [#11140](https://github.com/magento/magento2/issues/11140) -- Going to '/admin' while using storecodes in url and a different adminhtml url will throw exception (fixed in [#11460](https://github.com/magento/magento2/pull/11460)) + * [#10765](https://github.com/magento/magento2/issues/10765) -- Export data from grid not adding custom rendered data magento2 (fixed in [#11437](https://github.com/magento/magento2/pull/11437)) + * [#7678](https://github.com/magento/magento2/issues/7678) -- StockItemCriteria::setProductsFilter doesn't work with array of ids (fixed in [#11500](https://github.com/magento/magento2/pull/11500)) + * [#9783](https://github.com/magento/magento2/issues/9783) -- Multiple parameters in widget.xml not allowed (fixed in [#11495](https://github.com/magento/magento2/pull/11495)) + * [#10824](https://github.com/magento/magento2/issues/10824) -- Cannot add new columns to item grid in admin sales_order_view layout (fixed in [#11235](https://github.com/magento/magento2/pull/11235)) + * [#9919](https://github.com/magento/magento2/issues/9919) -- Pattern Validation via UI Component Fails to Interpret String as RegEx Pattern (fixed in [#11565](https://github.com/magento/magento2/pull/11565)) + * [#5439](https://github.com/magento/magento2/issues/5439) -- Newsletter subscription (fixed in [#11317](https://github.com/magento/magento2/pull/11317)) + * [#10856](https://github.com/magento/magento2/issues/10856) -- Sync billing with shipping address on Admin Reorder and Admin Customer Create Order page does not work for Existing address selected (fixed in [#11385](https://github.com/magento/magento2/pull/11385)) + * [#10025](https://github.com/magento/magento2/issues/10025) -- Integration tests don't reset the database (fixed in [#11499](https://github.com/magento/magento2/pull/11499)) + * [#10301](https://github.com/magento/magento2/issues/10301) -- Customer review report search Bug in 2.1.x, 2.2 (fixed in [#11522](https://github.com/magento/magento2/pull/11522)) + * [#11540](https://github.com/magento/magento2/issues/11540) -- Magento sets iso invalid language code in html header (fixed in [#11561](https://github.com/magento/magento2/pull/11561)) + * [#11586](https://github.com/magento/magento2/issues/11586) -- Cron install / remove via command messes up stderr 2>&1 entries (fixed in [#11591](https://github.com/magento/magento2/pull/11591)) + * [#6350](https://github.com/magento/magento2/issues/6350) -- Frontend: Datepicker/calendar control does not use the store locale (fixed in [#11057](https://github.com/magento/magento2/pull/11057)) + * [#11328](https://github.com/magento/magento2/issues/11328) -- app:config:dump adds extra space every time in multiline array value (fixed in [#11439](https://github.com/magento/magento2/pull/11439)) + * [#7591](https://github.com/magento/magento2/issues/7591) -- PayPal module, "didgit" misspelling (fixed in [#11673](https://github.com/magento/magento2/pull/11673)) + * [#7767](https://github.com/magento/magento2/issues/7767) -- in system.xml translate phrase not work (fixed in [#11675](https://github.com/magento/magento2/pull/11675)) + * [#7915](https://github.com/magento/magento2/issues/7915) -- customer objects are equal to eachother after observing event customer_save_after_data_object (fixed in [#11676](https://github.com/magento/magento2/pull/11676)) + * [#10275](https://github.com/magento/magento2/issues/10275) -- Admin global search - submit by enter doesn't work (fixed in [#11250](https://github.com/magento/magento2/pull/11250)) + * [#11022](https://github.com/magento/magento2/issues/11022) -- GET v1/products/attribute-sets/sets/list inconsistent return result (fixed in [#11421](https://github.com/magento/magento2/pull/11421)) + * [#5956](https://github.com/magento/magento2/issues/5956) -- Untranslatable string "Please enter the same value again." (fixed in [#11440](https://github.com/magento/magento2/pull/11440)) + * [#9944](https://github.com/magento/magento2/issues/9944) -- Name attribute shows empty when creating custom fields on product creation form (fixed in [#11637](https://github.com/magento/magento2/pull/11637)) + * [#10168](https://github.com/magento/magento2/issues/10168) -- Coupon codes not showing in invoice (fixed in [#11635](https://github.com/magento/magento2/pull/11635)) + * [#9763](https://github.com/magento/magento2/issues/9763) -- When go checkout,Cart Price Rules 25%test coupon code can go wrong (fixed in [#11710](https://github.com/magento/magento2/pull/11710)) + * [#11157](https://github.com/magento/magento2/issues/11157) -- nginx.sample.conf missing heath_check.php? (fixed in [#11690](https://github.com/magento/magento2/pull/11690)) + * [#11322](https://github.com/magento/magento2/issues/11322) -- User.ini files specify 768M - Docs recommend at least 1G (fixed in [#11734](https://github.com/magento/magento2/pull/11734)) + * [#7927](https://github.com/magento/magento2/issues/7927) -- Dashboard graph has broken y-axis range (fixed in [#11751](https://github.com/magento/magento2/pull/11751)) + * [#7099](https://github.com/magento/magento2/issues/7099) -- Admin: field labels wrapping poorly (fixed in [#11745](https://github.com/magento/magento2/pull/11745)) + * [#9869](https://github.com/magento/magento2/issues/9869) -- datetime type product attribute showing current date (fixed in [#11749](https://github.com/magento/magento2/pull/11749)) + * [#11365](https://github.com/magento/magento2/issues/11365) -- "Ignore this notification" isn't working (fixed in [#11410](https://github.com/magento/magento2/pull/11410)) + * [#6891](https://github.com/magento/magento2/issues/6891) -- Add-to-cart checkbox still visible when $canItemsAddToCart = false (fixed in [#11610](https://github.com/magento/magento2/pull/11610)) + * [#11729](https://github.com/magento/magento2/issues/11729) -- Exported Excel with negative number can't be opened by MS Office (fixed in [#11757](https://github.com/magento/magento2/pull/11757)) + * [#6924](https://github.com/magento/magento2/issues/6924) -- Magento 2.1.0 - "General system exception happened" on Import .csv (fixed in [#11363](https://github.com/magento/magento2/pull/11363)) + * [#7640](https://github.com/magento/magento2/issues/7640) -- X-Magento-Tags header containing whitespaces causes exception (fixed in [#11767](https://github.com/magento/magento2/pull/11767)) + * [#4711](https://github.com/magento/magento2/issues/4711) -- Improve error reporting for products images import (fixed in [#11779](https://github.com/magento/magento2/pull/11779)) + * [#4696](https://github.com/magento/magento2/issues/4696) -- Admin product search - Pressing enter does not submit (fixed in [#11827](https://github.com/magento/magento2/pull/11827)) + * [#11581](https://github.com/magento/magento2/issues/11581) -- Reference to wrong / non-existing class (fixed in [#11830](https://github.com/magento/magento2/pull/11830)) + * [#10908](https://github.com/magento/magento2/issues/10908) -- [2.2.0-rc3.0] Language switcher is broken when using multiple times (fixed in [#11337](https://github.com/magento/magento2/pull/11337)) + * [#11211](https://github.com/magento/magento2/issues/11211) -- Store View switcher not working on front-end and it throws an error (fixed in [#11337](https://github.com/magento/magento2/pull/11337)) + * [#2991](https://github.com/magento/magento2/issues/2991) -- Products added to cart with REST API give total prices equal to zero (fixed in [#11458](https://github.com/magento/magento2/pull/11458)) + * [#10032](https://github.com/magento/magento2/issues/10032) -- Download back-up .tgz always takes the latest that's created (fixed in [#11595](https://github.com/magento/magento2/pull/11595)) + * [#11534](https://github.com/magento/magento2/issues/11534) -- Values of Visual Swatch Attribute drop down is not work correct (fixed in [#11747](https://github.com/magento/magento2/pull/11747)) + * [#10291](https://github.com/magento/magento2/issues/10291) -- Magento 2 Loading custom option dropdown issue (fixed in [#11824](https://github.com/magento/magento2/pull/11824)) + * [#11095](https://github.com/magento/magento2/issues/11095) -- Magento_Tax "postcode is a required field" when upgrading from 2.1.9 to 2.2 (fixed in [#11651](https://github.com/magento/magento2/pull/11651)) + * [#8236](https://github.com/magento/magento2/issues/8236) -- CMS blocks are not validated against having same store and identifier (fixed in [#11802](https://github.com/magento/magento2/pull/11802)) + * [#4808](https://github.com/magento/magento2/issues/4808) -- The price of product custom option can't be set to 0. (fixed in [#11843](https://github.com/magento/magento2/pull/11843)) + * [#9566](https://github.com/magento/magento2/issues/9566) -- Status label is wrong in admin (fixed in [#11397](https://github.com/magento/magento2/pull/11397)) + * [#5015](https://github.com/magento/magento2/issues/5015) -- Report error csv doesn't work when trying to import a csv file with semicolon delimiter (fixed in [#11732](https://github.com/magento/magento2/pull/11732)) + * [#10682](https://github.com/magento/magento2/issues/10682) -- Meta description and keywords transform to html entities for non latin/cyrilic characters in category and product pages (fixed in [#11829](https://github.com/magento/magento2/pull/11829)) + * [#10185](https://github.com/magento/magento2/issues/10185) -- New Orders are not in Order grid after data migration from M 1.7.0.2 to M 2.1.7 (fixed in [#11911](https://github.com/magento/magento2/pull/11911)) + * [#8970](https://github.com/magento/magento2/issues/8970) -- Cannot assign products to categories not under tree root (fixed in [#11817](https://github.com/magento/magento2/pull/11817)) + * [#9028](https://github.com/magento/magento2/issues/9028) -- You cannot set a 303 redirect response using a result factory (fixed in [#11405](https://github.com/magento/magento2/pull/11405)) + * [#11697](https://github.com/magento/magento2/issues/11697) -- Theme: Added html node to page xml root, cause validation error (fixed in [#11858](https://github.com/magento/magento2/pull/11858)) + * [#8954](https://github.com/magento/magento2/issues/8954) -- Error While Trying To Load Quote Item Collection Using Magento\Quote\Model\ResourceModel\QuoteItem\Collection::getItems() (fixed in [#11869](https://github.com/magento/magento2/pull/11869)) + * [#8799](https://github.com/magento/magento2/issues/8799) -- Image brackground (fixed in [#11889](https://github.com/magento/magento2/pull/11889)) + * [#11868](https://github.com/magento/magento2/issues/11868) -- "Add Products" button has been duplicated after the customer group was changed (fixed in [#11949](https://github.com/magento/magento2/pull/11949)) + * [#11898](https://github.com/magento/magento2/issues/11898) -- Zip code Netherlands should allow zipcode without space (fixed in [#11959](https://github.com/magento/magento2/pull/11959)) + * [#11996](https://github.com/magento/magento2/issues/11996) -- Magento 2 Store Code validation regex: doesn't support uppercase letters in store code (fixed in [#12011](https://github.com/magento/magento2/pull/12011)) + * [#7995](https://github.com/magento/magento2/issues/7995) -- If you leave as default, shipping lines disappear (fixed in [#12013](https://github.com/magento/magento2/pull/12013)) + * [#8846](https://github.com/magento/magento2/issues/8846) -- Attribute option value uniqueness is not checked if created via REST Api (fixed in [#11785](https://github.com/magento/magento2/pull/11785)) + * [#11700](https://github.com/magento/magento2/issues/11700) -- "Something Went Wrong" error for limited access admin user (fixed in [#11993](https://github.com/magento/magento2/pull/11993)) + * [#12017](https://github.com/magento/magento2/issues/12017) -- Cross-sell product placeholder image size issue (fixed in [#12018](https://github.com/magento/magento2/pull/12018)) + * [#10583](https://github.com/magento/magento2/issues/10583) -- Checkout place order exception when using a new address (fixed in [#11556](https://github.com/magento/magento2/pull/11556)) + * [#4004](https://github.com/magento/magento2/issues/4004) -- Newsletter Subscriber create-date not set, and change_status_at broken (fixed in [#11879](https://github.com/magento/magento2/pull/11879)) + * [#7225](https://github.com/magento/magento2/issues/7225) -- [BUG] [Magento 2.1.2] Programmatically creating an empty dropdown attribute, "apply_to" is set to NULL (from "simple") after adding options through store admin (fixed in [#11588](https://github.com/magento/magento2/pull/11588)) + * [#11197](https://github.com/magento/magento2/issues/11197) -- Blank page at the checkout 'shipping' step (fixed in [#11958](https://github.com/magento/magento2/pull/11958)) + * [#11880](https://github.com/magento/magento2/issues/11880) -- Magento 2.1.9 Configurable::getUsedProducts returns a different array after product collections is cached (fixed in [#12107](https://github.com/magento/magento2/pull/12107)) + * [#10811](https://github.com/magento/magento2/issues/10811) -- Replace FollowSymLinks with SymLinksIfOwnerMatch (fixed in [#11461](https://github.com/magento/magento2/pull/11461)) + * [#10920](https://github.com/magento/magento2/issues/10920) -- Sku => Entity_id relations are fetched inefficiently when inserting attributes values during product import (fixed in [#11719](https://github.com/magento/magento2/pull/11719)) + * [#6802](https://github.com/magento/magento2/issues/6802) -- Magento\Search\Helper\getSuggestUrl() not used in search template (fixed in [#11722](https://github.com/magento/magento2/pull/11722)) + * [#9151](https://github.com/magento/magento2/issues/9151) -- Sitemap.xml: lastmod timestamp can contain invalid dates (fixed in [#11902](https://github.com/magento/magento2/pull/11902)) + * [#10195](https://github.com/magento/magento2/issues/10195) -- Order relation child is not set during edit operation. (fixed in [#11988](https://github.com/magento/magento2/pull/11988)) + * [#11793](https://github.com/magento/magento2/issues/11793) -- Magento2.1.5 admin shipping report shows wrong currency code (fixed in [#11962](https://github.com/magento/magento2/pull/11962)) + * [#6661](https://github.com/magento/magento2/issues/6661) -- XHTML templates Don't Use Schema URNs (fixed in [#12031](https://github.com/magento/magento2/pull/12031)) + * [#12079](https://github.com/magento/magento2/issues/12079) -- Products in cart report error when we have grouped or bundle product (fixed in [#12082](https://github.com/magento/magento2/pull/12082)) + * [#9768](https://github.com/magento/magento2/issues/9768) -- Admin dashboard Most Viewed Products Tab only gives default attribute set's products (fixed in [#12139](https://github.com/magento/magento2/pull/12139)) + * [#6238](https://github.com/magento/magento2/issues/6238) -- Meta description allows too many characters (fixed in [#11914](https://github.com/magento/magento2/pull/11914)) + * [#11230](https://github.com/magento/magento2/issues/11230) -- Unit test fails after fresh installation (fixed in [#12144](https://github.com/magento/magento2/pull/12144)) + * [#10810](https://github.com/magento/magento2/issues/10810) -- Add support of apache2.4 commands in htaccess (fixed in [#11459](https://github.com/magento/magento2/pull/11459)) + * [#10834](https://github.com/magento/magento2/issues/10834) -- signing in after selecting checkout button, will not end up to checkout page! (fixed in [#11876](https://github.com/magento/magento2/pull/11876)) + * [#10477](https://github.com/magento/magento2/issues/10477) -- Cart price rule has failed if use dropdown attribute (fixed in [#11274](https://github.com/magento/magento2/pull/11274)) + * [#11832](https://github.com/magento/magento2/issues/11832) -- Create order (on Customer edit page) - not working from admin environment (fixed in [#11952](https://github.com/magento/magento2/pull/11952)) + * [#10014](https://github.com/magento/magento2/issues/10014) -- Newsletter subscriptions status not isolated between multi stores (fixed in [#12035](https://github.com/magento/magento2/pull/12035)) + * [#11532](https://github.com/magento/magento2/issues/11532) -- Duplicate Simple Product Throws Error: Undefined offset: 0 in SaveHandler.php on line 122 (fixed in [#12001](https://github.com/magento/magento2/pull/12001)) + * [#10628](https://github.com/magento/magento2/issues/10628) -- Color attribute swatches are not visible if sorting is enabled (fixed in [#12077](https://github.com/magento/magento2/pull/12077)) + * [#8022](https://github.com/magento/magento2/issues/8022) -- Uncaught Error: Call to a member function addItem() on array in app/code/Magento/Sales/Model/Order/Shipment.php (fixed in [#12173](https://github.com/magento/magento2/pull/12173)) +* GitHub pull requests: + * [#11240](https://github.com/magento/magento2/pull/11240) -- Virtual Theme load: Check for null to actually reach the code that handles this case to t… (by @leptoquark1) + * [#11261](https://github.com/magento/magento2/pull/11261) -- Prevent invoice cancelation multiple times 2.2-develop [Backport] (by @osrecio) + * [#11342](https://github.com/magento/magento2/pull/11342) -- ADDED $sortByPostion flag to getChildren() (by @denisristic) + * [#11351](https://github.com/magento/magento2/pull/11351) -- Fix the wrong input format of Customer date of birth (by @manuelson) + * [#11359](https://github.com/magento/magento2/pull/11359) -- [Backport 2.2-develop] Unable to manage (install/uninstall) cron via bin/magento cron:install / cron:remove with multiple installations against same crontab (by @adrian-martinez-interactiv4) + * [#11383](https://github.com/magento/magento2/pull/11383) -- Append shipment comment to shipment if appendComment is true (by @JeroenVanLeusden) + * [#11406](https://github.com/magento/magento2/pull/11406) -- Added carrier code to ID to distinguish shipping methods (by @peterjaap) + * [#11430](https://github.com/magento/magento2/pull/11430) -- Fix toolbar-amount placing in mobile device (by @slackerzz) + * [#11445](https://github.com/magento/magento2/pull/11445) -- Show product alerts in admin product detail [backport 2.2] (by @raumatbel) + * [#11470](https://github.com/magento/magento2/pull/11470) -- FR#10231_22 Custom URL Rewrite Not working [backport 2.2] (by @mrodespin) + * [#11493](https://github.com/magento/magento2/pull/11493) -- Add "optional" translation in checkout password field (by @JeroenVanLeusden) + * [#11199](https://github.com/magento/magento2/pull/11199) -- Add db-prefix from env conf when command admin:user:create is executed (by @osrecio) + * [#11299](https://github.com/magento/magento2/pull/11299) -- Update Guest.php (by @lano-vargas) + * [#11381](https://github.com/magento/magento2/pull/11381) -- Save region correctly to save sales address from admin (by @raumatbel) + * [#11460](https://github.com/magento/magento2/pull/11460) -- [ISSUE-11140][BUGFIX] Skip store code admin from being detected in ca… (by @diglin) + * [#11505](https://github.com/magento/magento2/pull/11505) -- [Backport-2.2] Retain additional cron history by default (by @mpchadwick) + * [#11437](https://github.com/magento/magento2/pull/11437) -- Add `confirmation` and `lock_expires ` to customer export csv - Fix issue 10765 (by @convenient) + * [#11486](https://github.com/magento/magento2/pull/11486) -- [Backport 2.2]Add VAT number to email source variables (by @JeroenVanLeusden) + * [#11495](https://github.com/magento/magento2/pull/11495) -- MAGETWO-75743: Fix for #9783 Multiple parameters in widget.… (by @diazwatson) + * [#11500](https://github.com/magento/magento2/pull/11500) -- MAGETWO-81245: Handling all setProductsFilter items in array as arguments (by @kirmorozov) + * [#11555](https://github.com/magento/magento2/pull/11555) -- Travis CI functional tests maintenance for 2.2-develop (by @ishakhsuvarov) + * [#11235](https://github.com/magento/magento2/pull/11235) -- [2.2-develop] Add static test to detect blocks without name attribute (by @ihor-sviziev) + * [#11569](https://github.com/magento/magento2/pull/11569) -- Fixed double space typo (by @dverkade) + * [#11565](https://github.com/magento/magento2/pull/11565) -- Fix "pattern" UI Component validation (by @bap14) + * [#11317](https://github.com/magento/magento2/pull/11317) -- [Backport 2.2-develop] Send email to subscribers only when are new (by @osrecio) + * [#11385](https://github.com/magento/magento2/pull/11385) -- Fix #10856: Sync billing with shipping address on Admin Order Page (by @joni-jones) + * [#11499](https://github.com/magento/magento2/pull/11499) -- Ensure database is cleared/Magento reinstalled when TESTS_CLEANUP is enabled (by @joshuaswarren) + * [#11510](https://github.com/magento/magento2/pull/11510) -- Add interaction to admin:user:create command (by @cmuench) + * [#11522](https://github.com/magento/magento2/pull/11522) -- [Backport 2.2-develop] Fix Filter Customer Report Review (by @osrecio) + * [#11553](https://github.com/magento/magento2/pull/11553) -- [2.2 Backport] ProductRepository sku cache is corrupted when cacheLimit is reached (by @heldchen) + * [#11561](https://github.com/magento/magento2/pull/11561) -- Magento sets ISO invalid language code (by @crissanclick) + * [#11591](https://github.com/magento/magento2/pull/11591) -- [Backport 2.2-develop] #11586 Fix duplicated crontab 2>&1 expression (by @adrian-martinez-interactiv4) + * [#11439](https://github.com/magento/magento2/pull/11439) -- [Backport 2.2-develop] #11328 : app:config:dump adds extra space every time in multiline array value (by @adrian-martinez-interactiv4) + * [#11675](https://github.com/magento/magento2/pull/11675) -- MAGETWO-77672: in system.xml translate phrase not work, if comment starts from new line. (by @nmalevanec) + * [#11673](https://github.com/magento/magento2/pull/11673) -- [BACKPORT 2.2] [TASK] Removed Typo in Paypal TestCase didgit => digit (by @lewisvoncken) + * [#11704](https://github.com/magento/magento2/pull/11704) -- [Backport 2.2-develop] Travis: surround variable TRAVIS_BRANCH with double-quotes instead of single-quotes (by @adrian-martinez-interactiv4) + * [#11677](https://github.com/magento/magento2/pull/11677) -- [BACKPORT 2.2] [TASK] Moved Customer Groups Menu Item from Other sett… (by @lewisvoncken) + * [#11676](https://github.com/magento/magento2/pull/11676) -- #7915: customer objects are equal to eachother after observing event customer_save_after_data_object (by @RomaKis) + * [#11250](https://github.com/magento/magento2/pull/11250) -- Fixing #10275 keyboard submit of adminhtml suggest form. (by @romainruaud) + * [#11421](https://github.com/magento/magento2/pull/11421) -- FIX #11022 in 2.2-develop: Filter Groups of search criteria parameter have not been included for further processing (by @davidverholen) + * [#11440](https://github.com/magento/magento2/pull/11440) -- Add missing translations in Magento_UI (by @JeroenVanLeusden) + * [#11643](https://github.com/magento/magento2/pull/11643) -- Fixed ability to set field config from layout xml #11302 [backport 2.2] (by @vovayatsyuk) + * [#11637](https://github.com/magento/magento2/pull/11637) -- MAGETWO-81311: Check the length of the array before attempting to sli… (by @briscoda) + * [#11635](https://github.com/magento/magento2/pull/11635) -- Coupon codes not showing in invoice (by @crissanclick) + * [#11690](https://github.com/magento/magento2/pull/11690) -- Add a health check to the NGINX configuration sample (by @andrewhowdencom) + * [#11710](https://github.com/magento/magento2/pull/11710) -- Allow coupon code with special charater to be applied to order in checkout (by @gabrielqs-redstage) + * [#11720](https://github.com/magento/magento2/pull/11720) -- Fix Notice: freePackageValue is undefined (by @amenk) + * [#11734](https://github.com/magento/magento2/pull/11734) -- [TASK] Updated user.ini according to Magento DevDocs (by @lewisvoncken) + * [#11751](https://github.com/magento/magento2/pull/11751) -- [Backport 2.2-develop] Dashboard Fix Y Axis for range (by @osrecio) + * [#11749](https://github.com/magento/magento2/pull/11749) -- [Backport 2.2-develop] Fix datetime type product that show current date when is empty in grids (by @enriquei4) + * [#11745](https://github.com/magento/magento2/pull/11745) -- [Backport 2.2-develop] Fix label to avoid wrapping poorly,now break by word (by @enriquei4) + * [#11765](https://github.com/magento/magento2/pull/11765) -- Allows modules with underscores in name to add blocks to layout via XML (by @bentideswell) + * [#11410](https://github.com/magento/magento2/pull/11410) -- "Ignore this notification" isn't working (by @crissanclick) + * [#11607](https://github.com/magento/magento2/pull/11607) -- [Backport 2.2-develop] Fix AcountManagementTest unit test fail randomly (by @adrian-martinez-interactiv4) + * [#11610](https://github.com/magento/magento2/pull/11610) -- FR#6891_22 Add-to-cart checkbox still visible when = false (by @mrodespin) + * [#11757](https://github.com/magento/magento2/pull/11757) -- Fix #11729 - negative value in excel export [M2.2] (by @hauso) + * [#11363](https://github.com/magento/magento2/pull/11363) -- Issue #6924: Unmask exception message during product import (by @tim-bezhashvyly) + * [#11425](https://github.com/magento/magento2/pull/11425) -- Magento setup:install interactive shell (by @denisristic) + * [#11767](https://github.com/magento/magento2/pull/11767) -- 7640: X-Magento-Tags header containing whitespaces causes exception (by @nmalevanec) + * [#11779](https://github.com/magento/magento2/pull/11779) -- MAGETWO-4711: Improve error reporting for products images import. (by @p-bystritsky) + * [#11830](https://github.com/magento/magento2/pull/11830) -- Fix #11581: Reference to wrong / non-existing class (by @dverkade) + * [#11827](https://github.com/magento/magento2/pull/11827) -- Admin product search - Pressing enter does not submit #4696 (by @bohemiorulo) + * [#11337](https://github.com/magento/magento2/pull/11337) -- #11211 Fix Store View switcher (by @thiagolima-bm) + * [#11458](https://github.com/magento/magento2/pull/11458) -- Products added to cart with REST API give total prices equal to zero (by @peterjaap) + * [#11595](https://github.com/magento/magento2/pull/11595) -- Fix issue #10032 - Download back-up .tgz always takes the latest that's created (2.2-develop) (by @PieterCappelle) + * [#11747](https://github.com/magento/magento2/pull/11747) -- [Backport 2.2-develop] FIX show visual swatches in admin - product attribute (by @enriquei4) + * [#11824](https://github.com/magento/magento2/pull/11824) -- Magetwo 70954: Remove the component.clear from the custom options type. This causes the 'elem' array to become out of sync with the recordData (by @briscoda) + * [#11651](https://github.com/magento/magento2/pull/11651) -- [BUGFIX] Solved error while upgrading from 2.1 to 2.2 (by @lewisvoncken) + * [#11802](https://github.com/magento/magento2/pull/11802) -- #8236 FIX CMS blocks (by @thiagolima-bm) + * [#11843](https://github.com/magento/magento2/pull/11843) -- Save the price 0 as price in custom options [backport 2.2] (by @raumatbel) + * [#11854](https://github.com/magento/magento2/pull/11854) -- FilterBuilder Doc Block Update (by @ByteCreation) + * [#11397](https://github.com/magento/magento2/pull/11397) -- Fix for #9566: Show the correct label in the admin (by @michielgerritsen) + * [#11732](https://github.com/magento/magento2/pull/11732) -- MAGETWO-5015: Report error csv doesn't work when trying to import a csv file with semicolon delimiter. (by @p-bystritsky) + * [#11829](https://github.com/magento/magento2/pull/11829) -- Fix #10682: Meta description and keywords transform to html entities (by @dverkade) + * [#11933](https://github.com/magento/magento2/pull/11933) -- Changed constructor typo in Javascript class (by @dverkade) + * [#11911](https://github.com/magento/magento2/pull/11911) -- Order grid - Sort by Purchase Date Desc by default (by @ihor-sviziev) + * [#11817](https://github.com/magento/magento2/pull/11817) -- GITHUB-8970: Cannot assign products to categories not under tree root. (by @p-bystritsky) + * [#11405](https://github.com/magento/magento2/pull/11405) -- Allow setting of http response status code in a Redirection (by @gabrielqs-redstage) + * [#11858](https://github.com/magento/magento2/pull/11858) -- #11697 Theme: Added html node to page xml root, cause validation error (by @adrian-martinez-interactiv4) + * [#11869](https://github.com/magento/magento2/pull/11869) -- Resolve Error While Trying To Load Quote Item Collection Using Magent… (by @neeta-wagento) + * [#11889](https://github.com/magento/magento2/pull/11889) -- Save background color correctly in images. [backport 2.2] (by @raumatbel) + * [#11917](https://github.com/magento/magento2/pull/11917) -- [BACKPORT 2.2] [TASK] Add resetPassword call to the webapi (by @lewisvoncken) + * [#11949](https://github.com/magento/magento2/pull/11949) -- 11868: "Add Products" button has been duplicated after the customer group was changed. (by @nmalevanec) + * [#11959](https://github.com/magento/magento2/pull/11959) -- #11898 - Change NL PostCode Pattern (by @osrecio) + * [#11620](https://github.com/magento/magento2/pull/11620) -- Check attribute unique between same fields in magento commerce (by @raumatbel) + * [#11770](https://github.com/magento/magento2/pull/11770) -- Product attribute creation page handles Storefront tab visibility wrong (by @euronetzrt) + * [#11863](https://github.com/magento/magento2/pull/11863) -- Update wrong layout update xml handle installed in CMS Home Page by default (by @adrian-martinez-interactiv4) + * [#12011](https://github.com/magento/magento2/pull/12011) -- [backport 2.2] Magento 2 Store Code validation regex: doesn't support uppercase letters in store code (by @manuelson) + * [#12013](https://github.com/magento/magento2/pull/12013) -- Add validation for number of street lines (by @crissanclick) + * [#11785](https://github.com/magento/magento2/pull/11785) -- fix #8846: avoid duplicated attribute option values (by @gomencal) + * [#11993](https://github.com/magento/magento2/pull/11993) -- 11700: "Something Went Wrong" error for limited access admin user (by @RomaKis) + * [#12018](https://github.com/magento/magento2/pull/12018) -- Magento 2.2.0 Solution for Cross-sell product placeholder image size … (by @emiprotech) + * [#11556](https://github.com/magento/magento2/pull/11556) -- Fix #10583: Checkout place order exception when using a new address (by @joni-jones) + * [#11879](https://github.com/magento/magento2/pull/11879) -- #4004: Newsletter Subscriber create-date not set, and change_status_at broken (by @nemesis-back) + * [#11588](https://github.com/magento/magento2/pull/11588) -- Fix Issue #7225 - Remove hardcoding of apply_to when saving attributes (by @MartinPeverelli) + * [#11958](https://github.com/magento/magento2/pull/11958) -- 11197: Blank page at the checkout 'shipping' step[backport]. (by @nmalevanec) + * [#12091](https://github.com/magento/magento2/pull/12091) -- Fix "Undefined variable: responseAjax" notice when trying to save a shipment package (by @lazyguru) + * [#11461](https://github.com/magento/magento2/pull/11461) -- [ISSUE-10811][BUGFIX] Update .htaccess.sample to replace FollowSymLin… (by @diglin) + * [#11719](https://github.com/magento/magento2/pull/11719) -- 10920: Sku => Entity_id relations are fetched inefficiently when inserting attributes values during product import. (by @nmalevanec) + * [#11722](https://github.com/magento/magento2/pull/11722) -- 6802: Magento\Search\Helper\getSuggestUrl() not used in search template. (by @nmalevanec) + * [#11857](https://github.com/magento/magento2/pull/11857) -- CMS Page - CMS Page - Force validate layout update xml in production mode when saving CMS Page - Handle layout update xml validation exceptions (by @adrian-martinez-interactiv4) + * [#11902](https://github.com/magento/magento2/pull/11902) -- #9151: [Github] Sitemap.xml: lastmod timestamp can contain invalid dates (by @serhii-balko) + * [#11947](https://github.com/magento/magento2/pull/11947) -- Fix json encoded attribute backend type when attribute value is null (by @tkotosz) + * [#11962](https://github.com/magento/magento2/pull/11962) -- 11793: Magento2.1.5 admin shipping report shows wrong currency code (by @RomaKis) + * [#11988](https://github.com/magento/magento2/pull/11988) -- 10195: Order relation child is not set during edit operation(backport from 2.3 to 2.2) (by @RomaKis) + * [#12031](https://github.com/magento/magento2/pull/12031) -- Improve urn in xhtml (by @enriquei4) + * [#12082](https://github.com/magento/magento2/pull/12082) -- Products in cart report error when we have grouped or bundle product (by @mihaifaget) + * [#12131](https://github.com/magento/magento2/pull/12131) -- [Backport 2.2] Close PayPal popup window in case of rejected request #10820 (by @vovayatsyuk) + * [#12139](https://github.com/magento/magento2/pull/12139) -- 9768: Admin dashboard Most Viewed Products Tab only gives default attribute set's products(backport for 2.2) (by @RomaKis) + * [#11914](https://github.com/magento/magento2/pull/11914) -- [BACKPORT 2.2] [BUGFIX] All UI input fields should have maxlength of 255 because of V… (by @lewisvoncken) + * [#11944](https://github.com/magento/magento2/pull/11944) -- Report Handled Exceptions To New Relic (by @mpchadwick) + * [#12144](https://github.com/magento/magento2/pull/12144) -- Removed FileClassScannerTest dependency to "Magento_Catalog" (by @wexo-team) + * [#11459](https://github.com/magento/magento2/pull/11459) -- close #10810 Migrates Apache Access Syntax to 2.4 on Apache >= 2.4 (by @jonashrem) + * [#11968](https://github.com/magento/magento2/pull/11968) -- Fix bug: Customer import deletes exiting customer entity Fields (by @jalogut) + * [#12061](https://github.com/magento/magento2/pull/12061) -- Cleanup for object manager references and depricated method (by @atishgoswami) + * [#12136](https://github.com/magento/magento2/pull/12136) -- update button.phtml overcomplicated translation phrase. 2.2 (by @ChuckyK) + * [#11876](https://github.com/magento/magento2/pull/11876) -- After logging in customer is now not redirecting to Customer Dashboard by default (by @p-bystritsky) + * [#11274](https://github.com/magento/magento2/pull/11274) -- Fix #10477 Check cart rule subselect conditions against quote item children too (by @marinagociu) + * [#11952](https://github.com/magento/magento2/pull/11952) -- 11832: Create order (on Customer edit page) - not working from admin environment (by @RomaKis) + * [#12035](https://github.com/magento/magento2/pull/12035) -- Fix newsletter subscriptions between stores (by @sbaixauli) + * [#12001](https://github.com/magento/magento2/pull/12001) -- 11532: Duplicate Simple Product Throws Error: Undefined offset: 0 in SaveHandler.php on line 122 (by @RomaKis) + * [#12077](https://github.com/magento/magento2/pull/12077) -- 10628: Color attribute swatches are not visible if sorting is enabled (by @RomaKis) + * [#12130](https://github.com/magento/magento2/pull/12130) -- [Backport 2.2] MAGETWO-71697: Fix possible bug when saving address with empty street line #10582 (by @vovayatsyuk) + * [#12141](https://github.com/magento/magento2/pull/12141) -- Fix js error when disable/enable wysiwyg editor (by @vovayatsyuk) + * [#12173](https://github.com/magento/magento2/pull/12173) -- 8022: Uncaught Error: Call to a member function addItem() on array in app/code/Magento/Sales/Model/Order/Shipment.php(backport to 2.2) (by @RomaKis) + 2.2.1 ============= * GitHub issues: From 8bde63347f87cde07962ad1ffd59320513697897 Mon Sep 17 00:00:00 2001 From: nmalevanec <mikola.malevanec@transoftgroup.com> Date: Mon, 11 Dec 2017 13:09:56 +0200 Subject: [PATCH 508/653] 8176: LinkManagement::getChildren() does not include product visibility. --- .../Model/Product/Type/Configurable.php | 14 ++++++++++++-- .../Unit/Model/Product/Type/ConfigurableTest.php | 5 ----- .../ConfigurableProduct/Api/LinkManagementTest.php | 3 +++ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php index e6345af40f37a..fbaa4e60c29cc 100644 --- a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php +++ b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\ConfigurableProduct\Model\Product\Type; use Magento\Catalog\Api\Data\ProductAttributeInterface; @@ -682,7 +683,7 @@ private function saveConfigurableOptions(ProductInterface $product) ->setProductId($product->getData($metadata->getLinkField())) ->save(); } - /** @var $configurableAttributesCollection \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection */ + /** @var $configurableAttributesCollection \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection */ $configurableAttributesCollection = $this->_attributeCollectionFactory->create(); $configurableAttributesCollection->setProductFilter($product); $configurableAttributesCollection->addFieldToFilter( @@ -1397,7 +1398,16 @@ private function getConfiguredUsedProductCollection(\Magento\Catalog\Model\Produ ->addFilterByRequiredOptions() ->setStoreId($product->getStoreId()); - $requiredAttributes = ['name', 'price', 'weight', 'image', 'thumbnail', 'status', 'media_gallery']; + $requiredAttributes = [ + 'name', + 'price', + 'weight', + 'image', + 'thumbnail', + 'status', + 'visibility', + 'media_gallery' + ]; foreach ($requiredAttributes as $attributeCode) { $collection->addAttributeToSelect($attributeCode); } diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/ConfigurableTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/ConfigurableTest.php index 6ffdede34d04c..ea136dd037baf 100644 --- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/ConfigurableTest.php +++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/ConfigurableTest.php @@ -197,11 +197,6 @@ protected function setUp() ->disableOriginalConstructor() ->getMock(); - $this->productFactory = $this->getMockBuilder(\Magento\Catalog\Api\Data\ProductInterfaceFactory::class) - ->setMethods(['create']) - ->disableOriginalConstructor() - ->getMock(); - $this->salableProcessor = $this->createMock(SalableProcessor::class); $this->model = $this->objectHelper->getObject( diff --git a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/LinkManagementTest.php b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/LinkManagementTest.php index d899839d43d40..df4138db30ce0 100644 --- a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/LinkManagementTest.php +++ b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/LinkManagementTest.php @@ -57,6 +57,9 @@ public function testGetChildren() $this->assertArrayHasKey('status', $product); $this->assertEquals('1', $product['status']); + + $this->assertArrayHasKey('visibility', $product); + $this->assertEquals('1', $product['visibility']); } } From 48d9dfb06dd82fc9c76010508fa2ea5a2327ca69 Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov <slopukhov@magento.com> Date: Mon, 11 Dec 2017 13:58:17 +0200 Subject: [PATCH 509/653] MAGETWO-83659: Enable metrics validation for PAT --- setup/performance-toolkit/benchmark.jmx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx index 2732cfd492c0a..2b89203a43745 100644 --- a/setup/performance-toolkit/benchmark.jmx +++ b/setup/performance-toolkit/benchmark.jmx @@ -7939,8 +7939,13 @@ if (testLabel <stringProp name="TestPlan.comments">mpaf/tool/fragments/ce/admin_edit_product/admin_edit_product_updated.jmx</stringProp> <stringProp name="BeanShellSampler.query">import java.util.ArrayList; import java.util.HashMap; + import java.util.Random; -try { + try { + Random random = new Random(); + if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); + } simpleCount = props.get("simple_products_list").size(); configCount = props.get("configurable_products_list").size(); productCount = 0; @@ -7983,7 +7988,7 @@ try { //id of related product do { - relatedIndex = (int)(0.555 * props.get("simple_products_list").size()); + relatedIndex = random.nextInt(props.get("simple_products_list").size()); } while(i == relatedIndex); vars.put("related_product_id", props.get("simple_products_list").get(relatedIndex).get("id")); } catch (Exception ex) { From 8f9fba41d7699a966af923ab17c2ce2dee84f01c Mon Sep 17 00:00:00 2001 From: mage2-team <mage2-team@magento.com> Date: Mon, 11 Dec 2017 04:24:44 -0800 Subject: [PATCH 510/653] MAGETWO-83632: Magento 2.2.2 Publication (build 2.2.2.026) --- .../Magento/AdminNotification/composer.json | 2 +- app/code/Magento/Backend/composer.json | 2 +- app/code/Magento/Backup/composer.json | 2 +- app/code/Magento/Braintree/composer.json | 2 +- app/code/Magento/Bundle/composer.json | 2 +- app/code/Magento/Catalog/composer.json | 2 +- .../Magento/CatalogImportExport/composer.json | 2 +- .../Magento/CatalogInventory/composer.json | 2 +- app/code/Magento/CatalogRule/composer.json | 2 +- app/code/Magento/CatalogSearch/composer.json | 2 +- .../Magento/CatalogUrlRewrite/composer.json | 2 +- app/code/Magento/Checkout/composer.json | 2 +- app/code/Magento/Cms/composer.json | 2 +- app/code/Magento/Config/composer.json | 2 +- .../Magento/ConfigurableProduct/composer.json | 2 +- app/code/Magento/Contact/composer.json | 2 +- app/code/Magento/Cron/composer.json | 2 +- app/code/Magento/Customer/composer.json | 2 +- .../CustomerImportExport/composer.json | 2 +- app/code/Magento/Deploy/composer.json | 2 +- app/code/Magento/Directory/composer.json | 2 +- app/code/Magento/Downloadable/composer.json | 2 +- app/code/Magento/Eav/composer.json | 2 +- app/code/Magento/Email/composer.json | 2 +- .../Magento/GoogleOptimizer/composer.json | 2 +- app/code/Magento/GroupedProduct/composer.json | 2 +- app/code/Magento/ImportExport/composer.json | 2 +- app/code/Magento/Indexer/composer.json | 2 +- .../Magento/InstantPurchase/composer.json | 52 +- app/code/Magento/Integration/composer.json | 2 +- .../Magento/NewRelicReporting/composer.json | 2 +- app/code/Magento/Newsletter/composer.json | 2 +- .../Magento/OfflineShipping/composer.json | 2 +- app/code/Magento/PageCache/composer.json | 2 +- app/code/Magento/Payment/composer.json | 2 +- app/code/Magento/Paypal/composer.json | 2 +- app/code/Magento/ProductVideo/composer.json | 2 +- app/code/Magento/Quote/composer.json | 2 +- .../Magento/ReleaseNotification/composer.json | 40 +- app/code/Magento/Reports/composer.json | 2 +- app/code/Magento/Review/composer.json | 2 +- app/code/Magento/Sales/composer.json | 2 +- app/code/Magento/SalesRule/composer.json | 2 +- app/code/Magento/SampleData/composer.json | 2 +- app/code/Magento/Search/composer.json | 2 +- app/code/Magento/Shipping/composer.json | 2 +- app/code/Magento/Sitemap/composer.json | 2 +- app/code/Magento/Store/composer.json | 2 +- app/code/Magento/Swatches/composer.json | 2 +- app/code/Magento/Tax/composer.json | 2 +- app/code/Magento/Theme/composer.json | 2 +- app/code/Magento/Translation/composer.json | 2 +- app/code/Magento/Ui/composer.json | 2 +- app/code/Magento/Ups/composer.json | 2 +- app/code/Magento/UrlRewrite/composer.json | 2 +- app/code/Magento/User/composer.json | 2 +- app/code/Magento/Variable/composer.json | 2 +- app/code/Magento/Vault/composer.json | 2 +- app/code/Magento/Webapi/composer.json | 2 +- app/code/Magento/Widget/composer.json | 2 +- app/code/Magento/Wishlist/composer.json | 2 +- .../adminhtml/Magento/backend/composer.json | 2 +- .../frontend/Magento/blank/composer.json | 2 +- .../frontend/Magento/luma/composer.json | 2 +- composer.json | 128 ++-- composer.lock | 572 +++++++++--------- lib/internal/Magento/Framework/composer.json | 2 +- 67 files changed, 466 insertions(+), 452 deletions(-) diff --git a/app/code/Magento/AdminNotification/composer.json b/app/code/Magento/AdminNotification/composer.json index a3371c702c729..59a3845cbd4b7 100644 --- a/app/code/Magento/AdminNotification/composer.json +++ b/app/code/Magento/AdminNotification/composer.json @@ -11,7 +11,7 @@ "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Backend/composer.json b/app/code/Magento/Backend/composer.json index 3d8cfa49cd1fa..d2cc8f76393f9 100644 --- a/app/code/Magento/Backend/composer.json +++ b/app/code/Magento/Backend/composer.json @@ -24,7 +24,7 @@ "magento/module-theme": "100.2.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Backup/composer.json b/app/code/Magento/Backup/composer.json index b8a9c3a9ab672..69b81d76ec03f 100644 --- a/app/code/Magento/Backup/composer.json +++ b/app/code/Magento/Backup/composer.json @@ -9,7 +9,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Braintree/composer.json b/app/code/Magento/Braintree/composer.json index a1ff7970e4921..e6aca4672b00e 100644 --- a/app/code/Magento/Braintree/composer.json +++ b/app/code/Magento/Braintree/composer.json @@ -25,7 +25,7 @@ "magento/module-theme": "100.2.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "proprietary" ], diff --git a/app/code/Magento/Bundle/composer.json b/app/code/Magento/Bundle/composer.json index 0983d4c6b5946..510206054fcf0 100644 --- a/app/code/Magento/Bundle/composer.json +++ b/app/code/Magento/Bundle/composer.json @@ -25,7 +25,7 @@ "magento/module-bundle-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Catalog/composer.json b/app/code/Magento/Catalog/composer.json index 10b408c545878..b76c6a548c39a 100644 --- a/app/code/Magento/Catalog/composer.json +++ b/app/code/Magento/Catalog/composer.json @@ -34,7 +34,7 @@ "magento/module-catalog-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "102.0.1", + "version": "102.0.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogImportExport/composer.json b/app/code/Magento/CatalogImportExport/composer.json index 2b70f65d1f830..cd2cb8e26f1c2 100644 --- a/app/code/Magento/CatalogImportExport/composer.json +++ b/app/code/Magento/CatalogImportExport/composer.json @@ -16,7 +16,7 @@ "ext-ctype": "*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogInventory/composer.json b/app/code/Magento/CatalogInventory/composer.json index 79f86612d41bd..71172e26698fe 100644 --- a/app/code/Magento/CatalogInventory/composer.json +++ b/app/code/Magento/CatalogInventory/composer.json @@ -13,7 +13,7 @@ "magento/module-ui": "101.0.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogRule/composer.json b/app/code/Magento/CatalogRule/composer.json index 845bdeff31f42..b2b3a80183ae6 100644 --- a/app/code/Magento/CatalogRule/composer.json +++ b/app/code/Magento/CatalogRule/composer.json @@ -17,7 +17,7 @@ "magento/module-catalog-rule-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "101.0.1", + "version": "101.0.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogSearch/composer.json b/app/code/Magento/CatalogSearch/composer.json index 13be21e3248f2..85c9073160330 100644 --- a/app/code/Magento/CatalogSearch/composer.json +++ b/app/code/Magento/CatalogSearch/composer.json @@ -15,7 +15,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CatalogUrlRewrite/composer.json b/app/code/Magento/CatalogUrlRewrite/composer.json index 344562864384f..55cbab2077cef 100644 --- a/app/code/Magento/CatalogUrlRewrite/composer.json +++ b/app/code/Magento/CatalogUrlRewrite/composer.json @@ -14,7 +14,7 @@ "magento/module-ui": "101.0.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Checkout/composer.json b/app/code/Magento/Checkout/composer.json index 48d6562c5c77e..7f6b1dcaec01e 100644 --- a/app/code/Magento/Checkout/composer.json +++ b/app/code/Magento/Checkout/composer.json @@ -27,7 +27,7 @@ "magento/module-cookie": "100.2.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Cms/composer.json b/app/code/Magento/Cms/composer.json index 3094908e69ca0..d3ccb07c8e8d3 100644 --- a/app/code/Magento/Cms/composer.json +++ b/app/code/Magento/Cms/composer.json @@ -18,7 +18,7 @@ "magento/module-cms-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "102.0.1", + "version": "102.0.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Config/composer.json b/app/code/Magento/Config/composer.json index a29f65473ab01..0160339d50209 100644 --- a/app/code/Magento/Config/composer.json +++ b/app/code/Magento/Config/composer.json @@ -13,7 +13,7 @@ "magento/module-deploy": "100.2.*" }, "type": "magento2-module", - "version": "101.0.1", + "version": "101.0.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ConfigurableProduct/composer.json b/app/code/Magento/ConfigurableProduct/composer.json index 3b60f57c2f923..04725604a0859 100644 --- a/app/code/Magento/ConfigurableProduct/composer.json +++ b/app/code/Magento/ConfigurableProduct/composer.json @@ -24,7 +24,7 @@ "magento/module-product-links-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Contact/composer.json b/app/code/Magento/Contact/composer.json index ab0fbafe63f74..effec9f15a756 100644 --- a/app/code/Magento/Contact/composer.json +++ b/app/code/Magento/Contact/composer.json @@ -10,7 +10,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Cron/composer.json b/app/code/Magento/Cron/composer.json index be2c39cc2b9eb..ef6b580bfe7d0 100644 --- a/app/code/Magento/Cron/composer.json +++ b/app/code/Magento/Cron/composer.json @@ -10,7 +10,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Customer/composer.json b/app/code/Magento/Customer/composer.json index 61fcb62932992..bb64ccc076cc6 100644 --- a/app/code/Magento/Customer/composer.json +++ b/app/code/Magento/Customer/composer.json @@ -29,7 +29,7 @@ "magento/module-customer-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "101.0.1", + "version": "101.0.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/CustomerImportExport/composer.json b/app/code/Magento/CustomerImportExport/composer.json index 5750b25684735..a95b329e2b63b 100644 --- a/app/code/Magento/CustomerImportExport/composer.json +++ b/app/code/Magento/CustomerImportExport/composer.json @@ -12,7 +12,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Deploy/composer.json b/app/code/Magento/Deploy/composer.json index e33d2e72f64a4..fc8668e9dae4b 100644 --- a/app/code/Magento/Deploy/composer.json +++ b/app/code/Magento/Deploy/composer.json @@ -10,7 +10,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Directory/composer.json b/app/code/Magento/Directory/composer.json index 6d29f3f9ba6db..5a3eb1932411b 100644 --- a/app/code/Magento/Directory/composer.json +++ b/app/code/Magento/Directory/composer.json @@ -10,7 +10,7 @@ "lib-libxml": "*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Downloadable/composer.json b/app/code/Magento/Downloadable/composer.json index 8d06be0e4116d..160a51c83627f 100644 --- a/app/code/Magento/Downloadable/composer.json +++ b/app/code/Magento/Downloadable/composer.json @@ -25,7 +25,7 @@ "magento/module-downloadable-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Eav/composer.json b/app/code/Magento/Eav/composer.json index 2900d8397ff40..be753a6fca7d3 100644 --- a/app/code/Magento/Eav/composer.json +++ b/app/code/Magento/Eav/composer.json @@ -11,7 +11,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Email/composer.json b/app/code/Magento/Email/composer.json index 2a651a44a4a54..9ef1c3ba39a6b 100644 --- a/app/code/Magento/Email/composer.json +++ b/app/code/Magento/Email/composer.json @@ -15,7 +15,7 @@ "magento/module-theme": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GoogleOptimizer/composer.json b/app/code/Magento/GoogleOptimizer/composer.json index 62534b81d9b3a..5aeadefbfda94 100644 --- a/app/code/Magento/GoogleOptimizer/composer.json +++ b/app/code/Magento/GoogleOptimizer/composer.json @@ -12,7 +12,7 @@ "magento/module-ui": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/GroupedProduct/composer.json b/app/code/Magento/GroupedProduct/composer.json index 16d0f029539f8..22426af3852cb 100644 --- a/app/code/Magento/GroupedProduct/composer.json +++ b/app/code/Magento/GroupedProduct/composer.json @@ -21,7 +21,7 @@ "magento/module-grouped-product-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ImportExport/composer.json b/app/code/Magento/ImportExport/composer.json index 23ed2f6346ef7..1c159305c8920 100644 --- a/app/code/Magento/ImportExport/composer.json +++ b/app/code/Magento/ImportExport/composer.json @@ -12,7 +12,7 @@ "ext-ctype": "*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Indexer/composer.json b/app/code/Magento/Indexer/composer.json index 58c2c7f3587f2..ced51945495f9 100644 --- a/app/code/Magento/Indexer/composer.json +++ b/app/code/Magento/Indexer/composer.json @@ -7,7 +7,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/InstantPurchase/composer.json b/app/code/Magento/InstantPurchase/composer.json index 680890d190655..a771869ddd1b8 100644 --- a/app/code/Magento/InstantPurchase/composer.json +++ b/app/code/Magento/InstantPurchase/composer.json @@ -1,29 +1,29 @@ { - "name": "magento/module-instant-purchase", - "description": "N/A", - "type": "magento2-module", - "version": "100.2.0", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], - "require": { - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-store": "100.2.*", - "magento/module-catalog": "102.0.*", - "magento/module-customer": "101.0.*", - "magento/module-sales": "101.0.*", - "magento/module-shipping": "100.2.*", - "magento/module-quote": "101.0.*", - "magento/module-vault": "101.0.*", - "magento/framework": "101.0.*" - }, - "autoload": { - "files": [ - "registration.php" + "name": "magento/module-instant-purchase", + "description": "N/A", + "type": "magento2-module", + "version": "100.2.0", + "license": [ + "OSL-3.0", + "AFL-3.0" ], - "psr-4": { - "Magento\\InstantPurchase\\": "" + "require": { + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "magento/module-store": "100.2.*", + "magento/module-catalog": "102.0.*", + "magento/module-customer": "101.0.*", + "magento/module-sales": "101.0.*", + "magento/module-shipping": "100.2.*", + "magento/module-quote": "101.0.*", + "magento/module-vault": "101.0.*", + "magento/framework": "101.0.*" + }, + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\InstantPurchase\\": "" + } } - } -} \ No newline at end of file +} diff --git a/app/code/Magento/Integration/composer.json b/app/code/Magento/Integration/composer.json index ef591e69178c3..25c98161e6f2a 100644 --- a/app/code/Magento/Integration/composer.json +++ b/app/code/Magento/Integration/composer.json @@ -12,7 +12,7 @@ "magento/module-authorization": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/NewRelicReporting/composer.json b/app/code/Magento/NewRelicReporting/composer.json index f8aa98ca11dc2..4a02d673a54f6 100644 --- a/app/code/Magento/NewRelicReporting/composer.json +++ b/app/code/Magento/NewRelicReporting/composer.json @@ -13,7 +13,7 @@ "magento/magento-composer-installer": "*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Newsletter/composer.json b/app/code/Magento/Newsletter/composer.json index 12ce0c988288b..3cd5e15d46398 100644 --- a/app/code/Magento/Newsletter/composer.json +++ b/app/code/Magento/Newsletter/composer.json @@ -14,7 +14,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/OfflineShipping/composer.json b/app/code/Magento/OfflineShipping/composer.json index 3998a83aa2d64..2ce66fa368d01 100644 --- a/app/code/Magento/OfflineShipping/composer.json +++ b/app/code/Magento/OfflineShipping/composer.json @@ -19,7 +19,7 @@ "magento/module-offline-shipping-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/PageCache/composer.json b/app/code/Magento/PageCache/composer.json index bb05a371bd0b2..cdbd8327b9cdd 100644 --- a/app/code/Magento/PageCache/composer.json +++ b/app/code/Magento/PageCache/composer.json @@ -9,7 +9,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Payment/composer.json b/app/code/Magento/Payment/composer.json index d8124f52fb0fc..b8dbf6cd7f16f 100644 --- a/app/code/Magento/Payment/composer.json +++ b/app/code/Magento/Payment/composer.json @@ -12,7 +12,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Paypal/composer.json b/app/code/Magento/Paypal/composer.json index 6e59371da3cd4..8aec470cb65ac 100644 --- a/app/code/Magento/Paypal/composer.json +++ b/app/code/Magento/Paypal/composer.json @@ -26,7 +26,7 @@ "magento/module-checkout-agreements": "100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "proprietary" ], diff --git a/app/code/Magento/ProductVideo/composer.json b/app/code/Magento/ProductVideo/composer.json index 0844358cccb37..d40707a06de8a 100644 --- a/app/code/Magento/ProductVideo/composer.json +++ b/app/code/Magento/ProductVideo/composer.json @@ -16,7 +16,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "proprietary" ], diff --git a/app/code/Magento/Quote/composer.json b/app/code/Magento/Quote/composer.json index a892697802e63..31f875a0f9a35 100644 --- a/app/code/Magento/Quote/composer.json +++ b/app/code/Magento/Quote/composer.json @@ -23,7 +23,7 @@ "magento/module-webapi": "100.2.*" }, "type": "magento2-module", - "version": "101.0.1", + "version": "101.0.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/ReleaseNotification/composer.json b/app/code/Magento/ReleaseNotification/composer.json index b338420a2c143..40e9e02db9217 100644 --- a/app/code/Magento/ReleaseNotification/composer.json +++ b/app/code/Magento/ReleaseNotification/composer.json @@ -1,24 +1,24 @@ { - "name": "magento/module-release-notification", - "description": "N/A", - "require": { - "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", - "magento/module-user": "101.0.*", - "magento/module-backend": "100.2.*", - "magento/framework": "101.0.*" - }, - "type": "magento2-module", - "version": "100.2.0", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], - "autoload": { - "files": [ - "registration.php" + "name": "magento/module-release-notification", + "description": "N/A", + "require": { + "php": "7.0.2|7.0.4|~7.0.6|~7.1.0", + "magento/module-user": "101.0.*", + "magento/module-backend": "100.2.*", + "magento/framework": "101.0.*" + }, + "type": "magento2-module", + "version": "100.2.0", + "license": [ + "OSL-3.0", + "AFL-3.0" ], - "psr-4": { - "Magento\\ReleaseNotification\\": "" + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\ReleaseNotification\\": "" + } } - } } diff --git a/app/code/Magento/Reports/composer.json b/app/code/Magento/Reports/composer.json index 1058052dd1122..45514175aa9f1 100644 --- a/app/code/Magento/Reports/composer.json +++ b/app/code/Magento/Reports/composer.json @@ -22,7 +22,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Review/composer.json b/app/code/Magento/Review/composer.json index 47680b454c29f..608dd51273d2e 100644 --- a/app/code/Magento/Review/composer.json +++ b/app/code/Magento/Review/composer.json @@ -18,7 +18,7 @@ "magento/module-review-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Sales/composer.json b/app/code/Magento/Sales/composer.json index 9761f82d1894a..5468f1dad5f06 100644 --- a/app/code/Magento/Sales/composer.json +++ b/app/code/Magento/Sales/composer.json @@ -32,7 +32,7 @@ "magento/module-sales-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "101.0.1", + "version": "101.0.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SalesRule/composer.json b/app/code/Magento/SalesRule/composer.json index 2b142135271d2..b84eb3b0682dc 100644 --- a/app/code/Magento/SalesRule/composer.json +++ b/app/code/Magento/SalesRule/composer.json @@ -25,7 +25,7 @@ "magento/module-sales-rule-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/SampleData/composer.json b/app/code/Magento/SampleData/composer.json index 57d69977afb1c..9c2c84a1365e9 100644 --- a/app/code/Magento/SampleData/composer.json +++ b/app/code/Magento/SampleData/composer.json @@ -9,7 +9,7 @@ "magento/sample-data-media": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Search/composer.json b/app/code/Magento/Search/composer.json index c6aecd101fc6f..5dc05010c525a 100644 --- a/app/code/Magento/Search/composer.json +++ b/app/code/Magento/Search/composer.json @@ -11,7 +11,7 @@ "magento/module-ui": "101.0.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Shipping/composer.json b/app/code/Magento/Shipping/composer.json index a7a2a3d48b06e..25766e8a45e31 100644 --- a/app/code/Magento/Shipping/composer.json +++ b/app/code/Magento/Shipping/composer.json @@ -25,7 +25,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Sitemap/composer.json b/app/code/Magento/Sitemap/composer.json index 88be3616eebd0..678e6f5fe198e 100644 --- a/app/code/Magento/Sitemap/composer.json +++ b/app/code/Magento/Sitemap/composer.json @@ -18,7 +18,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Store/composer.json b/app/code/Magento/Store/composer.json index f9eb84e2f9fa1..b3bbb680bcd78 100644 --- a/app/code/Magento/Store/composer.json +++ b/app/code/Magento/Store/composer.json @@ -14,7 +14,7 @@ "magento/module-deploy": "100.2.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Swatches/composer.json b/app/code/Magento/Swatches/composer.json index 6efeb62a23b78..65ba7251f45d0 100644 --- a/app/code/Magento/Swatches/composer.json +++ b/app/code/Magento/Swatches/composer.json @@ -19,7 +19,7 @@ "magento/module-swatches-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "proprietary" ], diff --git a/app/code/Magento/Tax/composer.json b/app/code/Magento/Tax/composer.json index 1d09fb64eed89..2c4de31f5b2ee 100644 --- a/app/code/Magento/Tax/composer.json +++ b/app/code/Magento/Tax/composer.json @@ -22,7 +22,7 @@ "magento/module-tax-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Theme/composer.json b/app/code/Magento/Theme/composer.json index 4593eccd23dea..55e1a04ccfdf7 100644 --- a/app/code/Magento/Theme/composer.json +++ b/app/code/Magento/Theme/composer.json @@ -22,7 +22,7 @@ "magento/module-directory": "100.2.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Translation/composer.json b/app/code/Magento/Translation/composer.json index a2504cdfbb9cd..ce7e4e1ae8796 100644 --- a/app/code/Magento/Translation/composer.json +++ b/app/code/Magento/Translation/composer.json @@ -12,7 +12,7 @@ "magento/module-deploy": "100.2.*" }, "type": "magento2-module", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Ui/composer.json b/app/code/Magento/Ui/composer.json index 1f58c55ce61b6..224213886dcd4 100644 --- a/app/code/Magento/Ui/composer.json +++ b/app/code/Magento/Ui/composer.json @@ -13,7 +13,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "101.0.1", + "version": "101.0.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Ups/composer.json b/app/code/Magento/Ups/composer.json index ec31eff4f4b00..4d527bd9f108a 100644 --- a/app/code/Magento/Ups/composer.json +++ b/app/code/Magento/Ups/composer.json @@ -16,7 +16,7 @@ "magento/module-config": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/UrlRewrite/composer.json b/app/code/Magento/UrlRewrite/composer.json index 32086222e43f1..0133a750a75ce 100644 --- a/app/code/Magento/UrlRewrite/composer.json +++ b/app/code/Magento/UrlRewrite/composer.json @@ -12,7 +12,7 @@ "magento/module-cms-url-rewrite": "100.2.*" }, "type": "magento2-module", - "version": "101.0.1", + "version": "101.0.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/User/composer.json b/app/code/Magento/User/composer.json index d792b68bfad9c..bb5f93197b17c 100644 --- a/app/code/Magento/User/composer.json +++ b/app/code/Magento/User/composer.json @@ -12,7 +12,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Variable/composer.json b/app/code/Magento/Variable/composer.json index bd5d7bc4bd8c0..ea4721096afca 100644 --- a/app/code/Magento/Variable/composer.json +++ b/app/code/Magento/Variable/composer.json @@ -9,7 +9,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Vault/composer.json b/app/code/Magento/Vault/composer.json index 5c0719d2c4b62..a956f0ea917de 100644 --- a/app/code/Magento/Vault/composer.json +++ b/app/code/Magento/Vault/composer.json @@ -12,7 +12,7 @@ "magento/module-quote": "101.0.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "proprietary" ], diff --git a/app/code/Magento/Webapi/composer.json b/app/code/Magento/Webapi/composer.json index 15eaba22ea7d4..1ee5eeb5fe9c6 100644 --- a/app/code/Magento/Webapi/composer.json +++ b/app/code/Magento/Webapi/composer.json @@ -14,7 +14,7 @@ "magento/module-customer": "101.0.*" }, "type": "magento2-module", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Widget/composer.json b/app/code/Magento/Widget/composer.json index ac9c5788591f8..cda529c4801ce 100644 --- a/app/code/Magento/Widget/composer.json +++ b/app/code/Magento/Widget/composer.json @@ -16,7 +16,7 @@ "magento/module-widget-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/code/Magento/Wishlist/composer.json b/app/code/Magento/Wishlist/composer.json index ea85d59548645..8e1e513646791 100644 --- a/app/code/Magento/Wishlist/composer.json +++ b/app/code/Magento/Wishlist/composer.json @@ -23,7 +23,7 @@ "magento/module-wishlist-sample-data": "Sample Data version:100.2.*" }, "type": "magento2-module", - "version": "101.0.0", + "version": "101.0.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/design/adminhtml/Magento/backend/composer.json b/app/design/adminhtml/Magento/backend/composer.json index cd331a26ec525..bb7d1587de8ab 100644 --- a/app/design/adminhtml/Magento/backend/composer.json +++ b/app/design/adminhtml/Magento/backend/composer.json @@ -6,7 +6,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-theme", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/design/frontend/Magento/blank/composer.json b/app/design/frontend/Magento/blank/composer.json index c552dec3cd2f6..d21326bd33978 100644 --- a/app/design/frontend/Magento/blank/composer.json +++ b/app/design/frontend/Magento/blank/composer.json @@ -6,7 +6,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-theme", - "version": "100.2.0", + "version": "100.2.1", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/app/design/frontend/Magento/luma/composer.json b/app/design/frontend/Magento/luma/composer.json index b5db1aa32b4a1..481366949e809 100644 --- a/app/design/frontend/Magento/luma/composer.json +++ b/app/design/frontend/Magento/luma/composer.json @@ -7,7 +7,7 @@ "magento/framework": "101.0.*" }, "type": "magento2-theme", - "version": "100.2.1", + "version": "100.2.2", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/composer.json b/composer.json index 8582329eb2fa7..eb6d57902b416 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "magento/magento2ce", "description": "Magento 2 (Open Source)", "type": "project", - "version": "2.2.2-dev", + "version": "2.2.2", "license": [ "OSL-3.0", "AFL-3.0" @@ -83,123 +83,123 @@ }, "replace": { "magento/module-marketplace": "100.2.0", - "magento/module-admin-notification": "100.2.0", + "magento/module-admin-notification": "100.2.1", "magento/module-advanced-pricing-import-export": "100.2.1", "magento/module-analytics": "100.2.0", "magento/module-authorization": "100.2.0", "magento/module-authorizenet": "100.2.0", - "magento/module-backend": "100.2.1", - "magento/module-backup": "100.2.0", - "magento/module-braintree": "100.2.1", - "magento/module-bundle": "100.2.1", + "magento/module-backend": "100.2.2", + "magento/module-backup": "100.2.1", + "magento/module-braintree": "100.2.2", + "magento/module-bundle": "100.2.2", "magento/module-bundle-import-export": "100.2.0", "magento/module-cache-invalidate": "100.2.0", "magento/module-captcha": "100.2.0", - "magento/module-catalog": "102.0.1", + "magento/module-catalog": "102.0.2", "magento/module-catalog-analytics": "100.2.0", - "magento/module-catalog-import-export": "100.2.1", - "magento/module-catalog-inventory": "100.2.1", - "magento/module-catalog-rule": "101.0.1", + "magento/module-catalog-import-export": "100.2.2", + "magento/module-catalog-inventory": "100.2.2", + "magento/module-catalog-rule": "101.0.2", "magento/module-catalog-rule-configurable": "100.2.0", - "magento/module-catalog-search": "100.2.1", - "magento/module-catalog-url-rewrite": "100.2.1", + "magento/module-catalog-search": "100.2.2", + "magento/module-catalog-url-rewrite": "100.2.2", "magento/module-catalog-widget": "100.2.0", - "magento/module-checkout": "100.2.1", + "magento/module-checkout": "100.2.2", "magento/module-checkout-agreements": "100.2.0", - "magento/module-cms": "102.0.1", + "magento/module-cms": "102.0.2", "magento/module-cms-url-rewrite": "100.2.0", - "magento/module-config": "101.0.1", + "magento/module-config": "101.0.2", "magento/module-configurable-import-export": "100.2.0", - "magento/module-configurable-product": "100.2.1", + "magento/module-configurable-product": "100.2.2", "magento/module-configurable-product-sales": "100.2.0", - "magento/module-contact": "100.2.0", + "magento/module-contact": "100.2.1", "magento/module-cookie": "100.2.0", - "magento/module-cron": "100.2.0", + "magento/module-cron": "100.2.1", "magento/module-currency-symbol": "100.2.0", - "magento/module-customer": "101.0.1", + "magento/module-customer": "101.0.2", "magento/module-customer-analytics": "100.2.0", - "magento/module-customer-import-export": "100.2.0", - "magento/module-deploy": "100.2.1", + "magento/module-customer-import-export": "100.2.1", + "magento/module-deploy": "100.2.2", "magento/module-developer": "100.2.1", "magento/module-dhl": "100.2.0", - "magento/module-directory": "100.2.0", - "magento/module-downloadable": "100.2.0", + "magento/module-directory": "100.2.1", + "magento/module-downloadable": "100.2.1", "magento/module-downloadable-import-export": "100.2.0", - "magento/module-eav": "101.0.0", - "magento/module-email": "100.2.0", + "magento/module-eav": "101.0.1", + "magento/module-email": "100.2.1", "magento/module-encryption-key": "100.2.0", "magento/module-fedex": "100.2.0", "magento/module-gift-message": "100.2.0", "magento/module-google-adwords": "100.2.0", "magento/module-google-analytics": "100.2.1", - "magento/module-google-optimizer": "100.2.0", + "magento/module-google-optimizer": "100.2.1", "magento/module-grouped-import-export": "100.2.0", - "magento/module-grouped-product": "100.2.0", - "magento/module-import-export": "100.2.1", - "magento/module-indexer": "100.2.0", + "magento/module-grouped-product": "100.2.1", + "magento/module-import-export": "100.2.2", + "magento/module-indexer": "100.2.1", "magento/module-instant-purchase": "100.2.0", - "magento/module-integration": "100.2.0", + "magento/module-integration": "100.2.1", "magento/module-layered-navigation": "100.2.0", "magento/module-media-storage": "100.2.0", "magento/module-msrp": "100.2.0", "magento/module-multishipping": "100.2.0", - "magento/module-new-relic-reporting": "100.2.0", - "magento/module-newsletter": "100.2.0", + "magento/module-new-relic-reporting": "100.2.1", + "magento/module-newsletter": "100.2.1", "magento/module-offline-payments": "100.2.0", - "magento/module-offline-shipping": "100.2.0", - "magento/module-page-cache": "100.2.0", - "magento/module-payment": "100.2.0", - "magento/module-paypal": "100.2.0", + "magento/module-offline-shipping": "100.2.1", + "magento/module-page-cache": "100.2.1", + "magento/module-payment": "100.2.1", + "magento/module-paypal": "100.2.1", "magento/module-persistent": "100.2.0", "magento/module-product-alert": "100.2.0", - "magento/module-product-video": "100.2.0", - "magento/module-quote": "101.0.1", + "magento/module-product-video": "100.2.1", + "magento/module-quote": "101.0.2", "magento/module-quote-analytics": "100.2.0", "magento/module-release-notification": "100.2.0", - "magento/module-reports": "100.2.1", + "magento/module-reports": "100.2.2", "magento/module-require-js": "100.2.0", - "magento/module-review": "100.2.1", + "magento/module-review": "100.2.2", "magento/module-review-analytics": "100.2.0", "magento/module-robots": "100.2.0", "magento/module-rss": "100.2.0", "magento/module-rule": "100.2.0", - "magento/module-sales": "101.0.1", + "magento/module-sales": "101.0.2", "magento/module-sales-analytics": "100.2.0", "magento/module-sales-inventory": "100.2.0", - "magento/module-sales-rule": "101.0.0", + "magento/module-sales-rule": "101.0.1", "magento/module-sales-sequence": "100.2.0", - "magento/module-sample-data": "100.2.0", - "magento/module-search": "100.2.1", + "magento/module-sample-data": "100.2.1", + "magento/module-search": "100.2.2", "magento/module-security": "100.2.0", "magento/module-send-friend": "100.2.0", - "magento/module-shipping": "100.2.1", + "magento/module-shipping": "100.2.2", "magento/module-signifyd": "100.2.1", - "magento/module-sitemap": "100.2.1", - "magento/module-store": "100.2.1", + "magento/module-sitemap": "100.2.2", + "magento/module-store": "100.2.2", "magento/module-swagger": "100.2.1", - "magento/module-swatches": "100.2.0", + "magento/module-swatches": "100.2.1", "magento/module-swatches-layered-navigation": "100.2.0", - "magento/module-tax": "100.2.1", + "magento/module-tax": "100.2.2", "magento/module-tax-import-export": "100.2.0", - "magento/module-theme": "100.2.1", - "magento/module-translation": "100.2.1", - "magento/module-ui": "101.0.1", - "magento/module-ups": "100.2.0", - "magento/module-url-rewrite": "101.0.1", - "magento/module-user": "101.0.0", + "magento/module-theme": "100.2.2", + "magento/module-translation": "100.2.2", + "magento/module-ui": "101.0.2", + "magento/module-ups": "100.2.1", + "magento/module-url-rewrite": "101.0.2", + "magento/module-user": "101.0.1", "magento/module-usps": "100.2.0", - "magento/module-variable": "100.2.0", - "magento/module-vault": "101.0.0", + "magento/module-variable": "100.2.1", + "magento/module-vault": "101.0.1", "magento/module-version": "100.2.0", - "magento/module-webapi": "100.2.0", + "magento/module-webapi": "100.2.1", "magento/module-webapi-security": "100.2.0", "magento/module-weee": "100.2.0", - "magento/module-widget": "101.0.0", - "magento/module-wishlist": "101.0.0", + "magento/module-widget": "101.0.1", + "magento/module-wishlist": "101.0.1", "magento/module-wishlist-analytics": "100.2.0", - "magento/theme-adminhtml-backend": "100.2.0", - "magento/theme-frontend-blank": "100.2.0", - "magento/theme-frontend-luma": "100.2.1", + "magento/theme-adminhtml-backend": "100.2.1", + "magento/theme-frontend-blank": "100.2.1", + "magento/theme-frontend-luma": "100.2.2", "magento/language-de_de": "100.2.0", "magento/language-en_us": "100.2.0", "magento/language-es_es": "100.2.0", @@ -207,7 +207,7 @@ "magento/language-nl_nl": "100.2.0", "magento/language-pt_br": "100.2.0", "magento/language-zh_hans_cn": "100.2.0", - "magento/framework": "101.0.1", + "magento/framework": "101.0.2", "trentrichardson/jquery-timepicker-addon": "1.4.3", "components/jquery": "1.11.0", "blueimp/jquery-file-upload": "5.6.14", diff --git a/composer.lock b/composer.lock index 9ce11b21ef0fa..450696bc3efa6 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "3b2ba3e98cc2a56b3186806f02004c8b", - "content-hash": "88afa1b36a58e8b4aa2572dd415eacbb", + "content-hash": "596ceba5e0eec6618bd6e3c2e3c1b2df", "packages": [ { "name": "braintree/braintree_php", @@ -52,7 +51,7 @@ } ], "description": "Braintree PHP Client Library", - "time": "2017-08-25 19:38:09" + "time": "2017-08-25T19:38:09+00:00" }, { "name": "colinmollenhour/cache-backend-file", @@ -88,7 +87,7 @@ ], "description": "The stock Zend_Cache_Backend_File backend has extremely poor performance for cleaning by tags making it become unusable as the number of cached items increases. This backend makes many changes resulting in a huge performance boost, especially for tag cleaning.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_File", - "time": "2016-05-02 16:24:47" + "time": "2016-05-02T16:24:47+00:00" }, { "name": "colinmollenhour/cache-backend-redis", @@ -124,7 +123,7 @@ ], "description": "Zend_Cache backend using Redis with full support for tags.", "homepage": "https://github.com/colinmollenhour/Cm_Cache_Backend_Redis", - "time": "2017-03-25 04:54:24" + "time": "2017-03-25T04:54:24+00:00" }, { "name": "colinmollenhour/credis", @@ -164,7 +163,7 @@ ], "description": "Credis is a lightweight interface to the Redis key-value store which wraps the phpredis library when available for better performance.", "homepage": "https://github.com/colinmollenhour/credis", - "time": "2017-07-05 15:32:38" + "time": "2017-07-05T15:32:38+00:00" }, { "name": "colinmollenhour/php-redis-session-abstract", @@ -201,20 +200,20 @@ ], "description": "A Redis-based session handler with optimistic locking", "homepage": "https://github.com/colinmollenhour/php-redis-session-abstract", - "time": "2017-03-22 16:13:03" + "time": "2017-03-22T16:13:03+00:00" }, { "name": "composer/ca-bundle", - "version": "1.0.9", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "36344aeffdc37711335563e6108cda86566432a6" + "reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/36344aeffdc37711335563e6108cda86566432a6", - "reference": "36344aeffdc37711335563e6108cda86566432a6", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/943b2c4fcad1ef178d16a713c2468bf7e579c288", + "reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288", "shasum": "" }, "require": { @@ -223,12 +222,9 @@ "php": "^5.3.2 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.5", + "phpunit/phpunit": "^4.8.35", "psr/log": "^1.0", - "symfony/process": "^2.5 || ^3.0" - }, - "suggest": { - "symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+" + "symfony/process": "^2.5 || ^3.0 || ^4.0" }, "type": "library", "extra": { @@ -260,7 +256,7 @@ "ssl", "tls" ], - "time": "2017-11-13 15:51:25" + "time": "2017-11-29T09:37:33+00:00" }, { "name": "composer/composer", @@ -337,7 +333,7 @@ "dependency", "package" ], - "time": "2017-03-10 08:29:45" + "time": "2017-03-10T08:29:45+00:00" }, { "name": "composer/semver", @@ -399,7 +395,7 @@ "validation", "versioning" ], - "time": "2016-08-30 16:08:34" + "time": "2016-08-30T16:08:34+00:00" }, { "name": "composer/spdx-licenses", @@ -460,7 +456,7 @@ "spdx", "validator" ], - "time": "2017-04-03 19:08:52" + "time": "2017-04-03T19:08:52+00:00" }, { "name": "container-interop/container-interop", @@ -491,7 +487,7 @@ ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", "homepage": "https://github.com/container-interop/container-interop", - "time": "2017-02-14 19:40:03" + "time": "2017-02-14T19:40:03+00:00" }, { "name": "justinrainbow/json-schema", @@ -557,7 +553,7 @@ "json", "schema" ], - "time": "2017-10-21 13:15:38" + "time": "2017-10-21T13:15:38+00:00" }, { "name": "league/climate", @@ -606,7 +602,7 @@ "php", "terminal" ], - "time": "2015-01-18 14:31:58" + "time": "2015-01-18T14:31:58+00:00" }, { "name": "magento/composer", @@ -642,7 +638,7 @@ "AFL-3.0" ], "description": "Magento composer library helps to instantiate Composer application and run composer commands.", - "time": "2017-04-24 09:57:02" + "time": "2017-04-24T09:57:02+00:00" }, { "name": "magento/magento-composer-installer", @@ -721,7 +717,7 @@ "composer-installer", "magento" ], - "time": "2016-10-06 16:05:07" + "time": "2016-10-06T16:05:07+00:00" }, { "name": "magento/zendframework1", @@ -768,7 +764,7 @@ "ZF1", "framework" ], - "time": "2017-06-21 14:56:23" + "time": "2017-06-21T14:56:23+00:00" }, { "name": "monolog/monolog", @@ -846,7 +842,7 @@ "logging", "psr-3" ], - "time": "2017-06-19 01:22:40" + "time": "2017-06-19T01:22:40+00:00" }, { "name": "oyejorge/less.php", @@ -908,7 +904,7 @@ "php", "stylesheet" ], - "time": "2017-03-28 22:19:25" + "time": "2017-03-28T22:19:25+00:00" }, { "name": "paragonie/random_compat", @@ -956,7 +952,7 @@ "pseudorandom", "random" ], - "time": "2017-09-27 21:40:39" + "time": "2017-09-27T21:40:39+00:00" }, { "name": "pelago/emogrifier", @@ -1016,20 +1012,20 @@ ], "description": "Converts CSS styles into inline style attributes in your HTML code", "homepage": "http://www.pelagodesign.com/sidecar/emogrifier/", - "time": "2017-03-02 12:51:48" + "time": "2017-03-02T12:51:48+00:00" }, { "name": "phpseclib/phpseclib", - "version": "2.0.7", + "version": "2.0.9", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "f4b6a522dfa1fd1e477c9cfe5909d5b31f098c0b" + "reference": "c9a3fe35e20eb6eeaca716d6a23cde03f52d1558" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/f4b6a522dfa1fd1e477c9cfe5909d5b31f098c0b", - "reference": "f4b6a522dfa1fd1e477c9cfe5909d5b31f098c0b", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c9a3fe35e20eb6eeaca716d6a23cde03f52d1558", + "reference": "c9a3fe35e20eb6eeaca716d6a23cde03f52d1558", "shasum": "" }, "require": { @@ -1108,7 +1104,7 @@ "x.509", "x509" ], - "time": "2017-10-23 05:04:54" + "time": "2017-11-29T06:38:08+00:00" }, { "name": "psr/container", @@ -1157,7 +1153,7 @@ "container-interop", "psr" ], - "time": "2017-02-14 16:28:37" + "time": "2017-02-14T16:28:37+00:00" }, { "name": "psr/http-message", @@ -1207,7 +1203,7 @@ "request", "response" ], - "time": "2016-08-06 14:39:51" + "time": "2016-08-06T14:39:51+00:00" }, { "name": "psr/log", @@ -1254,7 +1250,7 @@ "psr", "psr-3" ], - "time": "2016-10-10 12:19:37" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "ramsey/uuid", @@ -1336,7 +1332,7 @@ "identifier", "uuid" ], - "time": "2017-09-22 20:46:04" + "time": "2017-09-22T20:46:04+00:00" }, { "name": "seld/cli-prompt", @@ -1384,20 +1380,20 @@ "input", "prompt" ], - "time": "2017-03-18 11:32:45" + "time": "2017-03-18T11:32:45+00:00" }, { "name": "seld/jsonlint", - "version": "1.6.1", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77" + "reference": "7a30649c67ee0d19faacfd9fa2cfb6cc032d9b19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77", - "reference": "50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/7a30649c67ee0d19faacfd9fa2cfb6cc032d9b19", + "reference": "7a30649c67ee0d19faacfd9fa2cfb6cc032d9b19", "shasum": "" }, "require": { @@ -1433,7 +1429,7 @@ "parser", "validator" ], - "time": "2017-06-18 15:11:04" + "time": "2017-11-30T15:34:22+00:00" }, { "name": "seld/phar-utils", @@ -1477,7 +1473,7 @@ "keywords": [ "phra" ], - "time": "2015-10-13 18:44:15" + "time": "2015-10-13T18:44:15+00:00" }, { "name": "sjparkinson/static-review", @@ -1530,20 +1526,21 @@ } ], "description": "An extendable framework for version control hooks.", - "time": "2014-09-22 08:40:36" + "abandoned": "phpro/grumphp", + "time": "2014-09-22T08:40:36+00:00" }, { "name": "symfony/console", - "version": "v2.8.30", + "version": "v2.8.32", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3eeaec6a5d9a253925139cd19eda07d882635d87" + "reference": "46270f1ca44f08ebc134ce120fd2c2baf5fd63de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3eeaec6a5d9a253925139cd19eda07d882635d87", - "reference": "3eeaec6a5d9a253925139cd19eda07d882635d87", + "url": "https://api.github.com/repos/symfony/console/zipball/46270f1ca44f08ebc134ce120fd2c2baf5fd63de", + "reference": "46270f1ca44f08ebc134ce120fd2c2baf5fd63de", "shasum": "" }, "require": { @@ -1591,7 +1588,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-11-12 16:36:54" + "time": "2017-11-29T09:33:18+00:00" }, { "name": "symfony/debug", @@ -1648,11 +1645,11 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-07-30 07:22:48" + "time": "2016-07-30T07:22:48+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v2.8.30", + "version": "v2.8.32", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -1708,20 +1705,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-11-05 15:25:56" + "time": "2017-11-05T15:25:56+00:00" }, { "name": "symfony/filesystem", - "version": "v3.3.12", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "77db266766b54db3ee982fe51868328b887ce15c" + "reference": "de56eee71e0a128d8c54ccc1909cdefd574bad0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/77db266766b54db3ee982fe51868328b887ce15c", - "reference": "77db266766b54db3ee982fe51868328b887ce15c", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/de56eee71e0a128d8c54ccc1909cdefd574bad0f", + "reference": "de56eee71e0a128d8c54ccc1909cdefd574bad0f", "shasum": "" }, "require": { @@ -1730,7 +1727,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1757,20 +1754,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2017-11-07 14:12:55" + "time": "2017-11-19T18:59:05+00:00" }, { "name": "symfony/finder", - "version": "v3.3.12", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880" + "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/138af5ec075d4b1d1bd19de08c38a34bb2d7d880", - "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880", + "url": "https://api.github.com/repos/symfony/finder/zipball/dac8d7db537bac7ad8143eb11360a8c2231f251a", + "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a", "shasum": "" }, "require": { @@ -1779,7 +1776,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1806,7 +1803,7 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-11-05 15:47:03" + "time": "2017-11-05T16:10:10+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -1865,11 +1862,11 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/process", - "version": "v2.8.30", + "version": "v2.8.32", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -1914,7 +1911,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-11-05 15:25:56" + "time": "2017-11-05T15:25:56+00:00" }, { "name": "tedivm/jshrink", @@ -1960,7 +1957,7 @@ "javascript", "minifier" ], - "time": "2017-05-30 02:59:46" + "time": "2017-05-30T02:59:46+00:00" }, { "name": "tubalmartin/cssmin", @@ -2013,7 +2010,7 @@ "minify", "yui" ], - "time": "2017-05-16 13:45:26" + "time": "2017-05-16T13:45:26+00:00" }, { "name": "zendframework/zend-captcha", @@ -2070,7 +2067,7 @@ "captcha", "zf2" ], - "time": "2017-02-23 08:09:44" + "time": "2017-02-23T08:09:44+00:00" }, { "name": "zendframework/zend-code", @@ -2123,7 +2120,7 @@ "code", "zf2" ], - "time": "2016-10-24 13:23:32" + "time": "2016-10-24T13:23:32+00:00" }, { "name": "zendframework/zend-config", @@ -2179,7 +2176,7 @@ "config", "zf2" ], - "time": "2016-02-04 23:01:10" + "time": "2016-02-04T23:01:10+00:00" }, { "name": "zendframework/zend-console", @@ -2231,7 +2228,7 @@ "console", "zf2" ], - "time": "2016-02-09 17:15:12" + "time": "2016-02-09T17:15:12+00:00" }, { "name": "zendframework/zend-crypt", @@ -2281,29 +2278,29 @@ "crypt", "zf2" ], - "time": "2016-02-03 23:46:30" + "time": "2016-02-03T23:46:30+00:00" }, { "name": "zendframework/zend-db", - "version": "2.8.2", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/zendframework/zend-db.git", - "reference": "5926a1a2e7e035546b690cb7d4c11a3c47db2c98" + "reference": "14c5f0b1fc0dfa1cdf9488ab7a57c13a6bef6ae3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-db/zipball/5926a1a2e7e035546b690cb7d4c11a3c47db2c98", - "reference": "5926a1a2e7e035546b690cb7d4c11a3c47db2c98", + "url": "https://api.github.com/repos/zendframework/zend-db/zipball/14c5f0b1fc0dfa1cdf9488ab7a57c13a6bef6ae3", + "reference": "14c5f0b1fc0dfa1cdf9488ab7a57c13a6bef6ae3", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", + "php": "^5.6 || ^7.0", "zendframework/zend-stdlib": "^2.7 || ^3.0" }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", + "phpunit/phpunit": "^5.7.25 || ^6.4.4", + "zendframework/zend-coding-standard": "~1.0.0", "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", "zendframework/zend-hydrator": "^1.1 || ^2.1", "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" @@ -2316,8 +2313,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev", - "dev-develop": "2.9-dev" + "dev-master": "2.9-dev", + "dev-develop": "2.10-dev" }, "zf": { "component": "Zend\\Db", @@ -2333,12 +2330,13 @@ "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-db", + "description": "Database abstraction layer, SQL abstraction, result set abstraction, and RowDataGateway and TableDataGateway implementations", "keywords": [ + "ZendFramework", "db", - "zf2" + "zf" ], - "time": "2016-08-09 19:28:55" + "time": "2017-12-07T15:52:37+00:00" }, { "name": "zendframework/zend-di", @@ -2385,7 +2383,7 @@ "di", "zf2" ], - "time": "2016-04-25 20:58:11" + "time": "2016-04-25T20:58:11+00:00" }, { "name": "zendframework/zend-diactoros", @@ -2437,7 +2435,7 @@ "psr", "psr-7" ], - "time": "2017-10-12 15:24:51" + "time": "2017-10-12T15:24:51+00:00" }, { "name": "zendframework/zend-escaper", @@ -2481,7 +2479,7 @@ "escaper", "zf2" ], - "time": "2016-06-30 19:48:38" + "time": "2016-06-30T19:48:38+00:00" }, { "name": "zendframework/zend-eventmanager", @@ -2528,7 +2526,7 @@ "eventmanager", "zf2" ], - "time": "2016-02-18 20:49:05" + "time": "2016-02-18T20:49:05+00:00" }, { "name": "zendframework/zend-filter", @@ -2588,31 +2586,31 @@ "filter", "zf2" ], - "time": "2017-05-17 20:56:17" + "time": "2017-05-17T20:56:17+00:00" }, { "name": "zendframework/zend-form", - "version": "2.10.2", + "version": "2.11.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-form.git", - "reference": "252db729887844025772bb8045f8df605850ed9c" + "reference": "b68a9f07d93381613b68817091d0505ca94d3363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-form/zipball/252db729887844025772bb8045f8df605850ed9c", - "reference": "252db729887844025772bb8045f8df605850ed9c", + "url": "https://api.github.com/repos/zendframework/zend-form/zipball/b68a9f07d93381613b68817091d0505ca94d3363", + "reference": "b68a9f07d93381613b68817091d0505ca94d3363", "shasum": "" }, "require": { - "php": "^7.0 || ^5.6", + "php": "^5.6 || ^7.0", "zendframework/zend-hydrator": "^1.1 || ^2.1", - "zendframework/zend-inputfilter": "^2.6", + "zendframework/zend-inputfilter": "^2.8", "zendframework/zend-stdlib": "^2.7 || ^3.0" }, "require-dev": { "doctrine/annotations": "~1.0", - "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "phpunit/phpunit": "^5.7.23 || ^6.5.3", "zendframework/zend-cache": "^2.6.1", "zendframework/zend-captcha": "^2.7.1", "zendframework/zend-code": "^2.6 || ^3.0", @@ -2622,7 +2620,7 @@ "zendframework/zend-filter": "^2.6", "zendframework/zend-i18n": "^2.6", "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3", - "zendframework/zend-session": "^2.6.2", + "zendframework/zend-session": "^2.8.1", "zendframework/zend-text": "^2.6", "zendframework/zend-validator": "^2.6", "zendframework/zend-view": "^2.6.2", @@ -2640,8 +2638,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.10-dev", - "dev-develop": "2.11-dev" + "dev-master": "2.11.x-dev", + "dev-develop": "2.12.x-dev" }, "zf": { "component": "Zend\\Form", @@ -2660,12 +2658,13 @@ "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-form", + "description": "Validate and display simple and complex forms, casting forms to business objects and vice versa", "keywords": [ + "ZendFramework", "form", - "zf2" + "zf" ], - "time": "2017-05-18 14:59:53" + "time": "2017-12-06T21:09:08+00:00" }, { "name": "zendframework/zend-http", @@ -2718,7 +2717,7 @@ "zend", "zf" ], - "time": "2017-10-13 12:06:24" + "time": "2017-10-13T12:06:24+00:00" }, { "name": "zendframework/zend-hydrator", @@ -2776,7 +2775,7 @@ "hydrator", "zf2" ], - "time": "2016-02-18 22:38:26" + "time": "2016-02-18T22:38:26+00:00" }, { "name": "zendframework/zend-i18n", @@ -2843,30 +2842,30 @@ "i18n", "zf2" ], - "time": "2017-05-17 17:00:12" + "time": "2017-05-17T17:00:12+00:00" }, { "name": "zendframework/zend-inputfilter", - "version": "2.7.5", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/zendframework/zend-inputfilter.git", - "reference": "02bbc6b5fc54991e43e7471e54e2173077708d7b" + "reference": "e7edd625f2fcdd72a719a7023114c5f4b4f38488" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/02bbc6b5fc54991e43e7471e54e2173077708d7b", - "reference": "02bbc6b5fc54991e43e7471e54e2173077708d7b", + "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/e7edd625f2fcdd72a719a7023114c5f4b4f38488", + "reference": "e7edd625f2fcdd72a719a7023114c5f4b4f38488", "shasum": "" }, "require": { - "php": "^7.0 || ^5.6", + "php": "^5.6 || ^7.0", "zendframework/zend-filter": "^2.6", "zendframework/zend-stdlib": "^2.7 || ^3.0", - "zendframework/zend-validator": "^2.6" + "zendframework/zend-validator": "^2.10.1" }, "require-dev": { - "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "phpunit/phpunit": "^5.7.23 || ^6.4.3", "zendframework/zend-coding-standard": "~1.0.0", "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" }, @@ -2876,8 +2875,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7-dev", - "dev-develop": "2.8-dev" + "dev-master": "2.8-dev", + "dev-develop": "2.9-dev" }, "zf": { "component": "Zend\\InputFilter", @@ -2893,12 +2892,13 @@ "license": [ "BSD-3-Clause" ], - "homepage": "https://github.com/zendframework/zend-inputfilter", + "description": "Normalize and validate input sets from the web, APIs, the CLI, and more, including files", "keywords": [ + "ZendFramework", "inputfilter", - "zf2" + "zf" ], - "time": "2017-11-07 17:08:00" + "time": "2017-12-04T21:24:25+00:00" }, { "name": "zendframework/zend-json", @@ -2953,7 +2953,7 @@ "json", "zf2" ], - "time": "2016-02-04 21:20:26" + "time": "2016-02-04T21:20:26+00:00" }, { "name": "zendframework/zend-loader", @@ -2997,7 +2997,7 @@ "loader", "zf2" ], - "time": "2015-06-03 14:05:47" + "time": "2015-06-03T14:05:47+00:00" }, { "name": "zendframework/zend-log", @@ -3068,7 +3068,7 @@ "logging", "zf2" ], - "time": "2017-05-17 16:03:26" + "time": "2017-05-17T16:03:26+00:00" }, { "name": "zendframework/zend-math", @@ -3118,27 +3118,27 @@ "math", "zf2" ], - "time": "2016-04-07 16:29:53" + "time": "2016-04-07T16:29:53+00:00" }, { "name": "zendframework/zend-modulemanager", - "version": "2.8.1", + "version": "2.8.2", "source": { "type": "git", "url": "https://github.com/zendframework/zend-modulemanager.git", - "reference": "710c13353b1ff0975777dbeb39bbf1c85e3353a3" + "reference": "394df6e12248ac430a312d4693f793ee7120baa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/710c13353b1ff0975777dbeb39bbf1c85e3353a3", - "reference": "710c13353b1ff0975777dbeb39bbf1c85e3353a3", + "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/394df6e12248ac430a312d4693f793ee7120baa6", + "reference": "394df6e12248ac430a312d4693f793ee7120baa6", "shasum": "" }, "require": { "php": "^5.6 || ^7.0", "zendframework/zend-config": "^3.1 || ^2.6", "zendframework/zend-eventmanager": "^3.2 || ^2.6.3", - "zendframework/zend-stdlib": "^3.0 || ^2.7" + "zendframework/zend-stdlib": "^3.1 || ^2.7" }, "require-dev": { "phpunit/phpunit": "^6.0.8 || ^5.7.15", @@ -3146,7 +3146,7 @@ "zendframework/zend-console": "^2.6", "zendframework/zend-di": "^2.6", "zendframework/zend-loader": "^2.5", - "zendframework/zend-mvc": "^2.7", + "zendframework/zend-mvc": "^3.0 || ^2.7", "zendframework/zend-servicemanager": "^3.0.3 || ^2.7.5" }, "suggest": { @@ -3158,8 +3158,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev", - "dev-develop": "2.9-dev" + "dev-master": "2.7-dev", + "dev-develop": "2.8-dev" } }, "autoload": { @@ -3171,12 +3171,14 @@ "license": [ "BSD-3-Clause" ], + "description": "Modular application system for zend-mvc applications", "homepage": "https://github.com/zendframework/zend-modulemanager", "keywords": [ + "ZendFramework", "modulemanager", - "zf2" + "zf" ], - "time": "2017-11-01 18:30:41" + "time": "2017-12-02T06:11:18+00:00" }, { "name": "zendframework/zend-mvc", @@ -3268,7 +3270,7 @@ "mvc", "zf2" ], - "time": "2017-04-27 15:44:01" + "time": "2017-04-27T15:44:01+00:00" }, { "name": "zendframework/zend-psr7bridge", @@ -3317,20 +3319,20 @@ "psr", "psr-7" ], - "time": "2016-05-10 21:44:39" + "time": "2016-05-10T21:44:39+00:00" }, { "name": "zendframework/zend-serializer", - "version": "2.8.0", + "version": "2.8.1", "source": { "type": "git", "url": "https://github.com/zendframework/zend-serializer.git", - "reference": "ff74ea020f5f90866eb28365327e9bc765a61a6e" + "reference": "7ac42b9a47e9cb23895173a3096bc3b3fb7ac580" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/ff74ea020f5f90866eb28365327e9bc765a61a6e", - "reference": "ff74ea020f5f90866eb28365327e9bc765a61a6e", + "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/7ac42b9a47e9cb23895173a3096bc3b3fb7ac580", + "reference": "7ac42b9a47e9cb23895173a3096bc3b3fb7ac580", "shasum": "" }, "require": { @@ -3339,8 +3341,9 @@ "zendframework/zend-stdlib": "^2.7 || ^3.0" }, "require-dev": { - "phpunit/phpunit": "^4.5", - "squizlabs/php_codesniffer": "^2.3.1", + "doctrine/instantiator": "1.0.*", + "phpunit/phpunit": "^5.5", + "zendframework/zend-coding-standard": "~1.0.0", "zendframework/zend-math": "^2.6", "zendframework/zend-servicemanager": "^2.7.5 || ^3.0.3" }, @@ -3374,7 +3377,7 @@ "serializer", "zf2" ], - "time": "2016-06-21 17:01:55" + "time": "2017-11-20T22:21:04+00:00" }, { "name": "zendframework/zend-server", @@ -3420,20 +3423,20 @@ "server", "zf2" ], - "time": "2016-06-20 22:27:55" + "time": "2016-06-20T22:27:55+00:00" }, { "name": "zendframework/zend-servicemanager", - "version": "2.7.8", + "version": "2.7.10", "source": { "type": "git", "url": "https://github.com/zendframework/zend-servicemanager.git", - "reference": "2ae3b6e4978ec2e9ff52352e661946714ed989f9" + "reference": "ba7069c94c9af93122be9fa31cddd37f7707d5b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/2ae3b6e4978ec2e9ff52352e661946714ed989f9", - "reference": "2ae3b6e4978ec2e9ff52352e661946714ed989f9", + "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/ba7069c94c9af93122be9fa31cddd37f7707d5b4", + "reference": "ba7069c94c9af93122be9fa31cddd37f7707d5b4", "shasum": "" }, "require": { @@ -3472,31 +3475,35 @@ "servicemanager", "zf2" ], - "time": "2016-12-19 19:14:29" + "time": "2017-12-05T16:27:36+00:00" }, { "name": "zendframework/zend-session", - "version": "2.8.0", + "version": "2.8.3", "source": { "type": "git", "url": "https://github.com/zendframework/zend-session.git", - "reference": "b1486c382decc241de8b1c7778eaf2f0a884f67d" + "reference": "c14be63df39b0caee784e53cd57c43eb48efefea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-session/zipball/b1486c382decc241de8b1c7778eaf2f0a884f67d", - "reference": "b1486c382decc241de8b1c7778eaf2f0a884f67d", + "url": "https://api.github.com/repos/zendframework/zend-session/zipball/c14be63df39b0caee784e53cd57c43eb48efefea", + "reference": "c14be63df39b0caee784e53cd57c43eb48efefea", "shasum": "" }, "require": { - "php": "^7.0 || ^5.6", + "php": "^5.6 || ^7.0", "zendframework/zend-eventmanager": "^2.6.2 || ^3.0", "zendframework/zend-stdlib": "^2.7 || ^3.0" }, + "conflict": { + "phpunit/phpunit": ">=6.5.0" + }, "require-dev": { "container-interop/container-interop": "^1.1", "mongodb/mongodb": "^1.0.1", - "phpunit/phpunit": "^6.0.8 || ^5.7.15", + "php-mock/php-mock-phpunit": "^1.1.2 || ^2.0", + "phpunit/phpunit": "^5.7.5 || ^6.0.13", "zendframework/zend-cache": "^2.6.1", "zendframework/zend-coding-standard": "~1.0.0", "zendframework/zend-db": "^2.7", @@ -3533,12 +3540,12 @@ "BSD-3-Clause" ], "description": "manage and preserve session data, a logical complement of cookie data, across multiple page requests by the same client", - "homepage": "https://github.com/zendframework/zend-session", "keywords": [ + "ZendFramework", "session", - "zf2" + "zf" ], - "time": "2017-06-19 21:31:39" + "time": "2017-12-01T17:35:04+00:00" }, { "name": "zendframework/zend-soap", @@ -3590,7 +3597,7 @@ "soap", "zf2" ], - "time": "2016-04-21 16:06:27" + "time": "2016-04-21T16:06:27+00:00" }, { "name": "zendframework/zend-stdlib", @@ -3649,7 +3656,7 @@ "stdlib", "zf2" ], - "time": "2016-04-12 21:17:31" + "time": "2016-04-12T21:17:31+00:00" }, { "name": "zendframework/zend-text", @@ -3696,7 +3703,7 @@ "text", "zf2" ], - "time": "2016-02-08 19:03:52" + "time": "2016-02-08T19:03:52+00:00" }, { "name": "zendframework/zend-uri", @@ -3743,7 +3750,7 @@ "uri", "zf2" ], - "time": "2016-02-17 22:38:51" + "time": "2016-02-17T22:38:51+00:00" }, { "name": "zendframework/zend-validator", @@ -3814,7 +3821,7 @@ "validator", "zf2" ], - "time": "2017-08-22 14:19:23" + "time": "2017-08-22T14:19:23+00:00" }, { "name": "zendframework/zend-view", @@ -3901,7 +3908,7 @@ "view", "zf2" ], - "time": "2017-03-21 15:05:56" + "time": "2017-03-21T15:05:56+00:00" } ], "packages-dev": [ @@ -3971,7 +3978,7 @@ "docblock", "parser" ], - "time": "2017-02-24 16:22:25" + "time": "2017-02-24T16:22:25+00:00" }, { "name": "doctrine/instantiator", @@ -4025,7 +4032,7 @@ "constructor", "instantiate" ], - "time": "2015-06-14 21:17:01" + "time": "2015-06-14T21:17:01+00:00" }, { "name": "doctrine/lexer", @@ -4079,20 +4086,20 @@ "lexer", "parser" ], - "time": "2014-09-09 13:34:57" + "time": "2014-09-09T13:34:57+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.2.10", + "version": "v2.2.13", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "b0e0f1d3d0b36a728768f9c44b074b22eb4b4c64" + "reference": "669e2327a17b94e47454c3d2e00c6f96203646f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/b0e0f1d3d0b36a728768f9c44b074b22eb4b4c64", - "reference": "b0e0f1d3d0b36a728768f9c44b074b22eb4b4c64", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/669e2327a17b94e47454c3d2e00c6f96203646f0", + "reference": "669e2327a17b94e47454c3d2e00c6f96203646f0", "shasum": "" }, "require": { @@ -4121,6 +4128,7 @@ "require-dev": { "johnkary/phpunit-speedtrap": "^1.0.1", "justinrainbow/json-schema": "^5.0", + "mikey179/vfsstream": "^1.6", "php-coveralls/php-coveralls": "^1.0.2", "phpunit/phpunit": "^4.8.35 || ^5.4.3", "symfony/phpunit-bridge": "^3.2.2 || ^4.0" @@ -4164,7 +4172,7 @@ } ], "description": "A tool to automatically fix PHP code style", - "time": "2017-11-09 13:20:53" + "time": "2017-12-08T15:17:14+00:00" }, { "name": "gecko-packages/gecko-php-unit", @@ -4208,7 +4216,7 @@ "filesystem", "phpunit" ], - "time": "2017-08-23 07:39:54" + "time": "2017-08-23T07:39:54+00:00" }, { "name": "ircmaxell/password-compat", @@ -4250,7 +4258,7 @@ "hashing", "password" ], - "time": "2014-11-20 16:49:30" + "time": "2014-11-20T16:49:30+00:00" }, { "name": "lusitanian/oauth", @@ -4317,7 +4325,7 @@ "oauth", "security" ], - "time": "2016-07-12 22:15:40" + "time": "2016-07-12T22:15:40+00:00" }, { "name": "myclabs/deep-copy", @@ -4362,7 +4370,7 @@ "object", "object graph" ], - "time": "2017-10-19 19:58:43" + "time": "2017-10-19T19:58:43+00:00" }, { "name": "pdepend/pdepend", @@ -4402,7 +4410,7 @@ "BSD-3-Clause" ], "description": "Official version of pdepend to be handled with Composer", - "time": "2017-01-19 14:23:36" + "time": "2017-01-19T14:23:36+00:00" }, { "name": "phar-io/manifest", @@ -4457,7 +4465,7 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05 18:14:27" + "time": "2017-03-05T18:14:27+00:00" }, { "name": "phar-io/version", @@ -4504,7 +4512,7 @@ } ], "description": "Library for handling version information and constraints", - "time": "2017-03-05 17:38:23" + "time": "2017-03-05T17:38:23+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -4558,33 +4566,39 @@ "reflection", "static analysis" ], - "time": "2017-09-11 18:02:19" + "time": "2017-09-11T18:02:19+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.1.1", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "2d3d238c433cf69caeb4842e97a3223a116f94b2" + "reference": "66465776cfc249844bde6d117abff1d22e06c2da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/2d3d238c433cf69caeb4842e97a3223a116f94b2", - "reference": "2d3d238c433cf69caeb4842e97a3223a116f94b2", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da", "shasum": "" }, "require": { "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/reflection-common": "^1.0.0", "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -4603,7 +4617,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-08-30 18:51:59" + "time": "2017-11-27T17:38:31+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -4650,7 +4664,7 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14 14:27:02" + "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpmd/phpmd", @@ -4716,20 +4730,20 @@ "phpmd", "pmd" ], - "time": "2017-01-20 14:41:10" + "time": "2017-01-20T14:41:10+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.7.2", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6" + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6", - "reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", "shasum": "" }, "require": { @@ -4741,7 +4755,7 @@ }, "require-dev": { "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8 || ^5.6.5" + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "type": "library", "extra": { @@ -4779,20 +4793,20 @@ "spy", "stub" ], - "time": "2017-09-04 11:05:03" + "time": "2017-11-24T13:59:53+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "5.2.3", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "8e1d2397d8adf59a3f12b2878a3aaa66d1ab189d" + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/8e1d2397d8adf59a3f12b2878a3aaa66d1ab189d", - "reference": "8e1d2397d8adf59a3f12b2878a3aaa66d1ab189d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/661f34d0bd3f1a7225ef491a70a020ad23a057a1", + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1", "shasum": "" }, "require": { @@ -4801,14 +4815,13 @@ "php": "^7.0", "phpunit/php-file-iterator": "^1.4.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0", + "phpunit/php-token-stream": "^2.0.1", "sebastian/code-unit-reverse-lookup": "^1.0.1", "sebastian/environment": "^3.0", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1" }, "require-dev": { - "ext-xdebug": "^2.5", "phpunit/phpunit": "^6.0" }, "suggest": { @@ -4817,7 +4830,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.2.x-dev" + "dev-master": "5.3.x-dev" } }, "autoload": { @@ -4832,7 +4845,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -4843,20 +4856,20 @@ "testing", "xunit" ], - "time": "2017-11-03 13:47:33" + "time": "2017-12-06T09:29:45+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.2", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", - "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { @@ -4890,7 +4903,7 @@ "filesystem", "iterator" ], - "time": "2016-10-03 07:40:28" + "time": "2017-11-27T13:52:08+00:00" }, { "name": "phpunit/php-text-template", @@ -4931,7 +4944,7 @@ "keywords": [ "template" ], - "time": "2015-06-21 13:50:34" + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", @@ -4980,20 +4993,20 @@ "keywords": [ "timer" ], - "time": "2017-02-26 11:10:40" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "9a02332089ac48e704c70f6cefed30c224e3c0b0" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9a02332089ac48e704c70f6cefed30c224e3c0b0", - "reference": "9a02332089ac48e704c70f6cefed30c224e3c0b0", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { @@ -5029,7 +5042,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-08-20 05:47:52" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", @@ -5113,7 +5126,7 @@ "testing", "xunit" ], - "time": "2017-08-03 13:59:28" + "time": "2017-08-03T13:59:28+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -5172,7 +5185,7 @@ "mock", "xunit" ], - "time": "2017-08-03 14:08:16" + "time": "2017-08-03T14:08:16+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -5217,7 +5230,7 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04 06:30:41" + "time": "2017-03-04T06:30:41+00:00" }, { "name": "sebastian/comparator", @@ -5281,7 +5294,7 @@ "compare", "equality" ], - "time": "2017-03-03 06:26:08" + "time": "2017-03-03T06:26:08+00:00" }, { "name": "sebastian/diff", @@ -5333,7 +5346,7 @@ "keywords": [ "diff" ], - "time": "2017-05-22 07:24:03" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", @@ -5383,7 +5396,7 @@ "environment", "hhvm" ], - "time": "2017-07-01 08:51:00" + "time": "2017-07-01T08:51:00+00:00" }, { "name": "sebastian/exporter", @@ -5450,24 +5463,24 @@ "export", "exporter" ], - "time": "2017-04-03 13:19:02" + "time": "2017-04-03T13:19:02+00:00" }, { "name": "sebastian/finder-facade", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/finder-facade.git", - "reference": "2a6f7f57efc0aa2d23297d9fd9e2a03111a8c0b9" + "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/2a6f7f57efc0aa2d23297d9fd9e2a03111a8c0b9", - "reference": "2a6f7f57efc0aa2d23297d9fd9e2a03111a8c0b9", + "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", + "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", "shasum": "" }, "require": { - "symfony/finder": "~2.3|~3.0", + "symfony/finder": "~2.3|~3.0|~4.0", "theseer/fdomdocument": "~1.3" }, "type": "library", @@ -5489,7 +5502,7 @@ ], "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", "homepage": "https://github.com/sebastianbergmann/finder-facade", - "time": "2016-02-17 07:02:23" + "time": "2017-11-18T17:31:49+00:00" }, { "name": "sebastian/global-state", @@ -5540,7 +5553,7 @@ "keywords": [ "global state" ], - "time": "2017-04-27 15:39:26" + "time": "2017-04-27T15:39:26+00:00" }, { "name": "sebastian/object-enumerator", @@ -5587,7 +5600,7 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03 12:35:26" + "time": "2017-08-03T12:35:26+00:00" }, { "name": "sebastian/object-reflector", @@ -5632,7 +5645,7 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29 09:07:27" + "time": "2017-03-29T09:07:27+00:00" }, { "name": "sebastian/phpcpd", @@ -5683,7 +5696,7 @@ ], "description": "Copy/Paste Detector (CPD) for PHP code.", "homepage": "https://github.com/sebastianbergmann/phpcpd", - "time": "2016-04-17 19:32:49" + "time": "2016-04-17T19:32:49+00:00" }, { "name": "sebastian/recursion-context", @@ -5736,7 +5749,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03 06:23:57" + "time": "2017-03-03T06:23:57+00:00" }, { "name": "sebastian/resource-operations", @@ -5778,7 +5791,7 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28 20:34:47" + "time": "2015-07-28T20:34:47+00:00" }, { "name": "sebastian/version", @@ -5821,7 +5834,7 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03 07:35:21" + "time": "2016-10-03T07:35:21+00:00" }, { "name": "squizlabs/php_codesniffer", @@ -5872,34 +5885,34 @@ "phpcs", "standards" ], - "time": "2017-10-16 22:40:25" + "time": "2017-10-16T22:40:25+00:00" }, { "name": "symfony/config", - "version": "v3.3.12", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f" + "reference": "1de51a6c76359897ab32c309934b93d036bccb60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/8d2649077dc54dfbaf521d31f217383d82303c5f", - "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f", + "url": "https://api.github.com/repos/symfony/config/zipball/1de51a6c76359897ab32c309934b93d036bccb60", + "reference": "1de51a6c76359897ab32c309934b93d036bccb60", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0" + "symfony/filesystem": "~2.8|~3.0|~4.0" }, "conflict": { "symfony/dependency-injection": "<3.3", "symfony/finder": "<3.3" }, "require-dev": { - "symfony/dependency-injection": "~3.3", - "symfony/finder": "~3.3", - "symfony/yaml": "~3.0" + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -5907,7 +5920,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -5934,20 +5947,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2017-11-07 14:16:22" + "time": "2017-11-19T20:09:36+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.3.12", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "4e84f5af2c2d51ee3dee72df40b7fc08f49b4ab8" + "reference": "27810742895ad89e706ba5028e4f8fe425792b50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/4e84f5af2c2d51ee3dee72df40b7fc08f49b4ab8", - "reference": "4e84f5af2c2d51ee3dee72df40b7fc08f49b4ab8", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/27810742895ad89e706ba5028e4f8fe425792b50", + "reference": "27810742895ad89e706ba5028e4f8fe425792b50", "shasum": "" }, "require": { @@ -5957,15 +5970,16 @@ "conflict": { "symfony/config": "<3.3.1", "symfony/finder": "<3.3", - "symfony/yaml": "<3.3" + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" }, "provide": { "psr/container-implementation": "1.0" }, "require-dev": { - "symfony/config": "~3.3", - "symfony/expression-language": "~2.8|~3.0", - "symfony/yaml": "~3.3" + "symfony/config": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/config": "", @@ -5977,7 +5991,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -6004,20 +6018,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-11-13 18:10:32" + "time": "2017-12-04T19:20:32+00:00" }, { "name": "symfony/options-resolver", - "version": "v3.3.12", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "623d9c210a137205f7e6e98166105625402cbb2f" + "reference": "08748edfe6982f4d878cc42b8325b19a276fb1cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/623d9c210a137205f7e6e98166105625402cbb2f", - "reference": "623d9c210a137205f7e6e98166105625402cbb2f", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/08748edfe6982f4d878cc42b8325b19a276fb1cf", + "reference": "08748edfe6982f4d878cc42b8325b19a276fb1cf", "shasum": "" }, "require": { @@ -6026,7 +6040,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -6058,7 +6072,7 @@ "configuration", "options" ], - "time": "2017-11-05 15:47:03" + "time": "2017-11-05T16:10:10+00:00" }, { "name": "symfony/polyfill-php54", @@ -6116,7 +6130,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-php55", @@ -6172,7 +6186,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-php70", @@ -6231,7 +6245,7 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/polyfill-php72", @@ -6286,20 +6300,20 @@ "portable", "shim" ], - "time": "2017-10-11 12:05:26" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.3.12", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365" + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/1e93c3139ef6c799831fe03efd0fb1c7aecb3365", - "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/52510fe1aefdc1c5d2076ac6030421d387e689d1", + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1", "shasum": "" }, "require": { @@ -6308,7 +6322,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -6335,7 +6349,7 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2017-11-10 19:02:53" + "time": "2017-11-07T14:28:09+00:00" }, { "name": "theseer/fdomdocument", @@ -6375,7 +6389,7 @@ ], "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", "homepage": "https://github.com/theseer/fDOMDocument", - "time": "2017-06-30 11:53:12" + "time": "2017-06-30T11:53:12+00:00" }, { "name": "theseer/tokenizer", @@ -6415,7 +6429,7 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2017-04-07 12:08:54" + "time": "2017-04-07T12:08:54+00:00" }, { "name": "webmozart/assert", @@ -6465,7 +6479,7 @@ "check", "validate" ], - "time": "2016-11-23 20:04:58" + "time": "2016-11-23T20:04:58+00:00" } ], "aliases": [], diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json index ad625b3fd29de..17669bd78bd69 100644 --- a/lib/internal/Magento/Framework/composer.json +++ b/lib/internal/Magento/Framework/composer.json @@ -2,7 +2,7 @@ "name": "magento/framework", "description": "N/A", "type": "magento2-library", - "version": "101.0.1", + "version": "101.0.2", "license": [ "OSL-3.0", "AFL-3.0" From cc27eabd71911046da62eaea3475a7d1a003cf65 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky <p.bystritsky@yandex.ru> Date: Mon, 11 Dec 2017 14:31:55 +0200 Subject: [PATCH 511/653] magento/magento2#12259: Save and Duplicated product not working --- .../Catalog/Model/Product/CopierTest.php | 23 +++++++++++++++++++ .../_files/product_simple_rollback.php | 22 ++++++++++-------- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/CopierTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/CopierTest.php index ec9c2752b1805..d3e45c6e1d54e 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/CopierTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/CopierTest.php @@ -58,10 +58,33 @@ public function testDoubleCopy() ); } + /** + * @inheritdoc + */ protected function setUp() { + parent::setUp(); $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); $this->copier = $this->objectManager->get(Copier::class); $this->productRepository = $this->objectManager->get(ProductRepository::class); } + + /** + * @inheritdoc + */ + protected function tearDown() + { + $skus = [ + 'simple-1', + 'simple-2' + ]; + foreach ($skus as $sku) { + try { + $product = $this->productRepository->get($sku, false, null, true); + $this->productRepository->delete($product); + } catch (NoSuchEntityException $e) { + } + } + parent::tearDown(); + } } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_rollback.php index bdefb1470ec2e..28d229d06b2c0 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_rollback.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_rollback.php @@ -3,21 +3,23 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +use Magento\Framework\Exception\NoSuchEntityException; -use Magento\Catalog\Model\Product; -use Magento\Catalog\Model\ResourceModel\Product\Collection; -use Magento\Framework\Registry; -use Magento\TestFramework\Helper\Bootstrap; +\Magento\TestFramework\Helper\Bootstrap::getInstance()->getInstance()->reinitialize(); -/** @var Registry $registry */ -$registry = Bootstrap::getObjectManager()->get(Registry::class); +/** @var \Magento\Framework\Registry $registry */ +$registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Framework\Registry::class); $registry->unregister('isSecureArea'); $registry->register('isSecureArea', true); -/** @var Collection $productCollection */ -$productCollection = Bootstrap::getObjectManager()->get(Product::class)->getCollection(); -$productCollection->delete(); - +/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ +$productRepository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get(\Magento\Catalog\Api\ProductRepositoryInterface::class); +try { + $product = $productRepository->get('simple', false, null, true); + $productRepository->delete($product); +} catch (NoSuchEntityException $e) { +} $registry->unregister('isSecureArea'); $registry->register('isSecureArea', false); From ca60fe0d3868c3003a41f5c12ca25c827dead37f Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov <slopukhov@magento.com> Date: Mon, 11 Dec 2017 14:35:25 +0200 Subject: [PATCH 512/653] MAGETWO-83659: Enable metrics validation for PAT --- setup/performance-toolkit/benchmark.jmx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx index 2b89203a43745..be6d8b7202d01 100644 --- a/setup/performance-toolkit/benchmark.jmx +++ b/setup/performance-toolkit/benchmark.jmx @@ -7943,7 +7943,7 @@ if (testLabel try { Random random = new Random(); - if (${seedForRandom} > 0) { + if (${seedForRandom} > 0) { random.setSeed(${seedForRandom} + ${__threadNum}); } simpleCount = props.get("simple_products_list").size(); From 34b64380a1d2eb35d1155ea94dd117518d1d040e Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko <omiroshnichenko@magento.com> Date: Mon, 11 Dec 2017 14:43:15 +0200 Subject: [PATCH 513/653] 12468: Sort by Price not working on CatalogSearch Page in Magento 2 --- .../Magento/Catalog/Block/Product/ProductList/Toolbar.php | 2 +- .../Catalog/view/frontend/web/js/product/list/toolbar.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php index df98969c262ce..dfbaf3a62420a 100644 --- a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php +++ b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php @@ -689,7 +689,7 @@ public function getWidgetOptionsJson(array $customOptions = []) 'limit' => ToolbarModel::LIMIT_PARAM_NAME, 'modeDefault' => $defaultMode, 'directionDefault' => $this->_direction ?: ProductList::DEFAULT_SORT_DIRECTION, - 'orderDefault' => $this->_productListHelper->getDefaultSortField(), + 'orderDefault' => $this->getOrderField(), 'limitDefault' => $this->_productListHelper->getDefaultLimitPerPageValue($defaultMode), 'url' => $this->getPagerUrl(), ]; diff --git a/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js b/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js index 259ca979206e9..88be03a04e71a 100644 --- a/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js +++ b/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js @@ -78,7 +78,6 @@ define([ ); }, - /*eslint-disable no-unused-vars*/ /** * @param {String} paramName * @param {*} paramValue @@ -100,13 +99,14 @@ define([ } paramData[paramName] = paramValue; + if (paramValue == defaultValue) { //eslint-disable-line eqeqeq + delete paramData[paramName]; + } paramData = $.param(paramData); location.href = baseUrl + (paramData.length ? '?' + paramData : ''); } }); - /*eslint-enable no-unused-vars*/ - return $.mage.productListToolbarForm; }); From 1e26ee8d22df859fbc264174be7e36c770af6f6a Mon Sep 17 00:00:00 2001 From: nmalevanec <mikola.malevanec@transoftgroup.com> Date: Mon, 11 Dec 2017 14:45:02 +0200 Subject: [PATCH 514/653] 8011: Strip Tags from attribute. --- .../Magento/Rule/Model/Condition/Product/AbstractProduct.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php b/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php index 370d00d6c302b..9a6f1b48620dc 100644 --- a/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php +++ b/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php @@ -743,7 +743,7 @@ protected function getEavAttributeTableAlias() * @param array $selectOptions * @return array */ - private function removeTagsFromLabel($selectOptions) + private function removeTagsFromLabel(array $selectOptions) { foreach ($selectOptions as &$option) { if (isset($option['label'])) { From 2ee232640aff5b4dba4868122ed2f93628909aae Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Mon, 11 Dec 2017 15:37:02 +0200 Subject: [PATCH 515/653] 8507: There is invalid type in PHPDoc block of \Magento\Framework\Data\Tree::getNodeById() --- lib/internal/Magento/Framework/Data/Tree.php | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/lib/internal/Magento/Framework/Data/Tree.php b/lib/internal/Magento/Framework/Data/Tree.php index b348bc8fdc93b..a61c16bbc5d18 100644 --- a/lib/internal/Magento/Framework/Data/Tree.php +++ b/lib/internal/Magento/Framework/Data/Tree.php @@ -23,17 +23,13 @@ class Tree */ protected $_nodes; - /** - * Enter description here... - * - */ public function __construct() { $this->_nodes = new NodeCollection($this); } /** - * Enter description here... + * Get Tree. * * @return \Magento\Framework\Data\Tree */ @@ -43,7 +39,7 @@ public function getTree() } /** - * Enter description here... + * Load Tree. * * @param Node $parentNode * @return void @@ -54,7 +50,7 @@ public function load($parentNode = null) } /** - * Enter description here... + * Load Node by Node id. * * @param int|string $nodeId * @return void @@ -177,7 +173,7 @@ public function getChildren($node) } /** - * Enter description here... + * Get Nodes. * * @return NodeCollection */ @@ -187,7 +183,7 @@ public function getNodes() } /** - * Enter description here... + * Get Node by id. * * @param string|int $nodeId * @return Node From 6e3ebfbd04ae24ebcd0a08ff316182e575513c83 Mon Sep 17 00:00:00 2001 From: nmalevanec <mikola.malevanec@transoftgroup.com> Date: Mon, 11 Dec 2017 15:47:08 +0200 Subject: [PATCH 516/653] 10797: catalogProductTierPriceManagementV1 DELETE and POST operation wipes out media gallery selections when used on store code "all". --- app/code/Magento/Catalog/Model/ProductRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Model/ProductRepository.php b/app/code/Magento/Catalog/Model/ProductRepository.php index cdab94b57b4e4..90b18031c1448 100644 --- a/app/code/Magento/Catalog/Model/ProductRepository.php +++ b/app/code/Magento/Catalog/Model/ProductRepository.php @@ -507,7 +507,7 @@ protected function processMediaGallery(ProductInterface $product, array $mediaGa foreach ($existingMediaGallery as $key => &$existingEntry) { if (isset($entriesById[$existingEntry['value_id']])) { $updatedEntry = $entriesById[$existingEntry['value_id']]; - if (isset($updatedEntry['file']) && $updatedEntry['file'] === null) { + if (array_key_exists('file', $updatedEntry) && $updatedEntry['file'] === null) { unset($updatedEntry['file']); } $existingMediaGallery[$key] = array_merge($existingEntry, $updatedEntry); From 0e445495f1471738fb5f3b09e119a47ef4b78fd2 Mon Sep 17 00:00:00 2001 From: Andrii Dimov <adimov@magento.com> Date: Mon, 11 Dec 2017 15:46:45 +0200 Subject: [PATCH 517/653] MAGETWO-84038: Integrate tool for handle @deprecate annotations to S1 and S3 builds - update dock-block information in php classes --- .../Magento/Braintree/Model/Adapter/BraintreeAdapter.php | 2 +- lib/internal/Magento/Framework/Model/AbstractModel.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Braintree/Model/Adapter/BraintreeAdapter.php b/app/code/Magento/Braintree/Model/Adapter/BraintreeAdapter.php index d11be39a9bb49..a231bcdc30f60 100644 --- a/app/code/Magento/Braintree/Model/Adapter/BraintreeAdapter.php +++ b/app/code/Magento/Braintree/Model/Adapter/BraintreeAdapter.php @@ -48,7 +48,7 @@ public function __construct($merchantId, $publicKey, $privateKey, $environment) * Initializes credentials. * * @return void - * @deprecated is not used anymore + * @deprecated 100.2.2 is not used anymore */ protected function initCredentials() { diff --git a/lib/internal/Magento/Framework/Model/AbstractModel.php b/lib/internal/Magento/Framework/Model/AbstractModel.php index d8a7c96c63915..b9b607a0f7631 100644 --- a/lib/internal/Magento/Framework/Model/AbstractModel.php +++ b/lib/internal/Magento/Framework/Model/AbstractModel.php @@ -464,7 +464,7 @@ protected function _setResourceModel($resourceName, $collectionName = null) * * @throws \Magento\Framework\Exception\LocalizedException * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb - * @deprecated because resource models should be used directly + * @deprecated 101.0.0 because resource models should be used directly */ protected function _getResource() { @@ -493,7 +493,7 @@ public function getResourceName() * @TODO MAGETWO-23541: Incorrect dependencies between Model\AbstractModel and Data\Collection\Db from Framework * @throws \Magento\Framework\Exception\LocalizedException * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection - * @deprecated because collections should be used directly via factory + * @deprecated 101.0.0 because collections should be used directly via factory */ public function getResourceCollection() { @@ -514,7 +514,7 @@ public function getResourceCollection() * * @TODO MAGETWO-23541: Incorrect dependencies between Model\AbstractModel and Data\Collection\Db from Framework * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection - * @deprecated because collections should be used directly via factory + * @deprecated 101.0.0 because collections should be used directly via factory */ public function getCollection() { @@ -885,7 +885,7 @@ public function afterDeleteCommit() * Retrieve model resource * * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb - * @deprecated because resource models should be used directly + * @deprecated 101.0.0 because resource models should be used directly */ public function getResource() { From 491ed56238c618d84fe2b6a6a5007ead43a64883 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@magento.com> Date: Mon, 11 Dec 2017 16:00:53 +0200 Subject: [PATCH 518/653] magento/magento2#12610 --- .../Magento/Framework/Crontab/CrontabManager.php | 7 ++++++- .../Crontab/Test/Unit/CrontabManagerTest.php | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/Crontab/CrontabManager.php b/lib/internal/Magento/Framework/Crontab/CrontabManager.php index b06e12a7736e3..5a4cdac432193 100644 --- a/lib/internal/Magento/Framework/Crontab/CrontabManager.php +++ b/lib/internal/Magento/Framework/Crontab/CrontabManager.php @@ -114,7 +114,12 @@ public function removeTasks() private function generateSection($content, $tasks = []) { if ($tasks) { - $content .= PHP_EOL . self::TASKS_BLOCK_START . PHP_EOL; + // Add EOL symbol to previous line if not exist. + if (substr($content, -strlen(PHP_EOL)) !== PHP_EOL) { + $content .= PHP_EOL; + } + + $content .= self::TASKS_BLOCK_START . PHP_EOL; foreach ($tasks as $task) { $content .= $task['expression'] . ' ' . PHP_BINARY . ' '. $task['command'] . PHP_EOL; } diff --git a/lib/internal/Magento/Framework/Crontab/Test/Unit/CrontabManagerTest.php b/lib/internal/Magento/Framework/Crontab/Test/Unit/CrontabManagerTest.php index e4088b1e4befc..71a4c6a6999e0 100644 --- a/lib/internal/Magento/Framework/Crontab/Test/Unit/CrontabManagerTest.php +++ b/lib/internal/Magento/Framework/Crontab/Test/Unit/CrontabManagerTest.php @@ -339,6 +339,17 @@ public function saveTasksDataProvider() . ' %% cron:run | grep -v \"Ran \'jobs\' by schedule\"' . PHP_EOL . CrontabManagerInterface::TASKS_BLOCK_END . PHP_EOL, ], + [ + 'tasks' => [ + ['command' => '{magentoRoot}run.php % cron:run | grep -v "Ran \'jobs\' by schedule"'] + ], + 'content' => '* * * * * /bin/php /var/www/cron.php', + 'contentToSave' => '* * * * * /bin/php /var/www/cron.php' . PHP_EOL + . CrontabManagerInterface::TASKS_BLOCK_START . PHP_EOL + . '* * * * * ' . PHP_BINARY . ' /var/www/magento2/run.php' + . ' %% cron:run | grep -v \"Ran \'jobs\' by schedule\"' . PHP_EOL + . CrontabManagerInterface::TASKS_BLOCK_END . PHP_EOL, + ], ]; } } From 6f7219f4d2a6cb43cb3b7e8805a096d6df63ca44 Mon Sep 17 00:00:00 2001 From: Tommy Quissens <tommy.quissens@storefront.be> Date: Mon, 11 Dec 2017 15:25:53 +0100 Subject: [PATCH 519/653] Add customer login url from Customer Url model to checkout config so it contains the referer url if necessary --- .../Magento/Customer/Model/Checkout/ConfigProvider.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php b/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php index a333fe8df594a..6b84ca9aaaa9a 100644 --- a/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php +++ b/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php @@ -23,7 +23,7 @@ class ConfigProvider implements ConfigProviderInterface /** * @var UrlInterface */ - protected $urlBuilder; + protected $customerUrl; /** * @var ScopeConfigInterface @@ -31,16 +31,16 @@ class ConfigProvider implements ConfigProviderInterface protected $scopeConfig; /** - * @param UrlInterface $urlBuilder + * @param Url $customerUrl * @param StoreManagerInterface $storeManager * @param ScopeConfigInterface $scopeConfig */ public function __construct( - UrlInterface $urlBuilder, + Url $customerUrl, StoreManagerInterface $storeManager, ScopeConfigInterface $scopeConfig ) { - $this->urlBuilder = $urlBuilder; + $this->customerUrl = $customerUrl; $this->storeManager = $storeManager; $this->scopeConfig = $scopeConfig; } @@ -78,7 +78,7 @@ protected function isAutocompleteEnabled() */ protected function getLoginUrl() { - return $this->urlBuilder->getUrl(Url::ROUTE_ACCOUNT_LOGIN); + return $this->customerUrl->getLoginUrl(); } /** From 5bc45d98ef678b1e5b7e048debfb53199f75ffe7 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov <sidolov@magento.com> Date: Mon, 11 Dec 2017 16:38:34 +0200 Subject: [PATCH 520/653] magento/magento2#12610 --- .../Framework/Crontab/Test/Unit/CrontabManagerTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/internal/Magento/Framework/Crontab/Test/Unit/CrontabManagerTest.php b/lib/internal/Magento/Framework/Crontab/Test/Unit/CrontabManagerTest.php index ca74077be04b0..3c52b5d33a5ef 100644 --- a/lib/internal/Magento/Framework/Crontab/Test/Unit/CrontabManagerTest.php +++ b/lib/internal/Magento/Framework/Crontab/Test/Unit/CrontabManagerTest.php @@ -343,10 +343,10 @@ public function saveTasksDataProvider() ], 'content' => '* * * * * /bin/php /var/www/cron.php', 'contentToSave' => '* * * * * /bin/php /var/www/cron.php' . PHP_EOL - . CrontabManagerInterface::TASKS_BLOCK_START . PHP_EOL + . CrontabManagerInterface::TASKS_BLOCK_START . ' ' . md5(BP) . PHP_EOL . '* * * * * ' . PHP_BINARY . ' /var/www/magento2/run.php' . ' %% cron:run | grep -v \"Ran \'jobs\' by schedule\"' . PHP_EOL - . CrontabManagerInterface::TASKS_BLOCK_END . PHP_EOL, + . CrontabManagerInterface::TASKS_BLOCK_END . ' ' . md5(BP) . PHP_EOL, ], ]; } From 9650aa432072c764cb0259c8b2372abd2582f784 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Mon, 11 Dec 2017 16:40:24 +0200 Subject: [PATCH 521/653] 12526: Currency change, Bank Transfer but checkout page shows "Your credit card will be charged for" --- app/code/Magento/Tax/i18n/en_US.csv | 3 ++- .../Magento/Tax/view/frontend/layout/checkout_index_index.xml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Tax/i18n/en_US.csv b/app/code/Magento/Tax/i18n/en_US.csv index 2314f27b92928..e6d89deb7696c 100644 --- a/app/code/Magento/Tax/i18n/en_US.csv +++ b/app/code/Magento/Tax/i18n/en_US.csv @@ -176,4 +176,5 @@ Rate,Rate "Order Total Incl. Tax","Order Total Incl. Tax" "Order Total","Order Total" "Your credit card will be charged for","Your credit card will be charged for" -"An error occurred while loading tax rates.","An error occurred while loading tax rates." \ No newline at end of file +"An error occurred while loading tax rates.","An error occurred while loading tax rates." +"You will be charged for","You will be charged for" diff --git a/app/code/Magento/Tax/view/frontend/layout/checkout_index_index.xml b/app/code/Magento/Tax/view/frontend/layout/checkout_index_index.xml index 6d867fcb71f2e..6969580b78b8f 100644 --- a/app/code/Magento/Tax/view/frontend/layout/checkout_index_index.xml +++ b/app/code/Magento/Tax/view/frontend/layout/checkout_index_index.xml @@ -70,7 +70,7 @@ <item name="config" xsi:type="array"> <item name="exclTaxLabel" xsi:type="string" translate="true">Order Total Excl. Tax</item> <item name="inclTaxLabel" xsi:type="string" translate="true">Order Total Incl. Tax</item> - <item name="basicCurrencyMessage" xsi:type="string" translate="true">Your credit card will be charged for</item> + <item name="basicCurrencyMessage" xsi:type="string" translate="true">You will be charged for</item> <item name="title" xsi:type="string" translate="true">Order Total</item> </item> </item> From 1ef70f0a2b78f0b87dd078af4e961f48cda886e7 Mon Sep 17 00:00:00 2001 From: RomanKis <romaikiss@gmail.com> Date: Fri, 24 Nov 2017 15:06:50 +0200 Subject: [PATCH 522/653] 8862: Can't emptying values by magento 2 api --- .../Webapi/ServiceInputProcessor.php | 31 +++++++++++---- .../Test/Unit/ServiceInputProcessorTest.php | 38 +++++++++++++++++++ 2 files changed, 62 insertions(+), 7 deletions(-) diff --git a/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php b/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php index faca0c1530a53..6558890698082 100644 --- a/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php +++ b/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php @@ -315,6 +315,10 @@ protected function _createDataObjectForTypeAndArrayValue($type, $customAttribute */ public function convertValue($data, $type) { + if ($data === '') { + return $data; + } + $isArrayType = $this->typeProcessor->isArrayType($type); if ($isArrayType && isset($data['item'])) { $data = $this->_removeSoapItemNode($data); @@ -325,13 +329,7 @@ public function convertValue($data, $type) /** Complex type or array of complex types */ if ($isArrayType) { // Initializing the result for array type else it will return null for empty array - $result = is_array($data) ? [] : null; - $itemType = $this->typeProcessor->getArrayItemType($type); - if (is_array($data)) { - foreach ($data as $key => $item) { - $result[$key] = $this->_createFromArray($itemType, $item); - } - } + $result = $this->getResultForArrayType($data, $type); } else { $result = $this->_createFromArray($type, $data); } @@ -385,4 +383,23 @@ protected function processInputError($inputError) } } } + + /** + * @param mixed $data + * @param string $type + * + * @return array|null + */ + private function getResultForArrayType($data, $type) + { + $result = is_array($data) ? [] : null; + $itemType = $this->typeProcessor->getArrayItemType($type); + if (is_array($data)) { + foreach ($data as $key => $item) { + $result[$key] = $this->_createFromArray($itemType, $item); + } + } + + return $result; + } } diff --git a/lib/internal/Magento/Framework/Webapi/Test/Unit/ServiceInputProcessorTest.php b/lib/internal/Magento/Framework/Webapi/Test/Unit/ServiceInputProcessorTest.php index 6f5a18916e04d..fe85e59221847 100644 --- a/lib/internal/Magento/Framework/Webapi/Test/Unit/ServiceInputProcessorTest.php +++ b/lib/internal/Magento/Framework/Webapi/Test/Unit/ServiceInputProcessorTest.php @@ -569,4 +569,42 @@ public function invalidCustomAttributesDataProvider() ] ]; } + + /** + * Test if $data == '', then we have to get the same ''. + * + * @param string $data + * @param string $type + * + * @dataProvider convertValueWithEmptyValueDataProvider + */ + public function testConvertValueWithEmptyValue($data, $type) + { + $actualData = $this->serviceInputProcessor->convertValue($data, $type); + + $this->assertEquals($data, $actualData); + } + + /** + * DataProvider for testConvertValueWithEmptyValue. + * + * @return array + */ + public function convertValueWithEmptyValueDataProvider() + { + return [ + [ + '', + 'string' + ], + [ + '', + 'int' + ], + [ + '', + 'float' + ], + ]; + } } From 1cd27f466b002b874dfb75a303b09ede6ea70918 Mon Sep 17 00:00:00 2001 From: nmalevanec <mikola.malevanec@transoftgroup.com> Date: Mon, 11 Dec 2017 17:19:19 +0200 Subject: [PATCH 523/653] 2907: Integration Test Annotation magentoAppArea breaks with some valid values. --- .../Magento/TestFramework/Annotation/AppArea.php | 10 +++++----- .../framework/Magento/TestFramework/Application.php | 10 +++++++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppArea.php b/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppArea.php index 3ef7cd608c779..6a63a96d47849 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppArea.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Annotation/AppArea.php @@ -15,17 +15,17 @@ class AppArea private $_application; /** - * List of allowed areas + * List of allowed areas. * * @var array */ private $_allowedAreas = [ \Magento\Framework\App\Area::AREA_GLOBAL, - \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE, + \Magento\Framework\App\Area::AREA_ADMINHTML, \Magento\Framework\App\Area::AREA_FRONTEND, - 'webapi_rest', - 'webapi_soap', - 'cron', + \Magento\Framework\App\Area::AREA_WEBAPI_REST, + \Magento\Framework\App\Area::AREA_WEBAPI_SOAP, + \Magento\Framework\App\Area::AREA_CRONTAB, ]; /** diff --git a/dev/tests/integration/framework/Magento/TestFramework/Application.php b/dev/tests/integration/framework/Magento/TestFramework/Application.php index e0cd3c52e2ca3..e8ad9d156a309 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Application.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Application.php @@ -600,6 +600,7 @@ public function getArea() * * @param string $areaCode * @return void + * @throws \Magento\Framework\Exception\LocalizedException */ public function loadArea($areaCode) { @@ -616,7 +617,14 @@ public function loadArea($areaCode) ) ); $app = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Framework\App\AreaList::class); - if ($areaCode == \Magento\TestFramework\Application::DEFAULT_APP_AREA) { + $areasForPartialLoading = [ + \Magento\Framework\App\Area::AREA_GLOBAL, + \Magento\Framework\App\Area::AREA_WEBAPI_REST, + \Magento\Framework\App\Area::AREA_WEBAPI_SOAP, + \Magento\Framework\App\Area::AREA_CRONTAB, + + ]; + if (in_array($areaCode, $areasForPartialLoading, true)) { $app->getArea($areaCode)->load(\Magento\Framework\App\Area::PART_CONFIG); } else { \Magento\TestFramework\Helper\Bootstrap::getInstance()->loadArea($areaCode); From ef1ffd5c61d50b44bcbeb663872dbb1236bb5f93 Mon Sep 17 00:00:00 2001 From: Miguel Balparda <mbalparda@nexcess.net> Date: Mon, 11 Dec 2017 12:59:11 -0300 Subject: [PATCH 524/653] Removed old Connect image and links --- .../view/adminhtml/templates/index.phtml | 4 ++-- .../web/partners/images/magento-connect.png | Bin 8179 -> 0 bytes .../web/partners/images/magento-marketplace.svg | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) delete mode 100644 app/code/Magento/Marketplace/view/adminhtml/web/partners/images/magento-connect.png create mode 100644 app/code/Magento/Marketplace/view/adminhtml/web/partners/images/magento-marketplace.svg diff --git a/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml b/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml index ec74b837e1077..ab84e91170ed1 100644 --- a/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml +++ b/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml @@ -48,7 +48,7 @@ <img class="magento-connect-logo" src="<?php /* @escapeNotVerified */ echo $block - ->getViewFileUrl('Magento_Marketplace::partners/images/magento-connect.png'); + ->getViewFileUrl('Magento_Marketplace::partners/images/magento-marketplace.svg'); ?>" alt="Partner"/> </div> @@ -61,7 +61,7 @@ ); ?> </p> <a class="action-secondary" target="_blank" - href="http://www.magentocommerce.com/magento-connect/"> + href="https://marketplace.magento.com/"> <?= /* @escapeNotVerified */ __('Visit Magento Marketplaces') ?> </a> </div> diff --git a/app/code/Magento/Marketplace/view/adminhtml/web/partners/images/magento-connect.png b/app/code/Magento/Marketplace/view/adminhtml/web/partners/images/magento-connect.png deleted file mode 100644 index 575563f341b3550c8bd686eeeb0af8a8bc75690b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8179 zcmV<P9}M7$P)<h;3K|Lk000e1NJLTq006Q8000{Z1^@s6*qPN%001AlNkl<Zc-rlJ z2~-@{nXcLxxnmQ1usuZMU?(<C?BL|tPs9_y@ZyYftQXDrC3>+lo(!41#5tA{C0=A% zk}b4=*w<#?K|%`>XaykwVvztLfj|g^gpk;wX`uJLtGc?nzE^*>swH_zW^&#;<GiDL zP93VNZ{NDhcmMzUzyC^00FPqHZN<YuvE**KTfRWW1q3kS1#k*@Z9(AeN_y_(5a6!_ zc<uuCZu!C%czlM{4Jc&1Lih~KGOYbm4;hBJ3+}t+3s+b`;TE7^$P#~6A(XR>Ex^s% z1O6ix+Uc-K4KjA|@7;2@{68x2x&r-H`A?M#JzY_U5AW;Rx36^c!i6(YUY?PG`6q$j zeCkBOfqlD1jvTD&o*KIz_W#So(fDW%0Pe15`a%HN8sxus&V<80A0pkmU3ace-I0TB zs*G4~{Eqdg-d{3oGcPWcDsoVK)*{maPfQGlWo9Pw+3AVi{H#=Nc&I-T!e2k%7QiX& zHsig`&BqIl9XrtMa5(OIoB!lM54<^;?s>gBh^yNU+lh3o$8Ndjj*1?JRghK9%SmwO z=ES&5OOh=&uJtefyoL$H02A2SdOR~VbsGwElbMW^81(maMnQ1@)h{}Y&um_}ub?2^ zk(3k-qtU2ba<}}a6(<lNTV!^mYlU{>Q<#tY9z5EK5cYPe!Lx2Zkc*4r?P;kS(cE;n z;`1$*JHTX`zpuPJTc4Yo#8#B3Ole75(09K5t-nTB%z5tgI=q(&uv)c&g@tMM{QMNB zR;zvRFKyduwca~BJG<=eX86mC0|*3XmVk`m*7bN_2_!rNSSP}5K%l>(+it(7yeQ9- ztBUtDo~WwM&5HFD=chV!nwen#VzXYw?H23eh0ZrsX*-0yyYkfs_7;t1q-?{P*2a`i zc7pdX3LoEO>5}d}oQv-L&n2(m;v`80U;_YGpy0771&<>T;G}wgip$<kcj)(j?l*D~ zIL7x*k?X_DDd>{hvYB;DD@$?=`58NSyHyiJ?fR&eprDKH>6zDK4gwrXcpXamOdd(5 zS2mM*X<v6wR7-1P=H%t}m!{`5A(9r#8G}8HLty}d<lu$I41O*G=DA?72+#t-I`Q)H zLv<u9&LHq^g;y|z$nR!3r@~`{61*V<f?X-QVIOz21%h)cWQ%3v5#Z+U+^}F>3OKd? zHD2I+{V@SSa9vpsMiWMT^!0%a@PG-RJ~=%e1w6iWGkFlmKnQ@F6Z_^?=mkEQ<T9{M z1q)}O*J=#}GaD{TXz(nC0oGu85A~G;BlU~M&%+RE<(z?VvkEwLL10Wu{mnU`elRXR z0CSgCjIMtUuI!b7bvBfOKxs}zyex5;OiN1(a_psr>DIxE?W+#%FCEHCkM$1po`3x_ zB@l=8p4ub(+tQM@q4#{-TV3rZqE%@zLPP!0!?)Kn=(P__PTcr<OLIfc@wy}RhYs%V zJ$j_3y`#M~dUj^wF&X5y18d}J|BFp04_6&IxVyXV=z(V19NPJ*V7Jqzm>L@mJA1k_ zdQrXbDAo6hM1N|0IPBz!<JEPwhZ_&p?7P_6+5CY)KmPy(A1Gx-rQvwp;miFOR}#p~ z`o;UZ&$h3vJyP9Pvw!zcZ%6C9qeBBP$&1t1d;ZO~=94*P`5BHvRXo?$axACk-09Ur zm-=6YhxfO8<J!RU^xd(;d)ukMr&~^BPK}R*$s59EGA<pw*#BDn@gudDFPwgTd~QC3 z77)D6Z=GSj5sCiY>iLS_L!10EEIXcokP!h?{RUju&S7|Tp@2Qe3@8ai1Ypm_qgB?* z{|!t0)4-N+7>Zv9*OJ1+G!aG?O0r-cr?|LQrNe9w<g0%Vez-{m+H@1GrTo6PVNLrX z)Nwz6d+!=pdh6GKGZ47^dMIeSBzi8cfyg3QyJEFks213MyM&HNGAhG@WWb%hV) z^Wm^Ll{UZ!s>z;J=0nlKT;XfbZ}}D$OU3@xB{9&BM6d!EV5k1EJ_^dhEB(dwwpbi{ zAFiC&uo&|Lm}4Wsl>8fn78L{Iz#0g;FmK~#VE@mc-yQ~2(s$sfeIIP&hropjtu&d& zMa_eSIqB@KvRtixVf>-K?$%$WCT_*y1G@)!#_=i3rkR;smY<Ws=BZLV4$Fd)fE>5| zLmWM{zw7pTd-qh1CnfGc+>WitQl;{_IT`NMlz1d1#-g|=*V=obD@vv!oQqL(b+m5E zQ6+nFvy!;Vio%7W{47UG!VctSCvf}smX2m;rtk@|+t7dE{F@G|;oj!PqZOIyF+x&e zyx3lzH7hIGladmP%F5!ID?^te<$kEA#~#Z_O%O;~>F+)F`tF@Yn&gCS$j(gS(~@JM zN)&%nTwqw7n|YXVITU53g$8<8PFkF|JU`W*BF;r(+%}XK7noRw{T_$K9N5})vLr{9 z>Pb(Dk=l{l%FRmS+FMVhSdF^-=-ne%hF<FHIU6-{ZD{$N$#TDM;oUy#WSj^?{RS}6 z4??%@ahMWcfiB}kuyM=aUb__f%`X7sRdyG+KoePSvn9}0vmTlaPeZ%u@8C>$8hrBi zu^9avG#@?=WAQJ*O%Fs6P^9*GYY?|M8miy041Cc)0>}OcP4W*hz3Ew);v-=C=yACJ zxCE0)KL&2pbwOYQWKZd+_ys05eG6zy=O>H)8MDz(!n^e=Kx`On?>qwIJHf!Q_W<Wq zgyacsT6^@B*zIx4F}pq#Ce=$ouK2$A7cu+$hrt%T0e*3Cg~WL|RzVxh1Fr&?_Na9U zKf=Nvmch7XIZT-=!Djvd>_=Y(^Y*=P9#6Jo>~!qnx~G8O2f(}jD{#K^APgTpgX#Cb z2CeGHaB(7In4cM2mXndhmltQ5+)jgXK|LChCxR(AGnrphPdxfbAd@vqP1=FuM{3$= z@R$2LUQ18j3gX$f*E@Ffa9h>B$`MjC$WjrYt_=3QLVzM*?5!-DVVxFfM_wDc99fvB zau(#KGFJw>U*SbdU@>Tw1AV=#@^a$bc{z#h!!?z?S1(_D*=aKdT<Yt5JtJ+qkej`O zyMFb`ix%Ue(xjhzpuO!x3IS@*u2Qv0r++|lnR8>0=4B_l>B`Pb;LD1$EbVO#31m@; zB9-N4I<t}!K;xqNW24uez0`Mp)y|?UOF?FwXXNU@i$epwuMS=6dzCDDPglq4jFd!B ze>=}KN6*cSFPohj4W)b90GVlt!a!foDyr+S7z6DVZJ^2S3b43^I|5-_ORn0v@nP8G zo(4KHd2;jMEK2BmWBC&ayr$w^0dvhQ4zNmU3oYrKur3Jh*k^#A0tT*`a0xuuT4SMl z8Lr<h0d_|L*7;xyp!D#J!mI9CV~BnVp3Pr@CHm_yl}14rJX#C0Is}tVwS4Le(7*E# z+%@k(PWw{v7O#Z)y)Qw#<=b#=jQ~z=0T$b9SzUjWyE&P+(r=Rf9?)NppiL%OV$Jzj zPsVas-~Te)wVMIkL<CuS7_Ud7<fpK#UIL+J4d5{aQ&NNI3a1?j=hB|Q)W)xYIj{kk zA6x-J9}4!`8uaDy*ck=W*^*&!rXW*ybtxLQ!WH{Xu-hI7I#S^3s~ksv)v(m*sj;DN z5Z^5?%CUG^TOiL^1CQ41?Io++(RL!?_Q|J(*<Dep$xKZWZd|?mB2Dl>-<j95MJ`!h zl5e=ZuElIzDsf`g8VG?jSys9x$F6>(FfYSNmr<vdz;>ecNIh9eva+1WjcyMbj~}aS z&P?4Voa<=XL>p&ec3j$M87W&aHQpZv;TAt;#f?aSr;XCy+9GjwgKi?2ta?sXyoYFj zW_E0u%%y2E8;{mBrpL$Pz~0IcnIqdR`oQvnOuI@9V(n(bQhJA%a|Rf7ng<GUGnw?1 zc*!#mZ>8_(BHr8E-TAAe`0Xez$hK={Cqn2Qbh&S4r2KKo!dS>c-W%|&71_o4+BF0s zE1)E6<)>yQz0%7HzB2~8kqB4%kHM~62L5yw<8)aS^qemG4X)LUW9uVuZhREp{saAT zJD6-Mb!>P9x(%Vw?cXRscO#tmJkbw^heBPSK8z2QFc<v`z`Ft*GCkO}3e=u$`?uh^ zE^ZW-k;Xt2htpq*T8Ix5y+Rm-(a}iR`a5c4_{sMkgQ@bj0OOFjw!@16q8ylPt}<-? zI$Uwj0ka({>L0D8p*}@B^PU3Q(q90J*QJd~9z~uDs}oAWG$Or&o^gxgA@l1(z{Y<Q zaBD*VR*p%?{q?*g1#UZw)wme|4fS`g%n_{@@n)yP5+HcplFPX^G!U5-7Xtz_W3@_? zb#<`om7=^9XGLj&-tBZKWF9GlLJEpFd!WTQuT)Rpc&x9dBT5D`@n3o$(UO$J?HKIu zdX4JyZbtym`dskYGxaga@gJkLv95yL@=*VUm8#TuVP9pzjBb9E0w*arvzjzYn`JKO zg2>xd=?UJNs(nNB`$e%%nh5%e(i{VUn1Dq9l>6A<b!K<C!MwkF>LCtolXugT#?{ zisRQW%s)hZB+y^I-1Bm(7#r*?E7TemHFu~PRL5yG-Amu4r|iJxOWiA_v3Ne6?spF! zFJ0LBZ6NM(z-m`|ApTZx2ZHei!YN2Vqf3t3y(9ItmiNC3Z_IKCA~!YpgD{8E>O~;j zrXc3PJDB+6BVdng06mx1Y^F07A3q9n+zY_`z$yYG+~y!THgR>AsUZT%R`G8jZckv5 z(!eD@f$hUbfdjt=J)_IR-rO8^gVLGwUAV+{g|Rl3^vrr~m8swjST;WcbY}_R9pYHH z0JtV2Vbd$&o{5+%e+#o4z6EraXk8Q_vYIek&i{mS^WOoTMJ73CAy~!w9#;VMRoVoc zD*!g5I7S2r<5$9+Z{G(byZ|_vKsZddR131G6s#So-ggn4&k|Y<i^}SKB_nA`(YVy# z^BOHaElBO*ns(x?UF~N!`8nv+mC*d`L^oL~TJ+l&Os|^{>S}L{uBj>?CM%kq5zm(t zWY{TCq`yY(bdVr+x}~YEBq=@`Cy&?Ey6lEPd6zLZHsH{{(qUC{40_tzJ^<qk=sVl7 zHajIz$jeCJ_mt&m3v)8rl6;k;v@p|38?U@L)0CR99hGIpS})^P7<Drb5SJ~=&vck{ z3lDq}RD<1}Q5oWxs&?-jmp7l;uyB8IPAZd^9?LtewtMM0ZN{@5CpQtLId-_J{WGOJ zmtAqFdhbP|H>X>UXL?xkt-y|V`X?P{vN-MfWkBIdz_Ablw?!!js4U|%1oRn<#m9Gh z3K{(2ULflq;PuRf+inB7?7gh#_OvW+dIDVe&jHb^N}!$XS>xIe0!PAfz;q*me&=<W zlr%<3ZE4vI``b(4to#k=eX{D|D*Pu*zw@_1Q!HpL?7Ta`dsEAW-W2TG^c?v0_ko!_ z*&<nR{iQYL)E~mLPV@>nk(e!v!mR4on5z&sLjEtYu;+Ieje7|T?>`B?QDu^VY`U__ zoA6&@7dbD6Yg?$ljO<Amm+!AQe=L{)&g%%2tgpH&*1X}%u%&(nR)=03qtk~KD!tuJ zZ)K)#7l`u;EUS<MlD1Pv3o_HT2&4uGqBSy!JhUK3#TMu1Ip(IP9`n1v#qkG;S`cT{ z&1)neyBSt-q33*5PId-Ipv@Qg>9Iq5y4qXoQ(8p&K%WW77K8eJS_rb#r9~<$aoFyz zwzXvK=BCt-wKTL=5Qz7d6)))3GY?A^y16YSGcg`}N{h4&#||{sA3fMycX)q$gSZLm zj_he`IDVk^_>lu`r%yHHP<`FP<U_exDIE3Btk+S%<u7CfNVOo2EK>_vek;jMbC%>J zF~&thkSuvMH5}ZXl<+Yc>JJ~5<+x8;<>toY6{$%v(xxP^NY6zhK#M|)MY=UkZHMu_ zhhP;Kn%b4+DYCR=5kYl0NEQ+fLFs9ZgJbReK;_%8z!B^O69|_@a=|ozRvrQ9-=oGx zCD_#Ofut&ut}x!SO87v0mbe^l&1lF1AkiI89HSdvg{vc-_q-DTXT`7l9GR#kcKr+s z(a(ZCk;s9y-3%TH8}z+8%$gbwcl6`1PAo2ytms0|dR^)Ya2vh`N5WI!;=+K~=V03L zO<>0haBL3+5`%#)ArKl=Ch9k@8(P6_eFo}n5x~OPQj*wY$x&8McvyoV>iV*G!j03h zjt`fC*%1!jtW{coTl#$G>G~J~TU*nKf;+9LCMY8#!CR0U&svQ$L01O4UQLYKf`;SA z{4yI)lWm++7UiWmb5)6+$<fQtk|sFN*SU(oT9A{%wzjlqS}nJ%k!F7S;liRUYffGY zt20dbbLeB^SHDqIlx|H+*@D8{Bu14iDhr}z+gVzspB|t1I@KYG>}-2WH1TQT!V*ya zOff7@JxDaEAUn-XK_P)n@ZLr(&NaW4m9kyfzqfo8;G{DaM1v{{Gpt2f32xd{<aSB! z>u76ENK1;xu|w5eGCwB32{+v?)j4_mP;J7Fk8wuav@{oB)#21GY0MN|Q#~|ia8@zE zLBUU8@gnf{!!R=UrF&8lNLS`t%K8l=H}vlODM*qd{z%qdUSKMYvt`42(fWD{{|De& z@afGHo$J~4q9PLaeL#C<1qE8nO@2yN56#(j?Rt?{m%j#hEI|Y?`ra)9+4#YiVQoq` zNkA1`fg}S;<1mg!*y3M?ZQFkVMo!dH-=Xba<N5emKm;<TPt`hEqY?&<w6>hh9ANVx zz$sEdI5nZ1+o>QPEVZ-aMHsey8y-!2DZQ6xya9kA6kdHOZ6HB51Yji%+c41+VO{?S znC;&H%%c%B55(=I31~V|Q=JsI86B-ncO*1iqM|?tiB#!Zg_g!c6_otQ%1Gp|3|xHW zj(Rq&lB7EV?&!7t=V@o3s69|mn}e*RRL9}GN49oq^;k%5ZVFpaASPXOlR@(H(XlJf zR#fC@cU5FBbf0Z}_xk1T$QwhwFHs7e>c~JQ6@>b+duM^hVO{hCnPHrFSVyPReveNs zyuOSm4V?$k&d&rB0Pmm{J#BC1q{Vux_LPki*rXJ-L34j;UaB)UEyim#Y44K*!-0$4 zuaT6utGq}{fge4;{X7b7ls&r&)g;*s_MeydJ|!z;mn|2Zs~k3Ld=f}`K>{XG3mL=? zkFPGgv<Zwsl6CH_X)%2m0yZrI&<(EgeQyi_Zw#RTjOH8-(a^s4AZ)vT1Gz2CU0CD! zV3`Qy{|4wsA^=9R;(kNal%sX74g^a67a(pjx9knX4d(j813*KTi4{Nd6ts(%FYp`- zvu=GJmXDqWZ4{{;r#{H2dQ+qcPr@@$srAi^M?q8&(1kfUpNtE#_8fd3#5@tckoQmU z{%$GISs~Fn`5+KnzVj{Sn|+mxfkz*L$;KA%HWA~=-vjC9E?(5tdHBvJpRC(opPm$p zzV5DH$&JYzZTQ;Ya!QU6_auGyaLvA6gZ@sQNt||XWyuU_z?9ISj9hiq&SA2eByY(s zm)f(N7MHf2sx2T+zPlo4!E_VIoX4eTX{paiNfGtygB88=vm?tWTSIQ;cDGFzNnIs{ zSylq`xz3gk2w<{0Am2}n4nKSGLf4ygubZC;F3Qbd%8GML1T>k8-U{|wRuj-EIYJwX zE&^#~d7idNmB<n8krfv@OjTZzYa-7?NfJ_H<i4>^Q($*j%UTKssm`Ki`eFGUTCa~X z_{TEc6Qxgj8QlB#gB?B-MVTymPB9AHRwbom;bs&ZAc2bjX%_=5{f5Wj?b+W&fFieQ z^!lQEsM|~3>EFe|`o9HpwrpGq76k-g`rI0<`x{txEC(qTQt%7-&nU1>xoYm6CBUvX zK=1Jfk(ED#S?rtpR60ZNlCy^7{$ZI86GV$>6S*xnc77F|gYfXCVB7u;u&jLu_Ug9* z)+Du~=b?0appaD*#x@mZavCM70Eaf%z54^;U2*zEj!v06dhTQq$Our-J?GB|T77_? z>RP|J@hRxyA_4t$h#V_OK;BzfG((C3X`i1=|Jv-vfL-E(l7%6jNlA=PrHMsXOd4`> zLJUZLBCFQYR9`|e)b5=nnwcBdzG2kN29FH(zFfV#WW1tKWhDz(UYKSzh>C*zu8xjV zn@C-tBnNS2O1kW;te8A?^7!rx=Q>wYMotE7$LUisq}i&{le`Uehib>J4L+}#9(`=E z@7$^r$7&igl6Ro8tUyb0qJDAaK~gcOzR^H!+?l@a={WTP1&90g?i#&4NIkHpd^9yK z8g)mj+Ir5lt{xt`5J^<w{MqJr39O_`w~CumqZxa2YU;`pr_a<S<mM%^bdak1e8*e< z0Pv=4ML-eUc4^`%^JYD=RnYz6OITE`0<IjFJeLeG@AP2A_^GN*p2<rQl&&VXPHKey zy+^@{kv@jo*5AqwUWvltwU`$<w>keO5VY6BWvh$X-Y9JP8@R+x0NrpTja?@oSe63W zQ!10^y(J(jK^sHrCvR19yMBs=b@zigmBdp$IiRFEuup{}PL$F%JPb@<l(KssqENkM zCjO&P=(jxqbmTBF>Vu^3MAt7_(+hisXY+mu_vu14ZB+6&&hhgrW@DbhRP^7&)|qSK zg~c%Wppe@=u>yVNrunu5Yaq@W&4YDz?BThMPs0=a1Ta$DMYMu8ngn<XvS^X73=Kwp z`hbu}K|+5@Vk`;^vK@2ksgO?t*{z^spu`<dH#g=;R&#Rf2@0N46XTGZp2*XcE`nvJ zs8ydo(->W~vrtW{gK>URlD5XKUkRs-+s?9F{fWBj`kI>E7c0t(wMB*b_O#?UDYHg8 zHMw@0RLYz+*4I|&s?t5laa)m<mLO09hX72+N(sch=gzDqE;z3q4<R5^R#81Wx$IL3 zp7!QVG(O5i-v0btXWIvbS*dQ?#A(T-4QDur$}kSSlE7Rj#s$d<TacN#gU=E*>eRHY zLSB9nL#F~QX8lrW5!p{r3eMp_ATEej*<Sp*q$RuJz5{d7FJRmGTVPKVj4?0Z`bW!w zo@~J=Cmh6c23*NMgM07GV57qzl>7|X8wGv#KSI6fNf=VT4-8iK6Q8FIK`M!Rb}(Y@ zcMo7b=DYCDTwDRKoi>!@9Z70+G^W|DZ;7{szW`+G#~6Zm@jd!?m%)8Bfg!MvoF{KI zN?Mq=K8Zz9bzyIuTQLWOQXj!iN1*m&%x``I7SVI?$v*;L{Rd$8&*9CEgnh$TVA>c8 zbY%+QbkeyKNktKVqhI$O7(V<unA{%$CBFvttcF><cdYv=7WS?eV4d_Oe@t`1Zq+}4 z7c-LHgy-Nad>#Ce_3$04zt9oYb@ueTbT;C%fUMJM9;EXT1DASNeqKN|e0Au>_A_lU zBiF7j_Xl-zvyYzbZ2#cc!TsG0bw_G@&vm?I(rSWe5+|--4L^IjC5Cg_6lPHpt0>Ml zQLso>kLPXvgvi2z_MxGHo>x!Q9jqrXR#p@*xNK&>2(F%*45ifevBL-2iS{&}I97f6 z(uI|j!j`SKO}sxVf|AByvztD3%ye#QER<5t7cXAC!y}O<eErJ6OXOXePS#ePYN*>S zw@Y4V{KnOA3Oo-Us_H&+bbnh*+wsiF>ES0n>jWTiSlJr;0YNlos<q0qe>JojKgOb{ z!P?$c0vo>sq&^S!*vEkJ$|?v}N%xg3&)l^z9C{y?#P31<akyxOzk>P1mtZS<6S%xj zO_?<RJ1OxoHxi;P`X$WO>*3K)hJg1;XtK`i6|-XIyr08fpKN!!Xk6xCI$z;vNM<Z$ zzl81Vfl{g~Q8xEYMaw)LYN=TZYvr#Y%#DOe;}I-31Hsu4_H+j4&RGf5hu_59M~}f0 zy&T$Y--UhGzk=&6F~Oq=r}4|)2kd+pnzQWAtXJXK`Z)M^1Hp?*i#7RqP#-XHCKhgk z?=TV_B<tTlY%F;LbK-n0u6qoQ?N0;Nh2SL=0C4WlK0NOIzi=#5=AEDSeTOKMWr`fV z>BOOGz$NL0Zthm#M$a^}H<neD<{3yro1Z1G@b53O67gAy2`VyY{=D!0(y=-n?tA>8 z^%#Rm*!L?2JmddY!4#b{#<?IyGZJc_><@R$4299jFFBhfsUwd05GNo-?(i~Frq45Z zF%s9BN}=g2g>xd3Kq@6=+_w@^q(j3!7Y>K-Oa$?6*)vdkaE?d9GapW;(j==2Yq0P1 z+gunN!%=c<;QKB77=d##0;ZuT>E5Li$F>mW&n9|xp|H({VzNIHH}=|X>cMd6u7?vn zATY856c)~>)OcW5E&$Tl;Ft>~`s1EyE5+EcVVFl&5S8KJ3(gq^es9LvXTmUbMuls2 zEmrlY_<mcUByD^i&={Wmi-7EA{{6qZ*x9~Tl}rhV;>ktL_`|fZ<o-}Z>a;HeofVTR z@v)mxT~#?OTVpwc_~(jnGXNAmXH$CFTbqXc#8F3C;oupMLe`CC7c77NbMGf$5Rl0N z(!!91qobD&z^@<>xamBB?85!&XD<{Ic-_WevX<1AOSlCnIi*Y7mj2!@;h7jgN*2ff zlaEBoMQRsT|1+s?j9F;{{DG(Z&+TQIPY}mWz%$;gLxCKezRVwSSXoVxKMOF2P^MB& zv{A}hZcEyDoIZrIne-b{D=2L~1%y+d={eP-_(10L^q0P4z~9<b-Y>`*csk2)=)k@K z3J%HQ*6iOk)O1peu$t?nBa)<0P^OF|FFF>w<ZiiJzKDga1_f_}Vk(@@Tu>^Rq`Z7F znNpOW?l@etr<Y_rlFsh_9~^hf7aGX$`ZQoVcR{D+q>ECzE~Ao;bdp|6vff=F-z}e4 Z{txa8J~OL4=@S3|002ovPDHLkV1k>X=`a8Q diff --git a/app/code/Magento/Marketplace/view/adminhtml/web/partners/images/magento-marketplace.svg b/app/code/Magento/Marketplace/view/adminhtml/web/partners/images/magento-marketplace.svg new file mode 100644 index 0000000000000..388544d5d7f3d --- /dev/null +++ b/app/code/Magento/Marketplace/view/adminhtml/web/partners/images/magento-marketplace.svg @@ -0,0 +1 @@ +<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 273.37 35.85"><defs><style>.cls-1{fill:#f26322;}.cls-2{fill:#4d4d4d;}</style></defs><title>Artboard 1 \ No newline at end of file From 362031345eaf8355fba213959ce1a5ccf12fe95e Mon Sep 17 00:00:00 2001 From: serhii balko Date: Mon, 11 Dec 2017 18:15:00 +0200 Subject: [PATCH 525/653] #8647: [GitHub] Order of how arguments are merged in multiple di.xml-files causes unexpected results --- .../Webapi/Rest/Response/RendererFactory.php | 5 +++ .../Rest/Response/RendererFactoryTest.php | 37 +++++++++++++++---- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/lib/internal/Magento/Framework/Webapi/Rest/Response/RendererFactory.php b/lib/internal/Magento/Framework/Webapi/Rest/Response/RendererFactory.php index c86b97b0fa8e7..938d4ef6d1bed 100644 --- a/lib/internal/Magento/Framework/Webapi/Rest/Response/RendererFactory.php +++ b/lib/internal/Magento/Framework/Webapi/Rest/Response/RendererFactory.php @@ -71,7 +71,12 @@ protected function _getRendererClass() if (!is_array($acceptTypes)) { $acceptTypes = [$acceptTypes]; } + // If Accept type = '*/*' then return default renderer. + $defaultRenderer = isset($this->_renders['default']) ? $this->_renders['default'] : null; foreach ($acceptTypes as $acceptType) { + if ($acceptType == '*/*' && $defaultRenderer) { + return $defaultRenderer['model']; + } foreach ($this->_renders as $rendererConfig) { $rendererType = $rendererConfig['type']; if ($acceptType == $rendererType || $acceptType == current( diff --git a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Response/RendererFactoryTest.php b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Response/RendererFactoryTest.php index ba460c5a5f6e6..7b50a6f0224c0 100644 --- a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Response/RendererFactoryTest.php +++ b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Response/RendererFactoryTest.php @@ -26,11 +26,18 @@ protected function setUp() )->disableOriginalConstructor()->getMock(); $renders = [ - 'default' => ['type' => '*/*', 'model' => \Magento\Framework\Webapi\Rest\Response\Renderer\Json::class], + 'application_xml' => [ + 'type' => 'application/xml', + 'model' => \Magento\Framework\Webapi\Rest\Response\Renderer\Xml::class, + ], 'application_json' => [ 'type' => 'application/json', 'model' => \Magento\Framework\Webapi\Rest\Response\Renderer\Json::class, ], + 'default' => [ + 'type' => '*/*', + 'model' => \Magento\Framework\Webapi\Rest\Response\Renderer\Json::class + ], ]; $this->_factory = new \Magento\Framework\Webapi\Rest\Response\RendererFactory( @@ -42,29 +49,43 @@ protected function setUp() /** * Test GET method. + * + * @param array $acceptTypes + * @param string $model + * @dataProvider getTestDataProvider */ - public function testGet() + public function testGet($acceptTypes, $model) { - $acceptTypes = ['application/json']; - /** Mock request getAcceptTypes method to return specified value. */ $this->_requestMock->expects($this->once())->method('getAcceptTypes')->will($this->returnValue($acceptTypes)); /** Mock renderer. */ - $rendererMock = $this->getMockBuilder( - \Magento\Framework\Webapi\Rest\Response\Renderer\Json::class - )->disableOriginalConstructor()->getMock(); + $rendererMock = $this->getMockBuilder($model)->disableOriginalConstructor()->getMock(); /** Mock object to return mocked renderer. */ $this->_objectManagerMock->expects( $this->once() )->method( 'get' )->with( - \Magento\Framework\Webapi\Rest\Response\Renderer\Json::class + $model )->will( $this->returnValue($rendererMock) ); $this->_factory->get(); } + + /** + * Data provider for method testGet + * + * @return array + */ + public function getTestDataProvider() + { + return [ + [['*/*'], \Magento\Framework\Webapi\Rest\Response\Renderer\Json::class], + [['application/json'], \Magento\Framework\Webapi\Rest\Response\Renderer\Json::class], + [['application/xml'], \Magento\Framework\Webapi\Rest\Response\Renderer\Xml::class], + ]; + } /** * Test GET method with wrong Accept HTTP Header. From 93ec6ea5801e6fae870e3dc91d821a6f67a5d3e0 Mon Sep 17 00:00:00 2001 From: Matthias Zeis Date: Mon, 11 Dec 2017 18:40:20 +0100 Subject: [PATCH 526/653] Remove @escapeNotVerified from documentation As `@escapeNotVerified` must not be used from 2.2 going onwards (also compare [2.1](http://devdocs.magento.com/guides/v2.1/frontend-dev-guide/templates/template-security.html#Static-Test) and [2.2](http://devdocs.magento.com/guides/v2.2/frontend-dev-guide/templates/template-security.html) documentation), the inline documentation for this test has to be updated. --- .../Magento/Test/Php/XssPhtmlTemplateTest.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/dev/tests/static/testsuite/Magento/Test/Php/XssPhtmlTemplateTest.php b/dev/tests/static/testsuite/Magento/Test/Php/XssPhtmlTemplateTest.php index 34531b6b7c658..fac14af5ecab8 100644 --- a/dev/tests/static/testsuite/Magento/Test/Php/XssPhtmlTemplateTest.php +++ b/dev/tests/static/testsuite/Magento/Test/Php/XssPhtmlTemplateTest.php @@ -27,16 +27,14 @@ public function testXssSensitiveOutput() * Static test will cover the following cases: * * 1. /\* @noEscape \*\/ before output. Output doesn't require escaping. Test is green. - * 2. /\* @escapeNotVerified \*\/ before output. Output escaping is not checked and - * should be verified. Test is green. - * 3. Methods which contains "html" in their names (e.g. echo $object->{suffix}Html{postfix}() ). + * 2. Methods which contains "html" in their names (e.g. echo $object->{suffix}Html{postfix}() ). * Data is ready for the HTML output. Test is green. - * 4. AbstractBlock methods escapeHtml, escapeUrl, escapeQuote, escapeXssInUrl are allowed. Test is green. - * 5. Type casting and php function count() are allowed + * 3. AbstractBlock methods escapeHtml, escapeUrl, escapeQuote, escapeXssInUrl are allowed. Test is green. + * 4. Type casting and php function count() are allowed * (e.g. echo (int)$var, echo (float)$var, echo (bool)$var, echo count($var)). Test is green. - * 6. Output in single quotes (e.g. echo 'some text'). Test is green. - * 7. Output in double quotes without variables (e.g. echo "some text"). Test is green. - * 8. Other of p.1-7. Output is not escaped. Test is red. + * 5. Output in single quotes (e.g. echo 'some text'). Test is green. + * 6. Output in double quotes without variables (e.g. echo "some text"). Test is green. + * 7. Other of p.1-6. Output is not escaped. Test is red. * * @param string $file */ From 35b278da1b2ae87c09b54aa88c44a4b1f6aca25b Mon Sep 17 00:00:00 2001 From: Oleksii Korshenko Date: Mon, 11 Dec 2017 21:05:53 +0200 Subject: [PATCH 527/653] MAGETWO-84764: NewRelic: Disables Module Deployments, Creates new Deploy Marker Command #12477 - fixed SVC --- .../NewRelicReporting/Console/Command/DeployMarker.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/NewRelicReporting/Console/Command/DeployMarker.php b/app/code/Magento/NewRelicReporting/Console/Command/DeployMarker.php index 9b19cc957ae70..795028cffd18d 100644 --- a/app/code/Magento/NewRelicReporting/Console/Command/DeployMarker.php +++ b/app/code/Magento/NewRelicReporting/Console/Command/DeployMarker.php @@ -17,12 +17,12 @@ class DeployMarker extends Command /** * @var DeploymentsFactory */ - protected $deploymentsFactory; + private $deploymentsFactory; /** * @var ServiceShellUser */ - protected $serviceShellUser; + private $serviceShellUser; /** * Initialize dependencies. From cf7477ab8dfa08285c6b8ee5561b6b572baac24e Mon Sep 17 00:00:00 2001 From: serhii balko Date: Tue, 12 Dec 2017 09:40:00 +0200 Subject: [PATCH 528/653] #8647: [GitHub] Order of how arguments are merged in multiple di.xml-files causes unexpected results --- .../Webapi/Rest/Response/RendererFactory.php | 42 +++++++++++++------ .../Rest/Response/RendererFactoryTest.php | 2 +- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/lib/internal/Magento/Framework/Webapi/Rest/Response/RendererFactory.php b/lib/internal/Magento/Framework/Webapi/Rest/Response/RendererFactory.php index 938d4ef6d1bed..547b8fcb03640 100644 --- a/lib/internal/Magento/Framework/Webapi/Rest/Response/RendererFactory.php +++ b/lib/internal/Magento/Framework/Webapi/Rest/Response/RendererFactory.php @@ -71,20 +71,10 @@ protected function _getRendererClass() if (!is_array($acceptTypes)) { $acceptTypes = [$acceptTypes]; } - // If Accept type = '*/*' then return default renderer. - $defaultRenderer = isset($this->_renders['default']) ? $this->_renders['default'] : null; foreach ($acceptTypes as $acceptType) { - if ($acceptType == '*/*' && $defaultRenderer) { - return $defaultRenderer['model']; - } - foreach ($this->_renders as $rendererConfig) { - $rendererType = $rendererConfig['type']; - if ($acceptType == $rendererType || $acceptType == current( - explode('/', $rendererType) - ) . '/*' || $acceptType == '*/*' - ) { - return $rendererConfig['model']; - } + $renderer = $this->getRendererConfig($acceptType); + if ($renderer !== null) { + return $renderer['model']; } } /** If server does not have renderer for any of the accepted types it SHOULD send 406 (not acceptable). */ @@ -98,4 +88,30 @@ protected function _getRendererClass() \Magento\Framework\Webapi\Exception::HTTP_NOT_ACCEPTABLE ); } + + /** + * Get renderer config by accept type. + * + * @param string $acceptType + * @return array|null + */ + private function getRendererConfig($acceptType) + { + // If Accept type = '*/*' then return default renderer. + if ($acceptType == '*/*' && isset($this->_renders['default'])) { + return $this->_renders['default']; + } + + foreach ($this->_renders as $rendererConfig) { + $rendererType = $rendererConfig['type']; + if ($acceptType == $rendererType + || $acceptType == current(explode('/', $rendererType)) . '/*' + || $acceptType == '*/*' + ) { + return $rendererConfig; + } + } + + return null; + } } diff --git a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Response/RendererFactoryTest.php b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Response/RendererFactoryTest.php index 7b50a6f0224c0..dd7aa845f3091 100644 --- a/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Response/RendererFactoryTest.php +++ b/lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Response/RendererFactoryTest.php @@ -35,7 +35,7 @@ protected function setUp() 'model' => \Magento\Framework\Webapi\Rest\Response\Renderer\Json::class, ], 'default' => [ - 'type' => '*/*', + 'type' => '*/*', 'model' => \Magento\Framework\Webapi\Rest\Response\Renderer\Json::class ], ]; From 059c8b4374babf0f8c437cfb1cddd63b15d48522 Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Tue, 12 Dec 2017 10:44:23 +0200 Subject: [PATCH 529/653] 2907: Integration Test Annotation magentoAppArea breaks with some valid values. --- .../integration/framework/Magento/TestFramework/Application.php | 1 - 1 file changed, 1 deletion(-) diff --git a/dev/tests/integration/framework/Magento/TestFramework/Application.php b/dev/tests/integration/framework/Magento/TestFramework/Application.php index e8ad9d156a309..368d756b88054 100644 --- a/dev/tests/integration/framework/Magento/TestFramework/Application.php +++ b/dev/tests/integration/framework/Magento/TestFramework/Application.php @@ -622,7 +622,6 @@ public function loadArea($areaCode) \Magento\Framework\App\Area::AREA_WEBAPI_REST, \Magento\Framework\App\Area::AREA_WEBAPI_SOAP, \Magento\Framework\App\Area::AREA_CRONTAB, - ]; if (in_array($areaCode, $areasForPartialLoading, true)) { $app->getArea($areaCode)->load(\Magento\Framework\App\Area::PART_CONFIG); From 390d751acf1f3b1f097933c232b1ee35fda96bbf Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Tue, 12 Dec 2017 10:54:39 +0200 Subject: [PATCH 530/653] 12535: Product change sku via repository. --- .../testsuite/Magento/Catalog/Model/ProductRepositoryTest.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductRepositoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductRepositoryTest.php index cbd2a90b4d744..9518e9c0cdf4f 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductRepositoryTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductRepositoryTest.php @@ -34,7 +34,6 @@ protected function setUp() * Test Product Repository can change(update) "sku" for given product. * * @magentoDataFixture Magento/Catalog/_files/product_simple.php - * @magentoDbIsolation enabled * @magentoAppArea adminhtml */ public function testUpdateProductSku() @@ -49,8 +48,5 @@ public function testUpdateProductSku() $updatedProduct = Bootstrap::getObjectManager()->create(Product::class); $updatedProduct->load($productId); self::assertSame($newSku, $updatedProduct->getSku()); - - //clean up. - $this->productRepository->delete($updatedProduct); } } From 12410d6d1ce1ae0ee4a40de61eb5366fd5213fed Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Tue, 12 Dec 2017 11:35:34 +0200 Subject: [PATCH 531/653] 5738: SearchCriteriaBuilder builds wrong criteria (ORDER BY part). --- .../CollectionProcessor/SortingProcessor.php | 10 ++++++---- .../CollectionProcessor/SortingProcessorTest.php | 16 +++++++++++++--- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/internal/Magento/Framework/Api/SearchCriteria/CollectionProcessor/SortingProcessor.php b/lib/internal/Magento/Framework/Api/SearchCriteria/CollectionProcessor/SortingProcessor.php index 8a69f7123781a..7598c4eb4abdc 100644 --- a/lib/internal/Magento/Framework/Api/SearchCriteria/CollectionProcessor/SortingProcessor.php +++ b/lib/internal/Magento/Framework/Api/SearchCriteria/CollectionProcessor/SortingProcessor.php @@ -74,10 +74,12 @@ private function applyOrders(array $sortOrders, AbstractDb $collection) /** @var SortOrder $sortOrder */ foreach ($sortOrders as $sortOrder) { $field = $this->getFieldMapping($sortOrder->getField()); - $order = $sortOrder->getDirection() == SortOrder::SORT_ASC - ? Collection::SORT_ORDER_ASC - : Collection::SORT_ORDER_DESC; - $collection->addOrder($field, $order); + if (null !== $field) { + $order = $sortOrder->getDirection() == SortOrder::SORT_ASC + ? Collection::SORT_ORDER_ASC + : Collection::SORT_ORDER_DESC; + $collection->addOrder($field, $order); + } } } diff --git a/lib/internal/Magento/Framework/Api/Test/Unit/SearchCriteria/CollectionProcessor/SortingProcessorTest.php b/lib/internal/Magento/Framework/Api/Test/Unit/SearchCriteria/CollectionProcessor/SortingProcessorTest.php index 01b272a9e911a..d8d4e48047404 100644 --- a/lib/internal/Magento/Framework/Api/Test/Unit/SearchCriteria/CollectionProcessor/SortingProcessorTest.php +++ b/lib/internal/Magento/Framework/Api/Test/Unit/SearchCriteria/CollectionProcessor/SortingProcessorTest.php @@ -76,15 +76,25 @@ public function testProcess() ->method('getDirection') ->willReturn($orderThreeDirection); + /** @var SortOrder|\PHPUnit_Framework_MockObject_MockObject $sortOrderThreeMock */ + $sortOrderFourMock = $this->getMockBuilder(SortOrder::class) + ->disableOriginalConstructor() + ->getMock(); + $sortOrderFourMock->expects($this->once()) + ->method('getField') + ->willReturn(null); + $sortOrderFourMock->expects($this->never()) + ->method('getDirection'); + /** @var SearchCriteriaInterface|\PHPUnit_Framework_MockObject_MockObject $searchCriteriaMock */ $searchCriteriaMock = $this->getMockBuilder(SearchCriteriaInterface::class) ->getMock(); $searchCriteriaMock->expects($this->exactly(2)) ->method('getSortOrders') - ->willReturn([$sortOrderOneMock, $sortOrderTwoMock, $sortOrderThreeMock]); + ->willReturn([$sortOrderOneMock, $sortOrderTwoMock, $sortOrderThreeMock, $sortOrderFourMock]); - /** @var AbstractDb|\PHPUnit_Framework_MockObject_MockObject $searchCriteriarMock */ + /** @var AbstractDb|\PHPUnit_Framework_MockObject_MockObject $collectionMock */ $collectionMock = $this->getMockBuilder(AbstractDb::class) ->disableOriginalConstructor() ->getMock(); @@ -130,7 +140,7 @@ public function testProcessWithDefaults() ->method('getSortOrders') ->willReturn([]); - /** @var AbstractDb|\PHPUnit_Framework_MockObject_MockObject $searchCriteriarMock */ + /** @var AbstractDb|\PHPUnit_Framework_MockObject_MockObject $collectionMock */ $collectionMock = $this->getMockBuilder(AbstractDb::class) ->disableOriginalConstructor() ->getMock(); From d7cee376f299e32777b67a2af3bf5e060dfa325b Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov Date: Tue, 12 Dec 2017 12:09:17 +0200 Subject: [PATCH 532/653] MAGETWO-83659: Enable metrics validation for PAT --- setup/performance-toolkit/benchmark.jmx | 46765 +++++++++++----------- 1 file changed, 23722 insertions(+), 23043 deletions(-) diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx index be6d8b7202d01..dcce4208957fb 100644 --- a/setup/performance-toolkit/benchmark.jmx +++ b/setup/performance-toolkit/benchmark.jmx @@ -59,6 +59,11 @@ ${__P(loops,1)} = + + accountManagementPercentage + ${__P(accountManagementPercentage,0)} + = + addToCartByCustomerPercentage ${__P(addToCartByCustomerPercentage,0)} @@ -74,11 +79,6 @@ ${__P(addToWishlistPercentage,2)} = - - adminAccountManagementPercentage - ${__P(adminAccountManagementPercentage,0)} - = - adminCMSManagementDelay ${__P(adminCMSManagementDelay,0)} @@ -224,6 +224,11 @@ ${__P(apiOrderInvoiceShipmentSync,0)} = + + apiPoolUsers + ${__P(apiPoolUsers,0)} + = + apiProcessOrders ${__P(apiProcessOrders,5)} @@ -259,11 +264,6 @@ ${__P(browseProductGridPercentage,0)} = - - cache_indicator - ${__P(cache_indicator,0)} - = - categories_count ${__P(categories_count,100)} @@ -306,7 +306,7 @@ customers_page_size - ${__P(customers_page_size,50)} + ${__P(customers_page_size,100)} = @@ -314,6 +314,11 @@ ${__P(dashboard_enabled,0)} = + + deadLocksPoolUsers + ${__P(deadLocksPoolUsers,1)} + = + exportCustomersPercentage ${__P(exportCustomersPercentage,0)} @@ -356,12 +361,7 @@ orders_page_size - ${__P(orders_page_size,50)} - = - - - othersPoolUsers - ${__P(othersPoolUsers,0)} + ${__P(orders_page_size,20)} = @@ -376,7 +376,7 @@ products_page_size - ${__P(products_page_size,50)} + ${__P(products_page_size,20)} = @@ -1746,246 +1746,6 @@ idsList.add(vars.get("customer_id")); - - mpaf/tool/fragments/ce/setup/cache.jmx - - - - "${cache_indicator}" == "1" || "${cache_indicator}" == "2" - false - - - - // Default to disable all cache types -vars.put("cache_types", "config,layout,block_html,collections,reflection,db_ddl,eav,config_integration,full_page,translate,config_webservice,config_integration_api"); - -if ("${cache_indicator}" == "1") { - // Only disable Full Page Cache - vars.put("cache_types", "full_page"); -} - - - - false - - - - - - - true - ${admin_form_key} - = - true - form_key - - - true - types - = - true - massaction_prepare_key - - - true - ${cache_types} - = - true - types - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/cache/massDisable - POST - true - false - true - false - true - false - - - - - - "${cache_indicator}" == "0" - false - - - - - - - true - ${admin_form_key} - = - true - form_key - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/cache/ - GET - true - false - true - false - true - false - - - - - - TRANSLATE(?s).+?<span>Enabled</span> - CONFIG(?s).+?<span>Enabled</span> - LAYOUT_GENERAL_CACHE_TAG(?s).+?<span>Enabled</span> - BLOCK_HTML(?s).+?<span>Enabled</span> - COLLECTION_DATA(?s).+?<span>Enabled</span> - EAV(?s).+?<span>Enabled</span> - FPC(?s).+?<span>Enabled</span> - DB_DDL(?s).+?<span>Enabled</span> - INTEGRATION(?s).+?<span>Enabled</span> - INTEGRATION_API_CONFIG(?s).+?<span>Enabled</span> - WEBSERVICE(?s).+?<span>Enabled</span> - REFLECTION(?s).+?<span>Enabled</span> - - Assertion.response_data - false - 2 - - - - - - "${cache_indicator}" == "1" - false - - - - - - - true - ${admin_form_key} - = - true - form_key - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/cache/ - GET - true - false - true - false - true - false - - - - - - TRANSLATE(?s).+?<span>Enabled</span> - CONFIG(?s).+?<span>Enabled</span> - LAYOUT_GENERAL_CACHE_TAG(?s).+?<span>Enabled</span> - BLOCK_HTML(?s).+?<span>Enabled</span> - COLLECTION_DATA(?s).+?<span>Enabled</span> - EAV(?s).+?<span>Enabled</span> - FPC(?s).+?<span>Disabled</span> - DB_DDL(?s).+?<span>Enabled</span> - INTEGRATION(?s).+?<span>Enabled</span> - INTEGRATION_API_CONFIG(?s).+?<span>Enabled</span> - WEBSERVICE(?s).+?<span>Enabled</span> - REFLECTION(?s).+?<span>Enabled</span> - - Assertion.response_data - false - 2 - - - - - - "${cache_indicator}" == "2" - false - - - - - - - true - ${admin_form_key} - = - true - form_key - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/cache/ - GET - true - false - true - false - true - false - - - - - - TRANSLATE(?s).+?<span>Disabled</span> - CONFIG(?s).+?<span>Disabled</span> - LAYOUT_GENERAL_CACHE_TAG(?s).+?<span>Disabled</span> - BLOCK_HTML(?s).+?<span>Disabled</span> - COLLECTION_DATA(?s).+?<span>Disabled</span> - EAV(?s).+?<span>Disabled</span> - FPC(?s).+?<span>Disabled</span> - DB_DDL(?s).+?<span>Disabled</span> - INTEGRATION(?s).+?<span>Disabled</span> - INTEGRATION_API_CONFIG(?s).+?<span>Disabled</span> - WEBSERVICE(?s).+?<span>Disabled</span> - REFLECTION(?s).+?<span>Disabled</span> - - Assertion.response_data - false - 2 - - - - - - Boolean stopTestOnError (String error) { log.error(error); @@ -2151,11 +1911,11 @@ if (props.get("category_names_list") == null) { mpaf/tool/fragments/_system/thread_group.jmx - + 1 false 1 - ${browseCatalogByGuestPercentage} + ${browseCatalogByCustomerPercentage} mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx @@ -2176,7 +1936,539 @@ if (testLabel - vars.put("testLabel", "Catalog Browsing By Guest"); + vars.put("testLabel", "Catalog Browsing By Customer"); + + true + + + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx + +import java.util.Random; + +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); +} + +vars.putObject("randomIntGenerator", random); + + + + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("category_url_keys_list").size()); + +vars.put("category_url_key", props.get("category_url_keys_list").get(number)); +vars.put("category_name", props.get("category_names_list").get(number)); + + + + false + mpaf/tool/fragments/ce/common/extract_category_setup.jmx + + + + get-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_customer_email.jmx + +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("customer_email", customerUser); + + + + true + + + + + + + + + + + + + ${request_protocol} + + ${base_path}customer/account/login/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_login_page.jmx + + + + <title>Customer Login</title> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${form_key} + = + true + form_key + + + true + ${customer_email} + = + true + login[username] + + + true + ${customer_password} + = + true + login[password] + + + true + + = + true + send + + + + + + + + ${request_protocol} + + ${base_path}customer/account/loginPost/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/common/login.jmx + + + + <title>My Account</title> + + Assertion.response_data + false + 2 + + + + false + addressId + customer/address/edit/id/([^'"]+)/ + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + addressId + + + + + + + + true + + = + true + sections + + + true + false + = + true + update_section_id + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + + + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + + + + + + + + + + + + ${request_protocol} + + ${base_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_home_page.jmx + + + + <title>Home page</title> + + Assertion.response_data + false + 2 + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${category_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_category.jmx + + + + <span class="base" data-ui-id="page-title">${category_name}</span> + + Assertion.response_data + false + 6 + + + + false + category_id + <li class="item category([^'"]+)">\s*<strong>${category_name}</strong>\s*</li> + $1$ + + 1 + simple_product_1_url_key + + + + + ^[0-9]+$ + + Assertion.response_data + false + 1 + variable + category_id + + + + + + true + 2 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("simple_products_list").size()); +product = props.get("simple_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx + + + + + + + + + + + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + true + 1 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("configurable_products_list").size()); +product = props.get("configurable_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_products_setup.jmx + + + + + + + + + + + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + + + + + + + + ${request_protocol} + + ${base_path}customer/account/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/logout.jmx + + + + You are signed out. + + Assertion.response_data + false + 2 + + + + + false + + + +customerUserList = props.get("customer_emails_list"); +customerUserList.add(vars.get("customer_email")); + + mpaf/tool/fragments/ce/common/return_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${browseCatalogByGuestPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Catalog Browsing By Guest"); true @@ -4260,6 +4552,11 @@ vars.putObject("randomIntGenerator", random); + + get-email + mpaf/tool/fragments/ce/lock_controller.jmx + + mpaf/tool/fragments/ce/get_customer_email.jmx @@ -4279,6 +4576,7 @@ vars.put("customer_email", customerUser); true + @@ -4704,7 +5002,18 @@ vars.put("product_sku", product.get("sku")); 2 - + + + false + + + +customerUserList = props.get("customer_emails_list"); +customerUserList.add(vars.get("customer_email")); + + mpaf/tool/fragments/ce/common/return_email_to_pool.jmx + + @@ -6503,6 +6812,11 @@ vars.put("category_name", props.get("category_names_list").get(number)); mpaf/tool/fragments/ce/common/extract_category_setup.jmx + + get-email + mpaf/tool/fragments/ce/lock_controller.jmx + + mpaf/tool/fragments/ce/get_customer_email.jmx @@ -6522,6 +6836,7 @@ vars.put("customer_email", customerUser); true + @@ -7704,32 +8019,26 @@ if(curSampler.getName().contains("Checkout success")) { mpaf/tool/fragments/ce/customer_checkout/checkout_clear_cookie.jmx + + + false + + + +customerUserList = props.get("customer_emails_list"); +customerUserList.add(vars.get("customer_email")); + + mpaf/tool/fragments/ce/common/return_email_to_pool.jmx + - - - - - continue - - false - ${loops} - - ${adminPoolUsers} - ${ramp_period} - 1505803944000 - 1505803944000 - false - - - mpaf/tool/fragments/_system/thread_group.jmx - - + + 1 false 1 - ${adminProductEditingPercentage} + ${reviewByCustomerPercentage} mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx @@ -7750,71 +8059,82 @@ if (testLabel - vars.put("testLabel", "Admin Edit Product"); + vars.put("testLabel", "Product Review By Customer"); true - - - function getFormKeyFromResponse() - { - var url = prev.getUrlAsString(), - responseCode = prev.getResponseCode(), - formKey = null; - searchPattern = /var FORM_KEY = '(.+)'/; - if (responseCode == "200" && url) { - response = prev.getResponseDataAsString(); - formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; - } - return formKey; - } - - formKey = vars.get("form_key_storage"); + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx + +import java.util.Random; - currentFormKey = getFormKeyFromResponse(); +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); +} - if (currentFormKey != null && currentFormKey != formKey) { - vars.put("form_key_storage", currentFormKey); - } +vars.putObject("randomIntGenerator", random); - javascript - mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx - - - - formKey = vars.get("form_key_storage"); - if (formKey - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' - && sampler.getMethod() == "POST") - { - arguments = sampler.getArguments(); - for (i=0; i<arguments.getArgumentCount(); i++) - { - argument = arguments.getArgument(i); - if (argument.getName() == 'form_key' && argument.getValue() != formKey) { - log.info("admin form key updated: " + argument.getValue() + " => " + formKey); - argument.setValue(formKey); - } - } - } - - javascript - - + + + true + + - - - false - mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + get-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_customer_email.jmx + +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("customer_email", customerUser); + + + + true + + - - mpaf/tool/fragments/ce/once_only_controller.jmx - - - + @@ -7824,7 +8144,7 @@ if (testLabel ${request_protocol} - ${base_path}${admin_path} + ${base_path}customer/account/login/ GET true false @@ -7832,28 +8152,87 @@ if (testLabel false false - mpaf/tool/fragments/ce/admin_login/admin_login.jmx + mpaf/tool/fragments/ce/common/open_login_page.jmx - + - Welcome - <title>Magento Admin</title> + <title>Customer Login</title> Assertion.response_data false 2 - + + + + + + + true + ${form_key} + = + true + form_key + + + true + ${customer_email} + = + true + login[username] + + + true + ${customer_password} + = + true + login[password] + + + true + + = + true + send + + + + + + + + ${request_protocol} + + ${base_path}customer/account/loginPost/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/common/login.jmx + + + + <title>My Account</title> + + Assertion.response_data + false + 2 + + + false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> + addressId + customer/address/edit/id/([^'"]+)/ $1$ 1 - + ^.+$ @@ -7861,41 +8240,164 @@ if (testLabel false 1 variable - admin_form_key + addressId - - + - + true = true - dummy + sections + + + true + false + = + true + update_section_id + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + + + + + true + 1 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("simple_products_list").size()); +product = props.get("simple_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx + + + + + + + + + + + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + + true - ${admin_form_key} + ${form_key} = true form_key - + true - ${admin_password} + 3 = true - login[password] + ratings[1] - + true - ${admin_user} + = true - login[username] + validate_rating + + + true + FirstName + = + true + nickname + + + true + Some Review Title + = + true + title + + + true + Some Review Text + = + true + detail @@ -7905,14923 +8407,598 @@ if (testLabel ${request_protocol} - ${base_path}${admin_path}/admin/dashboard/ + ${base_path}review/product/post/id/${product_id} POST true false true false - Java false - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - + mpaf/tool/fragments/ce/product_review/product_review.jmx - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx - + + + HTTP/1.1 200 OK + + Assertion.response_headers + false + 16 + + + + + + + + true + review,messages + = + true + sections + + + true + false + = + true + update_section_id + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + + + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_review/load_review.jmx + + + + 1 + 0 + ${__javaScript(Math.round(${reviewDelay}*1000))} + mpaf/tool/fragments/ce/product_review/product_review_pause.jmx + - - mpaf/tool/fragments/ce/simple_controller.jmx - + + + + + + + + + ${request_protocol} + + ${base_path}customer/account/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/logout.jmx - - - - mpaf/tool/fragments/ce/admin_edit_product/admin_edit_product_updated.jmx - import java.util.ArrayList; - import java.util.HashMap; - import java.util.Random; - - try { - Random random = new Random(); - if (${seedForRandom} > 0) { - random.setSeed(${seedForRandom} + ${__threadNum}); - } - simpleCount = props.get("simple_products_list").size(); - configCount = props.get("configurable_products_list").size(); - productCount = 0; - if (simpleCount > configCount) { - productCount = configCount; - } else { - productCount = simpleCount; - } - int threadsNumber = ctx.getThreadGroup().getNumThreads(); - if (threadsNumber == 0) { - threadsNumber = 1; - } - //Current thread number starts from 0 - currentThreadNum = ctx.getThreadNum(); + + + You are signed out. + + Assertion.response_data + false + 2 + + + + + false + + + +customerUserList = props.get("customer_emails_list"); +customerUserList.add(vars.get("customer_email")); + + mpaf/tool/fragments/ce/common/return_email_to_pool.jmx + + + - String siterator = vars.get("threadIterator_" + currentThreadNum.toString()); - iterator = 0; - if(siterator == null){ - vars.put("threadIterator_" + currentThreadNum.toString() , "0"); - } else { - iterator = Integer.parseInt(siterator); - iterator ++; - vars.put("threadIterator_" + currentThreadNum.toString() , iterator.toString()); + + + 1 + false + 1 + ${addToCartByCustomerPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Add To Cart By Customer"); + + true + + + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx + +import java.util.Random; - //Number of products for one thread - productClusterLength = productCount / threadsNumber; +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); +} - if (iterator >= productClusterLength) { - vars.put("threadIterator_" + currentThreadNum.toString(), "0"); - iterator = 0; - } +vars.putObject("randomIntGenerator", random); + + + + true + + + + + mpaf/tool/fragments/ce/common/init_total_products_in_cart_setup.jmx + +vars.put("totalProductsAdded", "0"); + + + + true + + + + + +import java.util.Random; - //Index of the current product from the cluster - i = productClusterLength * currentThreadNum + iterator; +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("category_url_keys_list").size()); - //ids of simple and configurable products to edit - vars.put("simple_product_id", props.get("simple_products_list").get(i).get("id")); - vars.put("configurable_product_id", props.get("configurable_products_list").get(i).get("id")); +vars.put("category_url_key", props.get("category_url_keys_list").get(number)); +vars.put("category_name", props.get("category_names_list").get(number)); + + + + false + mpaf/tool/fragments/ce/common/extract_category_setup.jmx + + + + get-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_customer_email.jmx + +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("customer_email", customerUser); + + + + true + + + + + + + + + + + + + ${request_protocol} + + ${base_path}customer/account/login/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_login_page.jmx + + + + <title>Customer Login</title> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${form_key} + = + true + form_key + + + true + ${customer_email} + = + true + login[username] + + + true + ${customer_password} + = + true + login[password] + + + true + + = + true + send + + + + + + + + ${request_protocol} + + ${base_path}customer/account/loginPost/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/common/login.jmx + + + + <title>My Account</title> + + Assertion.response_data + false + 2 + + + + false + addressId + customer/address/edit/id/([^'"]+)/ + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + addressId + + + + + + + + true + + = + true + sections + + + true + false + = + true + update_section_id + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + + + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + + + + + + + + + + + + ${request_protocol} + + ${base_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_home_page.jmx + + + + <title>Home page</title> + + Assertion.response_data + false + 2 + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${category_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_category.jmx + + + + <span class="base" data-ui-id="page-title">${category_name}</span> + + Assertion.response_data + false + 6 + + + + false + category_id + <li class="item category([^'"]+)">\s*<strong>${category_name}</strong>\s*</li> + $1$ + + 1 + simple_product_1_url_key + + + + + ^[0-9]+$ + + Assertion.response_data + false + 1 + variable + category_id + + + + + + true + 2 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; - //id of related product - do { - relatedIndex = random.nextInt(props.get("simple_products_list").size()); - } while(i == relatedIndex); - vars.put("related_product_id", props.get("simple_products_list").get(relatedIndex).get("id")); - } catch (Exception ex) { - log.info("Script execution failed", ex); -} - - - false - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/edit/id/${simple_product_id}/ - GET - true - false - true - false - false - - - - - - Product - - Assertion.response_data - false - 16 - - - - false - simple_product_name - ,"name":"([^'"]+)", - $1$ - - 1 - - - - false - simple_product_sku - ,"sku":"([^'"]+)", - $1$ - - 1 - - - - false - simple_product_category_id - ,"category_ids":."(\d+)". - $1$ - - 1 - - - - - Passing arguments between threads - //Additional category to be added +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("simple_products_list").size()); +product = props.get("simple_products_list").get(number); - int categoryId = Integer.parseInt(vars.get("simple_product_category_id")); - if (categoryId > 4) { - categoryId = categoryId - 1; - } else { - categoryId = categoryId + 1; - } - vars.put("category_additional", categoryId.toString()); - //New price - vars.put("price_new", "9999"); - //New special price - vars.put("special_price_new", "8888"); - //New quantity - vars.put("quantity_new", "100600"); - - - false - - - - - - - true - true - = - true - ajax - false - - - true - true - = - true - isAjax - false - - - true - ${admin_form_key} - = - true - form_key - false - - - true - ${simple_product_name} - = - true - product[name] - false - - - true - ${simple_product_sku} - = - true - product[sku] - false - - - true - ${price_new} - = - true - product[price] - false - - - true - 2 - = - true - product[tax_class_id] - false - - - true - ${quantity_new} - = - true - product[quantity_and_stock_status][qty] - false - - - true - 1 - = - true - product[quantity_and_stock_status][is_in_stock] - false - - - true - 1.0000 - = - true - product[weight] - false - - - true - 1 - = - true - product[product_has_weight] - false - - - true - ${simple_product_category_id} - = - true - product[category_ids][] - false - - - true - <p>Full simple product Description ${simple_product_id} Edited</p> - = - true - product[description] - false - - - true - 1 - = - true - product[status] - false - - - true - - = - true - product[configurable_variations] - false - - - true - 1 - = - true - affect_configurable_product_attributes - false - - - true - - = - true - product[image] - false - - - true - - = - true - product[small_image] - false - - - true - - = - true - product[thumbnail] - false - - - true - ${simple_product_name} - = - true - product[url_key] - false - - - true - ${simple_product_name} Meta Title Edited - = - true - product[meta_title] - false - - - true - ${simple_product_name} Meta Keyword Edited - = - true - product[meta_keyword] - false - - - true - ${simple_product_name} Meta Description Edited - = - true - product[meta_description] - false - - - true - 1 - = - true - product[website_ids][] - false - - - true - ${special_price_new} - = - true - product[special_price] - false - - - true - - = - true - product[special_from_date] - false - - - true - - = - true - product[special_to_date] - false - - - true - - = - true - product[cost] - false - - - true - 1 - = - true - product[stock_data][use_config_manage_stock] - false - - - true - ${quantity_new} - = - true - product[stock_data][original_inventory_qty] - false - - - true - ${quantity_new} - = - true - product[stock_data][qty] - false - - - true - 0 - = - true - product[stock_data][min_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_min_qty] - false - - - true - 1 - = - true - product[stock_data][min_sale_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_min_sale_qty] - false - - - true - 10000 - = - true - product[stock_data][max_sale_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_max_sale_qty] - false - - - true - 0 - = - true - product[stock_data][is_qty_decimal] - false - - - true - 0 - = - true - product[stock_data][is_decimal_divided] - false - - - true - 0 - = - true - product[stock_data][backorders] - false - - - true - 1 - = - true - product[stock_data][use_config_backorders] - false - - - true - 1 - = - true - product[stock_data][notify_stock_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_notify_stock_qty] - false - - - true - 0 - = - true - product[stock_data][enable_qty_increments] - false - - - true - 0 - = - true - product[stock_data][qty_increments] - false - - - true - 1 - = - true - product[stock_data][use_config_qty_increments] - false - - - true - 1 - = - true - product[stock_data][is_in_stock] - false - - - true - - = - true - product[custom_design] - false - - - true - - = - true - product[custom_design_from] - false - - - true - - = - true - product[custom_design_to] - false - - - true - - = - true - product[custom_layout_update] - false - - - true - - = - true - product[page_layout] - false - - - true - container2 - = - true - product[options_container] - false - - - true - - = - true - new-variations-attribute-set-id - false - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/validate/id/${simple_product_id}/?isAjax=true - POST - true - false - true - false - false - - - - - - {"error":false} - - Assertion.response_data - false - 2 - - - - - - - - true - true - = - true - ajax - false - - - true - true - = - true - isAjax - false - - - true - ${admin_form_key} - = - true - form_key - false - - - true - ${simple_product_name} - = - true - product[name] - false - - - true - ${simple_product_sku} - = - true - product[sku] - false - - - true - ${price_new} - = - true - product[price] - false - - - true - 2 - = - true - product[tax_class_id] - false - - - true - ${quantity_new} - = - true - product[quantity_and_stock_status][qty] - false - - - true - 1 - = - true - product[quantity_and_stock_status][is_in_stock] - false - - - true - 1.0000 - = - true - product[weight] - false - - - true - 1 - = - true - product[product_has_weight] - false - - - true - ${simple_product_category_id} - = - true - product[category_ids][] - false - - - true - ${category_additional} - = - true - product[category_ids][] - - - true - <p>Full simple product Description ${simple_product_id} Edited</p> - = - true - product[description] - false - - - true - 1 - = - true - product[status] - false - - - true - - = - true - product[configurable_variations] - false - - - true - 1 - = - true - affect_configurable_product_attributes - false - - - true - - = - true - product[image] - false - - - true - - = - true - product[small_image] - false - - - true - - = - true - product[thumbnail] - false - - - true - ${simple_product_name} - = - true - product[url_key] - false - - - true - ${simple_product_name} Meta Title Edited - = - true - product[meta_title] - false - - - true - ${simple_product_name} Meta Keyword Edited - = - true - product[meta_keyword] - false - - - true - ${simple_product_name} Meta Description Edited - = - true - product[meta_description] - false - - - true - 1 - = - true - product[website_ids][] - false - - - true - ${special_price_new} - = - true - product[special_price] - false - - - true - - = - true - product[special_from_date] - false - - - true - - = - true - product[special_to_date] - false - - - true - - = - true - product[cost] - false - - - true - 1 - = - true - product[stock_data][use_config_manage_stock] - false - - - true - ${quantity_new} - = - true - product[stock_data][original_inventory_qty] - false - - - true - ${quantity_new} - = - true - product[stock_data][qty] - false - - - true - 0 - = - true - product[stock_data][min_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_min_qty] - false - - - true - 1 - = - true - product[stock_data][min_sale_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_min_sale_qty] - false - - - true - 10000 - = - true - product[stock_data][max_sale_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_max_sale_qty] - false - - - true - 0 - = - true - product[stock_data][is_qty_decimal] - false - - - true - 0 - = - true - product[stock_data][is_decimal_divided] - false - - - true - 0 - = - true - product[stock_data][backorders] - false - - - true - 1 - = - true - product[stock_data][use_config_backorders] - false - - - true - 1 - = - true - product[stock_data][notify_stock_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_notify_stock_qty] - false - - - true - 0 - = - true - product[stock_data][enable_qty_increments] - false - - - true - 0 - = - true - product[stock_data][qty_increments] - false - - - true - 1 - = - true - product[stock_data][use_config_qty_increments] - false - - - true - 1 - = - true - product[stock_data][is_in_stock] - false - - - true - - = - true - product[custom_design] - false - - - true - - = - true - product[custom_design_from] - false - - - true - - = - true - product[custom_design_to] - false - - - true - - = - true - product[custom_layout_update] - false - - - true - - = - true - product[page_layout] - false - - - true - container2 - = - true - product[options_container] - false - - - true - - = - true - new-variations-attribute-set-id - false - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/save/id/${simple_product_id}/back/edit/active_tab/product-details/ - POST - true - false - true - false - false - - - - - - You saved the product - - Assertion.response_data - false - 2 - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/edit/id/${configurable_product_id}/ - GET - true - false - true - false - false - - - - - - Product - - Assertion.response_data - false - 16 - - - - false - configurable_product_name - ,"name":"([^'"]+)", - $1$ - - 1 - - - - false - configurable_product_sku - ,"sku":"([^'"]+)", - $1$ - - 1 - - - - false - configurable_product_category_id - ,"category_ids":."(\d+)" - $1$ - - 1 - - - - false - configurable_attribute_id - ,"configurable_variation":"([^'"]+)", - $1$ - - 1 - true - - - - false - configurable_matrix - "configurable-matrix":(\[.*?\]) - $1$ - - 1 - true - - - - associated_products_ids - $.[*].id - - configurable_matrix - VAR - - - - false - configurable_product_data - (\{"product":.*?configurable_attributes_data.*?\})\s*< - $1$ - - 1 - - - - configurable_attributes_data - $.product.configurable_attributes_data - - configurable_product_data - VAR - - - - false - configurable_attribute_ids - "attribute_id":"(\d+)" - $1$ - - -1 - variable - configurable_attributes_data - - - - false - configurable_attribute_codes - "code":"(\w+)" - $1$ - - -1 - variable - configurable_attributes_data - - - - false - configurable_attribute_labels - "label":"(.*?)" - $1$ - - -1 - variable - configurable_attributes_data - - - - false - configurable_attribute_values - "values":(\{(?:\}|.*?\}\})) - $1$ - - -1 - variable - configurable_attributes_data - - - - - configurable_attribute_ids - configurable_attribute_id - true - - - - 1 - ${configurable_attribute_ids_matchNr} - 1 - attribute_counter - - true - true - - - - return vars.get("configurable_attribute_values_" + vars.get("attribute_counter")); - - - false - - - - false - attribute_${configurable_attribute_id}_values - "value_index":"(\d+)" - $1$ - - -1 - configurable_attribute_values_${attribute_counter} - - - - - - - - - true - true - = - true - isAjax - false - - - true - ${admin_form_key} - = - true - form_key - false - - - true - ${configurable_product_name} - = - true - product[name] - false - - - true - ${configurable_product_sku} - = - true - product[sku] - false - - - true - ${price_new} - = - true - product[price] - false - - - true - 2 - = - true - product[tax_class_id] - false - - - true - 1 - = - true - product[quantity_and_stock_status][is_in_stock] - false - - - true - 3 - = - true - product[weight] - false - - - true - ${configurable_product_category_id} - = - true - product[category_ids][] - false - - - true - ${category_additional} - = - true - product[category_ids][] - false - - - true - <p>Configurable product description ${configurable_product_id} Edited</p> - = - true - product[description] - false - - - true - 1 - = - true - product[status] - false - - - true - ${configurable_product_name} Meta Title Edited - = - true - product[meta_title] - false - - - true - ${configurable_product_name} Meta Keyword Edited - = - true - product[meta_keyword] - false - - - true - ${configurable_product_name} Meta Description Edited - = - true - product[meta_description] - false - - - true - 1 - = - true - product[website_ids][] - false - - - true - ${special_price_new} - = - true - product[special_price] - false - - - true - - = - true - product[special_from_date] - false - - - true - - = - true - product[special_to_date] - false - - - true - - = - true - product[cost] - false - - - true - 1 - = - true - product[stock_data][use_config_manage_stock] - false - - - true - 0 - = - true - product[stock_data][min_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_min_qty] - false - - - true - 1 - = - true - product[stock_data][min_sale_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_min_sale_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_max_sale_qty] - false - - - true - 0 - = - true - product[stock_data][is_qty_decimal] - false - - - true - 0 - = - true - product[stock_data][is_decimal_divided] - false - - - true - 0 - = - true - product[stock_data][backorders] - false - - - true - 1 - = - true - product[stock_data][use_config_backorders] - false - - - true - 1 - = - true - product[stock_data][notify_stock_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_notify_stock_qty] - false - - - true - 0 - = - true - product[stock_data][enable_qty_increments] - false - - - true - 0 - = - true - product[stock_data][qty_increments] - false - - - true - 1 - = - true - product[stock_data][use_config_qty_increments] - false - - - true - 1 - = - true - product[stock_data][is_in_stock] - false - - - true - - = - true - product[custom_design] - false - - - true - - = - true - product[custom_design_from] - false - - - true - - = - true - product[custom_design_to] - false - - - true - - = - true - product[custom_layout_update] - false - - - true - - = - true - product[page_layout] - false - - - true - container2 - = - true - product[options_container] - false - - - true - ${configurable_attribute_id} - = - true - product[configurable_variation] - false - - - true - ${configurable_product_name} - = - true - product[url_key] - - - true - 1 - = - true - product[use_config_gift_message_available] - - - true - 1 - = - true - product[use_config_gift_wrapping_available] - - - true - 4 - = - true - product[visibility] - - - true - 1 - = - true - product[product_has_weight] - true - - - true - 50 - = - true - product[stock_data][qty] - false - - - true - configurable - = - true - product[stock_data][type_id] - false - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/validate/id/${configurable_product_id}/ - POST - true - false - true - false - false - - - - - false - - - try { - int attributesCount = Integer.parseInt(vars.get("configurable_attribute_ids_matchNr")); - for (int i = 1; i <= attributesCount; i++) { - attributeId = vars.get("configurable_attribute_ids_" + i.toString()); - attributeCode = vars.get("configurable_attribute_codes_" + i.toString()); - attributeLabel = vars.get("configurable_attribute_labels_" + i.toString()); - ctx.getCurrentSampler().addArgument("attributes[" + (i - 1).toString() + "]", attributeId); - ctx.getCurrentSampler().addArgument("attribute_codes[" + (i - 1).toString() + "]", attributeCode); - ctx.getCurrentSampler().addArgument("product[" + attributeCode + "]", attributeId); - ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][attribute_id]", attributeId); - ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][position]", (i - 1).toString()); - ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][code]", attributeCode); - ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][label]", attributeLabel); - - int valuesCount = Integer.parseInt(vars.get("attribute_" + attributeId + "_values_matchNr")); - for (int j = 1; j <= valuesCount; j++) { - attributeValue = vars.get("attribute_" + attributeId + "_values_" + j.toString()); - ctx.getCurrentSampler().addArgument( - "product[configurable_attributes_data][" + attributeId + "][values][" + attributeValue + "][include]", - "1" - ); - ctx.getCurrentSampler().addArgument( - "product[configurable_attributes_data][" + attributeId + "][values][" + attributeValue + "][value_index]", - attributeValue - ); - } - } - ctx.getCurrentSampler().addArgument("associated_product_ids_serialized", vars.get("associated_products_ids").toString()); - } catch (Exception e) { - log.error("error???", e); - } - - - - - {"error":false} - - Assertion.response_data - false - 2 - - - - - - - - true - true - = - true - ajax - false - - - true - true - = - true - isAjax - false - - - true - ${admin_form_key} - = - true - form_key - false - - - true - ${configurable_product_name} - = - true - product[name] - false - - - true - ${configurable_product_sku} - = - true - product[sku] - false - - - true - ${price_new} - = - true - product[price] - false - - - true - 2 - = - true - product[tax_class_id]admin - false - - - true - 1 - = - true - product[quantity_and_stock_status][is_in_stock] - false - - - true - 3 - = - true - product[weight] - false - - - true - ${configurable_product_category_id} - = - true - product[category_ids][] - false - - - true - ${category_additional} - = - true - product[category_ids][] - false - - - true - <p>Configurable product description ${configurable_product_id} Edited</p> - = - true - product[description] - false - - - true - 1 - = - true - product[status] - false - - - true - ${configurable_product_name} Meta Title Edited - = - true - product[meta_title] - false - - - true - ${configurable_product_name} Meta Keyword Edited - = - true - product[meta_keyword] - false - - - true - ${configurable_product_name} Meta Description Edited - = - true - product[meta_description] - false - - - true - 1 - = - true - product[website_ids][] - false - - - true - ${special_price_new} - = - true - product[special_price] - false - - - true - - = - true - product[special_from_date] - false - - - true - - = - true - product[special_to_date] - false - - - true - - = - true - product[cost] - false - - - true - 1 - = - true - product[stock_data][use_config_manage_stock] - false - - - true - 0 - = - true - product[stock_data][min_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_min_qty] - false - - - true - 1 - = - true - product[stock_data][min_sale_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_min_sale_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_max_sale_qty] - false - - - true - 0 - = - true - product[stock_data][is_qty_decimal] - false - - - true - 0 - = - true - product[stock_data][is_decimal_divided] - false - - - true - 0 - = - true - product[stock_data][backorders] - false - - - true - 1 - = - true - product[stock_data][use_config_backorders] - false - - - true - 1 - = - true - product[stock_data][notify_stock_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_notify_stock_qty] - false - - - true - 0 - = - true - product[stock_data][enable_qty_increments] - false - - - true - 0 - = - true - product[stock_data][qty_increments] - false - - - true - 1 - = - true - product[stock_data][use_config_qty_increments] - false - - - true - 1 - = - true - product[stock_data][is_in_stock] - false - - - true - - = - true - product[custom_design] - false - - - true - - = - true - product[custom_design_from] - false - - - true - - = - true - product[custom_design_to] - false - - - true - - = - true - product[custom_layout_update] - false - - - true - - = - true - product[page_layout] - false - - - true - container2 - = - true - product[options_container] - false - - - true - ${configurable_attribute_id} - = - true - product[configurable_variation] - false - - - true - ${configurable_product_name} - = - true - product[url_key] - - - true - 1 - = - true - product[use_config_gift_message_available] - - - true - 1 - = - true - product[use_config_gift_wrapping_available] - - - true - 4 - = - true - product[visibility] - - - true - 1 - = - true - product[product_has_weight] - true - - - true - 50 - = - true - product[stock_data][qty] - false - - - true - configurable - = - true - product[stock_data][type_id] - false - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/save/id/${configurable_product_id}/back/edit/active_tab/product-details/ - POST - true - false - true - false - false - - - - - false - - - try { - int attributesCount = Integer.parseInt(vars.get("configurable_attribute_ids_matchNr")); - for (int i = 1; i <= attributesCount; i++) { - attributeId = vars.get("configurable_attribute_ids_" + i.toString()); - attributeCode = vars.get("configurable_attribute_codes_" + i.toString()); - attributeLabel = vars.get("configurable_attribute_labels_" + i.toString()); - ctx.getCurrentSampler().addArgument("attributes[" + (i - 1).toString() + "]", attributeId); - ctx.getCurrentSampler().addArgument("attribute_codes[" + (i - 1).toString() + "]", attributeCode); - ctx.getCurrentSampler().addArgument("product[" + attributeCode + "]", attributeId); - ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][attribute_id]", attributeId); - ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][position]", (i - 1).toString()); - ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][code]", attributeCode); - ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][label]", attributeLabel); - - int valuesCount = Integer.parseInt(vars.get("attribute_" + attributeId + "_values_matchNr")); - for (int j = 1; j <= valuesCount; j++) { - attributeValue = vars.get("attribute_" + attributeId + "_values_" + j.toString()); - ctx.getCurrentSampler().addArgument( - "product[configurable_attributes_data][" + attributeId + "][values][" + attributeValue + "][include]", - "1" - ); - ctx.getCurrentSampler().addArgument( - "product[configurable_attributes_data][" + attributeId + "][values][" + attributeValue + "][value_index]", - attributeValue - ); - } - } - ctx.getCurrentSampler().addArgument("associated_product_ids_serialized", vars.get("associated_products_ids").toString()); - } catch (Exception e) { - log.error("error???", e); - } - - - - - You saved the product - - Assertion.response_data - false - 2 - if have trouble see messages-message-error - - - - - - - - - - 1 - false - 1 - ${adminProductCreationPercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx - - - - vars.put("testLabel", "Admin Create Product"); - - true - - - - - - function getFormKeyFromResponse() - { - var url = prev.getUrlAsString(), - responseCode = prev.getResponseCode(), - formKey = null; - searchPattern = /var FORM_KEY = '(.+)'/; - if (responseCode == "200" && url) { - response = prev.getResponseDataAsString(); - formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; - } - return formKey; - } - - formKey = vars.get("form_key_storage"); - - currentFormKey = getFormKeyFromResponse(); - - if (currentFormKey != null && currentFormKey != formKey) { - vars.put("form_key_storage", currentFormKey); - } - - javascript - mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx - - - - formKey = vars.get("form_key_storage"); - if (formKey - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' - && sampler.getMethod() == "POST") - { - arguments = sampler.getArguments(); - for (i=0; i<arguments.getArgumentCount(); i++) - { - argument = arguments.getArgument(i); - if (argument.getName() == 'form_key' && argument.getValue() != formKey) { - log.info("admin form key updated: " + argument.getValue() + " => " + formKey); - argument.setValue(formKey); - } - } - } - - javascript - - - - - - false - mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - - - mpaf/tool/fragments/ce/once_only_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_login/admin_login.jmx - - - - Welcome - <title>Magento Admin</title> - - Assertion.response_data - false - 2 - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_form_key - - - - - - - - - true - - = - true - dummy - - - true - ${admin_form_key} - = - true - form_key - - - true - ${admin_password} - = - true - login[password] - - - true - ${admin_user} - = - true - login[username] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/dashboard/ - POST - true - false - true - false - Java - false - - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx - - - - - mpaf/tool/fragments/ce/admin_create_product/get_related_product_id.jmx - import org.apache.jmeter.samplers.SampleResult; -import java.util.Random; -Random random = new Random(); -if (${seedForRandom} > 0) { - random.setSeed(${seedForRandom}); -} -relatedIndex = random.nextInt(props.get("simple_products_list").size()); -vars.put("related_product_id", props.get("simple_products_list").get(relatedIndex).get("id")); - - - true - - - - - - - - - - - - ${request_protocol} - - - ${base_path}${admin_path}/catalog/product_attribute/index/filter/YXR0cmlidXRlX2NvZGU9Y29sb3I - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_product/get_color_attribute_id.jmx - - - false - color_id - product_attribute\/edit\/attribute_id\/([\d]+)\/" >.*\s*(color).* - $1$ - - 1 - - - - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - import org.apache.jmeter.samplers.SampleResult; -import java.util.Random; -Random random = new Random(); -if (${seedForRandom} > 0) { - random.setSeed(${seedForRandom}); -} -number = random.nextInt(props.get("simple_products_list").size()); -simpleList = props.get("simple_products_list").get(number); -vars.put("simple_product_1_id", simpleList.get("id")); - -do { - number1 = random.nextInt(props.get("simple_products_list").size()); -} while(number == number1); -simpleList = props.get("simple_products_list").get(number1); -vars.put("simple_product_2_id", simpleList.get("id")); - -number2 = random.nextInt(props.get("configurable_products_list").size()); -configurableList = props.get("configurable_products_list").get(number2); -vars.put("configurable_product_1_id", configurableList.get("id")); -vars.put("configurable_product_1_url_key", configurableList.get("url_key")); -vars.put("configurable_product_1_name", configurableList.get("title")); - -//Additional category to be added -//int categoryId = Integer.parseInt(vars.get("simple_product_category_id")); -//vars.put("category_additional", (categoryId+1).toString()); -//New price -vars.put("price_new", "9999"); -//New special price -vars.put("special_price_new", "8888"); -//New quantity -vars.put("quantity_new", "100600"); - - - true - mpaf/tool/fragments/ce/admin_create_product/setup.jmx - - - - mpaf/tool/fragments/ce/admin_create_product/create_bundle_product.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/ - GET - true - false - true - false - false - - - - - - records found - - Assertion.response_data - false - 2 - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/new/set/4/type/bundle/ - GET - true - false - true - false - false - - - - - - New Product - - Assertion.response_data - false - 2 - - - - - - - - true - true - = - true - ajax - false - - - true - true - = - true - isAjax - false - - - true - ${admin_form_key} - = - true - form_key - false - - - true - Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[name] - false - - - true - SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[sku] - false - - - true - 123 - = - true - product[price] - - - true - 2 - = - true - product[tax_class_id] - - - true - 111 - = - true - product[quantity_and_stock_status][qty] - - - true - 1 - = - true - product[quantity_and_stock_status][is_in_stock] - - - true - 1.0000 - = - true - product[weight] - - - true - 1 - = - true - product[product_has_weight] - true - - - true - 2 - = - true - product[category_ids][] - - - true - <p>Full bundle product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> - = - true - product[description] - - - true - <p>Short bundle product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> - = - true - product[short_description] - - - true - 1 - = - true - product[status] - - - true - - = - true - product[configurable_variations] - - - true - 1 - = - true - affect_configurable_product_attributes - - - true - - = - true - product[image] - - - true - - = - true - product[small_image] - - - true - - = - true - product[thumbnail] - - - true - bundle-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[url_key] - - - true - Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title - = - true - product[meta_title] - - - true - Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword - = - true - product[meta_keyword] - - - true - Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description - = - true - product[meta_description] - - - true - 1 - = - true - product[website_ids][] - - - true - 99 - = - true - product[special_price] - - - true - 1 - = - true - product[stock_data][notify_stock_qty] - - - true - - = - true - product[special_from_date] - - - true - - = - true - product[special_to_date] - - - true - - = - true - product[cost] - - - true - 0 - = - true - product[tier_price][0][website_id] - - - true - 32000 - = - true - product[tier_price][0][cust_group] - - - true - 100 - = - true - product[tier_price][0][price_qty] - - - true - 90 - = - true - product[tier_price][0][price] - - - true - - = - true - product[tier_price][0][delete] - - - true - 0 - = - true - product[tier_price][1][website_id] - - - true - 1 - = - true - product[tier_price][1][cust_group] - - - true - 101 - = - true - product[tier_price][1][price_qty] - - - true - 99 - = - true - product[tier_price][1][price] - - - true - - = - true - product[tier_price][1][delete] - - - true - 1 - = - true - product[stock_data][use_config_manage_stock] - - - true - 100500 - = - true - product[stock_data][original_inventory_qty] - - - true - 100500 - = - true - product[stock_data][qty] - - - true - 0 - = - true - product[stock_data][min_qty] - - - true - 1 - = - true - product[stock_data][use_config_min_qty] - - - true - 1 - = - true - product[stock_data][min_sale_qty] - - - true - 1 - = - true - product[stock_data][use_config_min_sale_qty] - - - true - 10000 - = - true - product[stock_data][max_sale_qty] - - - true - 1 - = - true - product[stock_data][use_config_max_sale_qty] - - - true - 0 - = - true - product[stock_data][is_qty_decimal] - - - true - 0 - = - true - product[stock_data][is_decimal_divided] - - - true - 0 - = - true - product[stock_data][backorders] - - - true - 1 - = - true - product[stock_data][use_config_backorders] - - - true - 1 - = - true - product[stock_data][use_config_notify_stock_qty] - - - true - 0 - = - true - product[stock_data][enable_qty_increments] - - - true - 0 - = - true - product[stock_data][qty_increments] - - - true - 1 - = - true - product[stock_data][use_config_qty_increments] - - - true - 1 - = - true - product[stock_data][is_in_stock] - - - true - - = - true - product[custom_design] - - - true - - = - true - product[custom_design_from] - - - true - - = - true - product[custom_design_to] - - - true - - = - true - product[custom_layout_update] - - - true - - = - true - product[page_layout] - - - true - container2 - = - true - product[options_container] - - - true - - = - true - new-variations-attribute-set-id - - - true - 0 - = - true - product[shipment_type] - - - true - option title one - = - true - bundle_options[0][title] - - - true - - = - true - bundle_options[0][option_id] - - - true - - = - true - bundle_options[0][delete] - - - true - select - = - true - bundle_options[0][type] - - - true - 1 - = - true - bundle_options[0][required] - - - true - 0 - = - true - bundle_options[0][position] - - - true - - = - true - bundle_selections[0][0][selection_id] - - - true - - = - true - bundle_selections[0][0][option_id] - - - true - ${simple_product_1_id} - = - true - bundle_selections[0][0][product_id] - - - true - - = - true - bundle_selections[0][0][delete] - - - true - 0.00 - = - true - bundle_selections[0][0][selection_price_value] - - - true - 0 - = - true - bundle_selections[0][0][selection_price_type] - - - true - 1 - = - true - bundle_selections[0][0][selection_qty] - - - true - 1 - = - true - bundle_selections[0][0][selection_can_change_qty] - - - true - 0 - = - true - bundle_selections[0][0][position] - - - true - - = - true - bundle_selections[0][1][selection_id] - - - true - - = - true - bundle_selections[0][1][option_id] - - - true - ${simple_product_2_id} - = - true - bundle_selections[0][1][product_id] - - - true - - = - true - bundle_selections[0][1][delete] - - - true - 0.00 - = - true - bundle_selections[0][1][selection_price_value] - - - true - 0 - = - true - bundle_selections[0][1][selection_price_type] - - - true - 1 - = - true - bundle_selections[0][1][selection_qty] - - - true - 1 - = - true - bundle_selections[0][1][selection_can_change_qty] - - - true - 1 - = - true - bundle_selections[0][1][position] - - - true - option title two - = - true - bundle_options[1][title] - - - true - - = - true - bundle_options[1][option_id] - - - true - - = - true - bundle_options[1][delete] - - - true - select - = - true - bundle_options[1][type] - - - true - 1 - = - true - bundle_options[1][required] - - - true - 1 - = - true - bundle_options[1][position] - - - true - - = - true - bundle_selections[1][0][selection_id] - true - - - true - - = - true - bundle_selections[1][0][option_id] - true - - - true - ${simple_product_1_id} - = - true - bundle_selections[1][0][product_id] - true - - - true - - = - true - bundle_selections[1][0][delete] - true - - - true - 0.00 - = - true - bundle_selections[1][0][selection_price_value] - true - - - true - 0 - = - true - bundle_selections[1][0][selection_price_type] - true - - - true - 1 - = - true - bundle_selections[1][0][selection_qty] - true - - - true - 1 - = - true - bundle_selections[1][0][selection_can_change_qty] - true - - - true - 0 - = - true - bundle_selections[1][0][position] - true - - - true - - = - true - bundle_selections[1][1][selection_id] - true - - - true - - = - true - bundle_selections[1][1][option_id] - true - - - true - ${simple_product_2_id} - = - true - bundle_selections[1][1][product_id] - true - - - true - - = - true - bundle_selections[1][1][delete] - true - - - true - 0.00 - = - true - bundle_selections[1][1][selection_price_value] - true - - - true - 0 - = - true - bundle_selections[1][1][selection_price_type] - true - - - true - 1 - = - true - bundle_selections[1][1][selection_qty] - true - - - true - 1 - = - true - bundle_selections[1][1][selection_can_change_qty] - true - - - true - 1 - = - true - bundle_selections[1][1][position] - true - - - true - 2 - = - true - affect_bundle_product_selections - true - - - true - ${related_product_id} - = - true - links[related][0][id] - - - true - 1 - = - true - links[related][0][position] - - - true - ${related_product_id} - = - true - links[upsell][0][id] - - - true - 1 - = - true - links[upsell][0][position] - - - true - ${related_product_id} - = - true - links[crosssell][0][id] - - - true - 1 - = - true - links[crosssell][0][position] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/validate/set/4/ - POST - true - false - true - false - false - - - - - - {"error":false} - - Assertion.response_data - false - 2 - - - - - - - - true - true - = - true - ajax - false - - - true - true - = - true - isAjax - false - - - true - ${admin_form_key} - = - true - form_key - false - - - true - Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[name] - false - - - true - SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[sku] - false - - - true - 123 - = - true - product[price] - - - true - 2 - = - true - product[tax_class_id] - - - true - 111 - = - true - product[quantity_and_stock_status][qty] - - - true - 1 - = - true - product[quantity_and_stock_status][is_in_stock] - - - true - 1.0000 - = - true - product[weight] - - - true - 1 - = - true - product[product_has_weight] - true - - - true - 2 - = - true - product[category_ids][] - - - true - <p>Full bundle product Description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> - = - true - product[description] - - - true - <p>Short bundle product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> - = - true - product[short_description] - - - true - 1 - = - true - product[status] - - - true - - = - true - product[configurable_variations] - - - true - 1 - = - true - affect_configurable_product_attributes - - - true - - = - true - product[image] - - - true - - = - true - product[small_image] - - - true - - = - true - product[thumbnail] - - - true - bundle-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[url_key] - - - true - Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title - = - true - product[meta_title] - - - true - Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword - = - true - product[meta_keyword] - - - true - Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description - = - true - product[meta_description] - - - true - 1 - = - true - product[website_ids][] - - - true - 99 - = - true - product[special_price] - - - true - - = - true - product[special_from_date] - - - true - - = - true - product[special_to_date] - - - true - - = - true - product[cost] - - - true - 0 - = - true - product[tier_price][0][website_id] - - - true - 32000 - = - true - product[tier_price][0][cust_group] - - - true - 100 - = - true - product[tier_price][0][price_qty] - - - true - 90 - = - true - product[tier_price][0][price] - - - true - - = - true - product[tier_price][0][delete] - - - true - 0 - = - true - product[tier_price][1][website_id] - - - true - 1 - = - true - product[tier_price][1][cust_group] - - - true - 101 - = - true - product[tier_price][1][price_qty] - - - true - 99 - = - true - product[tier_price][1][price] - - - true - - = - true - product[tier_price][1][delete] - - - true - 1 - = - true - product[stock_data][use_config_manage_stock] - - - true - 100500 - = - true - product[stock_data][original_inventory_qty] - - - true - 100500 - = - true - product[stock_data][qty] - - - true - 0 - = - true - product[stock_data][min_qty] - - - true - 1 - = - true - product[stock_data][use_config_min_qty] - - - true - 1 - = - true - product[stock_data][min_sale_qty] - - - true - 1 - = - true - product[stock_data][use_config_min_sale_qty] - - - true - 10000 - = - true - product[stock_data][max_sale_qty] - - - true - 1 - = - true - product[stock_data][use_config_max_sale_qty] - - - true - 0 - = - true - product[stock_data][is_qty_decimal] - - - true - 0 - = - true - product[stock_data][is_decimal_divided] - - - true - 0 - = - true - product[stock_data][backorders] - - - true - 1 - = - true - product[stock_data][use_config_backorders] - - - true - 1 - = - true - product[stock_data][notify_stock_qty] - - - true - 1 - = - true - product[stock_data][use_config_notify_stock_qty] - - - true - 0 - = - true - product[stock_data][enable_qty_increments] - - - true - 0 - = - true - product[stock_data][qty_increments] - - - true - 1 - = - true - product[stock_data][use_config_qty_increments] - - - true - 1 - = - true - product[stock_data][is_in_stock] - - - true - - = - true - product[custom_design] - - - true - - = - true - product[custom_design_from] - - - true - - = - true - product[custom_design_to] - - - true - - = - true - product[custom_layout_update] - - - true - - = - true - product[page_layout] - - - true - container2 - = - true - product[options_container] - - - true - - = - true - new-variations-attribute-set-id - - - true - 0 - = - true - product[shipment_type] - false - - - true - option title one - = - true - bundle_options[0][title] - false - - - true - - = - true - bundle_options[0][option_id] - false - - - true - - = - true - bundle_options[0][delete] - false - - - true - select - = - true - bundle_options[0][type] - false - - - true - 1 - = - true - bundle_options[0][required] - false - - - true - 0 - = - true - bundle_options[0][position] - false - - - true - - = - true - bundle_selections[0][0][selection_id] - false - - - true - - = - true - bundle_selections[0][0][option_id] - false - - - true - ${simple_product_1_id} - = - true - bundle_selections[0][0][product_id] - false - - - true - - = - true - bundle_selections[0][0][delete] - false - - - true - 0.00 - = - true - bundle_selections[0][0][selection_price_value] - false - - - true - 0 - = - true - bundle_selections[0][0][selection_price_type] - false - - - true - 1 - = - true - bundle_selections[0][0][selection_qty] - false - - - true - 1 - = - true - bundle_selections[0][0][selection_can_change_qty] - false - - - true - 0 - = - true - bundle_selections[0][0][position] - false - - - true - - = - true - bundle_selections[0][1][selection_id] - false - - - true - - = - true - bundle_selections[0][1][option_id] - false - - - true - ${simple_product_2_id} - = - true - bundle_selections[0][1][product_id] - false - - - true - - = - true - bundle_selections[0][1][delete] - false - - - true - 0.00 - = - true - bundle_selections[0][1][selection_price_value] - false - - - true - 0 - = - true - bundle_selections[0][1][selection_price_type] - false - - - true - 1 - = - true - bundle_selections[0][1][selection_qty] - false - - - true - 1 - = - true - bundle_selections[0][1][selection_can_change_qty] - false - - - true - 1 - = - true - bundle_selections[0][1][position] - false - - - true - option title two - = - true - bundle_options[1][title] - false - - - true - - = - true - bundle_options[1][option_id] - false - - - true - - = - true - bundle_options[1][delete] - false - - - true - select - = - true - bundle_options[1][type] - false - - - true - 1 - = - true - bundle_options[1][required] - false - - - true - 1 - = - true - bundle_options[1][position] - false - - - true - - = - true - bundle_selections[1][0][selection_id] - false - - - true - - = - true - bundle_selections[1][0][option_id] - false - - - true - ${simple_product_1_id} - = - true - bundle_selections[1][0][product_id] - false - - - true - - = - true - bundle_selections[1][0][delete] - false - - - true - 0.00 - = - true - bundle_selections[1][0][selection_price_value] - false - - - true - 0 - = - true - bundle_selections[1][0][selection_price_type] - false - - - true - 1 - = - true - bundle_selections[1][0][selection_qty] - false - - - true - 1 - = - true - bundle_selections[1][0][selection_can_change_qty] - false - - - true - 0 - = - true - bundle_selections[1][0][position] - false - - - true - - = - true - bundle_selections[1][1][selection_id] - false - - - true - - = - true - bundle_selections[1][1][option_id] - false - - - true - ${simple_product_2_id} - = - true - bundle_selections[1][1][product_id] - false - - - true - - = - true - bundle_selections[1][1][delete] - false - - - true - 0.00 - = - true - bundle_selections[1][1][selection_price_value] - false - - - true - 0 - = - true - bundle_selections[1][1][selection_price_type] - false - - - true - 1 - = - true - bundle_selections[1][1][selection_qty] - false - - - true - 1 - = - true - bundle_selections[1][1][selection_can_change_qty] - false - - - true - 1 - = - true - bundle_selections[1][1][position] - false - - - true - 2 - = - true - affect_bundle_product_selections - false - - - true - ${related_product_id} - = - true - links[related][0][id] - - - true - 1 - = - true - links[related][0][position] - - - true - ${related_product_id} - = - true - links[upsell][0][id] - - - true - 1 - = - true - links[upsell][0][position] - - - true - ${related_product_id} - = - true - links[crosssell][0][id] - - - true - 1 - = - true - links[crosssell][0][position] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/save/set/4/type/bundle/back/edit/active_tab/product-details/ - POST - true - false - true - false - false - - - - - - You saved the product - - Assertion.response_data - false - 2 - - - - - violation - - Assertion.response_data - false - 6 - - - - - - - mpaf/tool/fragments/ce/admin_create_product/create_configurable_product.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/ - GET - true - false - true - false - false - - - - - - records found - - Assertion.response_data - false - 2 - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/new/set/4/type/configurable/ - GET - true - false - true - false - false - - - - - - New Product - - Assertion.response_data - false - 2 - - - - - - - - true - form_key - ${admin_form_key} - = - true - - - true - options[0][attribute_id] - ${color_id} - = - true - - - true - options[0][id] - PQFYFAT - = - true - - - true - options[0][is_new] - true - = - true - - - true - options[0][label] - green-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - - - true - options[0][value] - 0 - = - true - - - true - ${color_id} - = - true - options[1][attribute_id] - true - - - true - PQFYFAT1 - = - true - options[1][id] - true - - - true - true - = - true - options[1][is_new] - true - - - true - red-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - options[1][label] - true - - - true - 0 - = - true - options[1][value] - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product_attribute/createOptions/?isAjax=true - POST - true - false - true - false - false - - - - - first_option - $.PQFYFAT - - - BODY - - - - second_option - $.PQFYFAT1 - - - BODY - - - - - - - - true - true - = - true - ajax - false - - - true - true - = - true - isAjax - false - - - true - 1 - = - true - affect_configurable_product_attributes - true - - - true - color - = - true - attribute_codes[0] - true - - - true - ${color_id} - = - true - attributes[0] - true - - - true - Color:green ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - configurable-matrix[0][attributes] - true - - - true - 1 - = - true - configurable-matrix[0][canEdit] - true - - - false - {"color":"${first_option}"} - = - true - configurable-matrix[0][configurable_attribute] - true - - - true - green ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - configurable-matrix[0][name] - true - - - true - 1 - = - true - configurable-matrix[0][newProduct] - true - - - true - 100 - = - true - configurable-matrix[0][price] - true - - - true - $ - = - true - configurable-matrix[0][price_currency] - true - - - true - $100 - = - true - configurable-matrix[0][price_string] - true - - - true - 150 - = - true - configurable-matrix[0][qty] - true - - - true - 0 - = - true - configurable-matrix[0][record_id] - true - - - true - green-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - configurable-matrix[0][sku] - true - - - true - - = - true - configurable-matrix[0][small_image] - true - - - true - 1 - = - true - configurable-matrix[0][status] - true - - - true - - = - true - configurable-matrix[0][swatch_image] - true - - - true - - = - true - configurable-matrix[0][thumbnail] - true - - - true - ${first_option} - = - true - configurable-matrix[0][variationKey] - true - - - true - 6 - = - true - configurable-matrix[0][weight] - true - - - true - Color:red ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - configurable-matrix[1][attributes] - true - - - true - 1 - = - true - configurable-matrix[1][canEdit] - true - - - false - {"color":"${second_option}"} - = - true - configurable-matrix[1][configurable_attribute] - true - - - true - red ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - configurable-matrix[1][name] - true - - - true - 1 - = - true - configurable-matrix[1][newProduct] - true - - - true - 100 - = - true - configurable-matrix[1][price] - true - - - true - $ - = - true - configurable-matrix[1][price_currency] - true - - - true - $100 - = - true - configurable-matrix[1][price_string] - true - - - true - 50 - = - true - configurable-matrix[1][qty] - true - - - true - 1 - = - true - configurable-matrix[1][record_id] - true - - - true - red ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - configurable-matrix[1][sku] - true - - - true - - = - true - configurable-matrix[1][small_image] - true - - - true - 1 - = - true - configurable-matrix[1][status] - true - - - true - - = - true - configurable-matrix[1][swatch_image] - true - - - true - - = - true - configurable-matrix[1][thumbnail] - true - - - true - ${second_option} - = - true - configurable-matrix[1][variationKey] - true - - - true - 6 - = - true - configurable-matrix[1][weight] - true - - - true - ${admin_form_key} - = - true - form_key - true - - - true - 4 - = - true - new-variations-attribute-set-id - true - - - true - 1 - = - true - product[affect_product_custom_options] - true - - - true - 4 - = - true - product[attribute_set_id] - true - - - true - 4 - = - true - product[category_ids][0] - true - - - true - ${color_id} - = - true - product[configurable_attributes_data][${color_id}][attribute_id] - true - - - true - color - = - true - product[configurable_attributes_data][${color_id}][code] - true - - - true - Color - = - true - product[configurable_attributes_data][${color_id}][label] - true - - - true - 0 - = - true - product[configurable_attributes_data][${color_id}][position] - true - - - true - 1 - = - true - product[configurable_attributes_data][${color_id}][values][${first_option}][include] - true - - - true - ${first_option} - = - true - product[configurable_attributes_data][${color_id}][values][${first_option}][value_index] - true - - - true - 1 - = - true - product[configurable_attributes_data][${color_id}][values][${second_option}][include] - true - - - true - ${second_option} - = - true - product[configurable_attributes_data][${color_id}][values][${second_option}][value_index] - true - - - true - - = - true - product[custom_layout_update] - true - - - true - - = - true - product[description] - true - - - true - 0 - = - true - product[gift_message_available] - true - - - true - 1 - = - true - product[gift_wrapping_available] - true - - - true - - = - true - product[gift_wrapping_price] - true - - - true - - = - true - product[image] - true - - - true - 2 - = - true - product[is_returnable] - true - - - true - Configurable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description - = - true - product[meta_description] - true - - - true - Configurable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword - = - true - product[meta_keyword] - true - - - true - Configurable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title - = - true - product[meta_title] - true - - - true - Configurable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[name] - true - - - true - container2 - = - true - product[options_container] - true - - - true - ${price_new} - = - true - product[price] - true - - - true - 1 - = - true - product[product_has_weight] - true - - - true - 1 - = - true - product[quantity_and_stock_status][is_in_stock] - true - - - true - 1000 - = - true - product[quantity_and_stock_status][qty] - true - - - true - - = - true - product[short_description] - true - - - true - SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[sku] - true - - - true - - = - true - product[small_image] - true - - - true - ${special_price_new} - = - true - product[special_price] - true - - - true - 1 - = - true - product[status] - true - - - true - 0 - = - true - product[stock_data][backorders] - true - - - true - 1 - = - true - product[stock_data][deferred_stock_update] - true - - - true - 0 - = - true - product[stock_data][enable_qty_increments] - true - - - true - 0 - = - true - product[stock_data][is_decimal_divided] - true - - - true - 0 - = - true - product[stock_data][is_qty_decimal] - true - - - true - 1 - = - true - product[stock_data][manage_stock] - true - - - true - 10000 - = - true - product[stock_data][max_sale_qty] - true - - - true - 0 - = - true - product[stock_data][min_qty] - true - - - true - 1 - = - true - product[stock_data][min_sale_qty] - true - - - true - 1 - = - true - product[stock_data][notify_stock_qty] - true - - - true - 1 - = - true - product[stock_data][qty_increments] - true - - - true - 1 - = - true - product[stock_data][use_config_backorders] - true - - - true - 1 - = - true - product[stock_data][use_config_deferred_stock_update] - true - - - true - 1 - = - true - product[stock_data][use_config_enable_qty_increments] - true - - - true - 1 - = - true - product[stock_data][use_config_manage_stock] - true - - - true - 1 - = - true - product[stock_data][use_config_max_sale_qty] - true - - - true - 1 - = - true - product[stock_data][use_config_min_qty] - true - - - true - 1 - = - true - product[stock_data][use_config_min_sale_qty] - true - - - true - 1 - = - true - product[stock_data][use_config_notify_stock_qty] - true - - - true - 1 - = - true - product[stock_data][use_config_qty_increments] - true - - - true - 2 - = - true - product[tax_class_id] - true - - - true - - = - true - product[thumbnail] - true - - - true - - = - true - product[url_key] - true - - - true - 1 - = - true - product[use_config_gift_message_available] - true - - - true - 1 - = - true - product[use_config_gift_wrapping_available] - true - - - true - 1 - = - true - product[use_config_is_returnable] - true - - - true - 4 - = - true - product[visibility] - true - - - true - 1 - = - true - product[website_ids][1] - true - - - true - ${related_product_id} - = - true - links[related][0][id] - - - true - 1 - = - true - links[related][0][position] - - - true - ${related_product_id} - = - true - links[upsell][0][id] - - - true - 1 - = - true - links[upsell][0][position] - - - true - ${related_product_id} - = - true - links[crosssell][0][id] - - - true - 1 - = - true - links[crosssell][0][position] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/validate/set/4/ - POST - true - false - true - false - false - - - - - - {"error":false} - - Assertion.response_data - false - 2 - - - - - - - - true - true - = - true - ajax - false - - - true - true - = - true - isAjax - false - - - true - 1 - = - true - affect_configurable_product_attributes - false - - - true - color - = - true - attribute_codes[0] - false - - - true - ${color_id} - = - true - attributes[0] - false - - - true - Color:green ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - configurable-matrix[0][attributes] - false - - - true - 1 - = - true - configurable-matrix[0][canEdit] - false - - - false - {"color":"${first_option}"} - = - true - configurable-matrix[0][configurable_attribute] - false - - - true - green ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - configurable-matrix[0][name] - false - - - true - 1 - = - true - configurable-matrix[0][newProduct] - false - - - true - 100 - = - true - configurable-matrix[0][price] - false - - - true - $ - = - true - configurable-matrix[0][price_currency] - false - - - true - $100 - = - true - configurable-matrix[0][price_string] - false - - - true - 150 - = - true - configurable-matrix[0][qty] - false - - - true - 0 - = - true - configurable-matrix[0][record_id] - false - - - true - green-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - configurable-matrix[0][sku] - false - - - true - - = - true - configurable-matrix[0][small_image] - false - - - true - 1 - = - true - configurable-matrix[0][status] - false - - - true - - = - true - configurable-matrix[0][swatch_image] - false - - - true - - = - true - configurable-matrix[0][thumbnail] - false - - - true - ${first_option} - = - true - configurable-matrix[0][variationKey] - false - - - true - 6 - = - true - configurable-matrix[0][weight] - false - - - true - Color:red ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - configurable-matrix[1][attributes] - false - - - true - 1 - = - true - configurable-matrix[1][canEdit] - false - - - false - {"color":"${second_option}"} - = - true - configurable-matrix[1][configurable_attribute] - false - - - true - red ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - configurable-matrix[1][name] - false - - - true - 1 - = - true - configurable-matrix[1][newProduct] - false - - - true - 100 - = - true - configurable-matrix[1][price] - false - - - true - $ - = - true - configurable-matrix[1][price_currency] - false - - - true - $100 - = - true - configurable-matrix[1][price_string] - false - - - true - 50 - = - true - configurable-matrix[1][qty] - false - - - true - 1 - = - true - configurable-matrix[1][record_id] - false - - - true - red ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - configurable-matrix[1][sku] - false - - - true - - = - true - configurable-matrix[1][small_image] - false - - - true - 1 - = - true - configurable-matrix[1][status] - false - - - true - - = - true - configurable-matrix[1][swatch_image] - false - - - true - - = - true - configurable-matrix[1][thumbnail] - false - - - true - ${second_option} - = - true - configurable-matrix[1][variationKey] - false - - - true - 6 - = - true - configurable-matrix[1][weight] - false - - - true - ${admin_form_key} - = - true - form_key - false - - - true - 4 - = - true - new-variations-attribute-set-id - false - - - true - 1 - = - true - product[affect_product_custom_options] - false - - - true - 4 - = - true - product[attribute_set_id] - false - - - true - 4 - = - true - product[category_ids][0] - false - - - true - ${color_id} - = - true - product[configurable_attributes_data][${color_id}][attribute_id] - false - - - true - color - = - true - product[configurable_attributes_data][${color_id}][code] - false - - - true - Color - = - true - product[configurable_attributes_data][${color_id}][label] - false - - - true - 0 - = - true - product[configurable_attributes_data][${color_id}][position] - false - - - true - 1 - = - true - product[configurable_attributes_data][${color_id}][values][${first_option}][include] - false - - - true - ${first_option} - = - true - product[configurable_attributes_data][${color_id}][values][${first_option}][value_index] - false - - - true - 1 - = - true - product[configurable_attributes_data][${color_id}][values][${second_option}][include] - false - - - true - ${second_option} - = - true - product[configurable_attributes_data][${color_id}][values][${second_option}][value_index] - false - - - true - - = - true - product[custom_layout_update] - false - - - true - - = - true - product[description] - false - - - true - 0 - = - true - product[gift_message_available] - false - - - true - 1 - = - true - product[gift_wrapping_available] - false - - - true - - = - true - product[gift_wrapping_price] - false - - - true - - = - true - product[image] - false - - - true - 2 - = - true - product[is_returnable] - false - - - true - Configurable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description - = - true - product[meta_description] - false - - - true - Configurable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword - = - true - product[meta_keyword] - false - - - true - Configurable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title - = - true - product[meta_title] - false - - - true - Configurable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[name] - false - - - true - container2 - = - true - product[options_container] - false - - - true - ${price_new} - = - true - product[price] - false - - - true - 1 - = - true - product[product_has_weight] - false - - - true - 1 - = - true - product[quantity_and_stock_status][is_in_stock] - false - - - true - 1000 - = - true - product[quantity_and_stock_status][qty] - false - - - true - - = - true - product[short_description] - false - - - true - SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[sku] - false - - - true - - = - true - product[small_image] - false - - - true - ${special_price_new} - = - true - product[special_price] - false - - - true - 1 - = - true - product[status] - false - - - true - 0 - = - true - product[stock_data][backorders] - false - - - true - 1 - = - true - product[stock_data][deferred_stock_update] - false - - - true - 0 - = - true - product[stock_data][enable_qty_increments] - false - - - true - 0 - = - true - product[stock_data][is_decimal_divided] - false - - - true - 0 - = - true - product[stock_data][is_qty_decimal] - false - - - true - 1 - = - true - product[stock_data][manage_stock] - false - - - true - 10000 - = - true - product[stock_data][max_sale_qty] - false - - - true - 0 - = - true - product[stock_data][min_qty] - false - - - true - 1 - = - true - product[stock_data][min_sale_qty] - false - - - true - 1 - = - true - product[stock_data][notify_stock_qty] - false - - - true - 1 - = - true - product[stock_data][qty_increments] - false - - - true - 1 - = - true - product[stock_data][use_config_backorders] - false - - - true - 1 - = - true - product[stock_data][use_config_deferred_stock_update] - false - - - true - 1 - = - true - product[stock_data][use_config_enable_qty_increments] - false - - - true - 1 - = - true - product[stock_data][use_config_manage_stock] - false - - - true - 1 - = - true - product[stock_data][use_config_max_sale_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_min_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_min_sale_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_notify_stock_qty] - false - - - true - 1 - = - true - product[stock_data][use_config_qty_increments] - false - - - true - 2 - = - true - product[tax_class_id] - false - - - true - - = - true - product[thumbnail] - false - - - true - - = - true - product[url_key] - false - - - true - 1 - = - true - product[use_config_gift_message_available] - false - - - true - 1 - = - true - product[use_config_gift_wrapping_available] - false - - - true - 1 - = - true - product[use_config_is_returnable] - false - - - true - 4 - = - true - product[visibility] - false - - - true - 1 - = - true - product[website_ids][1] - false - - - true - ${related_product_id} - = - true - links[related][0][id] - - - true - 1 - = - true - links[related][0][position] - - - true - ${related_product_id} - = - true - links[upsell][0][id] - - - true - 1 - = - true - links[upsell][0][position] - - - true - ${related_product_id} - = - true - links[crosssell][0][id] - - - true - 1 - = - true - links[crosssell][0][position] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/save/set/4/type/configurable/back/edit/active_tab/product-details/ - POST - true - false - true - false - false - - - - - - You saved the product - - Assertion.response_data - false - 2 - - - - - violation - - Assertion.response_data - false - 6 - - - - - - - mpaf/tool/fragments/ce/admin_create_product/create_downloadable_product.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/ - GET - true - false - true - false - false - - - - - - records found - - Assertion.response_data - false - 2 - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/new/set/4/type/downloadable/ - GET - true - false - true - false - false - - - - - - New Product - - Assertion.response_data - false - 2 - - - - - - - - ${files_folder}downloadable_original.txt - links - text/plain - - - - - - - true - ${admin_form_key} - = - true - form_key - false - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/downloadable_file/upload/type/links/?isAjax=true - POST - false - false - true - true - false - - - - - original_file - $.file - - - BODY - - - - - - - - ${files_folder}downloadable_sample.txt - samples - text/plain - - - - - - - true - ${admin_form_key} - = - true - form_key - false - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/downloadable_file/upload/type/samples/?isAjax=true - POST - false - false - true - true - false - - - - - sample_file - $.file - - - BODY - - - - - - - - true - true - = - true - ajax - false - - - true - true - = - true - isAjax - false - - - true - ${admin_form_key} - = - true - form_key - false - - - true - Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[name] - false - - - true - SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[sku] - false - - - true - 123 - = - true - product[price] - - - true - 2 - = - true - product[tax_class_id] - - - true - 111 - = - true - product[quantity_and_stock_status][qty] - - - true - 1 - = - true - product[quantity_and_stock_status][is_in_stock] - - - true - 1.0000 - = - true - product[weight] - - - true - 2 - = - true - product[category_ids][] - - - true - <p>Full downloadable product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> - = - true - product[description] - - - true - <p>Short downloadable product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> - = - true - product[short_description] - - - true - 1 - = - true - product[status] - - - true - - = - true - product[image] - - - true - - = - true - product[small_image] - - - true - - = - true - product[thumbnail] - - - true - downloadable-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[url_key] - - - true - Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title - = - true - product[meta_title] - - - true - Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword - = - true - product[meta_keyword] - - - true - Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description - = - true - product[meta_description] - - - true - 1 - = - true - product[website_ids][] - - - true - 99 - = - true - product[special_price] - - - true - 1 - = - true - product[stock_data][notify_stock_qty] - - - true - - = - true - product[special_from_date] - - - true - - = - true - product[special_to_date] - - - true - - = - true - product[cost] - - - true - 0 - = - true - product[tier_price][0][website_id] - - - true - 32000 - = - true - product[tier_price][0][cust_group] - - - true - 100 - = - true - product[tier_price][0][price_qty] - - - true - 90 - = - true - product[tier_price][0][price] - - - true - - = - true - product[tier_price][0][delete] - - - true - 0 - = - true - product[tier_price][1][website_id] - - - true - 1 - = - true - product[tier_price][1][cust_group] - - - true - 101 - = - true - product[tier_price][1][price_qty] - - - true - 99 - = - true - product[tier_price][1][price] - - - true - - = - true - product[tier_price][1][delete] - - - true - 1 - = - true - product[stock_data][use_config_manage_stock] - - - true - 100500 - = - true - product[stock_data][original_inventory_qty] - - - true - 100500 - = - true - product[stock_data][qty] - - - true - 0 - = - true - product[stock_data][min_qty] - - - true - 1 - = - true - product[stock_data][use_config_min_qty] - - - true - 1 - = - true - product[stock_data][min_sale_qty] - - - true - 1 - = - true - product[stock_data][use_config_min_sale_qty] - - - true - 10000 - = - true - product[stock_data][max_sale_qty] - - - true - 1 - = - true - product[stock_data][use_config_max_sale_qty] - - - true - 0 - = - true - product[stock_data][is_qty_decimal] - - - true - 0 - = - true - product[stock_data][is_decimal_divided] - - - true - 0 - = - true - product[stock_data][backorders] - - - true - 1 - = - true - product[stock_data][use_config_backorders] - - - true - 1 - = - true - product[stock_data][use_config_notify_stock_qty] - - - true - 0 - = - true - product[stock_data][enable_qty_increments] - - - true - 0 - = - true - product[stock_data][qty_increments] - - - true - 1 - = - true - product[stock_data][use_config_qty_increments] - - - true - 1 - = - true - product[stock_data][is_in_stock] - - - true - - = - true - product[custom_design] - - - true - - = - true - product[custom_design_from] - - - true - - = - true - product[custom_design_to] - - - true - - = - true - product[custom_layout_update] - - - true - - = - true - product[page_layout] - - - true - container2 - = - true - product[options_container] - - - true - on - = - true - is_downloadable - - - true - Links - = - true - product[links_title] - - - true - 0 - = - true - product[links_purchased_separately] - - - true - ${original_file} - = - true - downloadable[link][0][file][0][file] - false - - - true - downloadable_original.txt - = - true - downloadable[link][0][file][0][name] - false - - - true - 13 - = - true - downloadable[link][0][file][0][size] - false - - - true - new - = - true - downloadable[link][0][file][0][status] - false - - - true - 1 - = - true - downloadable[link][0][is_shareable] - - - true - 0 - = - true - downloadable[link][0][is_unlimited] - - - true - - = - true - downloadable[link][0][link_url] - - - true - 0 - = - true - downloadable[link][0][number_of_downloads] - true - - - true - 120 - = - true - downloadable[link][0][price] - true - - - true - 0 - = - true - downloadable[link][0][record_id] - true - - - true - file - = - true - downloadable[link][0][sample][type] - - - true - - = - true - downloadable[link][0][sample][url] - - - true - 1 - = - true - downloadable[link][0][sort_order] - - - true - Original Link - = - true - downloadable[link][0][title] - - - true - file - = - true - downloadable[link][0][type] - - - true - ${sample_file} - = - true - downloadable[sample][0][file][0][file] - true - - - true - downloadable_sample.txt - = - true - downloadable[sample][0][file][0][name] - true - - - true - 14 - = - true - downloadable[sample][0][file][0][size] - true - - - true - new - = - true - downloadable[sample][0][file][0][status] - true - - - true - 0 - = - true - downloadable[sample][0][record_id] - true - - - true - - = - true - downloadable[sample][0][sample_url] - true - - - true - 1 - = - true - downloadable[sample][0][sort_order] - true - - - true - Sample Link - = - true - downloadable[sample][0][title] - true - - - true - file - = - true - downloadable[sample][0][type] - true - - - true - 1 - = - true - affect_configurable_product_attributes - false - - - true - 4 - = - true - new-variations-attribute-set-id - false - - - true - - = - true - product[configurable_variation] - false - - - true - ${related_product_id} - = - true - links[related][0][id] - - - true - 1 - = - true - links[related][0][position] - - - true - ${related_product_id} - = - true - links[upsell][0][id] - - - true - 1 - = - true - links[upsell][0][position] - - - true - ${related_product_id} - = - true - links[crosssell][0][id] - - - true - 1 - = - true - links[crosssell][0][position] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/validate/set/4/type/downloadable/ - POST - true - false - true - false - false - - - - - - {"error":false} - - Assertion.response_data - false - 2 - - - - - - - - true - true - = - true - ajax - false - - - true - true - = - true - isAjax - false - - - true - ${admin_form_key} - = - true - form_key - false - - - true - Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[name] - false - - - true - SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[sku] - false - - - true - 123 - = - true - product[price] - - - true - 2 - = - true - product[tax_class_id] - - - true - 111 - = - true - product[quantity_and_stock_status][qty] - - - true - 1 - = - true - product[quantity_and_stock_status][is_in_stock] - - - true - 1.0000 - = - true - product[weight] - - - true - 2 - = - true - product[category_ids][] - - - true - <p>Full downloadable product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> - = - true - product[description] - - - true - <p>Short downloadable product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> - = - true - product[short_description] - false - - - true - 1 - = - true - product[status] - - - true - - = - true - product[image] - - - true - - = - true - product[small_image] - - - true - - = - true - product[thumbnail] - - - true - downloadable-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[url_key] - - - true - Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title - = - true - product[meta_title] - - - true - Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword - = - true - product[meta_keyword] - - - true - Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description - = - true - product[meta_description] - - - true - 1 - = - true - product[website_ids][] - - - true - 99 - = - true - product[special_price] - - - true - - = - true - product[special_from_date] - - - true - - = - true - product[special_to_date] - - - true - - = - true - product[cost] - - - true - 0 - = - true - product[tier_price][0][website_id] - - - true - 32000 - = - true - product[tier_price][0][cust_group] - - - true - 100 - = - true - product[tier_price][0][price_qty] - - - true - 90 - = - true - product[tier_price][0][price] - - - true - - = - true - product[tier_price][0][delete] - - - true - 0 - = - true - product[tier_price][1][website_id] - - - true - 1 - = - true - product[tier_price][1][cust_group] - - - true - 101 - = - true - product[tier_price][1][price_qty] - - - true - 99 - = - true - product[tier_price][1][price] - - - true - - = - true - product[tier_price][1][delete] - - - true - 1 - = - true - product[stock_data][use_config_manage_stock] - - - true - 100500 - = - true - product[stock_data][original_inventory_qty] - - - true - 100500 - = - true - product[stock_data][qty] - - - true - 0 - = - true - product[stock_data][min_qty] - - - true - 1 - = - true - product[stock_data][use_config_min_qty] - - - true - 1 - = - true - product[stock_data][min_sale_qty] - - - true - 1 - = - true - product[stock_data][use_config_min_sale_qty] - - - true - 10000 - = - true - product[stock_data][max_sale_qty] - - - true - 1 - = - true - product[stock_data][use_config_max_sale_qty] - - - true - 0 - = - true - product[stock_data][is_qty_decimal] - - - true - 0 - = - true - product[stock_data][is_decimal_divided] - - - true - 0 - = - true - product[stock_data][backorders] - - - true - 1 - = - true - product[stock_data][use_config_backorders] - - - true - 1 - = - true - product[stock_data][notify_stock_qty] - - - true - 1 - = - true - product[stock_data][use_config_notify_stock_qty] - - - true - 0 - = - true - product[stock_data][enable_qty_increments] - - - true - 0 - = - true - product[stock_data][qty_increments] - - - true - 1 - = - true - product[stock_data][use_config_qty_increments] - - - true - 1 - = - true - product[stock_data][is_in_stock] - - - true - - = - true - product[custom_design] - - - true - - = - true - product[custom_design_from] - - - true - - = - true - product[custom_design_to] - - - true - - = - true - product[custom_layout_update] - - - true - - = - true - product[page_layout] - - - true - container2 - = - true - product[options_container] - - - true - ${original_file} - = - true - downloadable[link][0][file][0][file] - false - - - true - downloadable_original.txt - = - true - downloadable[link][0][file][0][name] - false - - - true - 13 - = - true - downloadable[link][0][file][0][size] - false - - - true - new - = - true - downloadable[link][0][file][0][status] - false - - - true - 1 - = - true - downloadable[link][0][is_shareable] - true - - - true - 0 - = - true - downloadable[link][0][is_unlimited] - true - - - true - - = - true - downloadable[link][0][link_url] - true - - - true - 0 - = - true - downloadable[link][0][number_of_downloads] - false - - - true - 120 - = - true - downloadable[link][0][price] - false - - - true - 0 - = - true - downloadable[link][0][record_id] - false - - - true - file - = - true - downloadable[link][0][sample][type] - true - - - true - - = - true - downloadable[link][0][sample][url] - true - - - true - 1 - = - true - downloadable[link][0][sort_order] - true - - - true - Original Link - = - true - downloadable[link][0][title] - true - - - true - file - = - true - downloadable[link][0][type] - true - - - true - ${sample_file} - = - true - downloadable[sample][0][file][0][file] - true - - - true - downloadable_sample.txt - = - true - downloadable[sample][0][file][0][name] - true - - - true - 14 - = - true - downloadable[sample][0][file][0][size] - true - - - true - new - = - true - downloadable[sample][0][file][0][status] - true - - - true - 0 - = - true - downloadable[sample][0][record_id] - true - - - true - - = - true - downloadable[sample][0][sample_url] - true - - - true - 1 - = - true - downloadable[sample][0][sort_order] - true - - - true - Sample Link - = - true - downloadable[sample][0][title] - true - - - true - file - = - true - downloadable[sample][0][type] - true - - - true - 1 - = - true - affect_configurable_product_attributes - false - - - true - 4 - = - true - new-variations-attribute-set-id - false - - - true - - = - true - product[configurable_variation] - false - - - true - ${related_product_id} - = - true - links[related][0][id] - - - true - 1 - = - true - links[related][0][position] - - - true - ${related_product_id} - = - true - links[upsell][0][id] - - - true - 1 - = - true - links[upsell][0][position] - - - true - ${related_product_id} - = - true - links[crosssell][0][id] - - - true - 1 - = - true - links[crosssell][0][position] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/save/set/4/type/downloadable/back/edit/active_tab/product-details/ - POST - true - false - true - false - false - - - - - - You saved the product - - Assertion.response_data - false - 2 - - - - - violation - - Assertion.response_data - false - 6 - - - - - - - mpaf/tool/fragments/ce/admin_create_product/create_simple_product.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/ - GET - true - false - true - false - false - - - - - - records found - - Assertion.response_data - false - 2 - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/new/set/4/type/simple/ - GET - true - false - true - false - false - - - - - - New Product - - Assertion.response_data - false - 2 - - - - - - - - true - true - = - true - ajax - false - - - true - true - = - true - isAjax - false - - - true - ${admin_form_key} - = - true - form_key - false - - - true - Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[name] - false - - - true - SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[sku] - false - - - true - 123 - = - true - product[price] - - - true - 2 - = - true - product[tax_class_id] - - - true - 111 - = - true - product[quantity_and_stock_status][qty] - - - true - 1 - = - true - product[quantity_and_stock_status][is_in_stock] - - - true - 1.0000 - = - true - product[weight] - - - true - 1 - = - true - product[product_has_weight] - true - - - true - 2 - = - true - product[category_ids][] - - - true - <p>Full simple product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> - = - true - product[description] - - - true - <p>Short simple product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> - = - true - product[short_description] - - - true - 1 - = - true - product[status] - - - true - - = - true - product[image] - - - true - - = - true - product[small_image] - - - true - - = - true - product[thumbnail] - - - true - simple-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[url_key] - - - true - Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title - = - true - product[meta_title] - - - true - Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword - = - true - product[meta_keyword] - - - true - Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description - = - true - product[meta_description] - - - true - 1 - = - true - product[website_ids][] - - - true - 99 - = - true - product[special_price] - - - true - 1 - = - true - product[stock_data][notify_stock_qty] - - - true - - = - true - product[special_from_date] - - - true - - = - true - product[special_to_date] - - - true - - = - true - product[cost] - - - true - 0 - = - true - product[tier_price][0][website_id] - - - true - 32000 - = - true - product[tier_price][0][cust_group] - - - true - 100 - = - true - product[tier_price][0][price_qty] - - - true - 90 - = - true - product[tier_price][0][price] - - - true - - = - true - product[tier_price][0][delete] - - - true - 0 - = - true - product[tier_price][1][website_id] - - - true - 1 - = - true - product[tier_price][1][cust_group] - - - true - 101 - = - true - product[tier_price][1][price_qty] - - - true - 99 - = - true - product[tier_price][1][price] - - - true - - = - true - product[tier_price][1][delete] - - - true - 1 - = - true - product[stock_data][use_config_manage_stock] - - - true - 100500 - = - true - product[stock_data][original_inventory_qty] - - - true - 100500 - = - true - product[stock_data][qty] - - - true - 0 - = - true - product[stock_data][min_qty] - - - true - 1 - = - true - product[stock_data][use_config_min_qty] - - - true - 1 - = - true - product[stock_data][min_sale_qty] - - - true - 1 - = - true - product[stock_data][use_config_min_sale_qty] - - - true - 10000 - = - true - product[stock_data][max_sale_qty] - - - true - 1 - = - true - product[stock_data][use_config_max_sale_qty] - - - true - 0 - = - true - product[stock_data][is_qty_decimal] - - - true - 0 - = - true - product[stock_data][is_decimal_divided] - - - true - 0 - = - true - product[stock_data][backorders] - - - true - 1 - = - true - product[stock_data][use_config_backorders] - - - true - 1 - = - true - product[stock_data][use_config_notify_stock_qty] - - - true - 0 - = - true - product[stock_data][enable_qty_increments] - - - true - 0 - = - true - product[stock_data][qty_increments] - - - true - 1 - = - true - product[stock_data][use_config_qty_increments] - - - true - 1 - = - true - product[stock_data][is_in_stock] - - - true - - = - true - product[custom_design] - - - true - - = - true - product[custom_design_from] - - - true - - = - true - product[custom_design_to] - - - true - - = - true - product[custom_layout_update] - - - true - - = - true - product[page_layout] - - - true - container2 - = - true - product[options_container] - - - true - - = - true - product[options][1][is_delete] - false - - - true - 1 - = - true - product[options][1][is_require] - false - - - true - select - = - true - product[options][1][previous_group] - false - - - true - drop_down - = - true - product[options][1][previous_type] - false - - - true - 0 - = - true - product[options][1][sort_order] - false - - - true - Product Option Title One - = - true - product[options][1][title] - false - - - true - drop_down - = - true - product[options][1][type] - false - - - true - - = - true - product[options][1][values][1][is_delete] - false - - - true - 200 - = - true - product[options][1][values][1][price] - false - - - true - fixed - = - true - product[options][1][values][1][price_type] - false - - - true - sku-one - = - true - product[options][1][values][1][sku] - false - - - true - 0 - = - true - product[options][1][values][1][sort_order] - false - - - true - Row Title - = - true - product[options][1][values][1][title] - false - - - true - - = - true - product[options][2][is_delete] - false - - - true - 1 - = - true - product[options][2][is_require] - false - - - true - 250 - = - true - product[options][2][max_characters] - false - - - true - text - = - true - product[options][2][previous_group] - false - - - true - field - = - true - product[options][2][previous_type] - false - - - true - 500 - = - true - product[options][2][price] - false - - - true - fixed - = - true - product[options][2][price_type] - false - - - true - sku-two - = - true - product[options][2][sku] - false - - - true - 1 - = - true - product[options][2][sort_order] - false - - - true - Field Title - = - true - product[options][2][title] - false - - - true - field - = - true - product[options][2][type] - false - - - true - 1 - = - true - affect_configurable_product_attributes - true - - - true - 4 - = - true - new-variations-attribute-set-id - true - - - true - - = - true - product[configurable_variation] - true - - - true - ${related_product_id} - = - true - links[related][0][id] - - - true - 1 - = - true - links[related][0][position] - - - true - ${related_product_id} - = - true - links[upsell][0][id] - - - true - 1 - = - true - links[upsell][0][position] - - - true - ${related_product_id} - = - true - links[crosssell][0][id] - - - true - 1 - = - true - links[crosssell][0][position] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/validate/set/4/ - POST - true - false - true - false - false - - - - - - {"error":false} - - Assertion.response_data - false - 2 - - - - - - - - true - true - = - true - ajax - false - - - true - true - = - true - isAjax - false - - - true - ${admin_form_key} - = - true - form_key - false - - - true - Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[name] - false - - - true - SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[sku] - false - - - true - 123 - = - true - product[price] - - - true - 2 - = - true - product[tax_class_id] - - - true - 111 - = - true - product[quantity_and_stock_status][qty] - - - true - 1 - = - true - product[quantity_and_stock_status][is_in_stock] - - - true - 1.0000 - = - true - product[weight] - - - true - 1 - = - true - product[product_has_weight] - true - - - true - 2 - = - true - product[category_ids][] - - - true - <p>Full simple product Description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> - = - true - product[description] - - - true - <p>Short simple product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> - = - true - product[short_description] - - - true - 1 - = - true - product[status] - - - true - - = - true - product[image] - - - true - - = - true - product[small_image] - - - true - - = - true - product[thumbnail] - - - true - simple-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - product[url_key] - - - true - Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title - = - true - product[meta_title] - - - true - Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword - = - true - product[meta_keyword] - - - true - Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description - = - true - product[meta_description] - - - true - 1 - = - true - product[website_ids][] - - - true - 99 - = - true - product[special_price] - - - true - - = - true - product[special_from_date] - - - true - - = - true - product[special_to_date] - - - true - - = - true - product[cost] - - - true - 0 - = - true - product[tier_price][0][website_id] - - - true - 32000 - = - true - product[tier_price][0][cust_group] - - - true - 100 - = - true - product[tier_price][0][price_qty] - - - true - 90 - = - true - product[tier_price][0][price] - - - true - - = - true - product[tier_price][0][delete] - - - true - 0 - = - true - product[tier_price][1][website_id] - - - true - 1 - = - true - product[tier_price][1][cust_group] - - - true - 101 - = - true - product[tier_price][1][price_qty] - - - true - 99 - = - true - product[tier_price][1][price] - - - true - - = - true - product[tier_price][1][delete] - - - true - 1 - = - true - product[stock_data][use_config_manage_stock] - - - true - 100500 - = - true - product[stock_data][original_inventory_qty] - - - true - 100500 - = - true - product[stock_data][qty] - - - true - 0 - = - true - product[stock_data][min_qty] - - - true - 1 - = - true - product[stock_data][use_config_min_qty] - - - true - 1 - = - true - product[stock_data][min_sale_qty] - - - true - 1 - = - true - product[stock_data][use_config_min_sale_qty] - - - true - 10000 - = - true - product[stock_data][max_sale_qty] - - - true - 1 - = - true - product[stock_data][use_config_max_sale_qty] - - - true - 0 - = - true - product[stock_data][is_qty_decimal] - - - true - 0 - = - true - product[stock_data][is_decimal_divided] - - - true - 0 - = - true - product[stock_data][backorders] - - - true - 1 - = - true - product[stock_data][use_config_backorders] - - - true - 1 - = - true - product[stock_data][notify_stock_qty] - - - true - 1 - = - true - product[stock_data][use_config_notify_stock_qty] - - - true - 0 - = - true - product[stock_data][enable_qty_increments] - - - true - 0 - = - true - product[stock_data][qty_increments] - - - true - 1 - = - true - product[stock_data][use_config_qty_increments] - - - true - 1 - = - true - product[stock_data][is_in_stock] - - - true - - = - true - product[custom_design] - - - true - - = - true - product[custom_design_from] - - - true - - = - true - product[custom_design_to] - - - true - - = - true - product[custom_layout_update] - - - true - - = - true - product[page_layout] - - - true - container2 - = - true - product[options_container] - - - true - - = - true - product[options][1][is_delete] - true - - - true - 1 - = - true - product[options][1][is_require] - - - true - select - = - true - product[options][1][previous_group] - false - - - true - drop_down - = - true - product[options][1][previous_type] - false - - - true - 0 - = - true - product[options][1][sort_order] - false - - - true - Product Option Title One - = - true - product[options][1][title] - - - true - drop_down - = - true - product[options][1][type] - - - true - - = - true - product[options][1][values][1][is_delete] - false - - - true - 200 - = - true - product[options][1][values][1][price] - - - true - fixed - = - true - product[options][1][values][1][price_type] - - - true - sku-one - = - true - product[options][1][values][1][sku] - - - true - 0 - = - true - product[options][1][values][1][sort_order] - - - true - Row Title - = - true - product[options][1][values][1][title] - - - true - - = - true - product[options][2][is_delete] - false - - - true - 1 - = - true - product[options][2][is_require] - - - true - 250 - = - true - product[options][2][max_characters] - - - true - text - = - true - product[options][2][previous_group] - - - true - field - = - true - product[options][2][previous_type] - - - true - 500 - = - true - product[options][2][price] - - - true - fixed - = - true - product[options][2][price_type] - - - true - sku-two - = - true - product[options][2][sku] - - - true - 1 - = - true - product[options][2][sort_order] - - - true - Field Title - = - true - product[options][2][title] - - - true - field - = - true - product[options][2][type] - - - true - 1 - = - true - affect_configurable_product_attributes - true - - - true - 4 - = - true - new-variations-attribute-set-id - true - - - true - - = - true - product[configurable_variation] - true - - - true - ${related_product_id} - = - true - links[related][0][id] - - - true - 1 - = - true - links[related][0][position] - - - true - ${related_product_id} - = - true - links[upsell][0][id] - - - true - 1 - = - true - links[upsell][0][position] - - - true - ${related_product_id} - = - true - links[crosssell][0][id] - - - true - 1 - = - true - links[crosssell][0][position] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product/save/set/4/type/simple/back/edit/active_tab/product-details/ - POST - true - false - true - false - false - - - - - - You saved the product - - Assertion.response_data - false - 2 - - - - - violation - - Assertion.response_data - false - 6 - - - - - - - - - - 1 - false - 1 - ${adminCategoryManagementPercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx - - - - vars.put("testLabel", "Admin Category Management"); - - true - - - - - - false - mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - - - mpaf/tool/fragments/ce/once_only_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_login/admin_login.jmx - - - - Welcome - <title>Magento Admin</title> - - Assertion.response_data - false - 2 - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_form_key - - - - - - - - - true - - = - true - dummy - - - true - ${admin_form_key} - = - true - form_key - - - true - ${admin_password} - = - true - login[password] - - - true - ${admin_user} - = - true - login[username] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/dashboard/ - POST - true - false - true - false - Java - false - - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx - - - - - mpaf/tool/fragments/ce/setup/setup_admin_category_management.jmx - - - - props.remove("admin_category_ids_list"); - - - false - - - - - - - - Content-Type - application/json - - - Accept - */* - - - - - - true - - - - false - {"username":"${admin_user}","password":"${admin_password}"} - = - - - - - - - - ${request_protocol} - - ${base_path}rest/V1/integration/admin/token - POST - true - false - true - false - false - - - - - admin_token - $ - - - BODY - - - - - ^[a-z0-9-]+$ - - Assertion.response_data - false - 1 - variable - admin_token - - - - - - - Authorization - Bearer ${admin_token} - - - - - - - - - true - children_count - = - true - searchCriteria[filterGroups][0][filters][0][field] - - - true - 0 - = - true - searchCriteria[filterGroups][0][filters][0][value] - - - true - level - = - true - searchCriteria[filterGroups][1][filters][0][field] - - - true - 2 - = - true - searchCriteria[filterGroups][1][filters][0][value] - - - true - gt - = - true - searchCriteria[filterGroups][1][filters][0][conditionType] - - - true - ${adminCategoryCount} - = - true - searchCriteria[pageSize] - - - - - - - - ${request_protocol} - - ${base_path}rest/default/V1/categories/list - GET - true - false - true - false - false - - - - - false - category_list_id - \{\"id\":(\d+), - $1$ - - -1 - - - - - category_list_id - category_id - true - - - - import java.util.ArrayList; - -adminCategoryIdsList = props.get("admin_category_ids_list"); -// If it is first iteration of cycle then recreate categories ids list -if (adminCategoryIdsList == null) { - adminCategoryIdsList = new ArrayList(); - props.put("admin_category_ids_list", adminCategoryIdsList); -} -adminCategoryIdsList.add(vars.get("category_id")); - - - false - - - - - - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - - - mpaf/tool/fragments/ce/admin_category_management/admin_category_management.jmx - import org.apache.jmeter.samplers.SampleResult; -import java.util.ArrayList; -import java.util.Random; -Random random = new Random(); -if (${seedForRandom} > 0) { -random.setSeed(${seedForRandom}); -} -number = random.nextInt(props.get("simple_products_list").size()); -simpleList = props.get("simple_products_list").get(number); -vars.put("simple_product_1_url_key", simpleList.get("url_key")); -vars.put("simple_product_1_name", simpleList.get("title")); -vars.put("simple_product_1_id", simpleList.get("id")); - -do { -number1 = random.nextInt(props.get("simple_products_list").size()); -} while(number == number1); -simpleList = props.get("simple_products_list").get(number1); -vars.put("simple_product_2_url_key", simpleList.get("url_key")); -vars.put("simple_product_2_name", simpleList.get("title")); -vars.put("simple_product_2_id", simpleList.get("id")); - -do { -number2 = random.nextInt(props.get("simple_products_list").size()); -} while(number2 == number1 || number2 == number); -simpleList = props.get("simple_products_list").get(number2); -vars.put("simple_product_3_url_key", simpleList.get("url_key")); -vars.put("simple_product_3_name", simpleList.get("title")); -vars.put("simple_product_3_id", simpleList.get("id")); - -do { -number3 = random.nextInt(props.get("simple_products_list").size()); -} while(number3 == number2 || number3 == number1 || number3 == number); -simpleList = props.get("simple_products_list").get(number3); -vars.put("simple_product_4_url_key", simpleList.get("url_key")); -vars.put("simple_product_4_name", simpleList.get("title")); -vars.put("simple_product_4_id", simpleList.get("id")); - -do { -number4 = random.nextInt(props.get("simple_products_list").size()); -} while(number4 == number3 || number4 == number2 || number4 == number1 || number4 == number); -simpleList = props.get("simple_products_list").get(number4); -vars.put("simple_product_5_url_key", simpleList.get("url_key")); -vars.put("simple_product_5_name", simpleList.get("title")); -vars.put("simple_product_5_id", simpleList.get("id")); - -categoryIndex = random.nextInt(props.get("admin_category_ids_list").size()); -vars.put("parent_category_id", props.get("admin_category_ids_list").get(categoryIndex)); -do { -categoryIndexNew = random.nextInt(props.get("admin_category_ids_list").size()); -} while(categoryIndex == categoryIndexNew); -vars.put("new_parent_category_id", props.get("admin_category_ids_list").get(categoryIndexNew)); - - - true - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/category/ - GET - true - false - true - false - false - - - - - - - Accept-Language - en-US,en;q=0.5 - - - Accept - text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 - - - User-Agent - Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 - - - Accept-Encoding - gzip, deflate - - - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/category/edit/id/${parent_category_id}/ - GET - true - false - true - false - false - - - - - - - Accept-Language - en-US,en;q=0.5 - - - Accept - text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 - - - User-Agent - Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 - - - Accept-Encoding - gzip, deflate - - - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/category/add/store/0/parent/${parent_category_id} - GET - true - false - true - false - false - - - - - - <title>New Category - - Assertion.response_data - false - 2 - - - - - - - - true - - = - true - id - - - true - ${parent_category_id} - = - true - parent - - - true - - = - true - path - - - true - - = - true - store_id - - - true - 0 - = - true - is_active - - - true - 0 - = - true - include_in_menu - - - true - 1 - = - true - is_anchor - - - true - true - = - true - use_config[available_sort_by] - - - true - true - = - true - use_config[default_sort_by] - - - true - true - = - true - use_config[filter_price_range] - - - true - false - = - true - use_default[url_key] - - - true - 0 - = - true - url_key_create_redirect - - - true - 0 - = - true - custom_use_parent_settings - - - true - 0 - = - true - custom_apply_to_products - - - true - Admin Category Management ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - name - - - true - admin-category-management-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - url_key - - - true - - = - true - meta_title - - - true - - = - true - description - - - true - PRODUCTS - = - true - display_mode - - - true - position - = - true - default_sort_by - - - true - - = - true - meta_keywords - - - true - - = - true - meta_description - - - true - - = - true - custom_layout_update - - - false - {"${simple_product_1_id}":"","${simple_product_2_id}":"","${simple_product_3_id}":"","${simple_product_4_id}":"","${simple_product_5_id}":""} - = - true - category_products - - - true - ${admin_form_key} - = - true - form_key - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/category/save/ - POST - true - false - true - false - false - - - - - URL - admin_category_id - /catalog/category/edit/id/(\d+)/ - $1$ - - 1 - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_category_id - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/category/edit/id/${admin_category_id}/ - GET - true - false - true - false - false - - - - - - - Accept-Language - en-US,en;q=0.5 - - - Accept - text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 - - - User-Agent - Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 - - - Accept-Encoding - gzip, deflate - - - - - - false - admin_category_entity_id - "entity_id":"([^"]+)" - $1$ - - 1 - - - - false - admin_category_attribute_set_id - "attribute_set_id":"([^"]+)" - $1$ - - 1 - - - - false - admin_category_parent_id - "parent_id":"([^"]+)" - $1$ - - 1 - - - - false - admin_category_created_at - "created_at":"([^"]+)" - $1$ - - 1 - - - - false - admin_category_updated_at - "updated_at":"([^"]+)" - $1$ - - 1 - - - - false - admin_category_path - "entity_id":(.+)"path":"([^\"]+)" - $2$ - - 1 - - - - false - admin_category_level - "level":"([^"]+)" - $1$ - - 1 - - - - false - admin_category_name - "entity_id":(.+)"name":"([^"]+)" - $2$ - - 1 - - - - false - admin_category_url_key - "url_key":"([^"]+)" - $1$ - - 1 - - - - false - admin_category_url_path - "url_path":"([^"]+)" - $1$ - - 1 - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_category_entity_id - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_category_attribute_set_id - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_category_parent_id - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_category_created_at - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_category_updated_at - - - - - ^[\d\\\/]+$ - - Assertion.response_data - false - 1 - variable - admin_category_path - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_category_level - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_category_name - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_category_url_key - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_category_url_path - - - - - ${simple_product_1_name} - ${simple_product_2_name} - ${simple_product_3_name} - ${simple_product_4_name} - ${simple_product_5_name} - - Assertion.response_data - false - 2 - - - - - - - - true - ${admin_category_id} - = - true - id - - - true - ${admin_form_key} - = - true - form_key - - - true - append - = - true - point - - - true - ${new_parent_category_id} - = - true - pid - - - true - ${parent_category_id} - = - true - paid - - - true - 0 - = - true - aid - - - true - true - = - true - isAjax - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/category/move/ - POST - true - false - true - false - false - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/category/delete/id/${admin_category_id}/ - GET - true - false - true - false - false - - - - - - You deleted the category. - - Assertion.response_data - false - 2 - - - - - 1 - 0 - ${__javaScript(Math.round(${adminCategoryManagementDelay}*1000))} - - - - - - - - - 1 - false - 1 - ${adminPromotionRulesPercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx - - - - vars.put("testLabel", "Admin Promotion Rules"); - - true - - - - - - function getFormKeyFromResponse() - { - var url = prev.getUrlAsString(), - responseCode = prev.getResponseCode(), - formKey = null; - searchPattern = /var FORM_KEY = '(.+)'/; - if (responseCode == "200" && url) { - response = prev.getResponseDataAsString(); - formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; - } - return formKey; - } - - formKey = vars.get("form_key_storage"); - - currentFormKey = getFormKeyFromResponse(); - - if (currentFormKey != null && currentFormKey != formKey) { - vars.put("form_key_storage", currentFormKey); - } - - javascript - mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx - - - - formKey = vars.get("form_key_storage"); - if (formKey - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' - && sampler.getMethod() == "POST") - { - arguments = sampler.getArguments(); - for (i=0; i<arguments.getArgumentCount(); i++) - { - argument = arguments.getArgument(i); - if (argument.getName() == 'form_key' && argument.getValue() != formKey) { - log.info("admin form key updated: " + argument.getValue() + " => " + formKey); - argument.setValue(formKey); - } - } - } - - javascript - - - - - - false - mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - - - mpaf/tool/fragments/ce/once_only_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_login/admin_login.jmx - - - - Welcome - <title>Magento Admin</title> - - Assertion.response_data - false - 2 - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_form_key - - - - - - - - - true - - = - true - dummy - - - true - ${admin_form_key} - = - true - form_key - - - true - ${admin_password} - = - true - login[password] - - - true - ${admin_user} - = - true - login[username] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/dashboard/ - POST - true - false - true - false - Java - false - - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx - - - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - mpaf/tool/fragments/ce/admin_promotions_management/admin_promotions_management.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales_rule/promo_quote/ - GET - true - false - true - false - false - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales_rule/promo_quote/new - GET - true - false - true - false - false - - - - - - - - true - true - = - true - isAjax - - - true - ${admin_form_key} - = - true - form_key - true - - - true - 1--1 - = - true - id - - - true - Magento\SalesRule\Model\Rule\Condition\Address|base_subtotal - = - true - type - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales_rule/promo_quote/newConditionHtml/form/sales_rule_formrule_conditions_fieldset_/form_namespace/sales_rule_form - POST - true - false - true - false - false - - - - - - - - true - Rule Name ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - name - - - true - 0 - = - true - is_active - - - true - 0 - = - true - use_auto_generation - - - true - 1 - = - true - is_rss - - - true - 0 - = - true - apply_to_shipping - - - true - 0 - = - true - stop_rules_processing - - - true - - = - true - coupon_code - - - true - - = - true - uses_per_coupon - - - true - - = - true - uses_per_customer - - - true - - = - true - sort_order - - - true - 5 - = - true - discount_amount - - - true - 0 - = - true - discount_qty - - - true - - = - true - discount_step - - - true - - = - true - reward_points_delta - - - true - - = - true - store_labels[0] - - - true - Rule Description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} - = - true - description - - - true - 1 - = - true - coupon_type - - - true - cart_fixed - = - true - simple_action - - - true - 1 - = - true - website_ids[0] - - - true - 0 - = - true - customer_group_ids[0] - - - true - - = - true - from_date - - - true - - = - true - to_date - - - true - Magento\SalesRule\Model\Rule\Condition\Combine - = - true - rule[conditions][1][type] - - - true - all - = - true - rule[conditions][1][aggregator] - - - true - 1 - = - true - rule[conditions][1][value] - - - true - Magento\SalesRule\Model\Rule\Condition\Address - = - true - rule[conditions][1--1][type] - - - true - base_subtotal - = - true - rule[conditions][1--1][attribute] - - - true - >= - = - true - rule[conditions][1--1][operator] - - - true - 100 - = - true - rule[conditions][1--1][value] - - - true - - = - true - rule[conditions][1][new_chlid] - - - true - Magento\SalesRule\Model\Rule\Condition\Product\Combine - = - true - rule[actions][1][type] - - - true - all - = - true - rule[actions][1][aggregator] - - - true - 1 - = - true - rule[actions][1][value] - - - true - - = - true - rule[actions][1][new_child] - - - true - - = - true - store_labels[1] - - - true - - = - true - store_labels[2] - - - true - - = - true - related_banners - - - true - ${admin_form_key} - = - true - form_key - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales_rule/promo_quote/save/ - POST - true - false - true - false - false - - - - - - You saved the rule. - - Assertion.response_data - false - 16 - - - - - 1 - 0 - ${__javaScript(Math.round(${adminPromotionsManagementDelay}*1000))} - - - - - - - - - 1 - false - 1 - ${adminEditOrderPercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx - - - - vars.put("testLabel", "Admin Edit Order"); - - true - - - - - - function getFormKeyFromResponse() - { - var url = prev.getUrlAsString(), - responseCode = prev.getResponseCode(), - formKey = null; - searchPattern = /var FORM_KEY = '(.+)'/; - if (responseCode == "200" && url) { - response = prev.getResponseDataAsString(); - formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; - } - return formKey; - } - - formKey = vars.get("form_key_storage"); - - currentFormKey = getFormKeyFromResponse(); - - if (currentFormKey != null && currentFormKey != formKey) { - vars.put("form_key_storage", currentFormKey); - } - - javascript - mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx - - - - formKey = vars.get("form_key_storage"); - if (formKey - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' - && sampler.getMethod() == "POST") - { - arguments = sampler.getArguments(); - for (i=0; i<arguments.getArgumentCount(); i++) - { - argument = arguments.getArgument(i); - if (argument.getName() == 'form_key' && argument.getValue() != formKey) { - log.info("admin form key updated: " + argument.getValue() + " => " + formKey); - argument.setValue(formKey); - } - } - } - - javascript - - - - - - false - mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - - - mpaf/tool/fragments/ce/once_only_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_login/admin_login.jmx - - - - Welcome - <title>Magento Admin</title> - - Assertion.response_data - false - 2 - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_form_key - - - - - - - - - true - - = - true - dummy - - - true - ${admin_form_key} - = - true - form_key - - - true - ${admin_password} - = - true - login[password] - - - true - ${admin_user} - = - true - login[username] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/dashboard/ - POST - true - false - true - false - Java - false - - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx - - - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/orders_page.jmx - - - - Create New Order - - Assertion.response_data - false - 2 - - - - - - - - - true - sales_order_grid - = - true - namespace - - - true - - = - true - search - - - true - true - = - true - filters[placeholder] - - - true - 200 - = - true - paging[pageSize] - - - true - 1 - = - true - paging[current] - - - true - increment_id - = - true - sorting[field] - - - true - desc - = - true - sorting[direction] - - - true - true - = - true - isAjax - - - true - ${admin_form_key} - = - true - form_key - false - - - true - pending - = - true - filters[status] - true - - - true - ${__time()}${__Random(1,1000000)} - = - true - _ - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/open_orders.jmx - - - - totalRecords - - Assertion.response_data - false - 2 - - - - - - - - - true - ${admin_form_key} - = - true - form_key - - - true - sales_order_grid - = - true - namespace - true - - - true - - = - true - search - true - - - true - true - = - true - filters[placeholder] - true - - - true - 200 - = - true - paging[pageSize] - true - - - true - 1 - = - true - paging[current] - true - - - true - increment_id - = - true - sorting[field] - true - - - true - asc - = - true - sorting[direction] - true - - - true - true - = - true - isAjax - true - - - true - pending - = - true - filters[status] - - - true - ${__time()}${__Random(1,1000000)} - = - true - _ - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/search_orders.jmx - - - - totalRecords - - Assertion.response_data - false - 2 - - - - false - order_numbers - \"increment_id\":\"(\d+)\"\, - $1$ - - -1 - simple_products - - - - false - order_ids - \"entity_id\":\"(\d+)\"\, - $1$ - - -1 - simple_products - - - - - - mpaf/tool/fragments/ce/admin_create_process_returns/setup.jmx - - import java.util.ArrayList; - import java.util.HashMap; - import org.apache.jmeter.protocol.http.util.Base64Encoder; - import java.util.Random; - - // get count of "order_numbers" variable defined in "Search Pending Orders Limit" - int ordersCount = Integer.parseInt(vars.get("order_numbers_matchNr")); - - - int clusterLength; - int threadsNumber = ctx.getThreadGroup().getNumThreads(); - if (threadsNumber == 0) { - //Number of orders for one thread - clusterLength = ordersCount; - } else { - clusterLength = Math.round(ordersCount / threadsNumber); - if (clusterLength == 0) { - clusterLength = 1; - } - } - - //Current thread number starts from 0 - int currentThreadNum = ctx.getThreadNum(); - - //Index of the current product from the cluster - Random random = new Random(); - int iterator = random.nextInt(clusterLength); - if (iterator == 0) { - iterator = 1; - } - - int i = clusterLength * currentThreadNum + iterator; - - orderNumber = vars.get("order_numbers_" + i.toString()); - orderId = vars.get("order_ids_" + i.toString()); - vars.put("order_number", orderNumber); - vars.put("order_id", orderId); - - - - - false - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order/view/order_id/${order_id}/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/open_order.jmx - - - - #${order_number} - - Assertion.response_data - false - 2 - - - - false - order_status - <span id="order_status">([^<]+)</span> - $1$ - - 1 - simple_products - - - - - - "${order_status}" == "Pending" - false - mpaf/tool/fragments/ce/admin_edit_order/if_controller.jmx - - - - - - true - pending - = - true - history[status] - false - - - true - Some text - = - true - history[comment] - - - true - ${admin_form_key} - = - true - form_key - false - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order/addComment/order_id/${order_id}/?isAjax=true - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_edit_order/add_comment.jmx - - - - Not Notified - - Assertion.response_data - false - 2 - - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order_invoice/start/order_id/${order_id}/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/invoice_start.jmx - - - - Invoice Totals - - Assertion.response_data - false - 2 - - - - false - item_ids - <div id="order_item_(\d+)_title"\s*class="product-title"> - $1$ - - -1 - simple_products - - - - - - - - - true - ${admin_form_key} - = - true - form_key - false - - - true - 1 - = - true - invoice[items][${item_ids_1}] - - - true - 1 - = - true - invoice[items][${item_ids_2}] - - - true - Invoiced - = - true - invoice[comment_text] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order_invoice/save/order_id/${order_id}/ - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/invoice_submit.jmx - - - - The invoice has been created - - Assertion.response_data - false - 2 - - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/order_shipment/start/order_id/${order_id}/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_edit_order/shipment_start.jmx - - - - New Shipment - - Assertion.response_data - false - 2 - - - - - - - - - true - ${admin_form_key} - = - true - form_key - false - - - true - 1 - = - true - shipment[items][${item_ids_1}] - - - true - 1 - = - true - shipment[items][${item_ids_2}] - - - true - Shipped - = - true - shipment[comment_text] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/order_shipment/save/order_id/${order_id}/ - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_edit_order/shipment_submit.jmx - - - - The shipment has been created - - Assertion.response_data - false - 2 - - - - - - - - - - - - continue - - false - ${loops} - - ${csrPoolUsers} - ${ramp_period} - 1505803944000 - 1505803944000 - false - - - mpaf/tool/fragments/_system/thread_group.jmx - - - 1 - false - 1 - ${adminReturnsManagementPercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx - - - - vars.put("testLabel", "Admin Returns Management"); - - true - - - - - - function getFormKeyFromResponse() - { - var url = prev.getUrlAsString(), - responseCode = prev.getResponseCode(), - formKey = null; - searchPattern = /var FORM_KEY = '(.+)'/; - if (responseCode == "200" && url) { - response = prev.getResponseDataAsString(); - formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; - } - return formKey; - } - - formKey = vars.get("form_key_storage"); - - currentFormKey = getFormKeyFromResponse(); - - if (currentFormKey != null && currentFormKey != formKey) { - vars.put("form_key_storage", currentFormKey); - } - - javascript - mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx - - - - formKey = vars.get("form_key_storage"); - if (formKey - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' - && sampler.getMethod() == "POST") - { - arguments = sampler.getArguments(); - for (i=0; i<arguments.getArgumentCount(); i++) - { - argument = arguments.getArgument(i); - if (argument.getName() == 'form_key' && argument.getValue() != formKey) { - log.info("admin form key updated: " + argument.getValue() + " => " + formKey); - argument.setValue(formKey); - } - } - } - - javascript - - - - - - false - mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_login/admin_login.jmx - - - - Welcome - <title>Magento Admin</title> - - Assertion.response_data - false - 2 - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_form_key - - - - - - - - - true - - = - true - dummy - - - true - ${admin_form_key} - = - true - form_key - - - true - ${admin_password} - = - true - login[password] - - - true - ${admin_user} - = - true - login[username] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/dashboard/ - POST - true - false - true - false - Java - false - - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx - - - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/orders_page.jmx - - - - Create New Order - - Assertion.response_data - false - 2 - - - - - - - - - true - sales_order_grid - = - true - namespace - - - true - - = - true - search - - - true - true - = - true - filters[placeholder] - - - true - 200 - = - true - paging[pageSize] - - - true - 1 - = - true - paging[current] - - - true - increment_id - = - true - sorting[field] - - - true - desc - = - true - sorting[direction] - - - true - true - = - true - isAjax - - - true - ${admin_form_key} - = - true - form_key - false - - - true - pending - = - true - filters[status] - true - - - true - ${__time()}${__Random(1,1000000)} - = - true - _ - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/open_orders.jmx - - - - totalRecords - - Assertion.response_data - false - 2 - - - - - - - - - true - ${admin_form_key} - = - true - form_key - - - true - sales_order_grid - = - true - namespace - true - - - true - - = - true - search - true - - - true - true - = - true - filters[placeholder] - true - - - true - 200 - = - true - paging[pageSize] - true - - - true - 1 - = - true - paging[current] - true - - - true - increment_id - = - true - sorting[field] - true - - - true - asc - = - true - sorting[direction] - true - - - true - true - = - true - isAjax - true - - - true - pending - = - true - filters[status] - - - true - ${__time()}${__Random(1,1000000)} - = - true - _ - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/search_orders.jmx - - - - totalRecords - - Assertion.response_data - false - 2 - - - - false - order_numbers - \"increment_id\":\"(\d+)\"\, - $1$ - - -1 - simple_products - - - - false - order_ids - \"entity_id\":\"(\d+)\"\, - $1$ - - -1 - simple_products - - - - - - mpaf/tool/fragments/ce/admin_create_process_returns/setup.jmx - - import java.util.ArrayList; - import java.util.HashMap; - import org.apache.jmeter.protocol.http.util.Base64Encoder; - import java.util.Random; - - // get count of "order_numbers" variable defined in "Search Pending Orders Limit" - int ordersCount = Integer.parseInt(vars.get("order_numbers_matchNr")); - - - int clusterLength; - int threadsNumber = ctx.getThreadGroup().getNumThreads(); - if (threadsNumber == 0) { - //Number of orders for one thread - clusterLength = ordersCount; - } else { - clusterLength = Math.round(ordersCount / threadsNumber); - if (clusterLength == 0) { - clusterLength = 1; - } - } - - //Current thread number starts from 0 - int currentThreadNum = ctx.getThreadNum(); - - //Index of the current product from the cluster - Random random = new Random(); - int iterator = random.nextInt(clusterLength); - if (iterator == 0) { - iterator = 1; - } - - int i = clusterLength * currentThreadNum + iterator; - - orderNumber = vars.get("order_numbers_" + i.toString()); - orderId = vars.get("order_ids_" + i.toString()); - vars.put("order_number", orderNumber); - vars.put("order_id", orderId); - - - - - false - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order/view/order_id/${order_id}/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/open_order.jmx - - - - #${order_number} - - Assertion.response_data - false - 2 - - - - false - order_status - <span id="order_status">([^<]+)</span> - $1$ - - 1 - simple_products - - - - - - "${order_status}" == "Pending" - false - mpaf/tool/fragments/ce/admin_edit_order/if_controller.jmx - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order_invoice/start/order_id/${order_id}/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/invoice_start.jmx - - - - Invoice Totals - - Assertion.response_data - false - 2 - - - - false - item_ids - <div id="order_item_(\d+)_title"\s*class="product-title"> - $1$ - - -1 - simple_products - - - - - - - - - true - ${admin_form_key} - = - true - form_key - false - - - true - 1 - = - true - invoice[items][${item_ids_1}] - - - true - 1 - = - true - invoice[items][${item_ids_2}] - - - true - Invoiced - = - true - invoice[comment_text] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order_invoice/save/order_id/${order_id}/ - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/invoice_submit.jmx - - - - The invoice has been created - - Assertion.response_data - false - 2 - - - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order_creditmemo/start/order_id/${order_id}/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/credit_memo_start.jmx - - - - New Memo - - Assertion.response_data - false - 2 - - - - - - - - - true - ${admin_form_key} - = - true - form_key - false - - - true - 1 - = - true - creditmemo[items][${item_ids_1}][qty] - - - true - 1 - = - true - creditmemo[items][${item_ids_2}][qty] - - - true - 1 - = - true - creditmemo[do_offline] - - - true - Credit Memo added - = - true - creditmemo[comment_text] - - - true - 10 - = - true - creditmemo[shipping_amount] - - - true - 0 - = - true - creditmemo[adjustment_positive] - - - true - 0 - = - true - creditmemo[adjustment_negative] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order_creditmemo/save/order_id/${order_id}/ - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_create_process_returns/credit_memo_full_refund.jmx - - - - You created the credit memo - - Assertion.response_data - false - 2 - - - - - - 1 - 0 - ${__javaScript(Math.round(${adminCreateProcessReturnsDelay}*1000))} - mpaf/tool/fragments/ce/admin_create_process_returns/pause.jmx - - - - - - - - 1 - false - 1 - ${browseCustomerGridPercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx - - - - vars.put("testLabel", "Browse Customer Grid"); - - true - - - - - - function getFormKeyFromResponse() - { - var url = prev.getUrlAsString(), - responseCode = prev.getResponseCode(), - formKey = null; - searchPattern = /var FORM_KEY = '(.+)'/; - if (responseCode == "200" && url) { - response = prev.getResponseDataAsString(); - formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; - } - return formKey; - } - - formKey = vars.get("form_key_storage"); - - currentFormKey = getFormKeyFromResponse(); - - if (currentFormKey != null && currentFormKey != formKey) { - vars.put("form_key_storage", currentFormKey); - } - - javascript - mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx - - - - formKey = vars.get("form_key_storage"); - if (formKey - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' - && sampler.getMethod() == "POST") - { - arguments = sampler.getArguments(); - for (i=0; i<arguments.getArgumentCount(); i++) - { - argument = arguments.getArgument(i); - if (argument.getName() == 'form_key' && argument.getValue() != formKey) { - log.info("admin form key updated: " + argument.getValue() + " => " + formKey); - argument.setValue(formKey); - } - } - } - - javascript - - - - - - false - mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - - - - vars.put("gridEntityType" , "Customer"); - - pagesCount = parseInt(vars.get("customers_page_size")) || 20; - vars.put("grid_entity_page_size" , pagesCount); - vars.put("grid_namespace" , "customer_listing"); - vars.put("grid_admin_browse_filter_text" , vars.get("admin_browse_customer_filter_text")); - vars.put("grid_filter_field", "name"); - - // set sort fields and sort directions - vars.put("grid_sort_field_1", "name"); - vars.put("grid_sort_field_2", "group_id"); - vars.put("grid_sort_field_3", "billing_country_id"); - vars.put("grid_sort_order_1", "asc"); - vars.put("grid_sort_order_2", "desc"); - - javascript - mpaf/tool/fragments/ce/admin_browse_customers_grid/setup.jmx - - - - mpaf/tool/fragments/ce/once_only_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_login/admin_login.jmx - - - - Welcome - <title>Magento Admin</title> - - Assertion.response_data - false - 2 - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_form_key - - - - - - - - - true - - = - true - dummy - - - true - ${admin_form_key} - = - true - form_key - - - true - ${admin_password} - = - true - login[password] - - - true - ${admin_user} - = - true - login[username] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/dashboard/ - POST - true - false - true - false - Java - false - - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - - - - - - - - true - ${grid_namespace} - = - true - namespace - true - - - true - - = - true - search - true - - - true - true - = - true - filters[placeholder] - true - - - true - ${grid_entity_page_size} - = - true - paging[pageSize] - true - - - true - 1 - = - true - paging[current] - true - - - true - entity_id - = - true - sorting[field] - true - - - true - asc - = - true - sorting[direction] - true - - - true - true - = - true - isAjax - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_grid_browsing/set_pages_count.jmx - - - $.totalRecords - 0 - true - false - true - - - - entity_total_records - $.totalRecords - - - BODY - - - - - - - - var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; - var totalsRecord = parseInt(vars.get("entity_total_records")); - var pageCount = Math.round(totalsRecord/pageSize); - - vars.put("grid_pages_count", pageCount); - - javascript - - - - - - - - - true - ${grid_namespace} - = - true - namespace - true - - - true - - = - true - search - true - - - true - ${grid_admin_browse_filter_text} - = - true - filters[placeholder] - true - - - true - ${grid_entity_page_size} - = - true - paging[pageSize] - true - - - true - 1 - = - true - paging[current] - true - - - true - entity_id - = - true - sorting[field] - true - - - true - asc - = - true - sorting[direction] - true - - - true - true - = - true - isAjax - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_grid_browsing/set_filtered_pages_count.jmx - - - $.totalRecords - 0 - true - false - true - true - - - - entity_total_records - $.totalRecords - - - BODY - - - - - - - var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; -var totalsRecord = parseInt(vars.get("entity_total_records")); -var pageCount = Math.round(totalsRecord/pageSize); - -vars.put("grid_pages_count_filtered", pageCount); - - javascript - - - - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - 1 - ${grid_pages_count} - 1 - page_number - - true - false - mpaf/tool/fragments/ce/admin_grid_browsing/select_page_number.jmx - - - - - - - true - ${grid_namespace} - = - true - namespace - true - - - true - - = - true - search - true - - - true - true - = - true - filters[placeholder] - true - - - true - ${grid_entity_page_size} - = - true - paging[pageSize] - true - - - true - ${page_number} - = - true - paging[current] - true - - - true - entity_id - = - true - sorting[field] - true - - - true - asc - = - true - sorting[direction] - true - - - true - true - = - true - isAjax - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid.jmx - - - - \"totalRecords\":[^0]\d* - - Assertion.response_data - false - 2 - - - - - - 1 - ${grid_pages_count_filtered} - 1 - page_number - - true - false - mpaf/tool/fragments/ce/admin_grid_browsing/select_filtered_page_number.jmx - - - - mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid_sort_and_filter.jmx - - - - grid_sort_field - grid_sort_field - true - 0 - 3 - - - - grid_sort_order - grid_sort_order - true - 0 - 2 - - - - - - - true - ${grid_namespace} - = - true - namespace - false - - - true - ${grid_admin_browse_filter_text} - = - true - filters[${grid_filter_field}] - false - - - true - true - = - true - filters[placeholder] - false - - - true - ${grid_entity_page_size} - = - true - paging[pageSize] - false - - - true - ${page_number} - = - true - paging[current] - false - - - true - ${grid_sort_field} - = - true - sorting[field] - false - - - true - ${grid_sort_order} - = - true - sorting[direction] - false - - - true - true - = - true - isAjax - false - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - - - - - \"totalRecords\":[^0]\d* - - Assertion.response_data - false - 2 - - - - - - - - - - - - 1 - false - 1 - ${adminCreateOrderPercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx - - - - vars.put("testLabel", "Admin Create Order"); - - true - - - - - - function getFormKeyFromResponse() - { - var url = prev.getUrlAsString(), - responseCode = prev.getResponseCode(), - formKey = null; - searchPattern = /var FORM_KEY = '(.+)'/; - if (responseCode == "200" && url) { - response = prev.getResponseDataAsString(); - formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; - } - return formKey; - } - - formKey = vars.get("form_key_storage"); - - currentFormKey = getFormKeyFromResponse(); - - if (currentFormKey != null && currentFormKey != formKey) { - vars.put("form_key_storage", currentFormKey); - } - - javascript - mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx - - - - formKey = vars.get("form_key_storage"); - if (formKey - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' - && sampler.getMethod() == "POST") - { - arguments = sampler.getArguments(); - for (i=0; i<arguments.getArgumentCount(); i++) - { - argument = arguments.getArgument(i); - if (argument.getName() == 'form_key' && argument.getValue() != formKey) { - log.info("admin form key updated: " + argument.getValue() + " => " + formKey); - argument.setValue(formKey); - } - } - } - - javascript - - - - - - false - mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - - - mpaf/tool/fragments/ce/once_only_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_login/admin_login.jmx - - - - Welcome - <title>Magento Admin</title> - - Assertion.response_data - false - 2 - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_form_key - - - - - - - - - true - - = - true - dummy - - - true - ${admin_form_key} - = - true - form_key - - - true - ${admin_password} - = - true - login[password] - - - true - ${admin_user} - = - true - login[username] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/dashboard/ - POST - true - false - true - false - Java - false - - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx - - - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - - - mpaf/tool/fragments/ce/admin_create_order/admin_create_order.jmx - import org.apache.jmeter.samplers.SampleResult; -import java.util.Random; -Random random = new Random(); -if (${seedForRandom} > 0) { - random.setSeed(${seedForRandom}); -} -number = random.nextInt(props.get("simple_products_list").size()); -simpleList = props.get("simple_products_list").get(number); -vars.put("simple_product_1_url_key", simpleList.get("url_key")); -vars.put("simple_product_1_name", simpleList.get("title")); -vars.put("simple_product_1_id", simpleList.get("id")); - -do { - number1 = random.nextInt(props.get("simple_products_list").size()); -} while(number == number1); -simpleList = props.get("simple_products_list").get(number1); -vars.put("simple_product_2_url_key", simpleList.get("url_key")); -vars.put("simple_product_2_name", simpleList.get("title")); -vars.put("simple_product_2_id", simpleList.get("id")); - -number = random.nextInt(props.get("configurable_products_list").size()); -configurableList = props.get("configurable_products_list").get(number); -vars.put("configurable_product_1_url_key", configurableList.get("url_key")); -vars.put("configurable_product_1_name", configurableList.get("title")); -vars.put("configurable_product_1_id", configurableList.get("id")); -vars.put("configurable_product_1_sku", configurableList.get("sku")); -vars.put("configurable_attribute_id", configurableList.get("attribute_id")); -vars.put("configurable_option_id", configurableList.get("attribute_option_id")); - - -customers_index = 0; -if (!props.containsKey("customer_ids_index")) { - props.put("customer_ids_index", customers_index); -} - -try { - customers_index = props.get("customer_ids_index"); - customers_list = props.get("customer_ids_list"); - - if (customers_index == customers_list.size()) { - customers_index=0; - } - vars.put("customer_id", customers_list.get(customers_index)); - props.put("customer_ids_index", ++customers_index); -} -catch (java.lang.Exception e) { - log.error("Caught Exception in 'Admin Create Order' thread."); - SampleResult.setStopThread(true); -} - - - true - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order_create/start/ - GET - true - false - true - false - false - - Detected the start of a redirect chain - - - - - - - - Content-Type - application/json - - - Accept - */* - - - - - - true - - - - false - {"username":"${admin_user}","password":"${admin_password}"} - = - - - - - - - - ${request_protocol} - - ${base_path}rest/V1/integration/admin/token - POST - true - false - true - false - false - - - - - admin_token - $ - - - BODY - - - - - ^[a-z0-9-]+$ - - Assertion.response_data - false - 1 - variable - admin_token - - - - - - - Authorization - Bearer ${admin_token} - - - - - - - - - - - - - ${request_protocol} - - ${base_path}rest/V1/configurable-products/${configurable_product_1_sku}/options/all - GET - true - false - true - false - false - - - - - attribute_ids - $.[*].attribute_id - NO_VALUE - - BODY - - - - option_values - $.[*].values[0].value_index - NO_VALUE - - BODY - - - - - - - - - true - item[${simple_product_1_id}][qty] - 1 - = - true - - - true - item[${simple_product_2_id}][qty] - 1 - = - true - - - true - item[${configurable_product_1_id}][qty] - 1 - = - true - - - true - customer_id - ${customer_id} - = - true - - - true - store_id - 1 - = - true - - - true - currency_id - - = - true - - - true - form_key - ${admin_form_key} - = - true - - - true - payment[method] - checkmo - = - true - - - true - reset_shipping - 1 - = - true - - - true - json - 1 - = - true - - - true - as_js_varname - iFrameResponse - = - true - - - true - form_key - ${admin_form_key} - = - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order_create/loadBlock/block/search,items,shipping_method,totals,giftmessage,billing_method?isAjax=true - POST - true - false - true - false - false - - Detected the start of a redirect chain - - - - false - - - try { - attribute_ids = vars.get("attribute_ids"); - option_values = vars.get("option_values"); - attribute_ids = attribute_ids.replace("[","").replace("]","").replace("\"", ""); - option_values = option_values.replace("[","").replace("]","").replace("\"", ""); - attribute_ids_array = attribute_ids.split(","); - option_values_array = option_values.split(","); - args = ctx.getCurrentSampler().getArguments(); - it = args.iterator(); - while (it.hasNext()) { - argument = it.next(); - if (argument.getStringValue().contains("${")) { - args.removeArgument(argument.getName()); - } - } - for (int i = 0; i < attribute_ids_array.length; i++) { - - ctx.getCurrentSampler().addArgument("item[" + vars.get("configurable_product_1_id") + "][super_attribute][" + attribute_ids_array[i] + "]", option_values_array[i]); - } -} catch (Exception e) { - log.error("error???", e); -} - - - - - - - - true - collect_shipping_rates - 1 - = - true - - - true - customer_id - ${customer_id} - = - true - - - true - store_id - 1 - = - true - - - true - currency_id - false - = - true - - - true - form_key - ${admin_form_key} - = - true - - - true - payment[method] - checkmo - = - true - - - true - json - true - = - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order_create/loadBlock/block/shipping_method,totals?isAjax=true - POST - true - false - true - false - false - - - - - - shipping_method - Flat Rate - - Assertion.response_data - false - 2 - - - - - - - - true - form_key - ${admin_form_key} - = - true - - - true - limit - 20 - = - true - - - true - entity_id - - = - true - - - true - name - - = - true - - - true - email - - = - true - - - true - Telephone - - = - true - - - true - billing_postcode - - = - true - - - true - billing_country_id - - = - true - - - true - billing_regione - - = - true - - - true - store_name - - = - true - - - true - page - 1 - = - true - - - true - order[currency] - USD - = - true - - - true - sku - - = - true - - - true - qty - - = - true - - - true - limit - 20 - = - true - - - true - entity_id - - = - true - - - true - name - - = - true - - - true - sku - - = - true - - - true - price[from] - - = - true - - - true - price[to] - - = - true - - - true - in_products - - = - true - - - true - page - 1 - = - true - - - true - coupon_code - - = - true - - - true - order[account][group_id] - 1 - = - true - - - true - order[account][email] - user_${customer_id}@example.com - = - true - - - true - order[billing_address][customer_address_id] - - = - true - - - true - order[billing_address][prefix] - - = - true - - - true - order[billing_address][firstname] - Anthony - = - true - - - true - order[billing_address][middlename] - - = - true - - - true - order[billing_address][lastname] - Nealy - = - true - - - true - order[billing_address][suffix] - - = - true - - - true - order[billing_address][company] - - = - true - - - true - order[billing_address][street][0] - 123 Freedom Blvd. #123 - = - true - - - true - order[billing_address][street][1] - - = - true - - - true - order[billing_address][city] - Fayetteville - = - true - - - true - order[billing_address][country_id] - US - = - true - - - true - order[billing_address][region] - - = - true - - - true - order[billing_address][region_id] - 5 - = - true - - - true - order[billing_address][postcode] - 123123 - = - true - - - true - order[billing_address][telephone] - 022-333-4455 - = - true - - - true - order[billing_address][fax] - - = - true - - - true - order[billing_address][vat_id] - - = - true - - - true - shipping_same_as_billing - on - = - true - - - true - payment[method] - checkmo - = - true - - - true - order[shipping_method] - flatrate_flatrate - = - true - - - true - order[comment][customer_note] - - = - true - - - true - order[comment][customer_note_notify] - 1 - = - true - - - true - order[send_confirmation] - 1 - = - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order_create/save/ - POST - true - false - true - true - false - - Detected the start of a redirect chain - - - - false - order_id - ${host}${base_path}${admin_path}/sales/order/index/order_id/(\d+)/ - $1$ - - 1 - - - - false - order_item_1 - order_item_(\d+)_title - $1$ - - 1 - - - - false - order_item_2 - order_item_(\d+)_title - $1$ - - 2 - - - - false - order_item_3 - order_item_(\d+)_title - $1$ - - 3 - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - order_id - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - order_item_1 - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - order_item_2 - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - order_item_3 - - - - - You created the order. - - Assertion.response_data - false - 2 - - - - - - - - true - form_key - ${admin_form_key} - = - true - - - true - invoice[items][${order_item_1}] - 1 - = - true - - - true - invoice[items][${order_item_2}] - 1 - = - true - - - true - invoice[items][${order_item_3}] - 1 - = - true - - - true - invoice[comment_text] - - = - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/sales/order_invoice/save/order_id/${order_id}/ - POST - true - false - true - false - false - - Detected the start of a redirect chain - - - - - The invoice has been created. - - Assertion.response_data - false - 2 - - - - - - - - true - form_key - ${admin_form_key} - = - true - - - true - shipment[items][${order_item_1}] - 1 - = - true - - - true - shipment[items][${order_item_2}] - 1 - = - true - - - true - shipment[items][${order_item_3}] - 1 - = - true - - - true - shipment[comment_text] - - = - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/order_shipment/save/order_id/${order_id}/ - POST - true - false - true - false - false - - Detected the start of a redirect chain - - - - - The shipment has been created. - - Assertion.response_data - false - 2 - - - - - - - - - - - - continue - - false - ${loops} - - ${othersPoolUsers} - ${ramp_period} - 1505803944000 - 1505803944000 - false - - - mpaf/tool/fragments/_system/thread_group.jmx - - - 1 - false - 1 - ${adminCustomerManagementPercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx - - - - vars.put("testLabel", "Admin Customer Management"); - - true - - - - - - function getFormKeyFromResponse() - { - var url = prev.getUrlAsString(), - responseCode = prev.getResponseCode(), - formKey = null; - searchPattern = /var FORM_KEY = '(.+)'/; - if (responseCode == "200" && url) { - response = prev.getResponseDataAsString(); - formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; - } - return formKey; - } - - formKey = vars.get("form_key_storage"); - - currentFormKey = getFormKeyFromResponse(); +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx + + + + mpaf/tool/fragments/ce/loops/update_products_added_counter.jmx + +productsAdded = Integer.parseInt(vars.get("totalProductsAdded")); +productsAdded = productsAdded + 1; - if (currentFormKey != null && currentFormKey != formKey) { - vars.put("form_key_storage", currentFormKey); - } - - javascript - mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx - - - - formKey = vars.get("form_key_storage"); - if (formKey - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' - && sampler.getMethod() == "POST") - { - arguments = sampler.getArguments(); - for (i=0; i<arguments.getArgumentCount(); i++) - { - argument = arguments.getArgument(i); - if (argument.getName() == 'form_key' && argument.getValue() != formKey) { - log.info("admin form key updated: " + argument.getValue() + " => " + formKey); - argument.setValue(formKey); - } - } - } - - javascript - - - - - - false - mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx +vars.put("totalProductsAdded", String.valueOf(productsAdded)); + + + + true + - - mpaf/tool/fragments/ce/once_only_controller.jmx - - - + + + + + + + + + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + - + + + true + ${product_id} + = + true + product + + + true + + = + true + related_product + + + true + 1 + = + true + qty + + + true + ${form_key} + = + true + form_key + + @@ -22829,78 +9006,50 @@ if (testLabel ${request_protocol} - ${base_path}${admin_path} - GET + ${base_path}checkout/cart/add/ + POST true false true false false - mpaf/tool/fragments/ce/admin_login/admin_login.jmx + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_product_add_to_cart.jmx - - - Welcome - <title>Magento Admin</title> - - Assertion.response_data - false - 2 - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_form_key - - - + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + - + - - true - - = - true - dummy - - + true - ${admin_form_key} + cart,messages = true - form_key + sections - + true - ${admin_password} + true = true - login[password] + update_section_id - + true - ${admin_user} + ${__time()}${__Random(1,1000000)} = true - login[username] + _ @@ -22910,1906 +9059,5021 @@ if (testLabel ${request_protocol} - ${base_path}${admin_path}/admin/dashboard/ - POST + ${base_path}customer/section/load/ + GET true false true false - Java false - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx - - - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - mpaf/tool/fragments/ce/admin_customer_management/admin_customer_management.jmx - + mpaf/tool/fragments/ce/load_cart_section.jmx - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/customer/index - GET - true - false - true - false - false - - - - - - - Accept-Language - en-US,en;q=0.5 - - - Accept - text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 - - - User-Agent - Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 - - - Accept-Encoding - gzip, deflate - - - - - - - - - - true - customer_listing - = - true - namespace - - - true - - = - true - search - - - true - true - = - true - filters[placeholder] - - - true - 20 - = - true - paging[pageSize] - - - true - 1 - = - true - paging[current] - - - true - entity_id - = - true - sorting[field] - - - true - asc - = - true - sorting[direction] - - - true - true - = - true - isAjax - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - - - - - - X-Requested-With - XMLHttpRequest - - - - - - - - - - true - customer_listing - = - true - namespace - - - true - Lastname - = - true - search - - - true - true - = - true - filters[placeholder] - - - true - 20 - = - true - paging[pageSize] - - - true - 1 - = - true - paging[current] - - - true - entity_id - = - true - sorting[field] - - - true - asc - = - true - sorting[direction] - - - true - true - = - true - isAjax - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - - - - - - X-Requested-With - XMLHttpRequest - - - - - - false - customer_edit_url_path - actions":\{"edit":\{"href":"(?:http|https):\\/\\/(.*?)\\/customer\\/index\\/edit\\/id\\/(\d+)\\/", - /customer/index/edit/id/$2$/ - - 0 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - customer_edit_url_path - - - - - - + + + You added ${product_name} to your shopping cart. + + Assertion.response_data + false + 2 + + + + + This product is out of stock. + + Assertion.response_data + false + 6 + + + + + \"summary_count\":${totalProductsAdded} + + Assertion.response_data + false + 2 + + + + + + + X-Requested-With + XMLHttpRequest - - - - - ${request_protocol} - - ${base_path}${admin_path}${customer_edit_url_path} - GET - true - false - true - false - false - - - - - - Customer Information - - Assertion.response_data - false - 2 - - - - false - admin_customer_entity_id - "entity_id":"(\d+)" - $1$ - - 1 - - - - false - admin_customer_website_id - "website_id":"(\d+)" - $1$ - - 1 - - - - false - admin_customer_firstname - "firstname":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_lastname - "lastname":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_email - "email":"([^\@]+@[^.]+.[^"]+)" - $1$ - - 1 - - - - false - admin_customer_group_id - "group_id":"(\d+)" - $1$ - - 1 - - - - false - admin_customer_store_id - "store_id":"(\d+)" - $1$ - - 1 - - - - false - admin_customer_created_at - "created_at":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_updated_at - "updated_at":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_is_active - "is_active":"(\d+)" - $1$ - - 1 - - - - false - admin_customer_disable_auto_group_change - "disable_auto_group_change":"(\d+)" - $1$ - - 1 - - - - false - admin_customer_created_in - "created_in":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_dob - "dob":"(\d+)-(\d+)-(\d+)" - $2$/$3$/$1$ - - 1 - - - - false - admin_customer_default_billing - "default_billing":"(\d+)" - $1$ - - 1 - - - - false - admin_customer_default_shipping - "default_shipping":"(\d+)" - $1$ - - 1 - - - - false - admin_customer_gender - "gender":"(\d+)" - $1$ - - 1 - - - - false - admin_customer_failures_num - "failures_num":"(\d+)" - $1$ - - 1 - - - - false - admin_customer_address_entity_id - "address":\{"\d+":{"entity_id":"(\d+)".+?"parent_id":"${admin_customer_entity_id}" - $1$ - - 1 - - - - false - admin_customer_address_created_at - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"created_at":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_address_updated_at - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"updated_at":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_address_is_active - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"is_active":"(\d+)" - $1$ - - 1 - - - - false - admin_customer_address_city - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"city":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_address_country_id - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"country_id":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_address_firstname - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"firstname":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_address_lastname - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"lastname":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_address_postcode - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"postcode":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_address_region - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"region":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_address_region_id - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"region_id":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_address_street - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"street":\["([^"]+)"\] - $1$ - - 1 - - - - false - admin_customer_address_telephone - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"telephone":"([^"]+)" - $1$ - - 1 - - - - false - admin_customer_address_customer_id - "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"customer_id":"([^"]+)" - $1$ - - 1 - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_customer_entity_id - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_customer_website_id - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_firstname - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_lastname - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_email - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_customer_group_id - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_customer_store_id - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_created_at - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_updated_at - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_customer_is_active - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_customer_disable_auto_group_change - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_created_in - - - - - ^\d+/\d+/\d+$ - - Assertion.response_data - false - 1 - variable - admin_customer_dob - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_customer_default_billing - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_customer_default_shipping - - - - - ^\d+$ + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + true + 1 + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("configurable_products_list").size()); +product = props.get("configurable_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_products_setup.jmx + + + + mpaf/tool/fragments/ce/loops/update_products_added_counter.jmx + +productsAdded = Integer.parseInt(vars.get("totalProductsAdded")); +productsAdded = productsAdded + 1; + +vars.put("totalProductsAdded", String.valueOf(productsAdded)); + + + + true + + + + + + + + + + + + ${request_protocol} + + ${base_path}${product_url_key}${url_suffix} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx + + + + <span>In stock</span> + + Assertion.response_data + false + 2 + + + + + + true + 1 + mpaf/tool/fragments/ce/common/get_configurable_product_options.jmx + + + + + Content-Type + application/json + + + Accept + */* + + + + + + true + + + + false + {"username":"${admin_user}","password":"${admin_password}"} + = + - Assertion.response_data - false - 1 - variable - admin_customer_gender - + + + + + + ${request_protocol} + + ${base_path}rest/V1/integration/admin/token + POST + true + false + true + false + false + + + + + admin_token + $ + + + BODY + - + - ^\d+$ + ^[a-z0-9-]+$ Assertion.response_data false 1 variable - admin_customer_failures_num + admin_token - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_customer_address_entity_id - + + + + + Authorization + Bearer ${admin_token} + + + + + + + + + + + + + ${request_protocol} + + ${base_path}rest/V1/configurable-products/${product_sku}/options/all + GET + true + false + true + false + false + + + + + attribute_ids + $.[*].attribute_id + NO_VALUE + + BODY + - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_address_created_at - + + option_values + $.[*].values[0].value_index + NO_VALUE + + BODY + - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_address_updated_at - + + + + + + + + true + ${product_id} + = + true + product + + + true + + = + true + related_product + + + true + 1 + = + true + qty + + + true + ${form_key} + = + true + form_key + + + + + + + + ${request_protocol} + + ${base_path}checkout/cart/add/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_product_add_to_cart.jmx + + + false + + + + try { + attribute_ids = vars.get("attribute_ids"); + option_values = vars.get("option_values"); + attribute_ids = attribute_ids.replace("[","").replace("]","").replace("\"", ""); + option_values = option_values.replace("[","").replace("]","").replace("\"", ""); + attribute_ids_array = attribute_ids.split(","); + option_values_array = option_values.split(","); + args = ctx.getCurrentSampler().getArguments(); + it = args.iterator(); + while (it.hasNext()) { + argument = it.next(); + if (argument.getStringValue().contains("${")) { + args.removeArgument(argument.getName()); + } + } + for (int i = 0; i < attribute_ids_array.length; i++) { + ctx.getCurrentSampler().addArgument("super_attribute[" + attribute_ids_array[i] + "]", option_values_array[i]); + } + } catch (Exception e) { + log.error("eror…", e); + } + + mpaf/tool/fragments/ce/common/configurable_product_add_to_cart_preprocessor.jmx - + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + + + true + cart,messages + = + true + sections + + + true + true + = + true + update_section_id + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + + + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/load_cart_section.jmx + + + + You added ${product_name} to your shopping cart. + + Assertion.response_data + false + 2 + + + + + This product is out of stock. + + Assertion.response_data + false + 6 + + + + + \"summary_count\":${totalProductsAdded} + + Assertion.response_data + false + 2 + + + + + + + X-Requested-With + XMLHttpRequest + + + mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + + + + + + + ${base_path}checkout/cart/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/open_cart.jmx + + - ^\d+$ + <title>Shopping Cart</title> Assertion.response_data false - 1 - variable - admin_customer_address_is_active + 2 - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_address_city - + + false + cart_items_qty_inputs + name="cart\[([^\[\]]+)\]\[qty\]" + $1$ + + -1 + - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_address_country_id - + + + + true + ${cart_items_qty_inputs_matchNr} + mpaf/tool/fragments/ce/loop_controller.jmx + + + 1 + + 1 + _counter + + true + true + + + + + +id = vars.get("_counter"); +vars.put("uenc", vars.get("cart_items_uencs_" + id)); +vars.put("item_id", vars.get("cart_items_qty_inputs_" + id)); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/remove_item_from_cart_setup.jmx + + + + + + + true + ${form_key} + = + true + form_key + + + true + ${uenc} + = + true + uenc + + + false + ${item_id} + = + true + id + + + + + + + + + + ${base_path}checkout/cart/delete/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/remove_item_from_cart.jmx + + + + + + + true + cart + = + true + sections + + + true + true + = + true + update_section_id + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + + + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/check_cart_is_empty.jmx + + + + \"summary_count\":0 + + Assertion.response_data + false + 2 + + + + + + + + + + + + + + ${request_protocol} + + ${base_path}customer/account/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/logout.jmx + + + + You are signed out. + + Assertion.response_data + false + 2 + + + + + false + + + +customerUserList = props.get("customer_emails_list"); +customerUserList.add(vars.get("customer_email")); + + mpaf/tool/fragments/ce/common/return_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${accountManagementPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_address_firstname - + + + vars.put("testLabel", "Account management"); + + true + - + + + + + 30 + ${host} + / + false + 0 + true + true + + + ${form_key} + ${host} + ${base_path} + false + 0 + true + true + + + true + mpaf/tool/fragments/ce/http_cookie_manager.jmx + + + + get-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_customer_email.jmx + +customerUserList = props.get("customer_emails_list"); +customerUser = customerUserList.poll(); +if (customerUser == null) { + SampleResult.setResponseMessage("customernUser list is empty"); + SampleResult.setResponseData("customerUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("customer_email", customerUser); + + + + true + + + + + + + + + + + + + ${request_protocol} + + ${base_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_home_page.jmx + + - ^.+$ + <title>Home page</title> Assertion.response_data false - 1 - variable - admin_customer_address_lastname + 2 - + + + + + + + + + + + ${request_protocol} + + ${base_path}customer/account/login/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/open_login_page.jmx + + + + <title>Customer Login</title> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${form_key} + = + true + form_key + + + true + ${customer_email} + = + true + login[username] + + + true + ${customer_password} + = + true + login[password] + + + true + + = + true + send + + + + + + + + ${request_protocol} + + ${base_path}customer/account/loginPost/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/common/login.jmx + + + + <title>My Account</title> + + Assertion.response_data + false + 2 + + + + false + addressId + customer/address/edit/id/([^'"]+)/ + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + addressId + + + + + + + + true + + = + true + sections + + + true + false + = + true + update_section_id + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + + + ${request_protocol} + + ${base_path}customer/section/load/ + GET + true + false + true + false + false + + + + + + + + + + + + + ${request_protocol} + + ${base_path}sales/order/history/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/account_management/my_orders.jmx + + + + <title>My Orders</title> + + Assertion.response_data + false + 2 + + + + false + orderId + sales/order/view/order_id/(\d+)/ + $1$ + NOT_FOUND + 1 + + + + + + mpaf/tool/fragments/ce/account_management/if_orders.jmx + "${orderId}" != "NOT_FOUND" + false + + + + + + + + + + + ${request_protocol} + + ${base_path}sales/order/view/order_id/${orderId} + GET + true + false + true + false + false + + + + - ^.+$ + <title>Order # Assertion.response_data false - 1 - variable - admin_customer_address_postcode + 2 - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_address_region - + + false + shipment_tab + sales/order/shipment/order_id/(\d+)..Order Shipments + $1$ + NOT_FOUND + 1 + - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_customer_address_region_id - + + + May not have shipped + "${shipment_tab}" != "NOT_FOUND" + false + + + + + + + + + + + ${request_protocol} + + ${base_path}sales/order/shipment/order_id/${orderId} + GET + true + false + true + false + false + + + + + + Track this shipment + + Assertion.response_data + false + 2 + + + + false + popupLink + popupWindow": {"windowURL":"([^'"]+)", + $1$ + + 1 + + + + + + + + + + + + ${request_protocol} + + ${popupLink} + GET + true + false + true + false + false + + + + + + <title>Tracking Information</title> + + Assertion.response_data + false + 2 + + + + + + + + + + + + + + + ${request_protocol} + + ${base_path}downloadable/customer/products + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/account_management/my_downloadable_products.jmx + + + + <title>My Downloadable Products</title> + + Assertion.response_data + false + 2 + + + + false + orderId + sales/order/view/order_id/(\d+)/ + $1$ + NOT_FOUND + 1 + + + + false + linkId + downloadable/download/link/id/(\d+)/ + $1$ + + 1 + + + + + + mpaf/tool/fragments/ce/account_management/if_downloadables.jmx + "${orderId}" != "NOT_FOUND" + false + + + + + + + + + + + ${request_protocol} + + ${base_path}sales/order/view/order_id/${orderId} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/account_management/view_downloadable_products.jmx + + + + <title>Order # + + Assertion.response_data + false + 2 + + + + + + + + + + + + + ${request_protocol} + + ${base_path}downloadable/download/link/id/${linkId} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/account_management/download_product.jmx + + + + + + + + + + + + ${request_protocol} + + ${base_path}wishlist + GET + true + false + true + false + false + + + + + + <title>My Wish List</title> + + Assertion.response_data + false + 2 + + + + false + wishlistId + wishlist/index/update/wishlist_id/([^'"]+)/ + $1$ + + 1 + mpaf/tool/fragments/ce/account_management/my_wish_list.jmx + + + + false + buttonTitle + Update Wish List + FOUND + NOT_FOUND + 1 + + + + + + mpaf/tool/fragments/ce/account_management/if_wishlist.jmx + "${buttonTitle}" === "FOUND" + false + + + + + + + + + + + ${request_protocol} + + ${base_path}wishlist/index/share/wishlist_id/${wishlistId}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/account_management/share_wish_list.jmx + + + + <title>Wish List Sharing</title> + + Assertion.response_data + false + 2 + + + + + + + + + true + ${form_key} + = + true + form_key + true + + + true + ${customer_email} + = + true + emails + + + true + [TEST] See my wishlist!!! + = + true + message + + + + + + + + ${request_protocol} + + ${base_path}wishlist/index/send/wishlist_id/${wishlistId}/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/account_management/send_wish_list.jmx + + + + <title>My Wish List</title> + + Assertion.response_data + false + 2 + + + + + + + + + + + + + + ${request_protocol} + + ${base_path}customer/account/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/logout.jmx + + + + You are signed out. + + Assertion.response_data + false + 2 + + + + + false + + + +customerUserList = props.get("customer_emails_list"); +customerUserList.add(vars.get("customer_email")); + + mpaf/tool/fragments/ce/common/return_email_to_pool.jmx + + + + + + + + + continue + + false + ${loops} + + ${adminPoolUsers} + ${ramp_period} + 1505803944000 + 1505803944000 + false + + + mpaf/tool/fragments/_system/thread_group.jmx + + + 1 + false + 1 + ${adminCMSManagementPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_address_street - + + + vars.put("testLabel", "Admin CMS Management"); + + true + - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_customer_address_telephone - + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - admin_customer_address_customer_id - + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + - - - - Accept-Language - en-US,en;q=0.5 - - - Accept - text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 - - - User-Agent - Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 - - - Accept-Encoding - gzip, deflate - - - + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx - - + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + mpaf/tool/fragments/ce/admin_cms_management/admin_cms_management.jmx + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/cms/page/ + GET + true + false + true + false + false + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/cms/page/new + GET + true + false + true + false + false + + + + - - true - true - = - true - isAjax - - - true - ${admin_customer_entity_id} - = - true - customer[entity_id] - - - true - ${admin_customer_website_id} - = - true - customer[website_id] - - - true - ${admin_customer_email} - = - true - customer[email] - - - true - ${admin_customer_group_id} - = - true - customer[group_id] - - - true - ${admin_customer_store_id} - = - true - customer[store_id] - - - true - ${admin_customer_created_at} - = - true - customer[created_at] - - - true - ${admin_customer_updated_at} - = - true - customer[updated_at] - - - true - ${admin_customer_is_active} - = - true - customer[is_active] - - - true - ${admin_customer_disable_auto_group_change} - = - true - customer[disable_auto_group_change] - - - true - ${admin_customer_created_in} - = - true - customer[created_in] - - - true - - = - true - customer[prefix] - - - true - ${admin_customer_firstname} 1 - = - true - customer[firstname] - - - true - - = - true - customer[middlename] - - - true - ${admin_customer_lastname} 1 - = - true - customer[lastname] - - - true - - = - true - customer[suffix] - - - true - ${admin_customer_dob} - = - true - customer[dob] - - - true - ${admin_customer_default_billing} - = - true - customer[default_billing] - - - true - ${admin_customer_default_shipping} - = - true - customer[default_shipping] - - - true - - = - true - customer[taxvat] - - - true - ${admin_customer_gender} - = - true - customer[gender] - - - true - ${admin_customer_failures_num} - = - true - customer[failures_num] - - - true - ${admin_customer_store_id} - = - true - customer[sendemail_store_id] - - - true - ${admin_customer_address_entity_id} - = - true - address[${admin_customer_address_entity_id}][entity_id] - - - true - ${admin_customer_address_created_at} - = - true - address[${admin_customer_address_entity_id}][created_at] - - - true - ${admin_customer_address_updated_at} - = - true - address[${admin_customer_address_entity_id}][updated_at] - - - true - ${admin_customer_address_is_active} - = - true - address[${admin_customer_address_entity_id}][is_active] - - - true - ${admin_customer_address_city} - = - true - address[${admin_customer_address_entity_id}][city] - - - true - - = - true - address[${admin_customer_address_entity_id}][company] - - - true - ${admin_customer_address_country_id} - = - true - address[${admin_customer_address_entity_id}][country_id] - - - true - ${admin_customer_address_firstname} - = - true - address[${admin_customer_address_entity_id}][firstname] - - - true - ${admin_customer_address_lastname} - = - true - address[${admin_customer_address_entity_id}][lastname] - - - true - - = - true - address[${admin_customer_address_entity_id}][middlename] - - + true - ${admin_customer_address_postcode} + <p>CMS Content ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> = true - address[${admin_customer_address_entity_id}][postcode] + content - + true = true - address[${admin_customer_address_entity_id}][prefix] - - - true - ${admin_customer_address_region} - = - true - address[${admin_customer_address_entity_id}][region] - - - true - ${admin_customer_address_region_id} - = - true - address[${admin_customer_address_entity_id}][region_id] - - - true - ${admin_customer_address_street} - = - true - address[${admin_customer_address_entity_id}][street][0] + content_heading - + true - + ${admin_form_key} = true - address[${admin_customer_address_entity_id}][street][1] + form_key - + true = true - address[${admin_customer_address_entity_id}][suffix] + identifier - + true - ${admin_customer_address_telephone} + 1 = true - address[${admin_customer_address_entity_id}][telephone] + is_active - + true = true - address[${admin_customer_address_entity_id}][vat_id] - - - true - ${admin_customer_address_customer_id} - = - true - address[${admin_customer_address_entity_id}][customer_id] - - - true - true - = - true - address[${admin_customer_address_entity_id}][default_billing] - - - true - true - = - true - address[${admin_customer_address_entity_id}][default_shipping] + layout_update_xml - + true = true - address[new_0][prefix] - - - true - John - = - true - address[new_0][firstname] + meta_description - + true = true - address[new_0][middlename] - - - true - Doe - = - true - address[new_0][lastname] + meta_keywords - + true = true - address[new_0][suffix] - - - true - Test Company - = - true - address[new_0][company] - - - true - Folsom - = - true - address[new_0][city] - - - true - 95630 - = - true - address[new_0][postcode] + meta_title - - true - 1234567890 + + false + {} = true - address[new_0][telephone] + nodes_data - + true = true - address[new_0][vat_id] - - - true - false - = - true - address[new_0][default_billing] + node_ids - + true - false + = true - address[new_0][default_shipping] + page_id - + true - 123 Main + 1column = true - address[new_0][street][0] + page_layout - + true - + 0 = true - address[new_0][street][1] + store_id[0] - + true - + CMS Title ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} = true - address[new_0][region] + title - + true - US + 0 = true - address[new_0][country_id] + website_root + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/cms/page/save/ + POST + true + false + true + false + false + + + + + + You saved the page. + + Assertion.response_data + false + 16 + + + + + 1 + 0 + ${__javaScript(Math.round(${adminCMSManagementDelay}*1000))} + + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${browseProductGridPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Browse Product Grid"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + + vars.put("gridEntityType" , "Product"); + + pagesCount = parseInt(vars.get("products_page_size")) || 20; + vars.put("grid_entity_page_size" , pagesCount); + vars.put("grid_namespace" , "product_listing"); + vars.put("grid_admin_browse_filter_text" , vars.get("admin_browse_product_filter_text")); + vars.put("grid_filter_field", "name"); + + // set sort fields and sort directions + vars.put("grid_sort_field_1", "name"); + vars.put("grid_sort_field_2", "price"); + vars.put("grid_sort_field_3", "attribute_set_id"); + vars.put("grid_sort_order_1", "asc"); + vars.put("grid_sort_order_2", "desc"); + + javascript + mpaf/tool/fragments/ce/admin_browse_products_grid/setup.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/set_pages_count.jmx + + + $.totalRecords + 0 + true + false + true + + + + entity_total_records + $.totalRecords + + + BODY + + + + + + + + var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; + var totalsRecord = parseInt(vars.get("entity_total_records")); + var pageCount = Math.round(totalsRecord/pageSize); + + vars.put("grid_pages_count", pageCount); + + javascript + + + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + ${grid_admin_browse_filter_text} + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/set_filtered_pages_count.jmx + + + $.totalRecords + 0 + true + false + true + true + + + + entity_total_records + $.totalRecords + + + BODY + + + + + + + var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; +var totalsRecord = parseInt(vars.get("entity_total_records")); +var pageCount = Math.round(totalsRecord/pageSize); + +vars.put("grid_pages_count_filtered", pageCount); + + javascript + + + + + + 1 + ${grid_pages_count} + 1 + page_number + + true + false + mpaf/tool/fragments/ce/admin_grid_browsing/select_page_number.jmx + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + ${page_number} + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid.jmx + + + + \"totalRecords\":[^0]\d* + + Assertion.response_data + false + 2 + + + + + + 1 + ${grid_pages_count_filtered} + 1 + page_number + + true + false + mpaf/tool/fragments/ce/admin_grid_browsing/select_filtered_page_number.jmx + + + + mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid_sort_and_filter.jmx + + + + grid_sort_field + grid_sort_field + true + 0 + 3 + + + + grid_sort_order + grid_sort_order + true + 0 + 2 + + + + + + + true + ${grid_namespace} + = + true + namespace + false + + + true + ${grid_admin_browse_filter_text} + = + true + filters[${grid_filter_field}] + false + + + true + true + = + true + filters[placeholder] + false + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + false + + + true + ${page_number} + = + true + paging[current] + false + + + true + ${grid_sort_field} + = + true + sorting[field] + false + + + true + ${grid_sort_order} + = + true + sorting[direction] + false + + + true + true + = + true + isAjax + false + + - - true - 12 - = - true - address[new_0][region_id] + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + + + + + \"totalRecords\":[^0]\d* + + Assertion.response_data + false + 2 + + + + + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${browseOrderGridPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Browse Order Grid"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + + vars.put("gridEntityType" , "Order"); + + pagesCount = parseInt(vars.get("orders_page_size")) || 20; + vars.put("grid_entity_page_size" , pagesCount); + vars.put("grid_namespace" , "sales_order_grid"); + vars.put("grid_admin_browse_filter_text" , vars.get("admin_browse_orders_filter_text")); + vars.put("grid_filter_field", "status"); + + // set sort fields and sort directions + vars.put("grid_sort_field_1", "increment_id"); + vars.put("grid_sort_field_2", "created_at"); + vars.put("grid_sort_field_3", "billing_name"); + vars.put("grid_sort_order_1", "asc"); + vars.put("grid_sort_order_2", "desc"); + + javascript + mpaf/tool/fragments/ce/admin_browse_orders_grid/setup.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/set_pages_count.jmx + + + $.totalRecords + 0 + true + false + true + + + + entity_total_records + $.totalRecords + + + BODY + + + + + + + + var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; + var totalsRecord = parseInt(vars.get("entity_total_records")); + var pageCount = Math.round(totalsRecord/pageSize); + + vars.put("grid_pages_count", pageCount); + + javascript + + + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + ${grid_admin_browse_filter_text} + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/set_filtered_pages_count.jmx + + + $.totalRecords + 0 + true + false + true + true + + + + entity_total_records + $.totalRecords + + + BODY + + + + + + + var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; +var totalsRecord = parseInt(vars.get("entity_total_records")); +var pageCount = Math.round(totalsRecord/pageSize); + +vars.put("grid_pages_count_filtered", pageCount); + + javascript + + + + + + 1 + ${grid_pages_count} + 1 + page_number + + true + false + mpaf/tool/fragments/ce/admin_grid_browsing/select_page_number.jmx + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + ${page_number} + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid.jmx + + + + \"totalRecords\":[^0]\d* + + Assertion.response_data + false + 2 + + + + + + 1 + ${grid_pages_count_filtered} + 1 + page_number + + true + false + mpaf/tool/fragments/ce/admin_grid_browsing/select_filtered_page_number.jmx + + + + mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid_sort_and_filter.jmx + + + + grid_sort_field + grid_sort_field + true + 0 + 3 + + + + grid_sort_order + grid_sort_order + true + 0 + 2 + + + + + + + true + ${grid_namespace} + = + true + namespace + false + + + true + ${grid_admin_browse_filter_text} + = + true + filters[${grid_filter_field}] + false + + + true + true + = + true + filters[placeholder] + false + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + false + + + true + ${page_number} + = + true + paging[current] + false + + + true + ${grid_sort_field} + = + true + sorting[field] + false + + + true + ${grid_sort_order} + = + true + sorting[direction] + false + + + true + true + = + true + isAjax + false + + - - true - ${admin_form_key} - = - true - form_key + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + + + + + \"totalRecords\":[^0]\d* + + Assertion.response_data + false + 2 + + + + + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + + + continue + + false + ${loops} - + ${csrPoolUsers} + ${ramp_period} + 1505803944000 + 1505803944000 + false + + + mpaf/tool/fragments/_system/thread_group.jmx + + + 1 + false + 1 + ${adminReturnsManagementPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Admin Returns Management"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/orders_page.jmx + + + + Create New Order + + Assertion.response_data + false + 2 + + + + + + + + + true + sales_order_grid + = + true + namespace + + + true + + = + true + search + + + true + true + = + true + filters[placeholder] + + + true + 200 + = + true + paging[pageSize] + + + true + 1 + = + true + paging[current] + + + true + increment_id + = + true + sorting[field] + + + true + desc + = + true + sorting[direction] + + + true + true + = + true + isAjax + + + true + ${admin_form_key} + = + true + form_key + false + + + true + pending + = + true + filters[status] + true + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/open_orders.jmx + + + + totalRecords + + Assertion.response_data + false + 2 + + + + + + + + + true + ${admin_form_key} + = + true + form_key + + + true + sales_order_grid + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + 200 + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + increment_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true - - - - - ${request_protocol} - - ${base_path}${admin_path}/customer/index/validate/ - POST - true - false - true - false - false - - - - - - 200 - - Assertion.response_code - false - 16 - + + true + pending + = + true + filters[status] + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/search_orders.jmx + + + + totalRecords + + Assertion.response_data + false + 2 + + + + false + order_numbers + \"increment_id\":\"(\d+)\"\, + $1$ + + -1 + simple_products + + + + false + order_ids + \"entity_id\":\"(\d+)\"\, + $1$ + + -1 + simple_products + + + + + + mpaf/tool/fragments/ce/admin_create_process_returns/setup.jmx + + import java.util.ArrayList; + import java.util.HashMap; + import org.apache.jmeter.protocol.http.util.Base64Encoder; + import java.util.Random; + + // get count of "order_numbers" variable defined in "Search Pending Orders Limit" + int ordersCount = Integer.parseInt(vars.get("order_numbers_matchNr")); + + + int clusterLength; + int threadsNumber = ctx.getThreadGroup().getNumThreads(); + if (threadsNumber == 0) { + //Number of orders for one thread + clusterLength = ordersCount; + } else { + clusterLength = Math.round(ordersCount / threadsNumber); + if (clusterLength == 0) { + clusterLength = 1; + } + } + + //Current thread number starts from 0 + int currentThreadNum = ctx.getThreadNum(); + + //Index of the current product from the cluster + Random random = new Random(); + int iterator = random.nextInt(clusterLength); + if (iterator == 0) { + iterator = 1; + } + + int i = clusterLength * currentThreadNum + iterator; + + orderNumber = vars.get("order_numbers_" + i.toString()); + orderId = vars.get("order_ids_" + i.toString()); + vars.put("order_number", orderNumber); + vars.put("order_id", orderId); + + + + + false + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order/view/order_id/${order_id}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/open_order.jmx + + + + #${order_number} + + Assertion.response_data + false + 2 + + + + false + order_status + <span id="order_status">([^<]+)</span> + $1$ + + 1 + simple_products + + + + + + "${order_status}" == "Pending" + false + mpaf/tool/fragments/ce/admin_edit_order/if_controller.jmx + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order_invoice/start/order_id/${order_id}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/invoice_start.jmx + + + + Invoice Totals + + Assertion.response_data + false + 2 + + + + false + item_ids + <div id="order_item_(\d+)_title"\s*class="product-title"> + $1$ + + -1 + simple_products + + + + + + + + + true + ${admin_form_key} + = + true + form_key + false + + + true + 1 + = + true + invoice[items][${item_ids_1}] + + + true + 1 + = + true + invoice[items][${item_ids_2}] + + + true + Invoiced + = + true + invoice[comment_text] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order_invoice/save/order_id/${order_id}/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/invoice_submit.jmx + + + + The invoice has been created + + Assertion.response_data + false + 2 + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order_creditmemo/start/order_id/${order_id}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/credit_memo_start.jmx + + + + New Memo + + Assertion.response_data + false + 2 + + + + + + + + + true + ${admin_form_key} + = + true + form_key + false + + + true + 1 + = + true + creditmemo[items][${item_ids_1}][qty] + + + true + 1 + = + true + creditmemo[items][${item_ids_2}][qty] + + + true + 1 + = + true + creditmemo[do_offline] + + + true + Credit Memo added + = + true + creditmemo[comment_text] + + + true + 10 + = + true + creditmemo[shipping_amount] + + + true + 0 + = + true + creditmemo[adjustment_positive] + + + true + 0 + = + true + creditmemo[adjustment_negative] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order_creditmemo/save/order_id/${order_id}/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/credit_memo_full_refund.jmx + + + + You created the credit memo + + Assertion.response_data + false + 2 + + + + + + 1 + 0 + ${__javaScript(Math.round(${adminCreateProcessReturnsDelay}*1000))} + mpaf/tool/fragments/ce/admin_create_process_returns/pause.jmx + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${browseCustomerGridPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Browse Customer Grid"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + - - - - - - true - true - = - true - isAjax - - - true - ${admin_customer_entity_id} - = - true - customer[entity_id] - - - true - ${admin_customer_website_id} - = - true - customer[website_id] - - - true - ${admin_customer_email} - = - true - customer[email] - - - true - ${admin_customer_group_id} - = - true - customer[group_id] - - - true - ${admin_customer_store_id} - = - true - customer[store_id] - - - true - ${admin_customer_created_at} - = - true - customer[created_at] - - - true - ${admin_customer_updated_at} - = - true - customer[updated_at] - - - true - ${admin_customer_is_active} - = - true - customer[is_active] - - - true - ${admin_customer_disable_auto_group_change} - = - true - customer[disable_auto_group_change] - - - true - ${admin_customer_created_in} - = - true - customer[created_in] - - - true - - = - true - customer[prefix] - - - true - ${admin_customer_firstname} 1 - = - true - customer[firstname] - - - true - - = - true - customer[middlename] - - - true - ${admin_customer_lastname} 1 - = - true - customer[lastname] - - - true - - = - true - customer[suffix] - - - true - ${admin_customer_dob} - = - true - customer[dob] - - - true - ${admin_customer_default_billing} - = - true - customer[default_billing] - - - true - ${admin_customer_default_shipping} - = - true - customer[default_shipping] - - - true - - = - true - customer[taxvat] - - - true - ${admin_customer_gender} - = - true - customer[gender] - - - true - ${admin_customer_failures_num} - = - true - customer[failures_num] - - - true - ${admin_customer_store_id} - = - true - customer[sendemail_store_id] - - - true - ${admin_customer_address_entity_id} - = - true - address[${admin_customer_address_entity_id}][entity_id] - + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + + vars.put("gridEntityType" , "Customer"); + + pagesCount = parseInt(vars.get("customers_page_size")) || 20; + vars.put("grid_entity_page_size" , pagesCount); + vars.put("grid_namespace" , "customer_listing"); + vars.put("grid_admin_browse_filter_text" , vars.get("admin_browse_customer_filter_text")); + vars.put("grid_filter_field", "name"); + + // set sort fields and sort directions + vars.put("grid_sort_field_1", "name"); + vars.put("grid_sort_field_2", "group_id"); + vars.put("grid_sort_field_3", "billing_country_id"); + vars.put("grid_sort_order_1", "asc"); + vars.put("grid_sort_order_2", "desc"); + + javascript + mpaf/tool/fragments/ce/admin_browse_customers_grid/setup.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/set_pages_count.jmx + + + $.totalRecords + 0 + true + false + true + + + + entity_total_records + $.totalRecords + + + BODY + + + + + + + + var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; + var totalsRecord = parseInt(vars.get("entity_total_records")); + var pageCount = Math.round(totalsRecord/pageSize); + + vars.put("grid_pages_count", pageCount); + + javascript + + + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + ${grid_admin_browse_filter_text} + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/set_filtered_pages_count.jmx + + + $.totalRecords + 0 + true + false + true + true + + + + entity_total_records + $.totalRecords + + + BODY + + + + + + + var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; +var totalsRecord = parseInt(vars.get("entity_total_records")); +var pageCount = Math.round(totalsRecord/pageSize); - - true - ${admin_customer_address_created_at} - = - true - address[${admin_customer_address_entity_id}][created_at] - - - true - ${admin_customer_address_updated_at} - = - true - address[${admin_customer_address_entity_id}][updated_at] - - - true - ${admin_customer_address_is_active} - = - true - address[${admin_customer_address_entity_id}][is_active] - - - true - ${admin_customer_address_city} - = - true - address[${admin_customer_address_entity_id}][city] - - - true - - = - true - address[${admin_customer_address_entity_id}][company] - - - true - ${admin_customer_address_country_id} - = - true - address[${admin_customer_address_entity_id}][country_id] - - - true - ${admin_customer_address_firstname} - = - true - address[${admin_customer_address_entity_id}][firstname] - - - true - ${admin_customer_address_lastname} - = - true - address[${admin_customer_address_entity_id}][lastname] - - - true - - = - true - address[${admin_customer_address_entity_id}][middlename] - - - true - ${admin_customer_address_postcode} - = - true - address[${admin_customer_address_entity_id}][postcode] - - - true - - = - true - address[${admin_customer_address_entity_id}][prefix] - - - true - ${admin_customer_address_region} - = - true - address[${admin_customer_address_entity_id}][region] - - - true - ${admin_customer_address_region_id} - = - true - address[${admin_customer_address_entity_id}][region_id] - - - true - ${admin_customer_address_street} - = - true - address[${admin_customer_address_entity_id}][street][0] - - - true - - = - true - address[${admin_customer_address_entity_id}][street][1] - - - true - - = - true - address[${admin_customer_address_entity_id}][suffix] - - - true - ${admin_customer_address_telephone} - = - true - address[${admin_customer_address_entity_id}][telephone] - - - true - - = - true - address[${admin_customer_address_entity_id}][vat_id] - - - true - ${admin_customer_address_customer_id} - = - true - address[${admin_customer_address_entity_id}][customer_id] - - - true - true - = - true - address[${admin_customer_address_entity_id}][default_billing] - - - true - true - = - true - address[${admin_customer_address_entity_id}][default_shipping] - - - true - - = - true - address[new_0][prefix] - - - true - John - = - true - address[new_0][firstname] - - - true - - = - true - address[new_0][middlename] - - - true - Doe - = - true - address[new_0][lastname] - - - true - - = - true - address[new_0][suffix] - - - true - Test Company - = - true - address[new_0][company] - - - true - Folsom - = - true - address[new_0][city] - - - true - 95630 - = - true - address[new_0][postcode] - - - true - 1234567890 - = - true - address[new_0][telephone] - - - true - - = - true - address[new_0][vat_id] - - - true - false - = - true - address[new_0][default_billing] - - - true - false - = - true - address[new_0][default_shipping] - - - true - 123 Main - = - true - address[new_0][street][0] - - - true - - = - true - address[new_0][street][1] - - - true - - = - true - address[new_0][region] - - - true - US - = - true - address[new_0][country_id] - - - true - 12 - = - true - address[new_0][region_id] - - - true - ${admin_form_key} - = - true - form_key +vars.put("grid_pages_count_filtered", pageCount); + + javascript + + + + + + 1 + ${grid_pages_count} + 1 + page_number + + true + false + mpaf/tool/fragments/ce/admin_grid_browsing/select_page_number.jmx + + + + + + + true + ${grid_namespace} + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + true + + + true + ${page_number} + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid.jmx + + + + \"totalRecords\":[^0]\d* + + Assertion.response_data + false + 2 + + + + + + 1 + ${grid_pages_count_filtered} + 1 + page_number + + true + false + mpaf/tool/fragments/ce/admin_grid_browsing/select_filtered_page_number.jmx + + + + mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid_sort_and_filter.jmx + + + + grid_sort_field + grid_sort_field + true + 0 + 3 + + + + grid_sort_order + grid_sort_order + true + 0 + 2 + + + + + + + true + ${grid_namespace} + = + true + namespace + false + + + true + ${grid_admin_browse_filter_text} + = + true + filters[${grid_filter_field}] + false + + + true + true + = + true + filters[placeholder] + false + + + true + ${grid_entity_page_size} + = + true + paging[pageSize] + false + + + true + ${page_number} + = + true + paging[current] + false + + + true + ${grid_sort_field} + = + true + sorting[field] + false + + + true + ${grid_sort_order} + = + true + sorting[direction] + false + + + true + true + = + true + isAjax + false + + - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/customer/index/save/ - POST - true - false - true - true - false - - - - - - You saved the customer. - - Assertion.response_data - false - 2 - - + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + + + + + \"totalRecords\":[^0]\d* + + Assertion.response_data + false + 2 + + + + - - 1 - 0 - ${__javaScript(Math.round(${adminCustomerManagementDelay}*1000))} - - + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + - + 1 false 1 - ${adminCMSManagementPercentage} + ${adminCreateOrderPercentage} mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx @@ -24830,7 +14094,7 @@ if (testLabel - vars.put("testLabel", "Admin CMS Management"); + vars.put("testLabel", "Admin Create Order"); true @@ -24890,10 +14154,36 @@ if (testLabel mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - mpaf/tool/fragments/ce/once_only_controller.jmx - + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + @@ -25013,11 +14303,65 @@ if (testLabel mpaf/tool/fragments/ce/simple_controller.jmx - - mpaf/tool/fragments/ce/admin_cms_management/admin_cms_management.jmx - + - + + mpaf/tool/fragments/ce/admin_create_order/admin_create_order.jmx + import org.apache.jmeter.samplers.SampleResult; +import java.util.Random; +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom}); +} +number = random.nextInt(props.get("simple_products_list").size()); +simpleList = props.get("simple_products_list").get(number); +vars.put("simple_product_1_url_key", simpleList.get("url_key")); +vars.put("simple_product_1_name", simpleList.get("title")); +vars.put("simple_product_1_id", simpleList.get("id")); + +do { + number1 = random.nextInt(props.get("simple_products_list").size()); +} while(number == number1); +simpleList = props.get("simple_products_list").get(number1); +vars.put("simple_product_2_url_key", simpleList.get("url_key")); +vars.put("simple_product_2_name", simpleList.get("title")); +vars.put("simple_product_2_id", simpleList.get("id")); + +number = random.nextInt(props.get("configurable_products_list").size()); +configurableList = props.get("configurable_products_list").get(number); +vars.put("configurable_product_1_url_key", configurableList.get("url_key")); +vars.put("configurable_product_1_name", configurableList.get("title")); +vars.put("configurable_product_1_id", configurableList.get("id")); +vars.put("configurable_product_1_sku", configurableList.get("sku")); +vars.put("configurable_attribute_id", configurableList.get("attribute_id")); +vars.put("configurable_option_id", configurableList.get("attribute_option_id")); + + +customers_index = 0; +if (!props.containsKey("customer_ids_index")) { + props.put("customer_ids_index", customers_index); +} + +try { + customers_index = props.get("customer_ids_index"); + customers_list = props.get("customer_ids_list"); + + if (customers_index == customers_list.size()) { + customers_index=0; + } + vars.put("customer_id", customers_list.get(customers_index)); + props.put("customer_ids_index", ++customers_index); +} +catch (java.lang.Exception e) { + log.error("Caught Exception in 'Admin Create Order' thread."); + SampleResult.setStopThread(true); +} + + + true + + + @@ -25027,7 +14371,7 @@ if (testLabel ${request_protocol} - ${base_path}${admin_path}/cms/page/ + ${base_path}${admin_path}/sales/order_create/start/ GET true false @@ -25035,11 +14379,206 @@ if (testLabel false false + Detected the start of a redirect chain - + + + + + + Content-Type + application/json + + + Accept + */* + + + + + + true + + + + false + {"username":"${admin_user}","password":"${admin_password}"} + = + + + + + + + + ${request_protocol} + + ${base_path}rest/V1/integration/admin/token + POST + true + false + true + false + false + + + + + admin_token + $ + + + BODY + + + + + ^[a-z0-9-]+$ + + Assertion.response_data + false + 1 + variable + admin_token + + + + + + + Authorization + Bearer ${admin_token} + + + + + + + + + + + + + ${request_protocol} + + ${base_path}rest/V1/configurable-products/${configurable_product_1_sku}/options/all + GET + true + false + true + false + false + + + + + attribute_ids + $.[*].attribute_id + NO_VALUE + + BODY + + + + option_values + $.[*].values[0].value_index + NO_VALUE + + BODY + + + + + - + + + true + item[${simple_product_1_id}][qty] + 1 + = + true + + + true + item[${simple_product_2_id}][qty] + 1 + = + true + + + true + item[${configurable_product_1_id}][qty] + 1 + = + true + + + true + customer_id + ${customer_id} + = + true + + + true + store_id + 1 + = + true + + + true + currency_id + + = + true + + + true + form_key + ${admin_form_key} + = + true + + + true + payment[method] + checkmo + = + true + + + true + reset_shipping + 1 + = + true + + + true + json + 1 + = + true + + + true + as_js_varname + iFrameResponse + = + true + + + true + form_key + ${admin_form_key} + = + true + + @@ -25047,8 +14586,108 @@ if (testLabel ${request_protocol} - ${base_path}${admin_path}/cms/page/new - GET + ${base_path}${admin_path}/sales/order_create/loadBlock/block/search,items,shipping_method,totals,giftmessage,billing_method?isAjax=true + POST + true + false + true + false + false + + Detected the start of a redirect chain + + + + false + + + try { + attribute_ids = vars.get("attribute_ids"); + option_values = vars.get("option_values"); + attribute_ids = attribute_ids.replace("[","").replace("]","").replace("\"", ""); + option_values = option_values.replace("[","").replace("]","").replace("\"", ""); + attribute_ids_array = attribute_ids.split(","); + option_values_array = option_values.split(","); + args = ctx.getCurrentSampler().getArguments(); + it = args.iterator(); + while (it.hasNext()) { + argument = it.next(); + if (argument.getStringValue().contains("${")) { + args.removeArgument(argument.getName()); + } + } + for (int i = 0; i < attribute_ids_array.length; i++) { + + ctx.getCurrentSampler().addArgument("item[" + vars.get("configurable_product_1_id") + "][super_attribute][" + attribute_ids_array[i] + "]", option_values_array[i]); + } +} catch (Exception e) { + log.error("error???", e); +} + + + + + + + + true + collect_shipping_rates + 1 + = + true + + + true + customer_id + ${customer_id} + = + true + + + true + store_id + 1 + = + true + + + true + currency_id + false + = + true + + + true + form_key + ${admin_form_key} + = + true + + + true + payment[method] + checkmo + = + true + + + true + json + true + = + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order_create/loadBlock/block/shipping_method,totals?isAjax=true + POST true false true @@ -25056,824 +14695,604 @@ if (testLabel false - - + + + + shipping_method + Flat Rate + + Assertion.response_data + false + 2 + + + + - + true - <p>CMS Content ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + form_key + ${admin_form_key} = true - content - + + true + limit + 20 + = + true + + + true + entity_id + + = + true + + true + name = true - content_heading - + true - ${admin_form_key} + email + = true - form_key - + true + Telephone = true - identifier - + + true + billing_postcode + + = + true + + + true + billing_country_id + + = + true + + + true + billing_regione + + = + true + + + true + store_name + + = + true + + true + page 1 = true - is_active - + + true + order[currency] + USD + = + true + + true + sku = true - layout_update_xml - + true + qty = true - meta_description - + + true + limit + 20 + = + true + + true + entity_id = true - meta_keywords - + true + name = true - meta_title - - false - {} + + true + sku + = true - nodes_data - + true + price[from] = true - node_ids - + true + price[to] = true - page_id - + true - 1column + in_products + = true - page_layout - + true - 0 + page + 1 = true - store_id[0] - + true - CMS Title ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + coupon_code + = true - title - + true - 0 + order[account][group_id] + 1 = true - website_root - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/cms/page/save/ - POST - true - false - true - false - false - - - - - - You saved the page. - - Assertion.response_data - false - 16 - - - - - 1 - 0 - ${__javaScript(Math.round(${adminCMSManagementDelay}*1000))} - - - - - - - - - 1 - false - 1 - ${reviewByCustomerPercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx - - - - vars.put("testLabel", "Product Review By Customer"); - - true - - - - - - - 30 - ${host} - / - false - 0 - true - true - - - ${form_key} - ${host} - ${base_path} - false - 0 - true - true - - - true - mpaf/tool/fragments/ce/http_cookie_manager.jmx - - - - mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx - -import java.util.Random; - -Random random = new Random(); -if (${seedForRandom} > 0) { - random.setSeed(${seedForRandom} + ${__threadNum}); -} - -vars.putObject("randomIntGenerator", random); - - - - true - - - - - mpaf/tool/fragments/ce/get_customer_email.jmx - -customerUserList = props.get("customer_emails_list"); -customerUser = customerUserList.poll(); -if (customerUser == null) { - SampleResult.setResponseMessage("customernUser list is empty"); - SampleResult.setResponseData("customerUser list is empty","UTF-8"); - IsSuccess=false; - SampleResult.setSuccessful(false); - SampleResult.setStopThread(true); -} -vars.put("customer_email", customerUser); - - - - true - - - - - - - - - - - - ${request_protocol} - - ${base_path}customer/account/login/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/common/open_login_page.jmx - - - - <title>Customer Login</title> - - Assertion.response_data - false - 2 - - - - - - - - - true - ${form_key} - = - true - form_key - - - true - ${customer_email} - = - true - login[username] - - - true - ${customer_password} - = - true - login[password] - - - true - - = - true - send - - - - - - - - ${request_protocol} - - ${base_path}customer/account/loginPost/ - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/common/login.jmx - - - - <title>My Account</title> - - Assertion.response_data - false - 2 - - - - false - addressId - customer/address/edit/id/([^'"]+)/ - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - addressId - - - - - - - - true - - = - true - sections - - - true - false - = - true - update_section_id - - - true - ${__time()}${__Random(1,1000000)} - = - true - _ - - - - - - - - ${request_protocol} - - ${base_path}customer/section/load/ - GET - true - false - true - false - false - - - - - - true - 1 - mpaf/tool/fragments/ce/loop_controller.jmx - - - 1 - - 1 - _counter - - true - true - - - - - -import java.util.Random; - -Random random = vars.getObject("randomIntGenerator"); -number = random.nextInt(props.get("simple_products_list").size()); -product = props.get("simple_products_list").get(number); - -vars.put("product_url_key", product.get("url_key")); -vars.put("product_id", product.get("id")); -vars.put("product_name", product.get("title")); -vars.put("product_uenc", product.get("uenc")); -vars.put("product_sku", product.get("sku")); - - - - true - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx - - - - - + + true + order[account][email] + user_${customer_id}@example.com + = + true + + + true + order[billing_address][customer_address_id] + + = + true + + + true + order[billing_address][prefix] + + = + true + + + true + order[billing_address][firstname] + Anthony + = + true + + + true + order[billing_address][middlename] + + = + true + + + true + order[billing_address][lastname] + Nealy + = + true - - - - - ${request_protocol} - - ${base_path}${product_url_key}${url_suffix} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx - - - - <span>In stock</span> - - Assertion.response_data - false - 2 - - - - - - - - - true - ${form_key} - = - true - form_key - - - true - 3 - = - true - ratings[1] - - - true - - = - true - validate_rating - - - true - FirstName - = - true - nickname - - - true - Some Review Title - = - true - title - - - true - Some Review Text - = - true - detail - - - - - - - - ${request_protocol} - - ${base_path}review/product/post/id/${product_id} - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/product_review/product_review.jmx - - - - HTTP/1.1 200 OK - - Assertion.response_headers - false - 16 - - - - - - - - - true - review,messages - = - true - sections - - - true - false - = - true - update_section_id - - - true - ${__time()}${__Random(1,1000000)} - = - true - _ - - - - - - - - ${request_protocol} - - ${base_path}customer/section/load/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/product_review/load_review.jmx - - - - 1 - 0 - ${__javaScript(Math.round(${reviewDelay}*1000))} - mpaf/tool/fragments/ce/product_review/product_review_pause.jmx - - - - - - - - - - - - ${request_protocol} - - ${base_path}customer/account/logout/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/common/logout.jmx - - - - You are signed out. - - Assertion.response_data - false - 2 - - - - - - - - 1 - false - 1 - ${apiBasePercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx + + true + order[billing_address][suffix] + + = + true + + + true + order[billing_address][company] + + = + true + + + true + order[billing_address][street][0] + 123 Freedom Blvd. #123 + = + true + + + true + order[billing_address][street][1] + + = + true + + + true + order[billing_address][city] + Fayetteville + = + true + + + true + order[billing_address][country_id] + US + = + true + + + true + order[billing_address][region] + + = + true + + + true + order[billing_address][region_id] + 5 + = + true + + + true + order[billing_address][postcode] + 123123 + = + true + + + true + order[billing_address][telephone] + 022-333-4455 + = + true + + + true + order[billing_address][fax] + + = + true + + + true + order[billing_address][vat_id] + + = + true + + + true + shipping_same_as_billing + on + = + true + + + true + payment[method] + checkmo + = + true + + + true + order[shipping_method] + flatrate_flatrate + = + true + + + true + order[comment][customer_note] + + = + true + + + true + order[comment][customer_note_notify] + 1 + = + true + + + true + order[send_confirmation] + 1 + = + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order_create/save/ + POST + true + false + true + true + false + + Detected the start of a redirect chain + + + + false + order_id + ${host}${base_path}${admin_path}/sales/order/index/order_id/(\d+)/ + $1$ + + 1 + - - - vars.put("testLabel", "API"); - - true - + + false + order_item_1 + order_item_(\d+)_title + $1$ + + 1 + - - - - - Content-Type - application/json - - - Accept - */* - - - mpaf/tool/fragments/ce/api/header_manager_before_token.jmx - - - - true - - - - false - {"username":"${admin_user}","password":"${admin_password}"} - = - - - - - - - - ${request_protocol} - - ${base_path}rest/V1/integration/admin/token - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/api/admin_token_retrieval.jmx - - - admin_token - $ - - - BODY - - - - - ^[a-z0-9-]+$ - - Assertion.response_data - false - 1 - variable - admin_token - - - - - - - - Authorization - Bearer ${admin_token} + + false + order_item_2 + order_item_(\d+)_title + $1$ + + 2 + + + + false + order_item_3 + order_item_(\d+)_title + $1$ + + 3 + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + order_id + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + order_item_1 + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + order_item_2 + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + order_item_3 + + + + + You created the order. + + Assertion.response_data + false + 2 + + + + + + + + true + form_key + ${admin_form_key} + = + true + + + true + invoice[items][${order_item_1}] + 1 + = + true + + + true + invoice[items][${order_item_2}] + 1 + = + true + + + true + invoice[items][${order_item_3}] + 1 + = + true + + + true + invoice[comment_text] + + = + true + + - - mpaf/tool/fragments/ce/api/header_manager.jmx - - - - 1 - false - 1 - 100 - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order_invoice/save/order_id/${order_id}/ + POST + true + false + true + false + false + + Detected the start of a redirect chain + + + + + The invoice has been created. + + Assertion.response_data + false + 2 + - - - vars.put("testLabel", "API Create Customer"); - - true - + + + + + + true + form_key + ${admin_form_key} + = + true + + + true + shipment[items][${order_item_1}] + 1 + = + true + + + true + shipment[items][${order_item_2}] + 1 + = + true + + + true + shipment[items][${order_item_3}] + 1 + = + true + + + true + shipment[comment_text] + + = + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/order_shipment/save/order_id/${order_id}/ + POST + true + false + true + false + false + + Detected the start of a redirect chain + + + + + The shipment has been created. + + Assertion.response_data + false + 2 + - - - true - - - - false - { - "customer": { - - "email": "customer_${__time()}-${__threadNum}-${__Random(1,1000000)}@example.com", - "firstname": "test_${__time()}-${__threadNum}-${__Random(1,1000000)}", - "lastname": "Doe" - }, - "password": "test@123" -} - = - - - - - - - - ${request_protocol} - - ${base_path}rest/default/V1/customers - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/api/create_customer.jmx - - - customer_id - $.id - - - BODY - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - customer_id - - + + - + @@ -25883,7 +15302,7 @@ if (testLabel ${request_protocol} - ${base_path}rest/default/V1/customers/${customer_id} + ${base_path}${admin_path}/admin/auth/logout/ GET true false @@ -25891,287 +15310,45 @@ if (testLabel false false - mpaf/tool/fragments/ce/api/check_customer.jmx + mpaf/tool/fragments/ce/setup/admin_logout.jmx - - $.id - ${customer_id} - true - false - false - - - + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + - - - 1 - false - 1 - 100 - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx - - - - vars.put("testLabel", "API Product Attribute Management"); - - true - - - - - true - - - - false - { - "attributeSet": { - "attribute_set_name": "new_attribute_set_${__time()}-${__threadNum}-${__Random(1,1000000)}", - "sort_order": 500 - }, - "skeletonId": "4" -} - = - - - - - - - - ${request_protocol} - - ${base_path}rest/default/V1/products/attribute-sets/ - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/api/create_attribute_set.jmx - - - attribute_set_id - $.attribute_set_id - - - BODY - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - attribute_set_id - - - - - - true - - - - false - { - "group": { - "attribute_group_name": "empty_attribute_group_${__time()}-${__threadNum}-${__Random(1,1000000)}", - "attribute_set_id": ${attribute_set_id} - } -} - = - - - - - - - - ${request_protocol} - - ${base_path}rest/default/V1/products/attribute-sets/groups - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/api/create_attribute_group.jmx - - - attribute_group_id - $.attribute_group_id - - - BODY - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - attribute_set_id - - - - - - true - - - - false - { - "attribute": { - "attribute_code": "attr_code_${__time()}", - "frontend_labels": [ - { - "store_id": 0, - "label": "front_lbl_${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}" - } - ], - "default_value": "default value", - "frontend_input": "textarea", - "is_required": true - } -} - = - - - - - - - - ${request_protocol} - - ${base_path}rest/default/V1/products/attributes/ - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/api/create_attribute.jmx - - - attribute_id - $.attribute_id - - - BODY - - - - attribute_code - $.attribute_code - - - BODY - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - attribute_id - - - - - ^[a-z0-9-_]+$ - - Assertion.response_data - false - 1 - variable - attribute_code - - - - - - true - - - - false - { - "attributeSetId": "${attribute_set_id}", - "attributeGroupId": "${attribute_group_id}", - "attributeCode": "${attribute_code}", - "sortOrder": 3 -} - = - - - - - - - - ${request_protocol} - - ${base_path}rest/default/V1/products/attribute-sets/attributes - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/api/add_attribute_to_attribute_set.jmx - - - $ - (\d+) - true - false - false - - - - - + + + continue + + false + ${loops} + + ${apiPoolUsers} + ${ramp_period} + 1505803944000 + 1505803944000 + false + + + mpaf/tool/fragments/_system/thread_group.jmx + + 1 false 1 - 100 + ${apiBasePercentage} mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx @@ -26192,257 +15369,33 @@ if (testLabel - vars.put("testLabel", "API Product Management"); + vars.put("testLabel", "API"); true - - true - - - - false - { - "product": { - "sku": "psku-test-${__time()}-${__threadNum}-${__Random(1,1000000)}", - "name": "Product_${__time()}-${__threadNum}-${__Random(1,1000000)}", - "attributeSetId": 4 - } -} - = - - - - - - - - ${request_protocol} - - ${base_path}rest/default/V1/products - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/api/create_product_no_custom_attributes.jmx - - - simple_product_id - $.id - - - BODY - - - - simple_product_sku - $.sku - - - BODY - - - - simple_stock_item_id - $.extension_attributes.stock_item.item_id - - - BODY - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - simple_product_id - - - - - ^[a-z0-9-]+$ - - Assertion.response_data - false - 1 - variable - simple_product_sku - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - simple_stock_item_id - - - - - - true - - - - false - { - "stock_item": { - "manage_stock": true, - "is_in_stock": true, - "qty": ${simple_product_id} - } - } - = - - - - - - - - ${request_protocol} - - ${base_path}rest/default/V1/products/${simple_product_sku}/stockItems/${simple_stock_item_id} - PUT - true - false - true - false - false - - mpaf/tool/fragments/ce/api/update_product_stock_info.jmx - - - $ - ${simple_stock_item_id} - true - false - false - - - - - - true - - - - true - - = - - - - - - - - ${request_protocol} - - ${base_path}rest/default/V1/products/${simple_product_sku} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/api/check_product.jmx - - - $.sku - ${simple_product_sku} - true - false - false - - - - $.id - ${simple_product_id} - true - false - false - - - - $.extension_attributes.stock_item.item_id - ${simple_stock_item_id} - true - false - false - - - - $.extension_attributes.stock_item.qty - ${simple_product_id} - true - false - false - - - + + + + Content-Type + application/json + + + Accept + */* + + + mpaf/tool/fragments/ce/api/header_manager_before_token.jmx + - + true false - { - "product": { - "sku": "apsku-test-${__time()}-${__threadNum}-${__Random(1,1000000)}", - "name": "Extensible_Product_${__time()}-${__threadNum}-${__Random(1,1000000)}", - "visibility": "4", - "type_id": "simple", - "price": "3.62", - "status": "1", - "attribute_set_id": "4", - "custom_attributes": [ - { - "attribute_code": "cost", - "value": "" - }, - { - "attribute_code": "description", - "value": "Description" - } - ], - "extension_attributes":{ - "stock_item":{ - "manage_stock": true, - "is_in_stock": true, - "qty":"100" - } - } , - "media_gallery_entries": - [{ - "id": null, - "label":"test_label_${__time()}-${__threadNum}-${__Random(1,1000000)}", - "position":1, - "disabled":false, - "media_type":"image", - "types":["image"], - "content":{ - "base64_encoded_data": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABgAGADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iioLy8t9Ps5bu7lWKCIZd26KKaTbshpX0RPRXN/8J/4V/6DVv8Ak3+FH/Cf+Ff+g1b/AJN/hXR9SxP/AD7l9zNPYVf5X9x0lFc3/wAJ/wCFf+g1b/k3+FH/AAn/AIV/6DVv+Tf4UfUsT/z7l9zD2FX+V/cdJRXN/wDCf+Ff+g1b/k3+FH/Cf+Ff+g1b/k3+FH1LE/8APuX3MPYVf5X9x0lFc3/wn/hX/oNW/wCTf4Uf8J/4V/6DVv8Ak3+FH1LE/wDPuX3MPYVf5X9x0lFVdP1G01WyS8sZ1nt3JCyL0ODg/qKtVzyi4u0lZmbTTswrm/H3/Iiav/1x/wDZhXSVzfj7/kRNX/64/wDswrowf+80/wDEvzNKH8WPqj5voorB1zS7OLT7m7SHE5YNu3HqWGeM471+kYutOhSdSEU7Jt3dtF20f6H1FacqcHJK9vO36M3qKzTa6foqPdxwlWxswrFi2T0AJ9aRdVmjkT7XYSW8TsFEm8MAT0yB0qfrcafu1tJeV2l2u7K3zsL2yjpPR+V3+NjTorPn1GVbt7a1s2uJIwDJ84ULnpyaik1SWTTrp47Z0uIQRJGzAFOPvZ70Sx1GLau9L9H03SdrNrsgdeCuu3k+hq0VR0ma4msImuIih2LtYvuLjA+b2zV6uijUVWmprqaQkpxUl1PoP4Xf8iBYf78v/oxq7GuO+F3/ACIFh/vy/wDoxq7GvzTMf98q/wCJ/mfLYn+NP1YVzfj7/kRNX/64/wDswrpK5vx9/wAiJq//AFx/9mFRg/8Aeaf+JfmTQ/ix9UfN9ZniD/kB3H/Af/QhWnTZI45kKSIroeqsMg1+l4mk61GdNfaTX3o+pqw54Sj3Rma/GXsI3BcLFMruU+8F5yR+dUZ4tOeNFOq3tx5jACNZg5J+mK6PrUMdrbxPvjgiR/7yoAa48TgPa1HNW1STvfp2s1+JjVw/PJy017mbe/YTqTB7iWzuQgPmhtocfjwajiupbjTtTieUXCxRsqTKMb8qePwrYlghnAE0UcgHQOoP86ckaRoERFVR/CowKbwU3UclJJO+19brqr203vvoHsJczd7J3/H8PmVNJnhm063WOVHZIkDhTkqcd/yNXajighg3eTFHHu67FAz+VSV2UIShTjGe67G9NOMUpbn0H8Lv+RAsP9+X/wBGNXY1x3wu/wCRAsP9+X/0Y1djX5tmP++Vf8T/ADPl8T/Gn6sK5vx9/wAiJq//AFx/9mFdJXN+Pv8AkRNX/wCuP/swqMH/ALzT/wAS/Mmh/Fj6o+b6KKK/Uj60KKKKACiiigAooooA+g/hd/yIFh/vy/8Aoxq7GuO+F3/IgWH+/L/6Mauxr8wzH/fKv+J/mfKYn+NP1YVzfj7/AJETV/8Arj/7MK6Sub8ff8iJq/8A1x/9mFRg/wDeaf8AiX5k0P4sfVHzfRRRX6kfWhRRRQAUUUUAFFFFAH0H8Lv+RAsP9+X/ANGNXY1x3wu/5ECw/wB+X/0Y1djX5hmP++Vf8T/M+UxP8afqwqC8s7fULOW0u4llglGHRujCp6K5E2ndGKdtUc3/AMIB4V/6Atv+bf40f8IB4V/6Atv+bf410lFdH13E/wDPyX3s09vV/mf3nN/8IB4V/wCgLb/m3+NH/CAeFf8AoC2/5t/jXSUUfXcT/wA/Jfew9vV/mf3nN/8ACAeFf+gLb/m3+NH/AAgHhX/oC2/5t/jXSUUfXcT/AM/Jfew9vV/mf3nN/wDCAeFf+gLb/m3+NH/CAeFf+gLb/m3+NdJRR9dxP/PyX3sPb1f5n95V0/TrTSrJLOxgWC3QkrGvQZOT+pq1RRXPKTk7yd2Zttu7P//Z", - "type": "image/jpeg", - "name": "test_image_${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}.jpeg" - } - } - ] - } -} + {"username":"${admin_user}","password":"${admin_password}"} = @@ -26453,7 +15406,7 @@ if (testLabel ${request_protocol} - ${base_path}rest/default/V1/products + ${base_path}rest/V1/integration/admin/token POST true false @@ -26461,44 +15414,17 @@ if (testLabel false false - mpaf/tool/fragments/ce/api/create_product_with_extensible_data_objects.jmx + mpaf/tool/fragments/ce/api/admin_token_retrieval.jmx - - simple_product_id - $.id - - - BODY - - - - simple_product_sku - $.sku - - - BODY - - - - simple_stock_item_id - $.extension_attributes.stock_item.item_id + + admin_token + $ BODY - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - simple_product_id - - - + ^[a-z0-9-]+$ @@ -26506,86 +15432,22 @@ if (testLabel false 1 variable - simple_product_sku - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - simple_stock_item_id + admin_token - - true - - - - true - - = - - - - - - - - ${request_protocol} - - ${base_path}rest/default/V1/products/${simple_product_sku} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/api/check_product_with_extensible_data_objects.jmx - - - $.sku - ${simple_product_sku} - true - false - false - - - - $.id - ${simple_product_id} - true - false - false - - - - $.extension_attributes.stock_item.item_id - ${simple_stock_item_id} - true - false - false - - - - $.extension_attributes.stock_item.qty - 100 - true - false - false - - - - - + + + + Authorization + Bearer ${admin_token} + + + mpaf/tool/fragments/ce/api/header_manager.jmx + - + 1 false 1 @@ -26610,64 +15472,28 @@ if (testLabel - vars.put("testLabel", "API Process Orders"); + vars.put("testLabel", "API Create Customer"); true - - // Each thread gets an equal number of orders, based on how many orders are available. - - int apiProcessOrders = Integer.parseInt("${apiProcessOrders}"); - if (apiProcessOrders > 0) { - ordersPerThread = apiProcessOrders; - } else { - ordersPerThread = 1; - } - - - threadNum = ${__threadNum}; - vars.put("ordersPerThread", String.valueOf(ordersPerThread)); - vars.put("threadNum", String.valueOf(threadNum)); - - - - - false - mpaf/tool/fragments/ce/api/process_orders/setup.jmx - - - - + + true + - - true - status - = - true - searchCriteria[filterGroups][0][filters][0][field] - - - true - Pending - = - true - searchCriteria[filterGroups][0][filters][0][value] - - - true - ${ordersPerThread} - = - true - searchCriteria[pageSize] - - - true - ${threadNum} + + false + { + "customer": { + + "email": "customer_${__time()}-${__threadNum}-${__Random(1,1000000)}@example.com", + "firstname": "test_${__time()}-${__threadNum}-${__Random(1,1000000)}", + "lastname": "Doe" + }, + "password": "test@123" +} = - true - searchCriteria[current_page] @@ -26677,64 +15503,38 @@ if (testLabel ${request_protocol} - ${base_path}rest/default/V1/orders - GET + ${base_path}rest/default/V1/customers + POST true false true false false - mpaf/tool/fragments/ce/api/process_orders/get_orders.jmx + mpaf/tool/fragments/ce/api/create_customer.jmx - - entity_ids - $.items[*].entity_id + + customer_id + $.id BODY - - - - entity_ids - order_id - true - mpaf/tool/fragments/ce/api/process_orders/for_each_order.jmx - - - - - - - - - - ${request_protocol} - - ${base_path}rest/default/V1/order/${order_id}/invoice - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/api/process_orders/create_invoice.jmx - - + - "\d+" + ^\d+$ Assertion.response_data false - 2 + 1 + variable + customer_id - + @@ -26744,28 +15544,26 @@ if (testLabel ${request_protocol} - ${base_path}rest/default/V1/order/${order_id}/ship - POST + ${base_path}rest/default/V1/customers/${customer_id} + GET true false true false false - mpaf/tool/fragments/ce/api/process_orders/create_shipment.jmx + mpaf/tool/fragments/ce/api/check_customer.jmx - - - "\d+" - - Assertion.response_data - false - 2 - + + $.id + ${customer_id} + true + false + false + - @@ -27085,6 +15883,44 @@ if (testLabel + + mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx + +import java.util.Random; + +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); +} + +vars.putObject("randomIntGenerator", random); + + + + true + + + + + +import java.util.Random; + +Random random = vars.getObject("randomIntGenerator"); +number = random.nextInt(props.get("simple_products_list").size()); +product = props.get("simple_products_list").get(number); + +vars.put("product_url_key", product.get("url_key")); +vars.put("product_id", product.get("id")); +vars.put("product_name", product.get("title")); +vars.put("product_uenc", product.get("uenc")); +vars.put("product_sku", product.get("sku")); + + + + true + mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx + + @@ -27134,7 +15970,7 @@ if (testLabel false { "cartItem": { - "sku": "product_dynamic_${search_product_id}", + "sku": "${product_sku}", "qty":"1", "quote_id":"${quote_id}" } @@ -27163,7 +15999,7 @@ if (testLabel $.sku - product_dynamic_${search_product_id} + ${product_sku} true false false @@ -27193,7 +16029,7 @@ if (testLabel $[0].sku - product_dynamic_${search_product_id} + ${product_sku} true false false @@ -27255,17 +16091,502 @@ if (testLabel true - - false - { - "cartItem": { - "sku": "product_dynamic_${search_product_id}", - "qty":"1", - "quote_id":"${cart_id}" - } -} - + + false + { + "cartItem": { + "sku": "${product_sku}", + "qty":"1", + "quote_id":"${cart_id}" + } +} + + = + + + + + + + + ${request_protocol} + + ${base_path}rest/default/V1/guest-carts/${cart_id}/items + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/api/add_product_to_guest_cart_hardwired_sku.jmx + + + $.quote_id + ^[a-z0-9-]+$ + true + false + false + + + + + + true + + + + false + { + "sender": "John Doe", + "recipient": "Jane Roe", + "giftMessage": "Gift Message Text" +} + + = + + + + + + + + ${request_protocol} + + ${base_path}rest/default/V1/guest-carts/${cart_id}/gift-message + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/api/add_gift_message_to_guest_cart.jmx + + + $ + true + true + false + false + + + + + + true + + + + false + {"address":{"country_id":"US","postcode":"95630"}} + = + + + + + + + + ${request_protocol} + + ${base_path}rest/default/V1/guest-carts/${cart_id}/estimate-shipping-methods + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/guest_checkout/checkout_estimate_shipping_methods_with_postal_code.jmx + + + + + Referer + ${base_path}checkout/onepage/ + + + Content-Type + application/json; charset=UTF-8 + + + X-Requested-With + XMLHttpRequest + + + Accept + application/json + + + + + + + "available":true + + Assertion.response_data + false + 2 + + + + + + true + + + + false + {"addressInformation":{"shipping_address":{"countryId":"US","regionId":"12","regionCode":"CA","region":"California","street":["10441 Jefferson Blvd ste 200"],"company":"","telephone":"3109450345","fax":"","postcode":"90232","city":"Culver City","firstname":"Name","lastname":"Lastname"},"shipping_method_code":"flatrate","shipping_carrier_code":"flatrate"}} + = + + + + + + + + ${request_protocol} + + ${base_path}rest/default/V1/guest-carts/${cart_id}/shipping-information + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/guest_checkout/checkout_billing_shipping_information.jmx + + + + + Referer + ${base_path}checkout/onepage/ + + + Content-Type + application/json; charset=UTF-8 + + + X-Requested-With + XMLHttpRequest + + + Accept + application/json + + + + + + + {"payment_methods": + + Assertion.response_data + false + 2 + + + + + + true + + + + false + {"cartId":"${cart_id}","email":"test@example.com","paymentMethod":{"method":"checkmo","po_number":null,"additional_data":null},"billingAddress":{"countryId":"US","regionId":"12","regionCode":"CA","region":"California","street":["10441 Jefferson Blvd ste 200"],"company":"","telephone":"3109450345","fax":"","postcode":"90232","city":"Culver City","firstname":"Name","lastname":"Lastname","save_in_address_book":0}} + = + + + + + + + + ${request_protocol} + + ${base_path}rest/default/V1/guest-carts/${cart_id}/payment-information + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/api/checkout_payment_info_place_order.jmx + + + + + Referer + ${base_path}checkout/onepage/ + + + Content-Type + application/json; charset=UTF-8 + + + X-Requested-With + XMLHttpRequest + + + Accept + application/json + + + + + + + "[0-9]+" + + Assertion.response_data + false + 2 + + + + order_id + $ + + + BODY + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + order_id + + + + + + + + + + + + continue + + false + ${loops} + + ${deadLocksPoolUsers} + ${ramp_period} + 1505803944000 + 1505803944000 + false + + + mpaf/tool/fragments/_system/thread_group.jmx + + + 1 + false + 1 + ${productGridMassActionPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Product Grid Mass Actions"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} = + true + login[username] @@ -27275,39 +16596,107 @@ if (testLabel ${request_protocol} - ${base_path}rest/default/V1/guest-carts/${cart_id}/items + ${base_path}${admin_path}/admin/dashboard/ POST true false true false + Java false - mpaf/tool/fragments/ce/api/add_product_to_guest_cart_hardwired_sku.jmx + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + - - $.quote_id - ^[a-z0-9-]+$ - true - false - false - - + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + - - true - + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + - - false - { - "sender": "John Doe", - "recipient": "Jane Roe", - "giftMessage": "Gift Message Text" -} - + + true + ${admin_form_key} + = + true + form_key + + + true + product_listing + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + 20 + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true = + true + isAjax + true @@ -27317,34 +16706,159 @@ if (testLabel ${request_protocol} - ${base_path}rest/default/V1/guest-carts/${cart_id}/gift-message - POST + ${base_path}${admin_path}/mui/index/render/ + GET true false true false false - mpaf/tool/fragments/ce/api/add_gift_message_to_guest_cart.jmx + mpaf/tool/fragments/ce/admin_browse_products_grid/get_product_pages_count.jmx - - $ - true + + $.totalRecords + 0 true false - false + true + + products_number + $.totalRecords + + + BODY + + + + false + + + var productsPageSize = Integer.parseInt(vars.get("products_page_size")); +var productsTotal = Integer.parseInt(vars.get("products_number")); +var pageCountProducts = Math.round(productsTotal/productsPageSize); + +vars.put("pages_count_product", String.valueOf(pageCountProducts)); + + - - true - + + +import java.util.Random; +Random random = new Random(); +if (${seedForRandom} > 0) { +random.setSeed(${seedForRandom}); +} +var productsPageSize = Integer.parseInt(vars.get("products_page_size")); +var totalNumberOfPages = Integer.parseInt(vars.get("pages_count_product")); + +// Randomly select a page. +var randomProductsPage = random.nextInt(totalNumberOfPages) + 1; + +// Get the first and last product id on that page. +var lastProductIdOnPage = randomProductsPage * productsPageSize; +var firstProductIdOnPage = lastProductIdOnPage - productsPageSize + 1; + +var randomProductId1 = Math.floor(random.nextInt(productsPageSize)) + firstProductIdOnPage; +var randomProductId2 = Math.floor(random.nextInt(productsPageSize)) + firstProductIdOnPage; +var randomProductId3 = Math.floor(random.nextInt(productsPageSize)) + firstProductIdOnPage; + +vars.put("page_number", String.valueOf(randomProductsPage)); +vars.put("productId1", String.valueOf(randomProductId1)); +vars.put("productId2", String.valueOf(randomProductId2)); +vars.put("productId3", String.valueOf(randomProductId3)); + +var randomQuantity = random.nextInt(1000) + 1; +var randomPrice = random.nextInt(500) + 10; +var randomVisibility = random.nextInt(4) + 1; + +vars.put("quantity", String.valueOf(randomQuantity)); +vars.put("price", String.valueOf(randomPrice)); +vars.put("visibility", String.valueOf(randomVisibility)); + + + + false + mpaf/tool/fragments/ce/admin_browse_products_grid/products_grid_mass_actions/setup.jmx + + + + - - false - {"address":{"country_id":"US","postcode":"95630"}} + + true + ${admin_form_key} + = + true + form_key + true + + + true + product_listing + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + ${products_page_size} + = + true + paging[pageSize] + true + + + true + ${page_number} + = + true + paging[current] + true + + + true + entity_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true = + true + isAjax + true @@ -27354,40 +16868,19 @@ if (testLabel ${request_protocol} - ${base_path}rest/default/V1/guest-carts/${cart_id}/estimate-shipping-methods - POST + ${base_path}${admin_path}/mui/index/render/ + GET true false true false false - mpaf/tool/fragments/ce/guest_checkout/checkout_estimate_shipping_methods_with_postal_code.jmx + mpaf/tool/fragments/ce/admin_browse_products_grid/products_grid_mass_actions/display_grid.jmx - - - - Referer - ${base_path}checkout/onepage/ - - - Content-Type - application/json; charset=UTF-8 - - - X-Requested-With - XMLHttpRequest - - - Accept - application/json - - - - - + - "available":true + totalRecords Assertion.response_data false @@ -27396,14 +16889,54 @@ if (testLabel - - true - + + - - false - {"addressInformation":{"shipping_address":{"countryId":"US","regionId":"12","regionCode":"CA","region":"California","street":["10441 Jefferson Blvd ste 200"],"company":"","telephone":"3109450345","fax":"","postcode":"90232","city":"Culver City","firstname":"Name","lastname":"Lastname"},"shipping_method_code":"flatrate","shipping_carrier_code":"flatrate"}} + + true + ${productId1} + = + true + selected[0] + + + true + ${productId2} + = + true + selected[1] + + + true + ${productId3} + = + true + selected[2] + true + + + true + true + = + true + filters[placeholder] + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + product_listing = + true + namespace + false @@ -27413,40 +16946,19 @@ if (testLabel ${request_protocol} - ${base_path}rest/default/V1/guest-carts/${cart_id}/shipping-information - POST + ${base_path}${admin_path}/catalog/product_action_attribute/edit + GET true false true false false - mpaf/tool/fragments/ce/guest_checkout/checkout_billing_shipping_information.jmx + mpaf/tool/fragments/ce/admin_browse_products_grid/products_grid_mass_actions/display_update_attributes.jmx - - - - Referer - ${base_path}checkout/onepage/ - - - Content-Type - application/json; charset=UTF-8 - - - X-Requested-With - XMLHttpRequest - - - Accept - application/json - - - - - + - {"payment_methods": + Update Attributes Assertion.response_data false @@ -27455,16 +16967,219 @@ if (testLabel - - true - - - - false - {"cartId":"${cart_id}","email":"test@example.com","paymentMethod":{"method":"checkmo","po_number":null,"additional_data":null},"billingAddress":{"countryId":"US","regionId":"12","regionCode":"CA","region":"California","street":["10441 Jefferson Blvd ste 200"],"company":"","telephone":"3109450345","fax":"","postcode":"90232","city":"Culver City","firstname":"Name","lastname":"Lastname","save_in_address_book":0}} - = - - + + + + + true + true + = + true + isAjax + true + + + true + ${admin_form_key} + = + true + form_key + true + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 1 + = + true + product[use_config_gift_message_available] + true + + + true + 1 + = + true + product[use_config_gift_wrapping_available] + true + + + true + ${quantity} + = + true + inventory[qty] + true + + + true + ${price} + = + true + attributes[price] + + + true + ${visibility} + = + true + attributes[visibility] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product_action_attribute/validate + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_browse_products_grid/products_grid_mass_actions/change_attributes.jmx + + + + {"error":false} + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 1 + = + true + product[use_config_gift_message_available] + + + true + 1 + = + true + product[use_config_gift_wrapping_available] + true + + + true + ${quantity} + = + true + inventory[qty] + + + true + on + = + true + toggle_price + true + + + true + ${price} + = + true + attributes[price] + + + true + on + = + true + toggle_price + true + + + true + ${visibility} + = + true + attributes[visibility] + + + true + on + = + true + toggle_visibility + true + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product_action_attribute/save/store/0/active_tab/attributes + POST + true + false + true + true + false + + + + + + were updated. + + Assertion.response_data + false + 2 + + + + + + + + @@ -27472,76 +17187,36 @@ if (testLabel ${request_protocol} - ${base_path}rest/default/V1/guest-carts/${cart_id}/payment-information - POST + ${base_path}${admin_path}/admin/auth/logout/ + GET true false true false false - mpaf/tool/fragments/ce/api/checkout_payment_info_place_order.jmx + mpaf/tool/fragments/ce/setup/admin_logout.jmx - - - - Referer - ${base_path}checkout/onepage/ - - - Content-Type - application/json; charset=UTF-8 - - - X-Requested-With - XMLHttpRequest - - - Accept - application/json - - - - - - - "[0-9]+" - - Assertion.response_data - false - 2 - - - - order_id - $ - - - BODY - - - - - ^\d+$ - - Assertion.response_data - false - 1 - variable - order_id - - - + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + - - + 1 false 1 - ${productGridMassActionPercentage} + ${importProductsPercentage} mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx @@ -27562,7 +17237,7 @@ if (testLabel - vars.put("testLabel", "Product Grid Mass Actions"); + vars.put("testLabel", "Import Products"); true @@ -27622,10 +17297,36 @@ if (testLabel mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - mpaf/tool/fragments/ce/once_only_controller.jmx - + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + @@ -27739,82 +17440,27 @@ if (testLabel mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + - + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + vars.put("entity", "catalog_product"); +String behavior = "${adminImportProductBehavior}"; +vars.put("adminImportBehavior", behavior); +String filepath = "${files_folder}${adminImportProductFilePath}"; +vars.put("adminImportFilePath", filepath); + + + true + mpaf/tool/fragments/ce/import_products/setup.jmx + + + - - - true - ${admin_form_key} - = - true - form_key - - - true - product_listing - = - true - namespace - true - - - true - - = - true - search - true - - - true - true - = - true - filters[placeholder] - true - - - true - 20 - = - true - paging[pageSize] - true - - - true - 1 - = - true - paging[current] - true - - - true - entity_id - = - true - sorting[field] - true - - - true - asc - = - true - sorting[direction] - true - - - true - true - = - true - isAjax - true - - + @@ -27822,7 +17468,7 @@ if (testLabel ${request_protocol} - ${base_path}${admin_path}/mui/index/render/ + ${base_path}${admin_path}/admin/import/ GET true false @@ -27830,85 +17476,20 @@ if (testLabel false false - mpaf/tool/fragments/ce/admin_browse_products_grid/get_product_pages_count.jmx + mpaf/tool/fragments/ce/common/import.jmx - - $.totalRecords - 0 - true - false - true - - - - products_number - $.totalRecords - - - BODY - - - - false - - - var productsPageSize = Integer.parseInt(vars.get("products_page_size")); -var productsTotal = Integer.parseInt(vars.get("products_number")); -var pageCountProducts = Math.round(productsTotal/productsPageSize); - -vars.put("pages_count_product", String.valueOf(pageCountProducts)); - + + + Import Settings + + Assertion.response_data + false + 2 + - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - -import java.util.Random; -Random random = new Random(); -if (${seedForRandom} > 0) { - random.setSeed(${seedForRandom}); -} -var productsPageSize = Integer.parseInt(vars.get("products_page_size")); -var totalNumberOfPages = Integer.parseInt(vars.get("pages_count_product")); - -// Randomly select a page. -var randomProductsPage = Math.floor((0.555 * totalNumberOfPages) + 1); - -// Get the first and last product id on that page. -var lastProductIdOnPage = randomProductsPage * productsPageSize; -var firstProductIdOnPage = lastProductIdOnPage - productsPageSize + 1; - -var randomProductId1 = Math.floor(random.nextInt(productsPageSize)) + firstProductIdOnPage; -var randomProductId2 = Math.floor(random.nextInt(productsPageSize)) + firstProductIdOnPage; -var randomProductId3 = Math.floor(random.nextInt(productsPageSize)) + firstProductIdOnPage; - -vars.put("page_number", String.valueOf(randomProductsPage)); -vars.put("productId1", String.valueOf(randomProductId1)); -vars.put("productId2", String.valueOf(randomProductId2)); -vars.put("productId3", String.valueOf(randomProductId3)); - -var randomQuantity = Math.floor(0.555 * 1000) + 1; -var randomPrice = Math.floor(0.555 * 500) + 10; -var randomVisibility = Math.floor(random.nextInt(4)) + 1; - -vars.put("quantity", String.valueOf(randomQuantity)); -vars.put("price", String.valueOf(randomPrice)); -vars.put("visibility", String.valueOf(randomVisibility)); - - - - - - false - mpaf/tool/fragments/ce/admin_browse_products_grid/products_grid_mass_actions/setup.jmx - - + @@ -27917,71 +17498,49 @@ vars.put("visibility", String.valueOf(randomVisibility)); = true form_key - true - - - true - product_listing - = - true - namespace - true - - - true - - = - true - search - true + false - + true - true + ${entity} = true - filters[placeholder] - true + entity - + true - ${products_page_size} + ${adminImportBehavior} = true - paging[pageSize] - true + behavior - + true - ${page_number} + validation-stop-on-errors = true - paging[current] - true + validation_strategy - + true - entity_id + 10 = true - sorting[field] - true + allowed_error_count - + true - asc + , = true - sorting[direction] - true + _import_field_separator - + true - true + , = true - isAjax - true + _import_multiple_value_separator @@ -27991,74 +17550,92 @@ vars.put("visibility", String.valueOf(randomVisibility)); ${request_protocol} - ${base_path}${admin_path}/mui/index/render/ - GET + ${base_path}${admin_path}/admin/import/validate + POST true false true false + HttpClient4 + + + + ${adminImportFilePath} + import_file + application/vnd.ms-excel + + + false - mpaf/tool/fragments/ce/admin_browse_products_grid/products_grid_mass_actions/display_grid.jmx + mpaf/tool/fragments/ce/common/import_validate.jmx - totalRecords + File is valid! To start import process Assertion.response_data false - 2 + 16 - + - + true - ${productId1} + ${admin_form_key} = true - selected[0] + form_key + false - + true - ${productId2} + ${entity} = true - selected[1] + entity - + true - ${productId3} + ${adminImportBehavior} = true - selected[2] - true + behavior - + true - true + validation-stop-on-errors = true - filters[placeholder] + validation_strategy false - + true - ${admin_form_key} + 10 = true - form_key + allowed_error_count false - + true - product_listing + , = true - namespace + _import_field_separator + false + + + true + , + = + true + _import_multiple_value_separator false @@ -28069,244 +17646,78 @@ vars.put("visibility", String.valueOf(randomVisibility)); ${request_protocol} - ${base_path}${admin_path}/catalog/product_action_attribute/edit - GET + ${base_path}${admin_path}/admin/import/start + POST true false true false + HttpClient4 + + + + ${adminImportFilePath} + import_file + application/vnd.ms-excel + + + false - mpaf/tool/fragments/ce/admin_browse_products_grid/products_grid_mass_actions/display_update_attributes.jmx + mpaf/tool/fragments/ce/common/import_save.jmx - Update Attributes + Import successfully done Assertion.response_data false - 2 + 16 - - - - - - true - true - = - true - isAjax - true - - - true - ${admin_form_key} - = - true - form_key - true - - - true - 1 - = - true - product[product_has_weight] - true - - - true - 1 - = - true - product[use_config_gift_message_available] - true - - - true - 1 - = - true - product[use_config_gift_wrapping_available] - true - - - true - ${quantity} - = - true - inventory[qty] - true - - - true - ${price} - = - true - attributes[price] - - - true - ${visibility} - = - true - attributes[visibility] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product_action_attribute/validate - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_browse_products_grid/products_grid_mass_actions/change_attributes.jmx - - - - {"error":false} - - Assertion.response_data - false - 2 - - - - - - - true - true - = - true - isAjax - false - - - true - ${admin_form_key} - = - true - form_key - false - - - true - 1 - = - true - product[product_has_weight] - true - - - true - 1 - = - true - product[use_config_gift_message_available] - - - true - 1 - = - true - product[use_config_gift_wrapping_available] - true - - - true - ${quantity} - = - true - inventory[qty] - - - true - on - = - true - toggle_price - true - - - true - ${price} - = - true - attributes[price] - - - true - on - = - true - toggle_price - true - - - true - ${visibility} - = - true - attributes[visibility] - - - true - on - = - true - toggle_visibility - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/catalog/product_action_attribute/save/store/0/active_tab/attributes - POST - true - false - true - true - false - - - - - - were updated. - - Assertion.response_data - false - 2 - + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx - - + 1 false 1 - ${adminAccountManagementPercentage} + ${importCustomersPercentage} mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx @@ -28327,89 +17738,97 @@ if (testLabel - vars.put("testLabel", "Admin Account management"); + vars.put("testLabel", "Import Customers"); true + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + - - - 30 - ${host} - / - false - 0 - true - true - - - ${form_key} - ${host} - ${base_path} - false - 0 - true - true - - - true - mpaf/tool/fragments/ce/http_cookie_manager.jmx + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - mpaf/tool/fragments/ce/get_customer_email.jmx + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx -customerUserList = props.get("customer_emails_list"); -customerUser = customerUserList.poll(); -if (customerUser == null) { - SampleResult.setResponseMessage("customernUser list is empty"); - SampleResult.setResponseData("customerUser list is empty","UTF-8"); +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); IsSuccess=false; SampleResult.setSuccessful(false); SampleResult.setStopThread(true); } -vars.put("customer_email", customerUser); +vars.put("admin_user", adminUser); true + - - - - - - - - - ${request_protocol} - - ${base_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/common/open_home_page.jmx - - - - <title>Home page</title> - - Assertion.response_data - false - 2 - - - - - + @@ -28419,7 +17838,7 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}customer/account/login/ + ${base_path}${admin_path} GET true false @@ -28427,87 +17846,28 @@ vars.put("customer_email", customerUser); false false - mpaf/tool/fragments/ce/common/open_login_page.jmx - - - - <title>Customer Login</title> - - Assertion.response_data - false - 2 - - - - - - - - - true - ${form_key} - = - true - form_key - - - true - ${customer_email} - = - true - login[username] - - - true - ${customer_password} - = - true - login[password] - - - true - - = - true - send - - - - - - - - ${request_protocol} - - ${base_path}customer/account/loginPost/ - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/common/login.jmx + mpaf/tool/fragments/ce/admin_login/admin_login.jmx - + - <title>My Account</title> + Welcome + <title>Magento Admin</title> Assertion.response_data false 2 - + false - addressId - customer/address/edit/id/([^'"]+)/ + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> $1$ 1 - + ^.+$ @@ -28515,33 +17875,41 @@ vars.put("customer_email", customerUser); false 1 variable - addressId + admin_form_key - + + - + true = true - sections + dummy - + true - false + ${admin_form_key} = true - update_section_id + form_key - + true - ${__time()}${__Random(1,1000000)} + ${admin_password} = true - _ + login[password] + + + true + ${admin_user} + = + true + login[username] @@ -28551,18 +17919,47 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}customer/section/load/ - GET + ${base_path}${admin_path}/admin/dashboard/ + POST true false true false + Java false + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + vars.put("entity", "customer"); +String behavior = "${adminImportCustomerBehavior}"; +vars.put("adminImportBehavior", behavior); +String filepath = "${files_folder}${adminImportCustomerFilePath}"; +vars.put("adminImportFilePath", filepath); + + + true + mpaf/tool/fragments/ce/import_customers/setup.jmx - + + mpaf/tool/fragments/ce/simple_controller.jmx + + + @@ -28572,7 +17969,7 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}sales/order/history/ + ${base_path}${admin_path}/admin/import/ GET true false @@ -28580,154 +17977,73 @@ vars.put("customer_email", customerUser); false false - mpaf/tool/fragments/ce/account_management/my_orders.jmx + mpaf/tool/fragments/ce/common/import.jmx - + - <title>My Orders</title> + Import Settings Assertion.response_data false 2 - - false - orderId - sales/order/view/order_id/(\d+)/ - $1$ - NOT_FOUND - 1 - - - - mpaf/tool/fragments/ce/account_management/if_orders.jmx - "${orderId}" != "NOT_FOUND" - false - - - - - - - - - - - ${request_protocol} - - ${base_path}sales/order/view/order_id/${orderId} - GET - true - false - true - false - false - - - - - - <title>Order # - - Assertion.response_data - false - 2 - - - - false - shipment_tab - sales/order/shipment/order_id/(\d+)..Order Shipments - $1$ - NOT_FOUND - 1 - - - - - May not have shipped - "${shipment_tab}" != "NOT_FOUND" - false - - - - - + + + + + true + ${admin_form_key} + = + true + form_key + false - - - - - ${request_protocol} - - ${base_path}sales/order/shipment/order_id/${orderId} - GET - true - false - true - false - false - - - - - - Track this shipment - - Assertion.response_data - false - 2 - - - - false - popupLink - popupWindow": {"windowURL":"([^'"]+)", - $1$ - - 1 - - - - - - + + true + ${entity} + = + true + entity - - - - - ${request_protocol} - - ${popupLink} - GET - true - false - true - false - false - - - - - - <title>Tracking Information</title> - - Assertion.response_data - false - 2 - - - - - - - - - + + true + ${adminImportBehavior} + = + true + behavior + + + true + validation-stop-on-errors + = + true + validation_strategy + + + true + 10 + = + true + allowed_error_count + + + true + , + = + true + _import_field_separator + + + true + , + = + true + _import_multiple_value_separator + + @@ -28735,54 +18051,95 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}downloadable/customer/products - GET + ${base_path}${admin_path}/admin/import/validate + POST true false true false + HttpClient4 + + + + ${adminImportFilePath} + import_file + application/vnd.ms-excel + + + false - mpaf/tool/fragments/ce/account_management/my_downloadable_products.jmx + mpaf/tool/fragments/ce/common/import_validate.jmx - <title>My Downloadable Products</title> + File is valid! To start import process Assertion.response_data false - 2 + 16 - - false - orderId - sales/order/view/order_id/(\d+)/ - $1$ - NOT_FOUND - 1 - - - - false - linkId - downloadable/download/link/id/(\d+)/ - $1$ - - 1 - - - - mpaf/tool/fragments/ce/account_management/if_downloadables.jmx - "${orderId}" != "NOT_FOUND" - false - - - + - + + + true + ${admin_form_key} + = + true + form_key + false + + + true + ${entity} + = + true + entity + + + true + ${adminImportBehavior} + = + true + behavior + + + true + validation-stop-on-errors + = + true + validation_strategy + false + + + true + 10 + = + true + allowed_error_count + false + + + true + , + = + true + _import_field_separator + false + + + true + , + = + true + _import_multiple_value_separator + false + + @@ -28790,28 +18147,39 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}sales/order/view/order_id/${orderId} - GET + ${base_path}${admin_path}/admin/import/start + POST true false true false + HttpClient4 + + + + ${adminImportFilePath} + import_file + application/vnd.ms-excel + + + false - mpaf/tool/fragments/ce/account_management/view_downloadable_products.jmx + mpaf/tool/fragments/ce/common/import_save.jmx - <title>Order # + Import successfully done Assertion.response_data false - 2 + 16 + - + @@ -28821,7 +18189,7 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}downloadable/download/link/id/${linkId} + ${base_path}${admin_path}/admin/auth/logout/ GET true false @@ -28829,11 +18197,139 @@ vars.put("customer_email", customerUser); false false - mpaf/tool/fragments/ce/account_management/download_product.jmx + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + - + + 1 + false + 1 + ${exportProductsPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Export Products"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + @@ -28843,7 +18339,7 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}wishlist + ${base_path}${admin_path} GET true false @@ -28851,45 +18347,108 @@ vars.put("customer_email", customerUser); false false - + mpaf/tool/fragments/ce/admin_login/admin_login.jmx - + - <title>My Wish List</title> + Welcome + <title>Magento Admin</title> Assertion.response_data false 2 - + false - wishlistId - wishlist/index/update/wishlist_id/([^'"]+)/ + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> $1$ 1 - mpaf/tool/fragments/ce/account_management/my_wish_list.jmx - - false - buttonTitle - Update Wish List - FOUND - NOT_FOUND - 1 - + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + - - mpaf/tool/fragments/ce/account_management/if_wishlist.jmx - "${buttonTitle}" === "FOUND" - false - + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + - + @@ -28899,7 +18458,7 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}wishlist/index/share/wishlist_id/${wishlistId}/ + ${base_path}${admin_path}/admin/export/ GET true false @@ -28907,11 +18466,11 @@ vars.put("customer_email", customerUser); false false - mpaf/tool/fragments/ce/account_management/share_wish_list.jmx + mpaf/tool/fragments/ce/common/export.jmx - + - <title>Wish List Sharing</title> + Export Settings Assertion.response_data false @@ -28920,30 +18479,561 @@ vars.put("customer_email", customerUser); - + true - ${form_key} + form_key + ${admin_form_key} + = + true + + + true + attribute_code + + = + true + + + true + export_filter[allow_message][] + , + = + true + + + true + export_filter[allow_open_amount] + + = + true + + + true + export_filter[category_ids] + 24,25,26,27,28,29,30 + = + true + + + true + export_filter[configurable_variations] + + = + true + + + true + export_filter[cost][] + , + = + true + + + true + export_filter[country_of_manufacture] + + = + true + + + true + export_filter[created_at] + + = + true + + + true + export_filter[custom_design] + + = + true + + + true + export_filter[custom_design_from][] + , + = + true + + + true + export_filter[custom_design_to][] + , + = + true + + + true + export_filter[custom_layout_update] + + = + true + + + true + export_filter[description] + + = + true + + + true + export_filter[email_template] + + = + true + + + true + export_filter[gallery] + + = + true + + + true + export_filter[gift_message_available] + + = + true + + + true + export_filter[gift_wrapping_available] + + = + true + + + true + export_filter[gift_wrapping_price][] + , + = + true + + + true + export_filter[group_price][] + , + = + true + + + true + export_filter[has_options] + + = + true + + + true + export_filter[image] + + = + true + + + true + export_filter[image_label] + + = + true + + + true + export_filter[is_redeemable][] + , + = + true + + + true + export_filter[is_returnable] + + = + true + + + true + export_filter[lifetime][] + , + = + true + + + true + export_filter[links_exist][] + , + = + true + + + true + export_filter[links_purchased_separately][] + , + = + true + + + true + export_filter[links_title] + + = + true + + + true + export_filter[media_gallery] + + = + true + + + true + export_filter[meta_description] + + = + true + + + true + export_filter[meta_keyword] + + = + true + + + true + export_filter[meta_title] + + = + true + + + true + export_filter[minimal_price][] + , + = + true + + + true + export_filter[msrp][] + , + = + true + + + true + export_filter[msrp_display_actual_price_type] + + = + true + + + true + export_filter[name] + + = + true + + + true + export_filter[news_from_date][] + , + = + true + + + true + export_filter[news_to_date][] + , + = + true + + + true + export_filter[old_id][] + , + = + true + + + true + export_filter[open_amount_max][] + , + = + true + + + true + export_filter[open_amount_min][] + , + = + true + + + true + export_filter[options_container] + + = + true + + + true + export_filter[page_layout] + + = + true + + + true + export_filter[price][] + , + = + true + + + true + export_filter[price_type][] + , + = + true + + + true + export_filter[price_view] + + = + true + + + true + export_filter[quantity_and_stock_status] + + = + true + + + true + export_filter[related_tgtr_position_behavior][] + , + = + true + + + true + export_filter[related_tgtr_position_limit][] + , + = + true + + + true + export_filter[required_options] + + = + true + + + true + export_filter[samples_title] + + = + true + + + true + export_filter[shipment_type][] + , + = + true + + + true + export_filter[short_description] + + = + true + + + true + export_filter[sku] + + = + true + + + true + export_filter[sku_type][] + , + = + true + + + true + export_filter[small_image] + + = + true + + + true + export_filter[small_image_label] + + = + true + + + true + export_filter[special_from_date][] + , + = + true + + + true + export_filter[special_price][] + , + = + true + + + true + export_filter[special_to_date][] + , + = + true + + + true + export_filter[status] + + = + true + + + true + export_filter[tax_class_id] + + = + true + + + true + export_filter[thumbnail] + + = + true + + + true + export_filter[thumbnail_label] + + = + true + + + true + export_filter[tier_price][] + , + = + true + + + true + export_filter[updated_at] + + = + true + + + true + export_filter[upsell_tgtr_position_behavior][] + , = true - form_key - true - + true - ${customer_email} + export_filter[upsell_tgtr_position_limit][] + , = true - emails - + true - [TEST] See my wishlist!!! + export_filter[url_key] + + = + true + + + true + export_filter[url_path] + + = + true + + + true + export_filter[use_config_allow_message][] + , + = + true + + + true + export_filter[use_config_email_template][] + , + = + true + + + true + export_filter[use_config_is_redeemable][] + , + = + true + + + true + export_filter[use_config_lifetime][] + , + = + true + + + true + export_filter[visibility] + + = + true + + + true + export_filter[weight][] + , + = + true + + + true + export_filter[weight_type][] + , + = + true + + + true + frontend_label + = true - message @@ -28953,7 +19043,7 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}wishlist/index/send/wishlist_id/${wishlistId}/ + ${base_path}${admin_path}/admin/export/export/entity/catalog_product/file_format/csv POST true false @@ -28961,15 +19051,15 @@ vars.put("customer_email", customerUser); false false - mpaf/tool/fragments/ce/account_management/send_wish_list.jmx + mpaf/tool/fragments/ce/export_products/export_products.jmx - <title>My Wish List</title> + Simple Product 1 Assertion.response_data false - 2 + 16 @@ -28985,7 +19075,7 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}customer/account/logout/ + ${base_path}${admin_path}/admin/auth/logout/ GET true false @@ -28993,26 +19083,28 @@ vars.put("customer_email", customerUser); false false - mpaf/tool/fragments/ce/common/logout.jmx + mpaf/tool/fragments/ce/setup/admin_logout.jmx - - - You are signed out. - - Assertion.response_data - false - 2 - - - + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + - + 1 false 1 - ${browseCatalogByCustomerPercentage} + ${exportCustomersPercentage} mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx @@ -29033,92 +19125,97 @@ if (testLabel - vars.put("testLabel", "Catalog Browsing By Customer"); + vars.put("testLabel", "Export Customers"); true - - - - 30 - ${host} - / - false - 0 - true - true - - - ${form_key} - ${host} - ${base_path} - false - 0 - true - true - - - true - mpaf/tool/fragments/ce/http_cookie_manager.jmx - - - - mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx - -import java.util.Random; - -Random random = new Random(); -if (${seedForRandom} > 0) { - random.setSeed(${seedForRandom} + ${__threadNum}); -} + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } -vars.putObject("randomIntGenerator", random); - - - - true - - - - - -import java.util.Random; + formKey = vars.get("form_key_storage"); -Random random = vars.getObject("randomIntGenerator"); -number = random.nextInt(props.get("category_url_keys_list").size()); + currentFormKey = getFormKeyFromResponse(); -vars.put("category_url_key", props.get("category_url_keys_list").get(number)); -vars.put("category_name", props.get("category_names_list").get(number)); + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } - - - false - mpaf/tool/fragments/ce/common/extract_category_setup.jmx - + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + - - mpaf/tool/fragments/ce/get_customer_email.jmx + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx -customerUserList = props.get("customer_emails_list"); -customerUser = customerUserList.poll(); -if (customerUser == null) { - SampleResult.setResponseMessage("customernUser list is empty"); - SampleResult.setResponseData("customerUser list is empty","UTF-8"); +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); IsSuccess=false; SampleResult.setSuccessful(false); SampleResult.setStopThread(true); } -vars.put("customer_email", customerUser); +vars.put("admin_user", adminUser); true + - + @@ -29128,7 +19225,7 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}customer/account/login/ + ${base_path}${admin_path} GET true false @@ -29136,11 +19233,130 @@ vars.put("customer_email", customerUser); false false - mpaf/tool/fragments/ce/common/open_login_page.jmx + mpaf/tool/fragments/ce/admin_login/admin_login.jmx - + - <title>Customer Login</title> + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + + true + + = + true + dummy + + + true + ${admin_form_key} + = + true + form_key + + + true + ${admin_password} + = + true + login[password] + + + true + ${admin_user} + = + true + login[username] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/export/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/common/export.jmx + + + + Export Settings Assertion.response_data false @@ -29149,108 +19365,216 @@ vars.put("customer_email", customerUser); - + true - ${form_key} + ${admin_form_key} + = + true + form_key + false + + + true + + = + true + attribute_code + true + + + true + + = + true + export_filter[confirmation] + true + + + true + + = + true + export_filter[created_at] + true + + + true + + = + true + export_filter[created_in] + true + + + true + , + = + true + export_filter[default_billing][] + true + + + true + , + = + true + export_filter[default_shipping][] + true + + + true + + = + true + export_filter[disable_auto_group_change] + true + + + true + , + = + true + export_filter[dob][] + true + + + true + + = + true + export_filter[email] + true + + + true + + = + true + export_filter[firstname] + true + + + true + + = + true + export_filter[gender] + true + + + true + + = + true + export_filter[group_id] + true + + + true + + = + true + export_filter[lastname] + true + + + true + + = + true + export_filter[middlename] + true + + + true + + = + true + export_filter[password_hash] + true + + + true + + = + true + export_filter[prefix] + true + + + true + , + = + true + export_filter[reward_update_notification][] + true + + + true + , + = + true + export_filter[reward_warning_notification][] + true + + + true + = true - form_key + export_filter[rp_token] + true - + true - ${customer_email} + , = true - login[username] + export_filter[rp_token_created_at][] + true - + true - ${customer_password} + = true - login[password] + export_filter[store_id] + true - + true = true - send + export_filter[suffix] + true - - - - - - - ${request_protocol} - - ${base_path}customer/account/loginPost/ - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/common/login.jmx - - - - <title>My Account</title> - - Assertion.response_data - false - 2 - - - - false - addressId - customer/address/edit/id/([^'"]+)/ - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - addressId - - - - - - - + true = true - sections + export_filter[taxvat] + true - + true - false + = true - update_section_id + export_filter[website_id] + true - + true - ${__time()}${__Random(1,1000000)} + = true - _ + frontend_label + true @@ -29260,49 +19584,29 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}customer/section/load/ - GET + ${base_path}${admin_path}/admin/export/export/entity/customer/file_format/csv + POST true false true false false - - - - - - - - - - - - ${request_protocol} - - ${base_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/common/open_home_page.jmx - - - - <title>Home page</title> - - Assertion.response_data - false - 2 - - - + mpaf/tool/fragments/ce/export_customers/export_customers.jmx + + + + user_1@example.com + + Assertion.response_data + false + 16 + + + + - + @@ -29312,7 +19616,7 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}${category_url_key}${url_suffix} + ${base_path}${admin_path}/admin/auth/logout/ GET true false @@ -29320,183 +19624,28 @@ vars.put("customer_email", customerUser); false false - mpaf/tool/fragments/ce/common/open_category.jmx - - - - <span class="base" data-ui-id="page-title">${category_name}</span> - - Assertion.response_data - false - 6 - - - - false - category_id - <li class="item category([^'"]+)">\s*<strong>${category_name}</strong>\s*</li> - $1$ - - 1 - simple_product_1_url_key - - - - - ^[0-9]+$ - - Assertion.response_data - false - 1 - variable - category_id - - - - - - true - 2 - mpaf/tool/fragments/ce/loop_controller.jmx - - - 1 - - 1 - _counter - - true - true - - - - - -import java.util.Random; - -Random random = vars.getObject("randomIntGenerator"); -number = random.nextInt(props.get("simple_products_list").size()); -product = props.get("simple_products_list").get(number); - -vars.put("product_url_key", product.get("url_key")); -vars.put("product_id", product.get("id")); -vars.put("product_name", product.get("title")); -vars.put("product_uenc", product.get("uenc")); -vars.put("product_sku", product.get("sku")); - - - - true - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${product_url_key}${url_suffix} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx - - - - <span>In stock</span> - - Assertion.response_data - false - 2 - - - - - - - true - 1 - mpaf/tool/fragments/ce/loop_controller.jmx + mpaf/tool/fragments/ce/setup/admin_logout.jmx - - 1 - - 1 - _counter - - true - true - - - - -import java.util.Random; - -Random random = vars.getObject("randomIntGenerator"); -number = random.nextInt(props.get("configurable_products_list").size()); -product = props.get("configurable_products_list").get(number); - -vars.put("product_url_key", product.get("url_key")); -vars.put("product_id", product.get("id")); -vars.put("product_name", product.get("title")); -vars.put("product_uenc", product.get("uenc")); -vars.put("product_sku", product.get("sku")); - - - - true - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_products_setup.jmx + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx - - - - - - - - - - ${request_protocol} - - ${base_path}${product_url_key}${url_suffix} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx - - - - <span>In stock</span> - - Assertion.response_data - false - 2 - - - - + - + 1 false 1 - ${addToCartByCustomerPercentage} + ${apiBasePercentage} mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx @@ -29517,111 +19666,36 @@ if (testLabel - vars.put("testLabel", "Add To Cart By Customer"); + vars.put("testLabel", "API"); true - - - - 30 - ${host} - / - false - 0 - true - true + + + + Content-Type + application/json - - ${form_key} - ${host} - ${base_path} - false - 0 - true - true + + Accept + */* - true - mpaf/tool/fragments/ce/http_cookie_manager.jmx - - - - mpaf/tool/fragments/ce/common/init_random_generator_setup.jmx - -import java.util.Random; - -Random random = new Random(); -if (${seedForRandom} > 0) { - random.setSeed(${seedForRandom} + ${__threadNum}); -} - -vars.putObject("randomIntGenerator", random); - - - - true - - - - - mpaf/tool/fragments/ce/common/init_total_products_in_cart_setup.jmx - -vars.put("totalProductsAdded", "0"); - - - - true - - - - - -import java.util.Random; - -Random random = vars.getObject("randomIntGenerator"); -number = random.nextInt(props.get("category_url_keys_list").size()); - -vars.put("category_url_key", props.get("category_url_keys_list").get(number)); -vars.put("category_name", props.get("category_names_list").get(number)); - - - - false - mpaf/tool/fragments/ce/common/extract_category_setup.jmx - - - - get-email - mpaf/tool/fragments/ce/lock_controller.jmx - - - - mpaf/tool/fragments/ce/get_customer_email.jmx - -customerUserList = props.get("customer_emails_list"); -customerUser = customerUserList.poll(); -if (customerUser == null) { - SampleResult.setResponseMessage("customernUser list is empty"); - SampleResult.setResponseData("customerUser list is empty","UTF-8"); - IsSuccess=false; - SampleResult.setSuccessful(false); - SampleResult.setStopThread(true); -} -vars.put("customer_email", customerUser); - - - - true - + mpaf/tool/fragments/ce/api/header_manager_before_token.jmx - - - - + + true + + + + false + {"username":"${admin_user}","password":"${admin_password}"} + = + + @@ -29629,57 +19703,130 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}customer/account/login/ - GET + ${base_path}rest/V1/integration/admin/token + POST true false true false false - mpaf/tool/fragments/ce/common/open_login_page.jmx + mpaf/tool/fragments/ce/api/admin_token_retrieval.jmx - + + admin_token + $ + + + BODY + + + - <title>Customer Login</title> + ^[a-z0-9-]+$ Assertion.response_data false - 2 + 1 + variable + admin_token - + + + + Authorization + Bearer ${admin_token} + + + mpaf/tool/fragments/ce/api/header_manager.jmx + + + + 1 + false + 1 + 100 + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "API Process Orders"); + + true + + + + + // Each thread gets an equal number of orders, based on how many orders are available. + + int apiProcessOrders = Integer.parseInt("${apiProcessOrders}"); + if (apiProcessOrders > 0) { + ordersPerThread = apiProcessOrders; + } else { + ordersPerThread = 1; + } + + + threadNum = ${__threadNum}; + vars.put("ordersPerThread", String.valueOf(ordersPerThread)); + vars.put("threadNum", String.valueOf(threadNum)); + + + + + false + mpaf/tool/fragments/ce/api/process_orders/setup.jmx + + + - + true - ${form_key} + status = true - form_key + searchCriteria[filterGroups][0][filters][0][field] - + true - ${customer_email} + Pending = true - login[username] + searchCriteria[filterGroups][0][filters][0][value] - + true - ${customer_password} + ${ordersPerThread} = true - login[password] + searchCriteria[pageSize] - + true - + ${threadNum} = true - send + searchCriteria[current_page] @@ -29689,71 +19836,35 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}customer/account/loginPost/ - POST + ${base_path}rest/default/V1/orders + GET true false true false false - mpaf/tool/fragments/ce/common/login.jmx + mpaf/tool/fragments/ce/api/process_orders/get_orders.jmx - - - <title>My Account</title> - - Assertion.response_data - false - 2 - - - - false - addressId - customer/address/edit/id/([^'"]+)/ - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - addressId - + + entity_ids + $.items[*].entity_id + + + BODY + - + + + entity_ids + order_id + true + mpaf/tool/fragments/ce/api/process_orders/for_each_order.jmx + + - - - true - - = - true - sections - - - true - false - = - true - update_section_id - - - true - ${__time()}${__Random(1,1000000)} - = - true - _ - - + @@ -29761,49 +19872,28 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}customer/section/load/ - GET + ${base_path}rest/default/V1/order/${order_id}/invoice + POST true false true false false - - - - - - - - - - - - ${request_protocol} - - ${base_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/common/open_home_page.jmx - - - - <title>Home page</title> - - Assertion.response_data - false - 2 - - - + mpaf/tool/fragments/ce/api/process_orders/create_invoice.jmx + + + + "\d+" + + Assertion.response_data + false + 2 + + + - + @@ -29813,186 +19903,75 @@ vars.put("customer_email", customerUser); ${request_protocol} - ${base_path}${category_url_key}${url_suffix} - GET + ${base_path}rest/default/V1/order/${order_id}/ship + POST true false true false false - mpaf/tool/fragments/ce/common/open_category.jmx + mpaf/tool/fragments/ce/api/process_orders/create_shipment.jmx - <span class="base" data-ui-id="page-title">${category_name}</span> - - Assertion.response_data - false - 6 - - - - false - category_id - <li class="item category([^'"]+)">\s*<strong>${category_name}</strong>\s*</li> - $1$ - - 1 - simple_product_1_url_key - - - - - ^[0-9]+$ + "\d+" Assertion.response_data false - 1 - variable - category_id + 2 + + + - - mpaf/tool/fragments/ce/simple_controller.jmx - + + 1 + false + 1 + 100 + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - - - - - - - - - ${base_path}checkout/cart/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/open_cart.jmx - - - - <title>Shopping Cart</title> - - Assertion.response_data - false - 2 - + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx - - false - cart_items_qty_inputs - name="cart\[([^\[\]]+)\]\[qty\]" - $1$ - - -1 - + + + vars.put("testLabel", "API Product Management"); + + true + - - - - true - ${cart_items_qty_inputs_matchNr} - mpaf/tool/fragments/ce/loop_controller.jmx - - - 1 - - 1 - _counter - - true - true - - - - -id = vars.get("_counter"); -vars.put("uenc", vars.get("cart_items_uencs_" + id)); -vars.put("item_id", vars.get("cart_items_qty_inputs_" + id)); - - - - true - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/remove_item_from_cart_setup.jmx - - - - - - - true - ${form_key} - = - true - form_key - - - true - ${uenc} - = - true - uenc - - - false - ${item_id} - = - true - id - - - - - - - - - - ${base_path}checkout/cart/delete/ - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/remove_item_from_cart.jmx - - - - + + true + - - true - cart - = - true - sections - - - true - true - = - true - update_section_id - - - true - ${__time()}${__Random(1,1000000)} + + false + { + "product": { + "sku": "psku-test-${__time()}-${__threadNum}-${__Random(1,1000000)}", + "name": "Product_${__time()}-${__threadNum}-${__Random(1,1000000)}", + "attributeSetId": 4 + } +} = - true - _ @@ -30002,139 +19981,126 @@ vars.put("item_id", vars.get("cart_items_qty_inputs_" + id)); ${request_protocol} - ${base_path}customer/section/load/ - GET + ${base_path}rest/default/V1/products + POST true false true false false - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/check_cart_is_empty.jmx + mpaf/tool/fragments/ce/api/create_product_no_custom_attributes.jmx - + + simple_product_id + $.id + + + BODY + + + + simple_product_sku + $.sku + + + BODY + + + + simple_stock_item_id + $.extension_attributes.stock_item.item_id + + + BODY + + + - \"summary_count\":0 + ^\d+$ Assertion.response_data false - 2 + 1 + variable + simple_product_id - - - - - true - 2 - mpaf/tool/fragments/ce/loop_controller.jmx - - - 1 - - 1 - _counter - - true - true - + + + ^[a-z0-9-]+$ + + Assertion.response_data + false + 1 + variable + simple_product_sku + - - - -import java.util.Random; - -Random random = vars.getObject("randomIntGenerator"); -number = random.nextInt(props.get("simple_products_list").size()); -product = props.get("simple_products_list").get(number); - -vars.put("product_url_key", product.get("url_key")); -vars.put("product_id", product.get("id")); -vars.put("product_name", product.get("title")); -vars.put("product_uenc", product.get("uenc")); -vars.put("product_sku", product.get("sku")); - - - - true - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_products_setup.jmx - - - - mpaf/tool/fragments/ce/loops/update_products_added_counter.jmx - -productsAdded = Integer.parseInt(vars.get("totalProductsAdded")); -productsAdded = productsAdded + 1; - -vars.put("totalProductsAdded", String.valueOf(productsAdded)); - - - - true - - - - - - - - - - - - ${request_protocol} - - ${base_path}${product_url_key}${url_suffix} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx - - - - <span>In stock</span> - - Assertion.response_data - false - 2 - - - - - - + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + simple_stock_item_id + + + + + + true + - - true - ${product_id} + + false + { + "stock_item": { + "manage_stock": true, + "is_in_stock": true, + "qty": ${simple_product_id} + } + } = - true - product - + + + + + + + ${request_protocol} + + ${base_path}rest/default/V1/products/${simple_product_sku}/stockItems/${simple_stock_item_id} + PUT + true + false + true + false + false + + mpaf/tool/fragments/ce/api/update_product_stock_info.jmx + + + $ + ${simple_stock_item_id} + true + false + false + + + + + + true + + + true = - true - related_product - - - true - 1 - = - true - qty - - - true - ${form_key} - = - true - form_key @@ -30144,50 +20110,100 @@ vars.put("totalProductsAdded", String.valueOf(productsAdded)); ${request_protocol} - ${base_path}checkout/cart/add/ - POST + ${base_path}rest/default/V1/products/${simple_product_sku} + GET true false true false false - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/simple_product_add_to_cart.jmx + mpaf/tool/fragments/ce/api/check_product.jmx - - - - X-Requested-With - XMLHttpRequest - - - mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx - - + + $.sku + ${simple_product_sku} + true + false + false + + + + $.id + ${simple_product_id} + true + false + false + + + + $.extension_attributes.stock_item.item_id + ${simple_stock_item_id} + true + false + false + + + + $.extension_attributes.stock_item.qty + ${simple_product_id} + true + false + false + + + - - + + true + - - true - cart,messages - = - true - sections - - - true - true - = - true - update_section_id - - - true - ${__time()}${__Random(1,1000000)} + + false + { + "product": { + "sku": "apsku-test-${__time()}-${__threadNum}-${__Random(1,1000000)}", + "name": "Extensible_Product_${__time()}-${__threadNum}-${__Random(1,1000000)}", + "visibility": "4", + "type_id": "simple", + "price": "3.62", + "status": "1", + "attribute_set_id": "4", + "custom_attributes": [ + { + "attribute_code": "cost", + "value": "" + }, + { + "attribute_code": "description", + "value": "Description" + } + ], + "extension_attributes":{ + "stock_item":{ + "manage_stock": true, + "is_in_stock": true, + "qty":"100" + } + } , + "media_gallery_entries": + [{ + "id": null, + "label":"test_label_${__time()}-${__threadNum}-${__Random(1,1000000)}", + "position":1, + "disabled":false, + "media_type":"image", + "types":["image"], + "content":{ + "base64_encoded_data": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABgAGADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iioLy8t9Ps5bu7lWKCIZd26KKaTbshpX0RPRXN/8J/4V/6DVv8Ak3+FH/Cf+Ff+g1b/AJN/hXR9SxP/AD7l9zNPYVf5X9x0lFc3/wAJ/wCFf+g1b/k3+FH/AAn/AIV/6DVv+Tf4UfUsT/z7l9zD2FX+V/cdJRXN/wDCf+Ff+g1b/k3+FH/Cf+Ff+g1b/k3+FH1LE/8APuX3MPYVf5X9x0lFc3/wn/hX/oNW/wCTf4Uf8J/4V/6DVv8Ak3+FH1LE/wDPuX3MPYVf5X9x0lFVdP1G01WyS8sZ1nt3JCyL0ODg/qKtVzyi4u0lZmbTTswrm/H3/Iiav/1x/wDZhXSVzfj7/kRNX/64/wDswrowf+80/wDEvzNKH8WPqj5voorB1zS7OLT7m7SHE5YNu3HqWGeM471+kYutOhSdSEU7Jt3dtF20f6H1FacqcHJK9vO36M3qKzTa6foqPdxwlWxswrFi2T0AJ9aRdVmjkT7XYSW8TsFEm8MAT0yB0qfrcafu1tJeV2l2u7K3zsL2yjpPR+V3+NjTorPn1GVbt7a1s2uJIwDJ84ULnpyaik1SWTTrp47Z0uIQRJGzAFOPvZ70Sx1GLau9L9H03SdrNrsgdeCuu3k+hq0VR0ma4msImuIih2LtYvuLjA+b2zV6uijUVWmprqaQkpxUl1PoP4Xf8iBYf78v/oxq7GuO+F3/ACIFh/vy/wDoxq7GvzTMf98q/wCJ/mfLYn+NP1YVzfj7/kRNX/64/wDswrpK5vx9/wAiJq//AFx/9mFRg/8Aeaf+JfmTQ/ix9UfN9ZniD/kB3H/Af/QhWnTZI45kKSIroeqsMg1+l4mk61GdNfaTX3o+pqw54Sj3Rma/GXsI3BcLFMruU+8F5yR+dUZ4tOeNFOq3tx5jACNZg5J+mK6PrUMdrbxPvjgiR/7yoAa48TgPa1HNW1STvfp2s1+JjVw/PJy017mbe/YTqTB7iWzuQgPmhtocfjwajiupbjTtTieUXCxRsqTKMb8qePwrYlghnAE0UcgHQOoP86ckaRoERFVR/CowKbwU3UclJJO+19brqr203vvoHsJczd7J3/H8PmVNJnhm063WOVHZIkDhTkqcd/yNXajighg3eTFHHu67FAz+VSV2UIShTjGe67G9NOMUpbn0H8Lv+RAsP9+X/wBGNXY1x3wu/wCRAsP9+X/0Y1djX5tmP++Vf8T/ADPl8T/Gn6sK5vx9/wAiJq//AFx/9mFdJXN+Pv8AkRNX/wCuP/swqMH/ALzT/wAS/Mmh/Fj6o+b6KKK/Uj60KKKKACiiigAooooA+g/hd/yIFh/vy/8Aoxq7GuO+F3/IgWH+/L/6Mauxr8wzH/fKv+J/mfKYn+NP1YVzfj7/AJETV/8Arj/7MK6Sub8ff8iJq/8A1x/9mFRg/wDeaf8AiX5k0P4sfVHzfRRRX6kfWhRRRQAUUUUAFFFFAH0H8Lv+RAsP9+X/ANGNXY1x3wu/5ECw/wB+X/0Y1djX5hmP++Vf8T/M+UxP8afqwqC8s7fULOW0u4llglGHRujCp6K5E2ndGKdtUc3/AMIB4V/6Atv+bf40f8IB4V/6Atv+bf410lFdH13E/wDPyX3s09vV/mf3nN/8IB4V/wCgLb/m3+NH/CAeFf8AoC2/5t/jXSUUfXcT/wA/Jfew9vV/mf3nN/8ACAeFf+gLb/m3+NH/AAgHhX/oC2/5t/jXSUUfXcT/AM/Jfew9vV/mf3nN/wDCAeFf+gLb/m3+NH/CAeFf+gLb/m3+NdJRR9dxP/PyX3sPb1f5n95V0/TrTSrJLOxgWC3QkrGvQZOT+pq1RRXPKTk7yd2Zttu7P//Z", + "type": "image/jpeg", + "name": "test_image_${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}.jpeg" + } + } + ] + } +} = - true - _ @@ -30197,280 +20213,183 @@ vars.put("totalProductsAdded", String.valueOf(productsAdded)); ${request_protocol} - ${base_path}customer/section/load/ - GET + ${base_path}rest/default/V1/products + POST true false true false false - mpaf/tool/fragments/ce/load_cart_section.jmx + mpaf/tool/fragments/ce/api/create_product_with_extensible_data_objects.jmx - + + simple_product_id + $.id + + + BODY + + + + simple_product_sku + $.sku + + + BODY + + + + simple_stock_item_id + $.extension_attributes.stock_item.item_id + + + BODY + + + - You added ${product_name} to your shopping cart. + ^\d+$ Assertion.response_data false - 2 + 1 + variable + simple_product_id - + - This product is out of stock. + ^[a-z0-9-]+$ Assertion.response_data false - 6 + 1 + variable + simple_product_sku - + - \"summary_count\":${totalProductsAdded} + ^\d+$ Assertion.response_data false - 2 + 1 + variable + simple_stock_item_id - - - - - X-Requested-With - XMLHttpRequest - - - mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx - - - + - - true - 1 - mpaf/tool/fragments/ce/loop_controller.jmx + + true + + + + true + + = + + + + + + + + ${request_protocol} + + ${base_path}rest/default/V1/products/${simple_product_sku} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/api/check_product_with_extensible_data_objects.jmx - - 1 - - 1 - _counter - - true - true - + + $.sku + ${simple_product_sku} + true + false + false + - - - -import java.util.Random; - -Random random = vars.getObject("randomIntGenerator"); -number = random.nextInt(props.get("configurable_products_list").size()); -product = props.get("configurable_products_list").get(number); - -vars.put("product_url_key", product.get("url_key")); -vars.put("product_id", product.get("id")); -vars.put("product_name", product.get("title")); -vars.put("product_uenc", product.get("uenc")); -vars.put("product_sku", product.get("sku")); - - - - true - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_products_setup.jmx - - - - mpaf/tool/fragments/ce/loops/update_products_added_counter.jmx - -productsAdded = Integer.parseInt(vars.get("totalProductsAdded")); -productsAdded = productsAdded + 1; + + $.id + ${simple_product_id} + true + false + false + + + + $.extension_attributes.stock_item.item_id + ${simple_stock_item_id} + true + false + false + + + + $.extension_attributes.stock_item.qty + 100 + true + false + false + + + + -vars.put("totalProductsAdded", String.valueOf(productsAdded)); - - - - true - - - - - - - - - - - ${request_protocol} - - ${base_path}${product_url_key}${url_suffix} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/product_view.jmx - - - - <span>In stock</span> - - Assertion.response_data - false - 2 - - - - - - true - 1 - mpaf/tool/fragments/ce/common/get_configurable_product_options.jmx + + 1 + false + 1 + 100 + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - - Content-Type - application/json - - - Accept - */* - - - - - - true - - - - false - {"username":"${admin_user}","password":"${admin_password}"} - = - - - - - - - - ${request_protocol} - - ${base_path}rest/V1/integration/admin/token - POST - true - false - true - false - false - - - - - admin_token - $ - - - BODY - - - - - ^[a-z0-9-]+$ - - Assertion.response_data - false - 1 - variable - admin_token - - - - - - - Authorization - Bearer ${admin_token} - - - - - - - - - - - - - ${request_protocol} - - ${base_path}rest/V1/configurable-products/${product_sku}/options/all - GET - true - false - true - false - false - - - - - attribute_ids - $.[*].attribute_id - NO_VALUE - - BODY - + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx - - option_values - $.[*].values[0].value_index - NO_VALUE - - BODY - + + + vars.put("testLabel", "API Product Attribute Management"); + + true + - - - - - + + + true + - - true - ${product_id} - = - true - product - - - true - - = - true - related_product - - - true - 1 - = - true - qty - - - true - ${form_key} + + false + { + "attributeSet": { + "attribute_set_name": "new_attribute_set_${__time()}-${__threadNum}-${__Random(1,1000000)}", + "sort_order": 500 + }, + "skeletonId": "4" +} = - true - form_key @@ -30480,7 +20399,7 @@ vars.put("totalProductsAdded", String.valueOf(productsAdded)); ${request_protocol} - ${base_path}checkout/cart/add/ + ${base_path}rest/default/V1/products/attribute-sets/ POST true false @@ -30488,72 +20407,42 @@ vars.put("totalProductsAdded", String.valueOf(productsAdded)); false false - mpaf/tool/fragments/ce/product_browsing_and_adding_items_to_the_cart/configurable_product_add_to_cart.jmx + mpaf/tool/fragments/ce/api/create_attribute_set.jmx - - false - - - - try { - attribute_ids = vars.get("attribute_ids"); - option_values = vars.get("option_values"); - attribute_ids = attribute_ids.replace("[","").replace("]","").replace("\"", ""); - option_values = option_values.replace("[","").replace("]","").replace("\"", ""); - attribute_ids_array = attribute_ids.split(","); - option_values_array = option_values.split(","); - args = ctx.getCurrentSampler().getArguments(); - it = args.iterator(); - while (it.hasNext()) { - argument = it.next(); - if (argument.getStringValue().contains("${")) { - args.removeArgument(argument.getName()); - } - } - for (int i = 0; i < attribute_ids_array.length; i++) { - ctx.getCurrentSampler().addArgument("super_attribute[" + attribute_ids_array[i] + "]", option_values_array[i]); - } - } catch (Exception e) { - log.error("eror…", e); - } - - mpaf/tool/fragments/ce/common/configurable_product_add_to_cart_preprocessor.jmx - - - - - - X-Requested-With - XMLHttpRequest - - - mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx - - + + attribute_set_id + $.attribute_set_id + + + BODY + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + attribute_set_id + + + - - + + true + - - true - cart,messages - = - true - sections - - - true - true - = - true - update_section_id - - - true - ${__time()}${__Random(1,1000000)} + + false + { + "group": { + "attribute_group_name": "empty_attribute_group_${__time()}-${__threadNum}-${__Random(1,1000000)}", + "attribute_set_id": ${attribute_set_id} + } +} = - true - _ @@ -30563,59 +20452,132 @@ vars.put("totalProductsAdded", String.valueOf(productsAdded)); ${request_protocol} - ${base_path}customer/section/load/ - GET + ${base_path}rest/default/V1/products/attribute-sets/groups + POST true false true false false - mpaf/tool/fragments/ce/load_cart_section.jmx + mpaf/tool/fragments/ce/api/create_attribute_group.jmx - + + attribute_group_id + $.attribute_group_id + + + BODY + + + - You added ${product_name} to your shopping cart. + ^\d+$ Assertion.response_data false - 2 + 1 + variable + attribute_set_id - + + + + true + + + + false + { + "attribute": { + "attribute_code": "attr_code_${__time()}", + "frontend_labels": [ + { + "store_id": 0, + "label": "front_lbl_${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}" + } + ], + "default_value": "default value", + "frontend_input": "textarea", + "is_required": true + } +} + = + + + + + + + + ${request_protocol} + + ${base_path}rest/default/V1/products/attributes/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/api/create_attribute.jmx + + + attribute_id + $.attribute_id + + + BODY + + + + attribute_code + $.attribute_code + + + BODY + + + - This product is out of stock. + ^\d+$ Assertion.response_data false - 6 + 1 + variable + attribute_id - + - \"summary_count\":${totalProductsAdded} + ^[a-z0-9-_]+$ Assertion.response_data false - 2 + 1 + variable + attribute_code - - - - - X-Requested-With - XMLHttpRequest - - - mpaf/tool/fragments/ce/common/http_header_manager_ajax.jmx - - - + - - - + + true + + + + false + { + "attributeSetId": "${attribute_set_id}", + "attributeGroupId": "${attribute_group_id}", + "attributeCode": "${attribute_code}", + "sortOrder": 3 +} + = + + @@ -30623,45 +20585,35 @@ vars.put("totalProductsAdded", String.valueOf(productsAdded)); ${request_protocol} - ${base_path}customer/account/logout/ - GET + ${base_path}rest/default/V1/products/attribute-sets/attributes + POST true false true false false - mpaf/tool/fragments/ce/common/logout.jmx + mpaf/tool/fragments/ce/api/add_attribute_to_attribute_set.jmx - - - You are signed out. - - Assertion.response_data - false - 2 - + + $ + (\d+) + true + false + false + - - - false - - - -adminUserList = props.get("customer_emails_list"); -adminUserList.add(vars.get("customer_email")); - - mpaf/tool/fragments/ce/common/return_email_to_pool.jmx - + + - + 1 false 1 - ${importProductsPercentage} + ${adminProductCreationPercentage} mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx @@ -30682,7 +20634,7 @@ if (testLabel - vars.put("testLabel", "Import Products"); + vars.put("testLabel", "Admin Create Product"); true @@ -30742,10 +20694,36 @@ if (testLabel mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - mpaf/tool/fragments/ce/once_only_controller.jmx - + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + @@ -30848,108 +20826,65 @@ if (testLabel mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + - - mpaf/tool/fragments/ce/simple_controller.jmx - + + mpaf/tool/fragments/ce/once_only_controller.jmx + - - vars.put("entity", "catalog_product"); -String behavior = "${adminImportProductBehavior}"; -vars.put("adminImportBehavior", behavior); -String filepath = "${files_folder}${adminImportProductFilePath}"; -vars.put("adminImportFilePath", filepath); + + mpaf/tool/fragments/ce/admin_create_product/get_related_product_id.jmx + import org.apache.jmeter.samplers.SampleResult; +import java.util.Random; +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom}); +} +relatedIndex = random.nextInt(props.get("simple_products_list").size()); +vars.put("related_product_id", props.get("simple_products_list").get(relatedIndex).get("id")); true - mpaf/tool/fragments/ce/import_products/setup.jmx + - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/import/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/common/import.jmx + + mpaf/tool/fragments/ce/simple_controller.jmx + - - - Import Settings - - Assertion.response_data - false - 2 - - - + + + + Content-Type + application/json + + + Accept + */* + + + mpaf/tool/fragments/ce/api/header_manager_before_token.jmx + - - + + true + - - true - ${admin_form_key} - = - true - form_key - false - - - true - ${entity} - = - true - entity - - - true - ${adminImportBehavior} - = - true - behavior - - - true - validation-stop-on-errors - = - true - validation_strategy - - - true - 10 - = - true - allowed_error_count - - - true - , - = - true - _import_field_separator - - - true - , + + false + {"username":"${admin_user}","password":"${admin_password}"} = - true - _import_multiple_value_separator @@ -30959,93 +20894,77 @@ vars.put("adminImportFilePath", filepath); ${request_protocol} - ${base_path}${admin_path}/admin/import/validate + ${base_path}rest/V1/integration/admin/token POST true false true false - HttpClient4 - - - - ${adminImportFilePath} - import_file - application/vnd.ms-excel - - - false - mpaf/tool/fragments/ce/common/import_validate.jmx + mpaf/tool/fragments/ce/api/admin_token_retrieval.jmx - + + admin_token + $ + + + BODY + + + - File is valid! To start import process + ^[a-z0-9-]+$ Assertion.response_data false - 16 + 1 + variable + admin_token - + + + + Authorization + Bearer ${admin_token} + + + mpaf/tool/fragments/ce/api/header_manager.jmx + + + - - true - ${admin_form_key} - = - true - form_key - false - - - true - ${entity} - = - true - entity - - - true - ${adminImportBehavior} - = - true - behavior - - - true - validation-stop-on-errors + + false + mycolor = true - validation_strategy - false + searchCriteria[filterGroups][0][filters][0][value] - - true - 10 + + false + attribute_code = true - allowed_error_count - false + searchCriteria[filterGroups][0][filters][0][field] - - true - , + + false + mysize = true - _import_field_separator - false + searchCriteria[filterGroups][0][filters][1][value] - - true - , + + false + attribute_code = true - _import_multiple_value_separator - false + searchCriteria[filterGroups][0][filters][1][field] @@ -31055,225 +20974,2070 @@ vars.put("adminImportFilePath", filepath); ${request_protocol} - ${base_path}${admin_path}/admin/import/start - POST + ${base_path}rest/default/V1/products/attributes + GET true false true false - HttpClient4 - - - - ${adminImportFilePath} - import_file - application/vnd.ms-excel - - - false - mpaf/tool/fragments/ce/common/import_save.jmx + mpaf/tool/fragments/ce/admin_create_product/get_product_attributes.jmx - - - Import successfully done - - Assertion.response_data - false - 16 - + + product_attributes + $.items + + + BODY + + + + javascript + + + + +var attributesData = JSON.parse(vars.get("product_attributes")), +maxOptions = 2; + +attributes = []; +for (i in attributesData) { + if (i >= 2) { + break; + } + var data = attributesData[i], + attribute = { + "id": data.attribute_id, + "code": data.attribute_code, + "label": data.default_frontend_label, + "options": [] + }; + + var processedOptions = 0; + for (optionN in data.options) { + var option = data.options[optionN]; + if (parseInt(option.value) > 0 && processedOptions < maxOptions) { + processedOptions++; + attribute.options.push(option); + } + } + attributes.push(attribute); +} + +vars.putObject("product_attributes", attributes); + + - + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product_set/index/filter/${attribute_set_filter} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_product/configurable_setup_attribute_set.jmx + + + + false + attribute_set_id + catalog\/product_set\/edit\/id\/([\d]+)\/"[\D\d]*Attribute Set 1 + $1$ + + 1 + + + + false + + + import org.apache.commons.codec.binary.Base64; +byte[] encodedBytes = Base64.encodeBase64("set_name=Attribute Set 1".getBytes()); +vars.put("attribute_set_filter", new String(encodedBytes)); + + + + + - - 1 - false - 1 - ${importCustomersPercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + mpaf/tool/fragments/ce/simple_controller.jmx + - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); + + import org.apache.jmeter.samplers.SampleResult; +import java.util.Random; +Random random = new Random(); +if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom}); } - - javascript - mpaf/tool/fragments/_system/setup_label.jmx +number = random.nextInt(props.get("simple_products_list").size()); +simpleList = props.get("simple_products_list").get(number); +vars.put("simple_product_1_id", simpleList.get("id")); +vars.put("simple_product_1_name", simpleList.get("title")); + +do { + number1 = random.nextInt(props.get("simple_products_list").size()); +} while(number == number1); +simpleList = props.get("simple_products_list").get(number1); +vars.put("simple_product_2_id", simpleList.get("id")); +vars.put("simple_product_2_name", simpleList.get("title")); + +number2 = random.nextInt(props.get("configurable_products_list").size()); +configurableList = props.get("configurable_products_list").get(number2); +vars.put("configurable_product_1_id", configurableList.get("id")); +vars.put("configurable_product_1_url_key", configurableList.get("url_key")); +vars.put("configurable_product_1_name", configurableList.get("title")); + +//Additional category to be added +//int categoryId = Integer.parseInt(vars.get("simple_product_category_id")); +//vars.put("category_additional", (categoryId+1).toString()); +//New price +vars.put("price_new", "9999"); +//New special price +vars.put("special_price_new", "8888"); +//New quantity +vars.put("quantity_new", "100600"); +vars.put("configurable_sku", "Configurable Product - ${__time(YMD)}-${__threadNum}-${__Random(1,1000000)}"); + + + + + true + mpaf/tool/fragments/ce/admin_create_product/setup.jmx + + + + mpaf/tool/fragments/ce/admin_create_product/create_bundle_product.jmx + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/ + GET + true + false + true + false + false + + + + + + records found + + Assertion.response_data + false + 2 + - - - vars.put("testLabel", "Import Customers"); - - true - + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/new/set/4/type/bundle/ + GET + true + false + true + false + false + + + + + + New Product + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[name] + false + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[sku] + false + + + true + 42 + = + true + product[price] + + + true + 2 + = + true + product[tax_class_id] + + + true + 111 + = + true + product[quantity_and_stock_status][qty] + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + + + true + 1.0000 + = + true + product[weight] + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 2 + = + true + product[category_ids][] + + + true + <p>Full bundle product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[description] + + + true + <p>Short bundle product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[short_description] + + + true + 1 + = + true + product[status] + + + true + + = + true + product[configurable_variations] + + + true + 1 + = + true + affect_configurable_product_attributes + + + true + + = + true + product[image] + + + true + + = + true + product[small_image] + + + true + + = + true + product[thumbnail] + + + true + bundle-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[url_key] + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title + = + true + product[meta_title] + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword + = + true + product[meta_keyword] + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description + = + true + product[meta_description] + + + true + 1 + = + true + product[website_ids][] + + + true + 99 + = + true + product[special_price] + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + + + true + + = + true + product[special_from_date] + + + true + + = + true + product[special_to_date] + + + true + + = + true + product[cost] + + + true + 0 + = + true + product[tier_price][0][website_id] + + + true + 32000 + = + true + product[tier_price][0][cust_group] + + + true + 100 + = + true + product[tier_price][0][price_qty] + + + true + 90 + = + true + product[tier_price][0][price] + + + true + + = + true + product[tier_price][0][delete] + + + true + 0 + = + true + product[tier_price][1][website_id] + + + true + 1 + = + true + product[tier_price][1][cust_group] + + + true + 101 + = + true + product[tier_price][1][price_qty] + + + true + 99 + = + true + product[tier_price][1][price] + + + true + + = + true + product[tier_price][1][delete] + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + + + true + 100500 + = + true + product[stock_data][original_inventory_qty] + + + true + 100500 + = + true + product[stock_data][qty] + + + true + 0 + = + true + product[stock_data][min_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + + + true + 1 + = + true + product[stock_data][min_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + + + true + 0 + = + true + product[stock_data][backorders] + + + true + 1 + = + true + product[stock_data][use_config_backorders] + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + + + true + 0 + = + true + product[stock_data][qty_increments] + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + + + true + 1 + = + true + product[stock_data][is_in_stock] + + + true + + = + true + product[custom_design] + + + true + + = + true + product[custom_design_from] + + + true + + = + true + product[custom_design_to] + + + true + + = + true + product[custom_layout_update] + + + true + + = + true + product[page_layout] + + + true + container2 + = + true + product[options_container] + + + true + + = + true + new-variations-attribute-set-id + + + true + 0 + = + true + product[shipment_type] + + + true + option title one + = + true + bundle_options[bundle_options][0][title] + + + true + + = + true + bundle_options[bundle_options][0][option_id] + + + true + + = + true + bundle_options[bundle_options][0][delete] + + + true + select + = + true + bundle_options[bundle_options][0][type] + + + true + 1 + = + true + bundle_options[bundle_options][0][required] + + + true + 0 + = + true + bundle_options[bundle_options][0][position] + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_id] + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][0][option_id] + + + true + ${simple_product_1_id} + = + true + bundle_options[bundle_options][0][bundle_selections][0][product_id] + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][0][delete] + + + true + 25 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_price_value] + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_price_type] + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_qty] + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_can_change_qty] + + + true + 0 + = + true + bundle_options[bundle_options][0][bundle_selections][0][position] + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_id] + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][1][option_id] + + + true + ${simple_product_2_id} + = + true + bundle_options[bundle_options][0][bundle_selections][1][product_id] + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][1][delete] + + + true + 10.99 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_price_value] + + + true + 0 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_price_type] + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_qty] + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_can_change_qty] + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][1][position] + + + true + option title two + = + true + bundle_options[bundle_options][1][title] + + + true + + = + true + bundle_options[bundle_options][1][option_id] + + + true + + = + true + bundle_options[bundle_options][1][delete] + + + true + select + = + true + bundle_options[bundle_options][1][type] + + + true + 1 + = + true + bundle_options[bundle_options][1][required] + + + true + 1 + = + true + bundle_options[bundle_options][1][position] + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_id] + true + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][0][option_id] + true + + + true + ${simple_product_1_id} + = + true + bundle_options[bundle_options][1][bundle_selections][0][product_id] + true + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][0][delete] + true + + + true + 5.00 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_price_value] + true + + + true + 0 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_price_type] + true + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_qty] + true + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_can_change_qty] + true + + + true + 0 + = + true + bundle_options[bundle_options][1][bundle_selections][0][position] + true + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_id] + true + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][1][option_id] + true + + + true + ${simple_product_2_id} + = + true + bundle_options[bundle_options][1][bundle_selections][1][product_id] + true + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][1][delete] + true + + + true + 7.00 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_price_value] + true + + + true + 0 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_price_type] + true + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_qty] + true + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_can_change_qty] + true + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][1][position] + true + + + true + 2 + = + true + affect_bundle_product_selections + true + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/validate/set/4/ + POST + true + false + true + false + false + + + + + + {"error":false} + + Assertion.response_data + false + 2 + - - - vars.put("entity", "customer"); -String behavior = "${adminImportCustomerBehavior}"; -vars.put("adminImportBehavior", behavior); -String filepath = "${files_folder}${adminImportCustomerFilePath}"; -vars.put("adminImportFilePath", filepath); - - - true - mpaf/tool/fragments/ce/import_customers/setup.jmx - - - - - function getFormKeyFromResponse() - { - var url = prev.getUrlAsString(), - responseCode = prev.getResponseCode(), - formKey = null; - searchPattern = /var FORM_KEY = '(.+)'/; - if (responseCode == "200" && url) { - response = prev.getResponseDataAsString(); - formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; - } - return formKey; - } - - formKey = vars.get("form_key_storage"); - - currentFormKey = getFormKeyFromResponse(); + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[name] + false + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[sku] + false + + + true + 42 + = + true + product[price] + + + true + 2 + = + true + product[tax_class_id] + + + true + 111 + = + true + product[quantity_and_stock_status][qty] + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + + + true + 1.0000 + = + true + product[weight] + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 2 + = + true + product[category_ids][] + + + true + <p>Full bundle product Description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[description] + + + true + <p>Short bundle product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[short_description] + + + true + 1 + = + true + product[status] + + + true + + = + true + product[configurable_variations] + + + true + 1 + = + true + affect_configurable_product_attributes + + + true + + = + true + product[image] + + + true + + = + true + product[small_image] + + + true + + = + true + product[thumbnail] + + + true + bundle-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[url_key] + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title + = + true + product[meta_title] + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword + = + true + product[meta_keyword] + + + true + Bundle Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description + = + true + product[meta_description] + + + true + 1 + = + true + product[website_ids][] + + + true + 99 + = + true + product[special_price] + + + true + + = + true + product[special_from_date] + + + true + + = + true + product[special_to_date] + + + true + + = + true + product[cost] + + + true + 0 + = + true + product[tier_price][0][website_id] + + + true + 32000 + = + true + product[tier_price][0][cust_group] + + + true + 100 + = + true + product[tier_price][0][price_qty] + + + true + 90 + = + true + product[tier_price][0][price] + + + true + + = + true + product[tier_price][0][delete] + + + true + 0 + = + true + product[tier_price][1][website_id] + + + true + 1 + = + true + product[tier_price][1][cust_group] + + + true + 101 + = + true + product[tier_price][1][price_qty] + + + true + 99 + = + true + product[tier_price][1][price] + + + true + + = + true + product[tier_price][1][delete] + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + + + true + 100500 + = + true + product[stock_data][original_inventory_qty] + + + true + 100500 + = + true + product[stock_data][qty] + + + true + 0 + = + true + product[stock_data][min_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + + + true + 1 + = + true + product[stock_data][min_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + + + true + 0 + = + true + product[stock_data][backorders] + + + true + 1 + = + true + product[stock_data][use_config_backorders] + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + + + true + 0 + = + true + product[stock_data][qty_increments] + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + + + true + 1 + = + true + product[stock_data][is_in_stock] + + + true + + = + true + product[custom_design] + + + true + + = + true + product[custom_design_from] + + + true + + = + true + product[custom_design_to] + + + true + + = + true + product[custom_layout_update] + + + true + + = + true + product[page_layout] + + + true + container2 + = + true + product[options_container] + + + true + + = + true + new-variations-attribute-set-id + + + true + 0 + = + true + product[shipment_type] + false + + + true + option title one + = + true + bundle_options[bundle_options][0][title] + false + + + true + + = + true + bundle_options[bundle_options][0][option_id] + false + + + true + + = + true + bundle_options[bundle_options][0][delete] + false + + + true + select + = + true + bundle_options[bundle_options][0][type] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][required] + false + + + true + 0 + = + true + bundle_options[bundle_options][0][position] + false + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_id] + false + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][0][option_id] + false + + + true + ${simple_product_1_id} + = + true + bundle_options[bundle_options][0][bundle_selections][0][product_id] + false + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][0][delete] + false + + + true + 25 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_price_value] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_price_type] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_qty] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][0][selection_can_change_qty] + false + + + true + 0 + = + true + bundle_options[bundle_options][0][bundle_selections][0][position] + false + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_id] + false + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][1][option_id] + false + + + true + ${simple_product_2_id} + = + true + bundle_options[bundle_options][0][bundle_selections][1][product_id] + false + + + true + + = + true + bundle_options[bundle_options][0][bundle_selections][1][delete] + false + + + true + 10.99 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_price_value] + false + + + true + 0 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_price_type] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_qty] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][1][selection_can_change_qty] + false + + + true + 1 + = + true + bundle_options[bundle_options][0][bundle_selections][1][position] + false + + + true + option title two + = + true + bundle_options[bundle_options][1][title] + false + + + true + + = + true + bundle_options[bundle_options][1][option_id] + false + + + true + + = + true + bundle_options[bundle_options][1][delete] + false + + + true + select + = + true + bundle_options[bundle_options][1][type] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][required] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][position] + false + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_id] + false + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][0][option_id] + false + + + true + ${simple_product_1_id} + = + true + bundle_options[bundle_options][1][bundle_selections][0][product_id] + false + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][0][delete] + false + + + true + 5.00 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_price_value] + false + + + true + 0 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_price_type] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_qty] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][0][selection_can_change_qty] + false + + + true + 0 + = + true + bundle_options[bundle_options][1][bundle_selections][0][position] + false + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_id] + false + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][1][option_id] + false + + + true + ${simple_product_2_id} + = + true + bundle_options[bundle_options][1][bundle_selections][1][product_id] + false + + + true + + = + true + bundle_options[bundle_options][1][bundle_selections][1][delete] + false + + + true + 7.00 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_price_value] + false + + + true + 0 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_price_type] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_qty] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][1][selection_can_change_qty] + false + + + true + 1 + = + true + bundle_options[bundle_options][1][bundle_selections][1][position] + false + + + true + 2 + = + true + affect_bundle_product_selections + false + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/save/set/4/type/bundle/back/edit/active_tab/product-details/ + POST + true + false + true + false + false + + + + + + You saved the product + option title one + option title two + ${simple_product_2_name} + ${simple_product_1_name} + - if (currentFormKey != null && currentFormKey != formKey) { - vars.put("form_key_storage", currentFormKey); - } - - javascript - mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx - - - - formKey = vars.get("form_key_storage"); - if (formKey - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' - && sampler.getMethod() == "POST") - { - arguments = sampler.getArguments(); - for (i=0; i<arguments.getArgumentCount(); i++) - { - argument = arguments.getArgument(i); - if (argument.getName() == 'form_key' && argument.getValue() != formKey) { - log.info("admin form key updated: " + argument.getValue() + " => " + formKey); - argument.setValue(formKey); - } - } - } - - javascript - - - - - - false - mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - - - mpaf/tool/fragments/ce/once_only_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_login/admin_login.jmx - - - - Welcome - <title>Magento Admin</title> - - Assertion.response_data - false - 2 - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_form_key - - - - - - - - - true - - = - true - dummy - - - true - ${admin_form_key} - = - true - form_key - - - true - ${admin_password} - = - true - login[password] - - - true - ${admin_user} - = - true - login[username] - - + Assertion.response_data + false + 2 + + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + @@ -31281,25 +23045,28 @@ vars.put("adminImportFilePath", filepath); ${request_protocol} - ${base_path}${admin_path}/admin/dashboard/ - POST + ${base_path}${admin_path}/catalog/product/ + GET true false true false - Java false - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - - - - - - mpaf/tool/fragments/ce/simple_controller.jmx - + mpaf/tool/fragments/ce/admin_create_product/open_catalog_grid.jmx - + + + records found + + Assertion.response_data + false + 2 + + + + + @@ -31309,7 +23076,7 @@ vars.put("adminImportFilePath", filepath); ${request_protocol} - ${base_path}${admin_path}/admin/import/ + ${base_path}${admin_path}/catalog/product/new/set/${attribute_set_id}/type/configurable/ GET true false @@ -31317,11 +23084,11 @@ vars.put("adminImportFilePath", filepath); false false - mpaf/tool/fragments/ce/common/import.jmx + mpaf/tool/fragments/ce/admin_create_product/new_configurable.jmx - + - Import Settings + New Product Assertion.response_data false @@ -31330,368 +23097,506 @@ vars.put("adminImportFilePath", filepath); - + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + 1 + = + true + affect_configurable_product_attributes + true + true ${admin_form_key} = true form_key - false + true - + true - ${entity} + ${attribute_set_id} = true - entity + new-variations-attribute-set-id + true - + true - ${adminImportBehavior} + 1 = true - behavior + product[affect_product_custom_options] + true - + true - validation-stop-on-errors + ${attribute_set_id} = true - validation_strategy + product[attribute_set_id] + true - + true - 10 + 4 = true - allowed_error_count + product[category_ids][0] + true - + true - , + = true - _import_field_separator + product[custom_layout_update] + true - + true - , + = true - _import_multiple_value_separator + product[description] + true - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/import/validate - POST - true - false - true - false - HttpClient4 - - - - ${adminImportFilePath} - import_file - application/vnd.ms-excel + + true + 0 + = + true + product[gift_message_available] + true - - - false - - mpaf/tool/fragments/ce/common/import_validate.jmx - - - - File is valid! To start import process - - Assertion.response_data - false - 16 - - - - - - - - + true - ${admin_form_key} + 1 = true - form_key - false + product[gift_wrapping_available] + true - + true - ${entity} + = true - entity + product[gift_wrapping_price] + true - + true - ${adminImportBehavior} + = true - behavior + product[image] + true - + true - validation-stop-on-errors + 2 = true - validation_strategy - false + product[is_returnable] + true - + true - 10 + ${configurable_sku} - Meta Description = true - allowed_error_count - false + product[meta_description] + true - + true - , + ${configurable_sku} - Meta Keyword = true - _import_field_separator - false + product[meta_keyword] + true - + true - , + ${configurable_sku} - Meta Title = true - _import_multiple_value_separator - false + product[meta_title] + true - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/import/start - POST - true - false - true - false - HttpClient4 - - - - ${adminImportFilePath} - import_file - application/vnd.ms-excel + + true + ${configurable_sku} + = + true + product[name] + true - - - false - - mpaf/tool/fragments/ce/common/import_save.jmx - - - - Import successfully done - - Assertion.response_data - false - 16 - - - - - - - - - 1 - false - 1 - ${exportProductsPercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx - - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx - - - - vars.put("testLabel", "Export Products"); - - true - - - - - - function getFormKeyFromResponse() - { - var url = prev.getUrlAsString(), - responseCode = prev.getResponseCode(), - formKey = null; - searchPattern = /var FORM_KEY = '(.+)'/; - if (responseCode == "200" && url) { - response = prev.getResponseDataAsString(); - formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; - } - return formKey; - } - - formKey = vars.get("form_key_storage"); - - currentFormKey = getFormKeyFromResponse(); - - if (currentFormKey != null && currentFormKey != formKey) { - vars.put("form_key_storage", currentFormKey); - } - - javascript - mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx - - - - formKey = vars.get("form_key_storage"); - if (formKey - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' - && sampler.getMethod() == "POST") - { - arguments = sampler.getArguments(); - for (i=0; i<arguments.getArgumentCount(); i++) - { - argument = arguments.getArgument(i); - if (argument.getName() == 'form_key' && argument.getValue() != formKey) { - log.info("admin form key updated: " + argument.getValue() + " => " + formKey); - argument.setValue(formKey); - } - } - } - - javascript - - - - - - false - mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - - - mpaf/tool/fragments/ce/once_only_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_login/admin_login.jmx - - - - Welcome - <title>Magento Admin</title> - - Assertion.response_data - false - 2 - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_form_key - - - - - - - - + + true + container2 + = + true + product[options_container] + true + + + true + ${price_new} + = + true + product[price] + true + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + true + + + true + 1000 + = + true + product[quantity_and_stock_status][qty] + true + + + true + + = + true + product[short_description] + true + + + true + ${configurable_sku} + = + true + product[sku] + true + + + true + + = + true + product[small_image] + true + + + true + ${special_price_new} + = + true + product[special_price] + true + + + true + 1 + = + true + product[status] + true + + + true + 0 + = + true + product[stock_data][backorders] + true + + + true + 1 + = + true + product[stock_data][deferred_stock_update] + true + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + true + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + true + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + true + + + true + 1 + = + true + product[stock_data][manage_stock] + true + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + true + + + true + 0 + = + true + product[stock_data][min_qty] + true + + + true + 1 + = + true + product[stock_data][min_sale_qty] + true + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + true + + + true + 1 + = + true + product[stock_data][qty_increments] + true + + + true + 1 + = + true + product[stock_data][use_config_backorders] + true + + + true + 1 + = + true + product[stock_data][use_config_deferred_stock_update] + true + + + true + 1 + = + true + product[stock_data][use_config_enable_qty_increments] + true + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + true + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + true + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + true + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + true + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + true + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + true + + + true + 2 + = + true + product[tax_class_id] + true + + true = true - dummy + product[thumbnail] + true - + true - ${admin_form_key} + = true - form_key + product[url_key] + true - + true - ${admin_password} + 1 = true - login[password] + product[use_config_gift_message_available] + true - + true - ${admin_user} + 1 = true - login[username] + product[use_config_gift_wrapping_available] + true + + + true + 1 + = + true + product[use_config_is_returnable] + true + + + true + 4 + = + true + product[visibility] + true + + + true + 1 + = + true + product[website_ids][1] + true + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] @@ -31701,610 +23606,7787 @@ if (testLabel ${request_protocol} - ${base_path}${admin_path}/admin/dashboard/ + ${base_path}${admin_path}/catalog/product/validate/set/${attribute_set_id}/ POST true false true false - Java - false - - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - - - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/export/ - GET - true - false - true - false false - mpaf/tool/fragments/ce/common/export.jmx + mpaf/tool/fragments/ce/admin_create_product/configurable_validate.jmx - + - Export Settings + {"error":false} Assertion.response_data false 2 + + + javascript + + + + +attributes = vars.getObject("product_attributes"); + +for (i in attributes) { + var attribute = attributes[i]; + sampler.addArgument("attribute_codes[" + i + "]", attribute.code); + sampler.addArgument("attributes[" + i + "]", attribute.id); + sampler.addArgument("product[" + attribute.code + "]", attribute.options[0].value); + addConfigurableAttributeData(attribute); +} + +addConfigurableMatrix(attributes); + +function addConfigurableAttributeData(attribute) { + var attributeId = attribute.id; + + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][attribute_id]", attributeId); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][code]", attribute.code); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][label]", attribute.label); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][position]", 0); + attribute.options.forEach(function (option, index) { + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][values][" + option.value + "][include]", index); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][values][" + option.value + "][value_index]", option.value); + }); +} + +/** + * Build 4 simple products for Configurable + */ +function addConfigurableMatrix(attributes) { + + var attribute1 = attributes[0], + attribute2 = attributes[1], + productIndex = 1, + products = []; + var variationNames = []; + attribute1.options.forEach(function (option1) { + attribute2.options.forEach(function (option2) { + var productAttributes = {}, + namePart = option1.label + "+" + option2.label, + variationKey = option1.value + "-" + option2.value; + productAttributes[attribute1.code] = option1.value; + productAttributes[attribute2.code] = option2.value; + + variationNames.push(namePart + " - " + vars.get("configurable_sku")); + var product = { + "id": null, + "name": namePart + " - " + vars.get("configurable_sku"), + "sku": namePart + " - " + vars.get("configurable_sku"), + "status": 1, + "price": "100", + "price_currency": "$", + "price_string": "$100", + "weight": "6", + "qty": "50", + "variationKey": variationKey, + "configurable_attribute": JSON.stringify(productAttributes), + "thumbnail_image": "", + "media_gallery": {"images": {}}, + "image": [], + "was_changed": true, + "canEdit": 1, + "newProduct": 1, + "record_id": productIndex + }; + productIndex++; + products.push(product); + }); + }); + + sampler.addArgument("configurable-matrix-serialized", JSON.stringify(products)); + vars.putObject("configurable_variations_assertion", variationNames); +} + + mpaf/tool/fragments/ce/admin_create_product/configurable_prepare_data.jmx + - + - + true - form_key - ${admin_form_key} + true = true + ajax + false - + true - attribute_code - + true = true + isAjax + false - + true - export_filter[allow_message][] - , + 1 = true + affect_configurable_product_attributes + true - + true - export_filter[allow_open_amount] - + ${admin_form_key} = true + form_key + true - + true - export_filter[category_ids] - 24,25,26,27,28,29,30 + ${attribute_set_id} = true + new-variations-attribute-set-id + true - + true - export_filter[configurable_variations] - + 1 = true + product[affect_product_custom_options] + true - + true - export_filter[cost][] - , + ${attribute_set_id} = true + product[attribute_set_id] + true - + true - export_filter[country_of_manufacture] - + 4 = true + product[category_ids][0] + true - + true - export_filter[created_at] = true + product[custom_layout_update] + true - + true - export_filter[custom_design] = true + product[description] + true - + true - export_filter[custom_design_from][] - , + 0 = true + product[gift_message_available] + true - + true - export_filter[custom_design_to][] - , + 1 = true + product[gift_wrapping_available] + true - + true - export_filter[custom_layout_update] = true + product[gift_wrapping_price] + true - + true - export_filter[description] = true + product[image] + true - + true - export_filter[email_template] - + 2 = true + product[is_returnable] + true - + true - export_filter[gallery] - + ${configurable_sku} - Meta Description = true + product[meta_description] + true - + true - export_filter[gift_message_available] - + ${configurable_sku} - Meta Keyword = true + product[meta_keyword] + true - + true - export_filter[gift_wrapping_available] - + ${configurable_sku} - Meta Title = true + product[meta_title] + true - + true - export_filter[gift_wrapping_price][] - , + ${configurable_sku} = true + product[name] + true - + true - export_filter[group_price][] - , + container2 = true + product[options_container] + true - + true - export_filter[has_options] - + ${price_new} = true + product[price] + true - + true - export_filter[image] - + 1 = true + product[product_has_weight] + true - + true - export_filter[image_label] - + 1 = true + product[quantity_and_stock_status][is_in_stock] + true - + true - export_filter[is_redeemable][] - , + 1000 = true + product[quantity_and_stock_status][qty] + true - + true - export_filter[is_returnable] = true + product[short_description] + true - + true - export_filter[lifetime][] - , + ${configurable_sku} = true + product[sku] + true - + true - export_filter[links_exist][] - , + = true + product[small_image] + true - + true - export_filter[links_purchased_separately][] - , + ${special_price_new} = true + product[special_price] + true - + true - export_filter[links_title] - + 1 = true + product[status] + true - + true - export_filter[media_gallery] - + 0 = true + product[stock_data][backorders] + true - + true - export_filter[meta_description] - + 1 = true + product[stock_data][deferred_stock_update] + true - + true - export_filter[meta_keyword] - + 0 = true + product[stock_data][enable_qty_increments] + true - + true - export_filter[meta_title] - + 0 = true + product[stock_data][is_decimal_divided] + true - + true - export_filter[minimal_price][] - , + 0 = true + product[stock_data][is_qty_decimal] + true - + true - export_filter[msrp][] - , + 1 = true + product[stock_data][manage_stock] + true - + true - export_filter[msrp_display_actual_price_type] - + 10000 = true + product[stock_data][max_sale_qty] + true - + true - export_filter[name] - + 0 = true + product[stock_data][min_qty] + true - + true - export_filter[news_from_date][] - , + 1 = true + product[stock_data][min_sale_qty] + true - + true - export_filter[news_to_date][] - , + 1 = true + product[stock_data][notify_stock_qty] + true - + true - export_filter[old_id][] - , + 1 = true + product[stock_data][qty_increments] + true - + true - export_filter[open_amount_max][] - , + 1 = true + product[stock_data][use_config_backorders] + true - + true - export_filter[open_amount_min][] - , + 1 = true + product[stock_data][use_config_deferred_stock_update] + true - + true - export_filter[options_container] - + 1 = true + product[stock_data][use_config_enable_qty_increments] + true - + true - export_filter[page_layout] - + 1 = true + product[stock_data][use_config_manage_stock] + true - + true - export_filter[price][] - , + 1 = true + product[stock_data][use_config_max_sale_qty] + true - + true - export_filter[price_type][] - , + 1 = true + product[stock_data][use_config_min_qty] + true - + true - export_filter[price_view] - + 1 = true + product[stock_data][use_config_min_sale_qty] + true - + true - export_filter[quantity_and_stock_status] - + 1 = true + product[stock_data][use_config_notify_stock_qty] + true - + true - export_filter[related_tgtr_position_behavior][] - , + 1 = true + product[stock_data][use_config_qty_increments] + true - + true - export_filter[related_tgtr_position_limit][] - , + 2 = true + product[tax_class_id] + true - + true - export_filter[required_options] = true + product[thumbnail] + true - + true - export_filter[samples_title] = true + product[url_key] + true - - true - export_filter[shipment_type][] - , - = - true - - + true - export_filter[short_description] - + 1 = true + product[use_config_gift_message_available] + true - + true - export_filter[sku] - + 1 = true + product[use_config_gift_wrapping_available] + true - + true - export_filter[sku_type][] - , + 1 = true + product[use_config_is_returnable] + true - + true - export_filter[small_image] - + 4 = true + product[visibility] + true - + true - export_filter[small_image_label] - + 1 = true + product[website_ids][1] + true - + true - export_filter[special_from_date][] - , + ${related_product_id} = true + links[related][0][id] - + true - export_filter[special_price][] - , + 1 = true + links[related][0][position] - + true - export_filter[special_to_date][] - , + ${related_product_id} = true + links[upsell][0][id] - + true - export_filter[status] - + 1 = true + links[upsell][0][position] - + true - export_filter[tax_class_id] - + ${related_product_id} = true + links[crosssell][0][id] - + true - export_filter[thumbnail] - + 1 = true + links[crosssell][0][position] - + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/save/set/${attribute_set_id}/type/configurable/back/edit/active_tab/product-details/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_product/configurable_save.jmx + + + + You saved the product + + Assertion.response_data + false + 2 + + + + javascript + + + + +var configurableVariations = vars.getObject("configurable_variations_assertion"), +response = SampleResult.getResponseDataAsString(); + +configurableVariations.forEach(function (variation) { + if (response.indexOf(variation) == -1) { + AssertionResult.setFailureMessage("Cannot find variation \"" + variation + "\""); + AssertionResult.setFailure(true); + } +}); + + + + + + javascript + + + + +attributes = vars.getObject("product_attributes"); + +for (i in attributes) { + var attribute = attributes[i]; + sampler.addArgument("attribute_codes[" + i + "]", attribute.code); + sampler.addArgument("attributes[" + i + "]", attribute.id); + sampler.addArgument("product[" + attribute.code + "]", attribute.options[0].value); + addConfigurableAttributeData(attribute); +} + +addConfigurableMatrix(attributes); + +function addConfigurableAttributeData(attribute) { + var attributeId = attribute.id; + + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][attribute_id]", attributeId); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][code]", attribute.code); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][label]", attribute.label); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][position]", 0); + attribute.options.forEach(function (option, index) { + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][values][" + option.value + "][include]", index); + sampler.addArgument("product[configurable_attributes_data][" + attributeId + "][values][" + option.value + "][value_index]", option.value); + }); +} + +/** + * Build 4 simple products for Configurable + */ +function addConfigurableMatrix(attributes) { + + var attribute1 = attributes[0], + attribute2 = attributes[1], + productIndex = 1, + products = []; + var variationNames = []; + attribute1.options.forEach(function (option1) { + attribute2.options.forEach(function (option2) { + var productAttributes = {}, + namePart = option1.label + "+" + option2.label, + variationKey = option1.value + "-" + option2.value; + productAttributes[attribute1.code] = option1.value; + productAttributes[attribute2.code] = option2.value; + + variationNames.push(namePart + " - " + vars.get("configurable_sku")); + var product = { + "id": null, + "name": namePart + " - " + vars.get("configurable_sku"), + "sku": namePart + " - " + vars.get("configurable_sku"), + "status": 1, + "price": "100", + "price_currency": "$", + "price_string": "$100", + "weight": "6", + "qty": "50", + "variationKey": variationKey, + "configurable_attribute": JSON.stringify(productAttributes), + "thumbnail_image": "", + "media_gallery": {"images": {}}, + "image": [], + "was_changed": true, + "canEdit": 1, + "newProduct": 1, + "record_id": productIndex + }; + productIndex++; + products.push(product); + }); + }); + + sampler.addArgument("configurable-matrix-serialized", JSON.stringify(products)); + vars.putObject("configurable_variations_assertion", variationNames); +} + + mpaf/tool/fragments/ce/admin_create_product/configurable_prepare_data.jmx + + + + + + mpaf/tool/fragments/ce/admin_create_product/create_downloadable_product.jmx + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/ + GET + true + false + true + false + false + + + + + + records found + + Assertion.response_data + false + 2 + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/new/set/4/type/downloadable/ + GET + true + false + true + false + false + + + + + + New Product + + Assertion.response_data + false + 2 + + + + + + + + ${files_folder}downloadable_original.txt + links + text/plain + + + + + + + true + ${admin_form_key} + = + true + form_key + false + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/downloadable_file/upload/type/links/?isAjax=true + POST + false + false + true + true + false + + + + + original_file + $.file + + + BODY + + + + + + + + ${files_folder}downloadable_sample.txt + samples + text/plain + + + + + + + true + ${admin_form_key} + = + true + form_key + false + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/downloadable_file/upload/type/samples/?isAjax=true + POST + false + false + true + true + false + + + + + sample_file + $.file + + + BODY + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[name] + false + + + true + SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[sku] + false + + + true + 123 + = + true + product[price] + + + true + 2 + = + true + product[tax_class_id] + + + true + 111 + = + true + product[quantity_and_stock_status][qty] + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + + + true + 1.0000 + = + true + product[weight] + + + true + 2 + = + true + product[category_ids][] + + + true + <p>Full downloadable product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[description] + + + true + <p>Short downloadable product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[short_description] + + + true + 1 + = + true + product[status] + + + true + + = + true + product[image] + + + true + + = + true + product[small_image] + + + true + + = + true + product[thumbnail] + + + true + downloadable-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[url_key] + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title + = + true + product[meta_title] + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword + = + true + product[meta_keyword] + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description + = + true + product[meta_description] + + + true + 1 + = + true + product[website_ids][] + + + true + 99 + = + true + product[special_price] + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + + + true + + = + true + product[special_from_date] + + + true + + = + true + product[special_to_date] + + + true + + = + true + product[cost] + + + true + 0 + = + true + product[tier_price][0][website_id] + + + true + 32000 + = + true + product[tier_price][0][cust_group] + + + true + 100 + = + true + product[tier_price][0][price_qty] + + + true + 90 + = + true + product[tier_price][0][price] + + + true + + = + true + product[tier_price][0][delete] + + + true + 0 + = + true + product[tier_price][1][website_id] + + + true + 1 + = + true + product[tier_price][1][cust_group] + + + true + 101 + = + true + product[tier_price][1][price_qty] + + + true + 99 + = + true + product[tier_price][1][price] + + + true + + = + true + product[tier_price][1][delete] + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + + + true + 100500 + = + true + product[stock_data][original_inventory_qty] + + + true + 100500 + = + true + product[stock_data][qty] + + + true + 0 + = + true + product[stock_data][min_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + + + true + 1 + = + true + product[stock_data][min_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + + + true + 0 + = + true + product[stock_data][backorders] + + + true + 1 + = + true + product[stock_data][use_config_backorders] + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + + + true + 0 + = + true + product[stock_data][qty_increments] + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + + + true + 1 + = + true + product[stock_data][is_in_stock] + + + true + + = + true + product[custom_design] + + + true + + = + true + product[custom_design_from] + + + true + + = + true + product[custom_design_to] + + + true + + = + true + product[custom_layout_update] + + + true + + = + true + product[page_layout] + + + true + container2 + = + true + product[options_container] + + + true + on + = + true + is_downloadable + + + true + Links + = + true + product[links_title] + + + true + 0 + = + true + product[links_purchased_separately] + + + true + ${original_file} + = + true + downloadable[link][0][file][0][file] + false + + + true + downloadable_original.txt + = + true + downloadable[link][0][file][0][name] + false + + + true + 13 + = + true + downloadable[link][0][file][0][size] + false + + + true + new + = + true + downloadable[link][0][file][0][status] + false + + + true + 1 + = + true + downloadable[link][0][is_shareable] + + + true + 0 + = + true + downloadable[link][0][is_unlimited] + + + true + + = + true + downloadable[link][0][link_url] + + + true + 0 + = + true + downloadable[link][0][number_of_downloads] + true + + + true + 120 + = + true + downloadable[link][0][price] + true + + + true + 0 + = + true + downloadable[link][0][record_id] + true + + + true + file + = + true + downloadable[link][0][sample][type] + + + true + + = + true + downloadable[link][0][sample][url] + + + true + 1 + = + true + downloadable[link][0][sort_order] + + + true + Original Link + = + true + downloadable[link][0][title] + + + true + file + = + true + downloadable[link][0][type] + + + true + ${sample_file} + = + true + downloadable[sample][0][file][0][file] + true + + + true + downloadable_sample.txt + = + true + downloadable[sample][0][file][0][name] + true + + + true + 14 + = + true + downloadable[sample][0][file][0][size] + true + + + true + new + = + true + downloadable[sample][0][file][0][status] + true + + + true + 0 + = + true + downloadable[sample][0][record_id] + true + + + true + + = + true + downloadable[sample][0][sample_url] + true + + + true + 1 + = + true + downloadable[sample][0][sort_order] + true + + + true + Sample Link + = + true + downloadable[sample][0][title] + true + + + true + file + = + true + downloadable[sample][0][type] + true + + + true + 1 + = + true + affect_configurable_product_attributes + false + + + true + 4 + = + true + new-variations-attribute-set-id + false + + + true + + = + true + product[configurable_variation] + false + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/validate/set/4/type/downloadable/ + POST + true + false + true + false + false + + + + + + {"error":false} + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[name] + false + + + true + SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[sku] + false + + + true + 123 + = + true + product[price] + + + true + 2 + = + true + product[tax_class_id] + + + true + 111 + = + true + product[quantity_and_stock_status][qty] + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + + + true + 1.0000 + = + true + product[weight] + + + true + 2 + = + true + product[category_ids][] + + + true + <p>Full downloadable product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[description] + + + true + <p>Short downloadable product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[short_description] + false + + + true + 1 + = + true + product[status] + + + true + + = + true + product[image] + + + true + + = + true + product[small_image] + + + true + + = + true + product[thumbnail] + + + true + downloadable-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[url_key] + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title + = + true + product[meta_title] + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword + = + true + product[meta_keyword] + + + true + Downloadable Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description + = + true + product[meta_description] + + + true + 1 + = + true + product[website_ids][] + + + true + 99 + = + true + product[special_price] + + + true + + = + true + product[special_from_date] + + + true + + = + true + product[special_to_date] + + + true + + = + true + product[cost] + + + true + 0 + = + true + product[tier_price][0][website_id] + + + true + 32000 + = + true + product[tier_price][0][cust_group] + + + true + 100 + = + true + product[tier_price][0][price_qty] + + + true + 90 + = + true + product[tier_price][0][price] + + + true + + = + true + product[tier_price][0][delete] + + + true + 0 + = + true + product[tier_price][1][website_id] + + + true + 1 + = + true + product[tier_price][1][cust_group] + + + true + 101 + = + true + product[tier_price][1][price_qty] + + + true + 99 + = + true + product[tier_price][1][price] + + + true + + = + true + product[tier_price][1][delete] + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + + + true + 100500 + = + true + product[stock_data][original_inventory_qty] + + + true + 100500 + = + true + product[stock_data][qty] + + + true + 0 + = + true + product[stock_data][min_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + + + true + 1 + = + true + product[stock_data][min_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + + + true + 0 + = + true + product[stock_data][backorders] + + + true + 1 + = + true + product[stock_data][use_config_backorders] + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + + + true + 0 + = + true + product[stock_data][qty_increments] + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + + + true + 1 + = + true + product[stock_data][is_in_stock] + + + true + + = + true + product[custom_design] + + + true + + = + true + product[custom_design_from] + + + true + + = + true + product[custom_design_to] + + + true + + = + true + product[custom_layout_update] + + + true + + = + true + product[page_layout] + + + true + container2 + = + true + product[options_container] + + + true + ${original_file} + = + true + downloadable[link][0][file][0][file] + false + + + true + downloadable_original.txt + = + true + downloadable[link][0][file][0][name] + false + + + true + 13 + = + true + downloadable[link][0][file][0][size] + false + + + true + new + = + true + downloadable[link][0][file][0][status] + false + + + true + 1 + = + true + downloadable[link][0][is_shareable] + true + + + true + 0 + = + true + downloadable[link][0][is_unlimited] + true + + + true + + = + true + downloadable[link][0][link_url] + true + + + true + 0 + = + true + downloadable[link][0][number_of_downloads] + false + + + true + 120 + = + true + downloadable[link][0][price] + false + + + true + 0 + = + true + downloadable[link][0][record_id] + false + + + true + file + = + true + downloadable[link][0][sample][type] + true + + + true + + = + true + downloadable[link][0][sample][url] + true + + + true + 1 + = + true + downloadable[link][0][sort_order] + true + + + true + Original Link + = + true + downloadable[link][0][title] + true + + + true + file + = + true + downloadable[link][0][type] + true + + + true + ${sample_file} + = + true + downloadable[sample][0][file][0][file] + true + + + true + downloadable_sample.txt + = + true + downloadable[sample][0][file][0][name] + true + + + true + 14 + = + true + downloadable[sample][0][file][0][size] + true + + + true + new + = + true + downloadable[sample][0][file][0][status] + true + + + true + 0 + = + true + downloadable[sample][0][record_id] + true + + + true + + = + true + downloadable[sample][0][sample_url] + true + + + true + 1 + = + true + downloadable[sample][0][sort_order] + true + + + true + Sample Link + = + true + downloadable[sample][0][title] + true + + + true + file + = + true + downloadable[sample][0][type] + true + + + true + 1 + = + true + affect_configurable_product_attributes + false + + + true + 4 + = + true + new-variations-attribute-set-id + false + + + true + + = + true + product[configurable_variation] + false + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/save/set/4/type/downloadable/back/edit/active_tab/product-details/ + POST + true + false + true + false + false + + + + + + You saved the product + + Assertion.response_data + false + 2 + + + + + violation + + Assertion.response_data + false + 6 + + + + + + + mpaf/tool/fragments/ce/admin_create_product/create_simple_product.jmx + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/ + GET + true + false + true + false + false + + + + + + records found + + Assertion.response_data + false + 2 + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/new/set/4/type/simple/ + GET + true + false + true + false + false + + + + + + New Product + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[name] + false + + + true + SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[sku] + false + + + true + 123 + = + true + product[price] + + + true + 2 + = + true + product[tax_class_id] + + + true + 111 + = + true + product[quantity_and_stock_status][qty] + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + + + true + 1.0000 + = + true + product[weight] + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 2 + = + true + product[category_ids][] + + + true + <p>Full simple product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[description] + + + true + <p>Short simple product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[short_description] + + + true + 1 + = + true + product[status] + + + true + + = + true + product[image] + + + true + + = + true + product[small_image] + + + true + + = + true + product[thumbnail] + + + true + simple-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[url_key] + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title + = + true + product[meta_title] + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword + = + true + product[meta_keyword] + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description + = + true + product[meta_description] + + + true + 1 + = + true + product[website_ids][] + + + true + 99 + = + true + product[special_price] + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + + + true + + = + true + product[special_from_date] + + + true + + = + true + product[special_to_date] + + + true + + = + true + product[cost] + + + true + 0 + = + true + product[tier_price][0][website_id] + + + true + 32000 + = + true + product[tier_price][0][cust_group] + + + true + 100 + = + true + product[tier_price][0][price_qty] + + + true + 90 + = + true + product[tier_price][0][price] + + + true + + = + true + product[tier_price][0][delete] + + + true + 0 + = + true + product[tier_price][1][website_id] + + + true + 1 + = + true + product[tier_price][1][cust_group] + + + true + 101 + = + true + product[tier_price][1][price_qty] + + + true + 99 + = + true + product[tier_price][1][price] + + + true + + = + true + product[tier_price][1][delete] + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + + + true + 100500 + = + true + product[stock_data][original_inventory_qty] + + + true + 100500 + = + true + product[stock_data][qty] + + + true + 0 + = + true + product[stock_data][min_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + + + true + 1 + = + true + product[stock_data][min_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + + + true + 0 + = + true + product[stock_data][backorders] + + + true + 1 + = + true + product[stock_data][use_config_backorders] + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + + + true + 0 + = + true + product[stock_data][qty_increments] + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + + + true + 1 + = + true + product[stock_data][is_in_stock] + + + true + + = + true + product[custom_design] + + + true + + = + true + product[custom_design_from] + + + true + + = + true + product[custom_design_to] + + + true + + = + true + product[custom_layout_update] + + + true + + = + true + product[page_layout] + + + true + container2 + = + true + product[options_container] + + + true + + = + true + product[options][1][is_delete] + false + + + true + 1 + = + true + product[options][1][is_require] + false + + + true + select + = + true + product[options][1][previous_group] + false + + + true + drop_down + = + true + product[options][1][previous_type] + false + + + true + 0 + = + true + product[options][1][sort_order] + false + + + true + Product Option Title One + = + true + product[options][1][title] + false + + + true + drop_down + = + true + product[options][1][type] + false + + + true + + = + true + product[options][1][values][1][is_delete] + false + + + true + 200 + = + true + product[options][1][values][1][price] + false + + + true + fixed + = + true + product[options][1][values][1][price_type] + false + + + true + sku-one + = + true + product[options][1][values][1][sku] + false + + + true + 0 + = + true + product[options][1][values][1][sort_order] + false + + + true + Row Title + = + true + product[options][1][values][1][title] + false + + + true + + = + true + product[options][2][is_delete] + false + + + true + 1 + = + true + product[options][2][is_require] + false + + + true + 250 + = + true + product[options][2][max_characters] + false + + + true + text + = + true + product[options][2][previous_group] + false + + + true + field + = + true + product[options][2][previous_type] + false + + + true + 500 + = + true + product[options][2][price] + false + + + true + fixed + = + true + product[options][2][price_type] + false + + + true + sku-two + = + true + product[options][2][sku] + false + + + true + 1 + = + true + product[options][2][sort_order] + false + + + true + Field Title + = + true + product[options][2][title] + false + + + true + field + = + true + product[options][2][type] + false + + + true + 1 + = + true + affect_configurable_product_attributes + true + + + true + 4 + = + true + new-variations-attribute-set-id + true + + + true + + = + true + product[configurable_variation] + true + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/validate/set/4/ + POST + true + false + true + false + false + + + + + + {"error":false} + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[name] + false + + + true + SKU ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[sku] + false + + + true + 123 + = + true + product[price] + + + true + 2 + = + true + product[tax_class_id] + + + true + 111 + = + true + product[quantity_and_stock_status][qty] + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + + + true + 1.0000 + = + true + product[weight] + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 2 + = + true + product[category_ids][] + + + true + <p>Full simple product Description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[description] + + + true + <p>Short simple product description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)}</p> + = + true + product[short_description] + + + true + 1 + = + true + product[status] + + + true + + = + true + product[image] + + + true + + = + true + product[small_image] + + + true + + = + true + product[thumbnail] + + + true + simple-product-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + product[url_key] + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Title + = + true + product[meta_title] + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Keyword + = + true + product[meta_keyword] + + + true + Simple Product ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} Meta Description + = + true + product[meta_description] + + + true + 1 + = + true + product[website_ids][] + + + true + 99 + = + true + product[special_price] + + + true + + = + true + product[special_from_date] + + + true + + = + true + product[special_to_date] + + + true + + = + true + product[cost] + + + true + 0 + = + true + product[tier_price][0][website_id] + + + true + 32000 + = + true + product[tier_price][0][cust_group] + + + true + 100 + = + true + product[tier_price][0][price_qty] + + + true + 90 + = + true + product[tier_price][0][price] + + + true + + = + true + product[tier_price][0][delete] + + + true + 0 + = + true + product[tier_price][1][website_id] + + + true + 1 + = + true + product[tier_price][1][cust_group] + + + true + 101 + = + true + product[tier_price][1][price_qty] + + + true + 99 + = + true + product[tier_price][1][price] + + + true + + = + true + product[tier_price][1][delete] + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + + + true + 100500 + = + true + product[stock_data][original_inventory_qty] + + + true + 100500 + = + true + product[stock_data][qty] + + + true + 0 + = + true + product[stock_data][min_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + + + true + 1 + = + true + product[stock_data][min_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + + + true + 0 + = + true + product[stock_data][backorders] + + + true + 1 + = + true + product[stock_data][use_config_backorders] + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + + + true + 0 + = + true + product[stock_data][qty_increments] + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + + + true + 1 + = + true + product[stock_data][is_in_stock] + + + true + + = + true + product[custom_design] + + + true + + = + true + product[custom_design_from] + + + true + + = + true + product[custom_design_to] + + + true + + = + true + product[custom_layout_update] + + + true + + = + true + product[page_layout] + + + true + container2 + = + true + product[options_container] + + + true + + = + true + product[options][1][is_delete] + true + + + true + 1 + = + true + product[options][1][is_require] + + + true + select + = + true + product[options][1][previous_group] + false + + + true + drop_down + = + true + product[options][1][previous_type] + false + + + true + 0 + = + true + product[options][1][sort_order] + false + + + true + Product Option Title One + = + true + product[options][1][title] + + + true + drop_down + = + true + product[options][1][type] + + + true + + = + true + product[options][1][values][1][is_delete] + false + + + true + 200 + = + true + product[options][1][values][1][price] + + + true + fixed + = + true + product[options][1][values][1][price_type] + + + true + sku-one + = + true + product[options][1][values][1][sku] + + + true + 0 + = + true + product[options][1][values][1][sort_order] + + + true + Row Title + = + true + product[options][1][values][1][title] + + + true + + = + true + product[options][2][is_delete] + false + + + true + 1 + = + true + product[options][2][is_require] + + + true + 250 + = + true + product[options][2][max_characters] + + + true + text + = + true + product[options][2][previous_group] + + + true + field + = + true + product[options][2][previous_type] + + + true + 500 + = + true + product[options][2][price] + + + true + fixed + = + true + product[options][2][price_type] + + + true + sku-two + = + true + product[options][2][sku] + + + true + 1 + = + true + product[options][2][sort_order] + + + true + Field Title + = + true + product[options][2][title] + + + true + field + = + true + product[options][2][type] + + + true + 1 + = + true + affect_configurable_product_attributes + true + + + true + 4 + = + true + new-variations-attribute-set-id + true + + + true + + = + true + product[configurable_variation] + true + + + true + ${related_product_id} + = + true + links[related][0][id] + + + true + 1 + = + true + links[related][0][position] + + + true + ${related_product_id} + = + true + links[upsell][0][id] + + + true + 1 + = + true + links[upsell][0][position] + + + true + ${related_product_id} + = + true + links[crosssell][0][id] + + + true + 1 + = + true + links[crosssell][0][position] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/save/set/4/type/simple/back/edit/active_tab/product-details/ + POST + true + false + true + false + false + + + + + + You saved the product + + Assertion.response_data + false + 2 + + + + + violation + + Assertion.response_data + false + 6 + + + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${adminProductEditingPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Admin Edit Product"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + true - export_filter[thumbnail_label] = true + dummy - - true - export_filter[tier_price][] - , - = - true - - + true - export_filter[updated_at] - + ${admin_form_key} = true + form_key - + true - export_filter[upsell_tgtr_position_behavior][] - , + ${admin_password} = true + login[password] - + true - export_filter[upsell_tgtr_position_limit][] - , + ${admin_user} = true + login[username] - + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + mpaf/tool/fragments/ce/admin_edit_product/admin_edit_product_updated.jmx + import java.util.ArrayList; + import java.util.HashMap; + import java.util.Random; + + try { + Random random = new Random(); + if (${seedForRandom} > 0) { + random.setSeed(${seedForRandom} + ${__threadNum}); + } + simpleCount = props.get("simple_products_list").size(); + configCount = props.get("configurable_products_list").size(); + productCount = 0; + if (simpleCount > configCount) { + productCount = configCount; + } else { + productCount = simpleCount; + } + int threadsNumber = ctx.getThreadGroup().getNumThreads(); + if (threadsNumber == 0) { + threadsNumber = 1; + } + //Current thread number starts from 0 + currentThreadNum = ctx.getThreadNum(); + + String siterator = vars.get("threadIterator_" + currentThreadNum.toString()); + iterator = 0; + if(siterator == null){ + vars.put("threadIterator_" + currentThreadNum.toString() , "0"); + } else { + iterator = Integer.parseInt(siterator); + iterator ++; + vars.put("threadIterator_" + currentThreadNum.toString() , iterator.toString()); + } + + //Number of products for one thread + productClusterLength = productCount / threadsNumber; + + if (iterator >= productClusterLength) { + vars.put("threadIterator_" + currentThreadNum.toString(), "0"); + iterator = 0; + } + + //Index of the current product from the cluster + i = productClusterLength * currentThreadNum + iterator; + + //ids of simple and configurable products to edit + vars.put("simple_product_id", props.get("simple_products_list").get(i).get("id")); + vars.put("configurable_product_id", props.get("configurable_products_list").get(i).get("id")); + + //id of related product + do { + relatedIndex = random.nextInt(props.get("simple_products_list").size()); + } while(i == relatedIndex); + vars.put("related_product_id", props.get("simple_products_list").get(relatedIndex).get("id")); + } catch (Exception ex) { + log.info("Script execution failed", ex); +} + + + false + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/edit/id/${simple_product_id}/ + GET + true + false + true + false + false + + + + + + Product + + Assertion.response_data + false + 16 + + + + false + simple_product_name + ,"name":"([^'"]+)", + $1$ + + 1 + + + + false + simple_product_sku + ,"sku":"([^'"]+)", + $1$ + + 1 + + + + false + simple_product_category_id + ,"category_ids":."(\d+)". + $1$ + + 1 + + + + + Passing arguments between threads + //Additional category to be added + + int categoryId = Integer.parseInt(vars.get("simple_product_category_id")); + if (categoryId > 4) { + categoryId = categoryId - 1; + } else { + categoryId = categoryId + 1; + } + vars.put("category_additional", categoryId.toString()); + //New price + vars.put("price_new", "9999"); + //New special price + vars.put("special_price_new", "8888"); + //New quantity + vars.put("quantity_new", "100600"); + + + false + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + ${simple_product_name} + = + true + product[name] + false + + + true + ${simple_product_sku} + = + true + product[sku] + false + + + true + ${price_new} + = + true + product[price] + false + + + true + 2 + = + true + product[tax_class_id] + false + + + true + ${quantity_new} + = + true + product[quantity_and_stock_status][qty] + false + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + false + + + true + 1.0000 + = + true + product[weight] + false + + + true + 1 + = + true + product[product_has_weight] + false + + + true + ${simple_product_category_id} + = + true + product[category_ids][] + false + + + true + <p>Full simple product Description ${simple_product_id} Edited</p> + = + true + product[description] + false + + + true + 1 + = + true + product[status] + false + + + true + + = + true + product[configurable_variations] + false + + + true + 1 + = + true + affect_configurable_product_attributes + false + + + true + + = + true + product[image] + false + + + true + + = + true + product[small_image] + false + + + true + + = + true + product[thumbnail] + false + + + true + ${simple_product_name} + = + true + product[url_key] + false + + + true + ${simple_product_name} Meta Title Edited + = + true + product[meta_title] + false + + + true + ${simple_product_name} Meta Keyword Edited + = + true + product[meta_keyword] + false + + + true + ${simple_product_name} Meta Description Edited + = + true + product[meta_description] + false + + + true + 1 + = + true + product[website_ids][] + false + + + true + ${special_price_new} + = + true + product[special_price] + false + + + true + + = + true + product[special_from_date] + false + + + true + + = + true + product[special_to_date] + false + + + true + + = + true + product[cost] + false + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + false + + + true + ${quantity_new} + = + true + product[stock_data][original_inventory_qty] + false + + + true + ${quantity_new} + = + true + product[stock_data][qty] + false + + + true + 0 + = + true + product[stock_data][min_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + false + + + true + 1 + = + true + product[stock_data][min_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + false + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + false + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + false + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + false + + + true + 0 + = + true + product[stock_data][backorders] + false + + + true + 1 + = + true + product[stock_data][use_config_backorders] + false + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + false + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + false + + + true + 0 + = + true + product[stock_data][qty_increments] + false + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + false + + + true + 1 + = + true + product[stock_data][is_in_stock] + false + + + true + + = + true + product[custom_design] + false + + + true + + = + true + product[custom_design_from] + false + + + true + + = + true + product[custom_design_to] + false + + + true + + = + true + product[custom_layout_update] + false + + + true + + = + true + product[page_layout] + false + + + true + container2 + = + true + product[options_container] + false + + + true + + = + true + new-variations-attribute-set-id + false + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/validate/id/${simple_product_id}/?isAjax=true + POST + true + false + true + false + false + + + + + + {"error":false} + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + ${simple_product_name} + = + true + product[name] + false + + + true + ${simple_product_sku} + = + true + product[sku] + false + + + true + ${price_new} + = + true + product[price] + false + + + true + 2 + = + true + product[tax_class_id] + false + + + true + ${quantity_new} + = + true + product[quantity_and_stock_status][qty] + false + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + false + + + true + 1.0000 + = + true + product[weight] + false + + + true + 1 + = + true + product[product_has_weight] + false + + + true + ${simple_product_category_id} + = + true + product[category_ids][] + false + + + true + ${category_additional} + = + true + product[category_ids][] + + + true + <p>Full simple product Description ${simple_product_id} Edited</p> + = + true + product[description] + false + + + true + 1 + = + true + product[status] + false + + + true + + = + true + product[configurable_variations] + false + + + true + 1 + = + true + affect_configurable_product_attributes + false + + + true + + = + true + product[image] + false + + + true + + = + true + product[small_image] + false + + + true + + = + true + product[thumbnail] + false + + + true + ${simple_product_name} + = + true + product[url_key] + false + + + true + ${simple_product_name} Meta Title Edited + = + true + product[meta_title] + false + + + true + ${simple_product_name} Meta Keyword Edited + = + true + product[meta_keyword] + false + + + true + ${simple_product_name} Meta Description Edited + = + true + product[meta_description] + false + + + true + 1 + = + true + product[website_ids][] + false + + + true + ${special_price_new} + = + true + product[special_price] + false + + + true + + = + true + product[special_from_date] + false + + + true + + = + true + product[special_to_date] + false + + + true + + = + true + product[cost] + false + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + false + + + true + ${quantity_new} + = + true + product[stock_data][original_inventory_qty] + false + + + true + ${quantity_new} + = + true + product[stock_data][qty] + false + + + true + 0 + = + true + product[stock_data][min_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + false + + + true + 1 + = + true + product[stock_data][min_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + false + + + true + 10000 + = + true + product[stock_data][max_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + false + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + false + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + false + + + true + 0 + = + true + product[stock_data][backorders] + false + + + true + 1 + = + true + product[stock_data][use_config_backorders] + false + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + false + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + false + + + true + 0 + = + true + product[stock_data][qty_increments] + false + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + false + + + true + 1 + = + true + product[stock_data][is_in_stock] + false + + + true + + = + true + product[custom_design] + false + + + true + + = + true + product[custom_design_from] + false + + + true + + = + true + product[custom_design_to] + false + + + true + + = + true + product[custom_layout_update] + false + + + true + + = + true + product[page_layout] + false + + + true + container2 + = + true + product[options_container] + false + + + true + + = + true + new-variations-attribute-set-id + false + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/save/id/${simple_product_id}/back/edit/active_tab/product-details/ + POST + true + false + true + false + false + + + + + + You saved the product + + Assertion.response_data + false + 2 + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/edit/id/${configurable_product_id}/ + GET + true + false + true + false + false + + + + + + Product + + Assertion.response_data + false + 16 + + + + false + configurable_product_name + ,"name":"([^'"]+)", + $1$ + + 1 + + + + false + configurable_product_sku + ,"sku":"([^'"]+)", + $1$ + + 1 + + + + false + configurable_product_category_id + ,"category_ids":."(\d+)" + $1$ + + 1 + + + + false + configurable_attribute_id + ,"configurable_variation":"([^'"]+)", + $1$ + + 1 + true + + + + false + configurable_matrix + "configurable-matrix":(\[.*?\]) + $1$ + + 1 + true + + + + associated_products_ids + $.[*].id + + configurable_matrix + VAR + + + + false + configurable_product_data + (\{"product":.*?configurable_attributes_data.*?\})\s*< + $1$ + + 1 + + + + configurable_attributes_data + $.product.configurable_attributes_data + + configurable_product_data + VAR + + + + false + configurable_attribute_ids + "attribute_id":"(\d+)" + $1$ + + -1 + variable + configurable_attributes_data + + + + false + configurable_attribute_codes + "code":"(\w+)" + $1$ + + -1 + variable + configurable_attributes_data + + + + false + configurable_attribute_labels + "label":"(.*?)" + $1$ + + -1 + variable + configurable_attributes_data + + + + false + configurable_attribute_values + "values":(\{(?:\}|.*?\}\})) + $1$ + + -1 + variable + configurable_attributes_data + + + + + configurable_attribute_ids + configurable_attribute_id + true + + + + 1 + ${configurable_attribute_ids_matchNr} + 1 + attribute_counter + + true + true + + + + return vars.get("configurable_attribute_values_" + vars.get("attribute_counter")); + + + false + + + + false + attribute_${configurable_attribute_id}_values + "value_index":"(\d+)" + $1$ + + -1 + configurable_attribute_values_${attribute_counter} + + + + + + + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + ${configurable_product_name} + = + true + product[name] + false + + + true + ${configurable_product_sku} + = + true + product[sku] + false + + + true + ${price_new} + = + true + product[price] + false + + + true + 2 + = + true + product[tax_class_id] + false + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + false + + + true + 3 + = + true + product[weight] + false + + + true + ${configurable_product_category_id} + = + true + product[category_ids][] + false + + + true + ${category_additional} + = + true + product[category_ids][] + false + + + true + <p>Configurable product description ${configurable_product_id} Edited</p> + = + true + product[description] + false + + + true + 1 + = + true + product[status] + false + + + true + ${configurable_product_name} Meta Title Edited + = + true + product[meta_title] + false + + + true + ${configurable_product_name} Meta Keyword Edited + = + true + product[meta_keyword] + false + + + true + ${configurable_product_name} Meta Description Edited + = + true + product[meta_description] + false + + + true + 1 + = + true + product[website_ids][] + false + + + true + ${special_price_new} + = + true + product[special_price] + false + + + true + + = + true + product[special_from_date] + false + + + true + + = + true + product[special_to_date] + false + + + true + + = + true + product[cost] + false + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + false + + + true + 0 + = + true + product[stock_data][min_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + false + + + true + 1 + = + true + product[stock_data][min_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + false + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + false + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + false + + + true + 0 + = + true + product[stock_data][backorders] + false + + + true + 1 + = + true + product[stock_data][use_config_backorders] + false + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + false + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + false + + + true + 0 + = + true + product[stock_data][qty_increments] + false + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + false + + + true + 1 + = + true + product[stock_data][is_in_stock] + false + + + true + + = + true + product[custom_design] + false + + + true + + = + true + product[custom_design_from] + false + + + true + + = + true + product[custom_design_to] + false + + + true + + = + true + product[custom_layout_update] + false + + + true + + = + true + product[page_layout] + false + + + true + container2 + = + true + product[options_container] + false + + + true + ${configurable_attribute_id} + = + true + product[configurable_variation] + false + + + true + ${configurable_product_name} + = + true + product[url_key] + + + true + 1 + = + true + product[use_config_gift_message_available] + + + true + 1 + = + true + product[use_config_gift_wrapping_available] + + + true + 4 + = + true + product[visibility] + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 50 + = + true + product[stock_data][qty] + false + + + true + configurable + = + true + product[stock_data][type_id] + false + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/validate/id/${configurable_product_id}/ + POST + true + false + true + false + false + + + + + false + + + try { + int attributesCount = Integer.parseInt(vars.get("configurable_attribute_ids_matchNr")); + for (int i = 1; i <= attributesCount; i++) { + attributeId = vars.get("configurable_attribute_ids_" + i.toString()); + attributeCode = vars.get("configurable_attribute_codes_" + i.toString()); + attributeLabel = vars.get("configurable_attribute_labels_" + i.toString()); + ctx.getCurrentSampler().addArgument("attributes[" + (i - 1).toString() + "]", attributeId); + ctx.getCurrentSampler().addArgument("attribute_codes[" + (i - 1).toString() + "]", attributeCode); + ctx.getCurrentSampler().addArgument("product[" + attributeCode + "]", attributeId); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][attribute_id]", attributeId); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][position]", (i - 1).toString()); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][code]", attributeCode); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][label]", attributeLabel); + + int valuesCount = Integer.parseInt(vars.get("attribute_" + attributeId + "_values_matchNr")); + for (int j = 1; j <= valuesCount; j++) { + attributeValue = vars.get("attribute_" + attributeId + "_values_" + j.toString()); + ctx.getCurrentSampler().addArgument( + "product[configurable_attributes_data][" + attributeId + "][values][" + attributeValue + "][include]", + "1" + ); + ctx.getCurrentSampler().addArgument( + "product[configurable_attributes_data][" + attributeId + "][values][" + attributeValue + "][value_index]", + attributeValue + ); + } + } + ctx.getCurrentSampler().addArgument("associated_product_ids_serialized", vars.get("associated_products_ids").toString()); + } catch (Exception e) { + log.error("error???", e); + } + + + + + {"error":false} + + Assertion.response_data + false + 2 + + + + + + + + true + true + = + true + ajax + false + + + true + true + = + true + isAjax + false + + + true + ${admin_form_key} + = + true + form_key + false + + + true + ${configurable_product_name} + = + true + product[name] + false + + + true + ${configurable_product_sku} + = + true + product[sku] + false + + + true + ${price_new} + = + true + product[price] + false + + + true + 2 + = + true + product[tax_class_id]admin + false + + + true + 1 + = + true + product[quantity_and_stock_status][is_in_stock] + false + + + true + 3 + = + true + product[weight] + false + + + true + ${configurable_product_category_id} + = + true + product[category_ids][] + false + + + true + ${category_additional} + = + true + product[category_ids][] + false + + + true + <p>Configurable product description ${configurable_product_id} Edited</p> + = + true + product[description] + false + + + true + 1 + = + true + product[status] + false + + + true + ${configurable_product_name} Meta Title Edited + = + true + product[meta_title] + false + + + true + ${configurable_product_name} Meta Keyword Edited + = + true + product[meta_keyword] + false + + + true + ${configurable_product_name} Meta Description Edited + = + true + product[meta_description] + false + + + true + 1 + = + true + product[website_ids][] + false + + + true + ${special_price_new} + = + true + product[special_price] + false + + + true + + = + true + product[special_from_date] + false + + + true + + = + true + product[special_to_date] + false + + + true + + = + true + product[cost] + false + + + true + 1 + = + true + product[stock_data][use_config_manage_stock] + false + + + true + 0 + = + true + product[stock_data][min_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_qty] + false + + + true + 1 + = + true + product[stock_data][min_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_min_sale_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_max_sale_qty] + false + + + true + 0 + = + true + product[stock_data][is_qty_decimal] + false + + + true + 0 + = + true + product[stock_data][is_decimal_divided] + false + + + true + 0 + = + true + product[stock_data][backorders] + false + + + true + 1 + = + true + product[stock_data][use_config_backorders] + false + + + true + 1 + = + true + product[stock_data][notify_stock_qty] + false + + + true + 1 + = + true + product[stock_data][use_config_notify_stock_qty] + false + + + true + 0 + = + true + product[stock_data][enable_qty_increments] + false + + + true + 0 + = + true + product[stock_data][qty_increments] + false + + + true + 1 + = + true + product[stock_data][use_config_qty_increments] + false + + + true + 1 + = + true + product[stock_data][is_in_stock] + false + + + true + + = + true + product[custom_design] + false + + + true + + = + true + product[custom_design_from] + false + + + true + + = + true + product[custom_design_to] + false + + + true + + = + true + product[custom_layout_update] + false + + + true + + = + true + product[page_layout] + false + + + true + container2 + = + true + product[options_container] + false + + + true + ${configurable_attribute_id} + = + true + product[configurable_variation] + false + + + true + ${configurable_product_name} + = + true + product[url_key] + + + true + 1 + = + true + product[use_config_gift_message_available] + + + true + 1 + = + true + product[use_config_gift_wrapping_available] + + + true + 4 + = + true + product[visibility] + + + true + 1 + = + true + product[product_has_weight] + true + + + true + 50 + = + true + product[stock_data][qty] + false + + + true + configurable + = + true + product[stock_data][type_id] + false + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/product/save/id/${configurable_product_id}/back/edit/active_tab/product-details/ + POST + true + false + true + false + false + + + + + false + + + try { + int attributesCount = Integer.parseInt(vars.get("configurable_attribute_ids_matchNr")); + for (int i = 1; i <= attributesCount; i++) { + attributeId = vars.get("configurable_attribute_ids_" + i.toString()); + attributeCode = vars.get("configurable_attribute_codes_" + i.toString()); + attributeLabel = vars.get("configurable_attribute_labels_" + i.toString()); + ctx.getCurrentSampler().addArgument("attributes[" + (i - 1).toString() + "]", attributeId); + ctx.getCurrentSampler().addArgument("attribute_codes[" + (i - 1).toString() + "]", attributeCode); + ctx.getCurrentSampler().addArgument("product[" + attributeCode + "]", attributeId); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][attribute_id]", attributeId); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][position]", (i - 1).toString()); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][code]", attributeCode); + ctx.getCurrentSampler().addArgument("product[configurable_attributes_data][" + attributeId + "][label]", attributeLabel); + + int valuesCount = Integer.parseInt(vars.get("attribute_" + attributeId + "_values_matchNr")); + for (int j = 1; j <= valuesCount; j++) { + attributeValue = vars.get("attribute_" + attributeId + "_values_" + j.toString()); + ctx.getCurrentSampler().addArgument( + "product[configurable_attributes_data][" + attributeId + "][values][" + attributeValue + "][include]", + "1" + ); + ctx.getCurrentSampler().addArgument( + "product[configurable_attributes_data][" + attributeId + "][values][" + attributeValue + "][value_index]", + attributeValue + ); + } + } + ctx.getCurrentSampler().addArgument("associated_product_ids_serialized", vars.get("associated_products_ids").toString()); + } catch (Exception e) { + log.error("error???", e); + } + + + + + You saved the product + + Assertion.response_data + false + 2 + if have trouble see messages-message-error + + + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${adminCategoryManagementPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Admin Category Management"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + true - export_filter[url_key] = true + dummy - + true - export_filter[url_path] - + ${admin_form_key} = true + form_key - + true - export_filter[use_config_allow_message][] - , + ${admin_password} = true + login[password] - + true - export_filter[use_config_email_template][] - , + ${admin_user} = true + login[username] - - true - export_filter[use_config_is_redeemable][] - , - = - true + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/once_only_controller.jmx + + + + mpaf/tool/fragments/ce/setup/setup_admin_category_management.jmx + + + + props.remove("admin_category_ids_list"); + + + false + + + + + + + + Content-Type + application/json + + + Accept + */* + + + + + + true + + + + false + {"username":"${admin_user}","password":"${admin_password}"} + = + + - - true - export_filter[use_config_lifetime][] - , - = - true + + + + + ${request_protocol} + + ${base_path}rest/V1/integration/admin/token + POST + true + false + true + false + false + + + + + admin_token + $ + + + BODY + + + + + ^[a-z0-9-]+$ + + Assertion.response_data + false + 1 + variable + admin_token + + + + + + + Authorization + Bearer ${admin_token} + + + + + + + + + true + children_count + = + true + searchCriteria[filterGroups][0][filters][0][field] + + + true + 0 + = + true + searchCriteria[filterGroups][0][filters][0][value] + + + true + level + = + true + searchCriteria[filterGroups][1][filters][0][field] + + + true + 2 + = + true + searchCriteria[filterGroups][1][filters][0][value] + + + true + gt + = + true + searchCriteria[filterGroups][1][filters][0][conditionType] + + + true + ${adminCategoryCount} + = + true + searchCriteria[pageSize] + + - + + + + + ${request_protocol} + + ${base_path}rest/default/V1/categories/list + GET + true + false + true + false + false + + + + + false + category_list_id + \{\"id\":(\d+), + $1$ + + -1 + + + + + category_list_id + category_id + true + + + + import java.util.ArrayList; + +adminCategoryIdsList = props.get("admin_category_ids_list"); +// If it is first iteration of cycle then recreate categories ids list +if (adminCategoryIdsList == null) { + adminCategoryIdsList = new ArrayList(); + props.put("admin_category_ids_list", adminCategoryIdsList); +} +adminCategoryIdsList.add(vars.get("category_id")); + + + false + + + + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + mpaf/tool/fragments/ce/admin_category_management/admin_category_management.jmx + + + + javascript + + + + random = new java.util.Random(); +if (${seedForRandom} > 0) { +random.setSeed(${seedForRandom} + ${__threadNum}); +} + +/** + * Get unique ids for fix concurrent category saving + */ +function getNextProductNumber(i) { + number = productsVariationsSize * ${__threadNum} - i; + if (number >= productsSize) { + log.info("${testLabel}: capacity of product list is not enough for support all ${adminPoolUsers} threads"); + return random.nextInt(productsSize); + } + return productsVariationsSize * ${__threadNum} - i; +} + +var productsVariationsSize = 5, + productsSize = props.get("simple_products_list").size(); + + +for (i = 1; i<= productsVariationsSize; i++) { + var productVariablePrefix = "simple_product_" + i + "_"; + number = getNextProductNumber(i); + simpleList = props.get("simple_products_list").get(number); + + vars.put(productVariablePrefix + "url_key", simpleList.get("url_key")); + vars.put(productVariablePrefix + "id", simpleList.get("id")); + vars.put(productVariablePrefix + "name", simpleList.get("title")); +} + +categoryIndex = random.nextInt(props.get("admin_category_ids_list").size()); +vars.put("parent_category_id", props.get("admin_category_ids_list").get(categoryIndex)); +do { +categoryIndexNew = random.nextInt(props.get("admin_category_ids_list").size()); +} while(categoryIndex == categoryIndexNew); +vars.put("new_parent_category_id", props.get("admin_category_ids_list").get(categoryIndexNew)); + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/ + GET + true + false + true + false + false + + + + + + + Accept-Language + en-US,en;q=0.5 + + + Accept + text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + + + User-Agent + Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 + + + Accept-Encoding + gzip, deflate + + + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/edit/id/${parent_category_id}/ + GET + true + false + true + false + false + + + + + + + Accept-Language + en-US,en;q=0.5 + + + Accept + text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + + + User-Agent + Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 + + + Accept-Encoding + gzip, deflate + + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/add/store/0/parent/${parent_category_id} + GET + true + false + true + false + false + + + + + + <title>New Category + + Assertion.response_data + false + 2 + + + + + + + + true + + = + true + id + + + true + ${parent_category_id} + = + true + parent + + + true + + = + true + path + + + true + + = + true + store_id + + + true + 0 + = + true + is_active + + + true + 0 + = + true + include_in_menu + + + true + 1 + = + true + is_anchor + + + true + true + = + true + use_config[available_sort_by] + + + true + true + = + true + use_config[default_sort_by] + + + true + true + = + true + use_config[filter_price_range] + + + true + false + = + true + use_default[url_key] + + + true + 0 + = + true + url_key_create_redirect + + + true + 0 + = + true + custom_use_parent_settings + + + true + 0 + = + true + custom_apply_to_products + + + true + Admin Category Management ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + name + + + true + admin-category-management-${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + url_key + + + true + + = + true + meta_title + + + true + + = + true + description + + + true + PRODUCTS + = + true + display_mode + + + true + position + = + true + default_sort_by + + + true + + = + true + meta_keywords + + + true + + = + true + meta_description + + + true + + = + true + custom_layout_update + + + false + {"${simple_product_1_id}":"","${simple_product_2_id}":"","${simple_product_3_id}":"","${simple_product_4_id}":"","${simple_product_5_id}":""} + = + true + category_products + + + true + ${admin_form_key} + = + true + form_key + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/save/ + POST + true + false + true + false + false + + + + + URL + admin_category_id + /catalog/category/edit/id/(\d+)/ + $1$ + + 1 + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_category_id + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/edit/id/${admin_category_id}/ + GET + true + false + true + false + false + + + + + + + Accept-Language + en-US,en;q=0.5 + + + Accept + text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + + + User-Agent + Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 + + + Accept-Encoding + gzip, deflate + + + + + + false + admin_category_entity_id + "entity_id":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_attribute_set_id + "attribute_set_id":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_parent_id + "parent_id":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_created_at + "created_at":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_updated_at + "updated_at":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_path + "entity_id":(.+)"path":"([^\"]+)" + $2$ + + 1 + + + + false + admin_category_level + "level":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_name + "entity_id":(.+)"name":"([^"]+)" + $2$ + + 1 + + + + false + admin_category_url_key + "url_key":"([^"]+)" + $1$ + + 1 + + + + false + admin_category_url_path + "url_path":"([^"]+)" + $1$ + + 1 + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_category_entity_id + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_category_attribute_set_id + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_category_parent_id + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_category_created_at + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_category_updated_at + + + + + ^[\d\\\/]+$ + + Assertion.response_data + false + 1 + variable + admin_category_path + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_category_level + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_category_name + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_category_url_key + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_category_url_path + + + + + ${simple_product_1_name} + ${simple_product_2_name} + ${simple_product_3_name} + ${simple_product_4_name} + ${simple_product_5_name} + + Assertion.response_data + false + 2 + + + + + + + + true + ${admin_category_id} + = + true + id + + + true + ${admin_form_key} + = + true + form_key + + + true + append + = + true + point + + + true + ${new_parent_category_id} + = + true + pid + + + true + ${parent_category_id} + = + true + paid + + + true + 0 + = + true + aid + + + true + true + = + true + isAjax + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/move/ + POST + true + false + true + false + false + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/catalog/category/delete/id/${admin_category_id}/ + GET + true + false + true + false + false + + + + + + You deleted the category. + + Assertion.response_data + false + 2 + + + + + 1 + 0 + ${__javaScript(Math.round(${adminCategoryManagementDelay}*1000))} + + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + + + + + + + 1 + false + 1 + ${adminPromotionRulesPercentage} + mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + + +var testLabel = "${testLabel}" ? " (${testLabel})" : ""; +if (testLabel + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' +) { + if (sampler.getName().indexOf(testLabel) == -1) { + sampler.setName(sampler.getName() + testLabel); + } +} else if (sampler.getName().indexOf("SetUp - ") == -1) { + sampler.setName("SetUp - " + sampler.getName()); +} + + javascript + mpaf/tool/fragments/_system/setup_label.jmx + + + + vars.put("testLabel", "Admin Promotion Rules"); + + true + + + + + + function getFormKeyFromResponse() + { + var url = prev.getUrlAsString(), + responseCode = prev.getResponseCode(), + formKey = null; + searchPattern = /var FORM_KEY = '(.+)'/; + if (responseCode == "200" && url) { + response = prev.getResponseDataAsString(); + formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; + } + return formKey; + } + + formKey = vars.get("form_key_storage"); + + currentFormKey = getFormKeyFromResponse(); + + if (currentFormKey != null && currentFormKey != formKey) { + vars.put("form_key_storage", currentFormKey); + } + + javascript + mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + + + formKey = vars.get("form_key_storage"); + if (formKey + && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' + && sampler.getMethod() == "POST") + { + arguments = sampler.getArguments(); + for (i=0; i<arguments.getArgumentCount(); i++) + { + argument = arguments.getArgument(i); + if (argument.getName() == 'form_key' && argument.getValue() != formKey) { + log.info("admin form key updated: " + argument.getValue() + " => " + formKey); + argument.setValue(formKey); + } + } + } + + javascript + + + + + + false + mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path} + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_login/admin_login.jmx + + + + Welcome + <title>Magento Admin</title> + + Assertion.response_data + false + 2 + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_form_key + + + + + + + + true - export_filter[visibility] = true + dummy - + true - export_filter[weight][] - , + ${admin_form_key} = true + form_key - + true - export_filter[weight_type][] - , + ${admin_password} = true + login[password] - + true - frontend_label - + ${admin_user} = true + login[username] @@ -32314,35 +31396,474 @@ if (testLabel ${request_protocol} - ${base_path}${admin_path}/admin/export/export/entity/catalog_product/file_format/csv - POST + ${base_path}${admin_path}/admin/dashboard/ + POST + true + false + true + false + Java + false + + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + + + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + mpaf/tool/fragments/ce/admin_promotions_management/admin_promotions_management.jmx + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales_rule/promo_quote/ + GET + true + false + true + false + false + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales_rule/promo_quote/new + GET + true + false + true + false + false + + + + + + + + true + true + = + true + isAjax + + + true + ${admin_form_key} + = + true + form_key + true + + + true + 1--1 + = + true + id + + + true + Magento\SalesRule\Model\Rule\Condition\Address|base_subtotal + = + true + type + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales_rule/promo_quote/newConditionHtml/form/sales_rule_formrule_conditions_fieldset_/form_namespace/sales_rule_form + POST + true + false + true + false + false + + + + + + + + true + Rule Name ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + name + + + true + 0 + = + true + is_active + + + true + 0 + = + true + use_auto_generation + + + true + 1 + = + true + is_rss + + + true + 0 + = + true + apply_to_shipping + + + true + 0 + = + true + stop_rules_processing + + + true + + = + true + coupon_code + + + true + + = + true + uses_per_coupon + + + true + + = + true + uses_per_customer + + + true + + = + true + sort_order + + + true + 5 + = + true + discount_amount + + + true + 0 + = + true + discount_qty + + + true + + = + true + discount_step + + + true + + = + true + reward_points_delta + + + true + + = + true + store_labels[0] + + + true + Rule Description ${__time(YMDHMS)}-${__threadNum}-${__Random(1,1000000)} + = + true + description + + + true + 1 + = + true + coupon_type + + + true + cart_fixed + = + true + simple_action + + + true + 1 + = + true + website_ids[0] + + + true + 0 + = + true + customer_group_ids[0] + + + true + + = + true + from_date + + + true + + = + true + to_date + + + true + Magento\SalesRule\Model\Rule\Condition\Combine + = + true + rule[conditions][1][type] + + + true + all + = + true + rule[conditions][1][aggregator] + + + true + 1 + = + true + rule[conditions][1][value] + + + true + Magento\SalesRule\Model\Rule\Condition\Address + = + true + rule[conditions][1--1][type] + + + true + base_subtotal + = + true + rule[conditions][1--1][attribute] + + + true + >= + = + true + rule[conditions][1--1][operator] + + + true + 100 + = + true + rule[conditions][1--1][value] + + + true + + = + true + rule[conditions][1][new_chlid] + + + true + Magento\SalesRule\Model\Rule\Condition\Product\Combine + = + true + rule[actions][1][type] + + + true + all + = + true + rule[actions][1][aggregator] + + + true + 1 + = + true + rule[actions][1][value] + + + true + + = + true + rule[actions][1][new_child] + + + true + + = + true + store_labels[1] + + + true + + = + true + store_labels[2] + + + true + + = + true + related_banners + + + true + ${admin_form_key} + = + true + form_key + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales_rule/promo_quote/save/ + POST + true + false + true + false + false + + + + + + You saved the rule. + + Assertion.response_data + false + 16 + + + + + 1 + 0 + ${__javaScript(Math.round(${adminPromotionsManagementDelay}*1000))} + + + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET true false true false false - mpaf/tool/fragments/ce/export_products/export_products.jmx + mpaf/tool/fragments/ce/setup/admin_logout.jmx - - - Simple Product 1 - - Assertion.response_data - false - 16 - - - + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + - + 1 false 1 - ${exportCustomersPercentage} + ${adminCustomerManagementPercentage} mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx @@ -32363,7 +31884,7 @@ if (testLabel - vars.put("testLabel", "Export Customers"); + vars.put("testLabel", "Admin Customer Management"); true @@ -32423,10 +31944,36 @@ if (testLabel mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - mpaf/tool/fragments/ce/once_only_controller.jmx - + + mpaf/tool/fragments/ce/simple_controller.jmx + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); + + + + true + + + + @@ -32527,987 +32074,1930 @@ if (testLabel Java false - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - - - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/export/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/common/export.jmx - - - - Export Settings - - Assertion.response_data - false - 2 - - - - - - - - - true - ${admin_form_key} - = - true - form_key - false - - - true - - = - true - attribute_code - true - - - true - - = - true - export_filter[confirmation] - true - - - true - - = - true - export_filter[created_at] - true - - - true - - = - true - export_filter[created_in] - true - - - true - , - = - true - export_filter[default_billing][] - true - - - true - , - = - true - export_filter[default_shipping][] - true - - - true - - = - true - export_filter[disable_auto_group_change] - true - - - true - , - = - true - export_filter[dob][] - true - - - true - - = - true - export_filter[email] - true - - - true - - = - true - export_filter[firstname] - true - - - true - - = - true - export_filter[gender] - true - - - true - - = - true - export_filter[group_id] - true - - - true - - = - true - export_filter[lastname] - true - - - true - - = - true - export_filter[middlename] - true - - - true - - = - true - export_filter[password_hash] - true - - - true - - = - true - export_filter[prefix] - true - - - true - , - = - true - export_filter[reward_update_notification][] - true - - - true - , - = - true - export_filter[reward_warning_notification][] - true - - - true - - = - true - export_filter[rp_token] - true - - - true - , - = - true - export_filter[rp_token_created_at][] - true - - - true - - = - true - export_filter[store_id] - true - - - true - - = - true - export_filter[suffix] - true - - - true - - = - true - export_filter[taxvat] - true - - - true - - = - true - export_filter[website_id] - true - - - true - - = - true - frontend_label - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/export/export/entity/customer/file_format/csv - POST - true - false - true - false - false - - mpaf/tool/fragments/ce/export_customers/export_customers.jmx + mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx + - - - user_1@example.com - - Assertion.response_data - false - 16 - - + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + - - - - 1 - false - 1 - ${browseProductGridPercentage} - mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx + + mpaf/tool/fragments/ce/simple_controller.jmx + - - -var testLabel = "${testLabel}" ? " (${testLabel})" : ""; -if (testLabel - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' -) { - if (sampler.getName().indexOf(testLabel) == -1) { - sampler.setName(sampler.getName() + testLabel); - } -} else if (sampler.getName().indexOf("SetUp - ") == -1) { - sampler.setName("SetUp - " + sampler.getName()); -} - - javascript - mpaf/tool/fragments/_system/setup_label.jmx + + mpaf/tool/fragments/ce/admin_customer_management/admin_customer_management.jmx + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/customer/index + GET + true + false + true + false + false + + + + + + + Accept-Language + en-US,en;q=0.5 + + + Accept + text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + + + User-Agent + Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 + + + Accept-Encoding + gzip, deflate + + + + + + + + + + true + customer_listing + = + true + namespace + + + true + + = + true + search + + + true + true + = + true + filters[placeholder] + + + true + 20 + = + true + paging[pageSize] + + + true + 1 + = + true + paging[current] + + + true + entity_id + = + true + sorting[field] + + + true + asc + = + true + sorting[direction] + + + true + true + = + true + isAjax + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + + + + + + X-Requested-With + XMLHttpRequest + + + + + + + + + + true + customer_listing + = + true + namespace + + + true + Lastname + = + true + search + + + true + true + = + true + filters[placeholder] + + + true + 20 + = + true + paging[pageSize] + + + true + 1 + = + true + paging[current] + + + true + entity_id + = + true + sorting[field] + + + true + asc + = + true + sorting[direction] + + + true + true + = + true + isAjax + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + + + + + + X-Requested-With + XMLHttpRequest + + + + + + false + customer_edit_url_path + actions":\{"edit":\{"href":"(?:http|https):\\/\\/(.*?)\\/customer\\/index\\/edit\\/id\\/(\d+)\\/", + /customer/index/edit/id/$2$/ + + 0 + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + customer_edit_url_path + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}${customer_edit_url_path} + GET + true + false + true + false + false + + + + + + Customer Information + + Assertion.response_data + false + 2 + + + + false + admin_customer_entity_id + "entity_id":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_website_id + "website_id":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_firstname + "firstname":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_lastname + "lastname":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_email + "email":"([^\@]+@[^.]+.[^"]+)" + $1$ + + 1 + + + + false + admin_customer_group_id + "group_id":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_store_id + "store_id":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_created_at + "created_at":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_updated_at + "updated_at":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_is_active + "is_active":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_disable_auto_group_change + "disable_auto_group_change":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_created_in + "created_in":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_dob + "dob":"(\d+)-(\d+)-(\d+)" + $2$/$3$/$1$ + + 1 + + + + false + admin_customer_default_billing + "default_billing":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_default_shipping + "default_shipping":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_gender + "gender":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_failures_num + "failures_num":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_address_entity_id + "address":\{"\d+":{"entity_id":"(\d+)".+?"parent_id":"${admin_customer_entity_id}" + $1$ + + 1 + + + + false + admin_customer_address_created_at + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"created_at":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_updated_at + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"updated_at":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_is_active + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"is_active":"(\d+)" + $1$ + + 1 + + + + false + admin_customer_address_city + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"city":"([^"]+)" + $1$ + + 1 + - - - vars.put("testLabel", "Browse Product Grid"); - - true - + + false + admin_customer_address_country_id + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"country_id":"([^"]+)" + $1$ + + 1 + - - - - function getFormKeyFromResponse() - { - var url = prev.getUrlAsString(), - responseCode = prev.getResponseCode(), - formKey = null; - searchPattern = /var FORM_KEY = '(.+)'/; - if (responseCode == "200" && url) { - response = prev.getResponseDataAsString(); - formKey = response && response.match(searchPattern) ? response.match(searchPattern)[1] : null; - } - return formKey; - } - - formKey = vars.get("form_key_storage"); - - currentFormKey = getFormKeyFromResponse(); - - if (currentFormKey != null && currentFormKey != formKey) { - vars.put("form_key_storage", currentFormKey); - } - - javascript - mpaf/tool/fragments/ce/admin/handle_admin_form_key.jmx + + false + admin_customer_address_firstname + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"firstname":"([^"]+)" + $1$ + + 1 + - - - formKey = vars.get("form_key_storage"); - if (formKey - && sampler.getClass().getName() == 'org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy' - && sampler.getMethod() == "POST") - { - arguments = sampler.getArguments(); - for (i=0; i<arguments.getArgumentCount(); i++) - { - argument = arguments.getArgument(i); - if (argument.getName() == 'form_key' && argument.getValue() != formKey) { - log.info("admin form key updated: " + argument.getValue() + " => " + formKey); - argument.setValue(formKey); - } - } - } - - javascript - + + false + admin_customer_address_lastname + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"lastname":"([^"]+)" + $1$ + + 1 + - - - - false - mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - - - - vars.put("gridEntityType" , "Product"); - - pagesCount = parseInt(vars.get("products_page_size")) || 20; - vars.put("grid_entity_page_size" , pagesCount); - vars.put("grid_namespace" , "product_listing"); - vars.put("grid_admin_browse_filter_text" , vars.get("admin_browse_product_filter_text")); - vars.put("grid_filter_field", "name"); - - // set sort fields and sort directions - vars.put("grid_sort_field_1", "name"); - vars.put("grid_sort_field_2", "price"); - vars.put("grid_sort_field_3", "attribute_set_id"); - vars.put("grid_sort_order_1", "asc"); - vars.put("grid_sort_order_2", "desc"); - - javascript - mpaf/tool/fragments/ce/admin_browse_products_grid/setup.jmx - - - - mpaf/tool/fragments/ce/once_only_controller.jmx - - - - - - - - - - - ${request_protocol} - - ${base_path}${admin_path} - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_login/admin_login.jmx - - - - Welcome - <title>Magento Admin</title> - - Assertion.response_data - false - 2 - - - - false - admin_form_key - <input name="form_key" type="hidden" value="([^'"]+)" /> - $1$ - - 1 - - - - - ^.+$ - - Assertion.response_data - false - 1 - variable - admin_form_key - - - - - - - - - true - - = - true - dummy - - - true - ${admin_form_key} - = - true - form_key - - - true - ${admin_password} - = - true - login[password] - - - true - ${admin_user} - = - true - login[username] - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/admin/dashboard/ - POST - true - false - true - false - Java - false - - mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - - - - - - - - true - ${grid_namespace} - = - true - namespace - true - - - true - - = - true - search - true - - - true - true - = - true - filters[placeholder] - true - - - true - ${grid_entity_page_size} - = - true - paging[pageSize] - true - - - true - 1 - = - true - paging[current] - true - - - true - entity_id - = - true - sorting[field] - true - - - true - asc - = - true - sorting[direction] - true - - - true - true - = - true - isAjax - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_grid_browsing/set_pages_count.jmx - - - $.totalRecords - 0 - true - false - true - - - - entity_total_records - $.totalRecords - - - BODY - - - - - - - - var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; - var totalsRecord = parseInt(vars.get("entity_total_records")); - var pageCount = Math.round(totalsRecord/pageSize); - - vars.put("grid_pages_count", pageCount); - - javascript - - - - - - - - - true - ${grid_namespace} - = - true - namespace - true - - - true - - = - true - search - true - - - true - ${grid_admin_browse_filter_text} - = - true - filters[placeholder] - true - - - true - ${grid_entity_page_size} - = - true - paging[pageSize] - true - - - true - 1 - = - true - paging[current] - true - - - true - entity_id - = - true - sorting[field] - true - - - true - asc - = - true - sorting[direction] - true - - - true - true - = - true - isAjax - true - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_grid_browsing/set_filtered_pages_count.jmx - - - $.totalRecords - 0 - true - false - true - true - - - - entity_total_records - $.totalRecords - - - BODY - - - - - - - var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; -var totalsRecord = parseInt(vars.get("entity_total_records")); -var pageCount = Math.round(totalsRecord/pageSize); + + false + admin_customer_address_postcode + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"postcode":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_region + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"region":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_region_id + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"region_id":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_street + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"street":\["([^"]+)"\] + $1$ + + 1 + + + + false + admin_customer_address_telephone + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"telephone":"([^"]+)" + $1$ + + 1 + + + + false + admin_customer_address_customer_id + "address":\{"\d+":{.+?"parent_id":"${admin_customer_entity_id}".+?"customer_id":"([^"]+)" + $1$ + + 1 + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_entity_id + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_website_id + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_firstname + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_lastname + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_email + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_group_id + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_store_id + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_created_at + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_updated_at + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_is_active + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_disable_auto_group_change + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_created_in + + + + + ^\d+/\d+/\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_dob + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_default_billing + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_default_shipping + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_gender + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_failures_num + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_entity_id + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_created_at + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_updated_at + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_is_active + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_city + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_country_id + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_firstname + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_lastname + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_postcode + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_region + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_region_id + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_street + + + + + ^.+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_telephone + + + + + ^\d+$ + + Assertion.response_data + false + 1 + variable + admin_customer_address_customer_id + + + + + + Accept-Language + en-US,en;q=0.5 + + + Accept + text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + + + User-Agent + Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 + + + Accept-Encoding + gzip, deflate + + + + + + + + + + true + true + = + true + isAjax + + + true + ${admin_customer_entity_id} + = + true + customer[entity_id] + + + true + ${admin_customer_website_id} + = + true + customer[website_id] + + + true + ${admin_customer_email} + = + true + customer[email] + + + true + ${admin_customer_group_id} + = + true + customer[group_id] + + + true + ${admin_customer_store_id} + = + true + customer[store_id] + + + true + ${admin_customer_created_at} + = + true + customer[created_at] + + + true + ${admin_customer_updated_at} + = + true + customer[updated_at] + + + true + ${admin_customer_is_active} + = + true + customer[is_active] + + + true + ${admin_customer_disable_auto_group_change} + = + true + customer[disable_auto_group_change] + + + true + ${admin_customer_created_in} + = + true + customer[created_in] + + + true + + = + true + customer[prefix] + + + true + ${admin_customer_firstname} 1 + = + true + customer[firstname] + + + true + + = + true + customer[middlename] + + + true + ${admin_customer_lastname} 1 + = + true + customer[lastname] + + + true + + = + true + customer[suffix] + + + true + ${admin_customer_dob} + = + true + customer[dob] + + + true + ${admin_customer_default_billing} + = + true + customer[default_billing] + + + true + ${admin_customer_default_shipping} + = + true + customer[default_shipping] + + + true + + = + true + customer[taxvat] + + + true + ${admin_customer_gender} + = + true + customer[gender] + + + true + ${admin_customer_failures_num} + = + true + customer[failures_num] + + + true + ${admin_customer_store_id} + = + true + customer[sendemail_store_id] + + + true + ${admin_customer_address_entity_id} + = + true + address[${admin_customer_address_entity_id}][entity_id] + + + true + ${admin_customer_address_created_at} + = + true + address[${admin_customer_address_entity_id}][created_at] + + + true + ${admin_customer_address_updated_at} + = + true + address[${admin_customer_address_entity_id}][updated_at] + + + true + ${admin_customer_address_is_active} + = + true + address[${admin_customer_address_entity_id}][is_active] + + + true + ${admin_customer_address_city} + = + true + address[${admin_customer_address_entity_id}][city] + + + true + + = + true + address[${admin_customer_address_entity_id}][company] + + + true + ${admin_customer_address_country_id} + = + true + address[${admin_customer_address_entity_id}][country_id] + + + true + ${admin_customer_address_firstname} + = + true + address[${admin_customer_address_entity_id}][firstname] + + + true + ${admin_customer_address_lastname} + = + true + address[${admin_customer_address_entity_id}][lastname] + + + true + + = + true + address[${admin_customer_address_entity_id}][middlename] + + + true + ${admin_customer_address_postcode} + = + true + address[${admin_customer_address_entity_id}][postcode] + + + true + + = + true + address[${admin_customer_address_entity_id}][prefix] + + + true + ${admin_customer_address_region} + = + true + address[${admin_customer_address_entity_id}][region] + + + true + ${admin_customer_address_region_id} + = + true + address[${admin_customer_address_entity_id}][region_id] + + + true + ${admin_customer_address_street} + = + true + address[${admin_customer_address_entity_id}][street][0] + + + true + + = + true + address[${admin_customer_address_entity_id}][street][1] + + + true + + = + true + address[${admin_customer_address_entity_id}][suffix] + + + true + ${admin_customer_address_telephone} + = + true + address[${admin_customer_address_entity_id}][telephone] + + + true + + = + true + address[${admin_customer_address_entity_id}][vat_id] + + + true + ${admin_customer_address_customer_id} + = + true + address[${admin_customer_address_entity_id}][customer_id] + + + true + true + = + true + address[${admin_customer_address_entity_id}][default_billing] + + + true + true + = + true + address[${admin_customer_address_entity_id}][default_shipping] + + + true + + = + true + address[new_0][prefix] + + + true + John + = + true + address[new_0][firstname] + + + true + + = + true + address[new_0][middlename] + + + true + Doe + = + true + address[new_0][lastname] + + + true + + = + true + address[new_0][suffix] + + + true + Test Company + = + true + address[new_0][company] + + + true + Folsom + = + true + address[new_0][city] + + + true + 95630 + = + true + address[new_0][postcode] + + + true + 1234567890 + = + true + address[new_0][telephone] + + + true + + = + true + address[new_0][vat_id] + + + true + false + = + true + address[new_0][default_billing] + + + true + false + = + true + address[new_0][default_shipping] + + + true + 123 Main + = + true + address[new_0][street][0] + + + true + + = + true + address[new_0][street][1] + + + true + + = + true + address[new_0][region] + + + true + US + = + true + address[new_0][country_id] + + + true + 12 + = + true + address[new_0][region_id] + + + true + ${admin_form_key} + = + true + form_key + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/customer/index/validate/ + POST + true + false + true + false + false + + + + + + 200 + + Assertion.response_code + false + 16 + + + + + + + + true + true + = + true + isAjax + + + true + ${admin_customer_entity_id} + = + true + customer[entity_id] + + + true + ${admin_customer_website_id} + = + true + customer[website_id] + + + true + ${admin_customer_email} + = + true + customer[email] + + + true + ${admin_customer_group_id} + = + true + customer[group_id] + + + true + ${admin_customer_store_id} + = + true + customer[store_id] + + + true + ${admin_customer_created_at} + = + true + customer[created_at] + + + true + ${admin_customer_updated_at} + = + true + customer[updated_at] + + + true + ${admin_customer_is_active} + = + true + customer[is_active] + + + true + ${admin_customer_disable_auto_group_change} + = + true + customer[disable_auto_group_change] + + + true + ${admin_customer_created_in} + = + true + customer[created_in] + + + true + + = + true + customer[prefix] + + + true + ${admin_customer_firstname} 1 + = + true + customer[firstname] + + + true + + = + true + customer[middlename] + + + true + ${admin_customer_lastname} 1 + = + true + customer[lastname] + + + true + + = + true + customer[suffix] + + + true + ${admin_customer_dob} + = + true + customer[dob] + + + true + ${admin_customer_default_billing} + = + true + customer[default_billing] + + + true + ${admin_customer_default_shipping} + = + true + customer[default_shipping] + + + true + + = + true + customer[taxvat] + + + true + ${admin_customer_gender} + = + true + customer[gender] + + + true + ${admin_customer_failures_num} + = + true + customer[failures_num] + + + true + ${admin_customer_store_id} + = + true + customer[sendemail_store_id] + + + true + ${admin_customer_address_entity_id} + = + true + address[${admin_customer_address_entity_id}][entity_id] + -vars.put("grid_pages_count_filtered", pageCount); - - javascript - + + true + ${admin_customer_address_created_at} + = + true + address[${admin_customer_address_entity_id}][created_at] + + + true + ${admin_customer_address_updated_at} + = + true + address[${admin_customer_address_entity_id}][updated_at] + + + true + ${admin_customer_address_is_active} + = + true + address[${admin_customer_address_entity_id}][is_active] + + + true + ${admin_customer_address_city} + = + true + address[${admin_customer_address_entity_id}][city] + + + true + + = + true + address[${admin_customer_address_entity_id}][company] + + + true + ${admin_customer_address_country_id} + = + true + address[${admin_customer_address_entity_id}][country_id] + + + true + ${admin_customer_address_firstname} + = + true + address[${admin_customer_address_entity_id}][firstname] + + + true + ${admin_customer_address_lastname} + = + true + address[${admin_customer_address_entity_id}][lastname] + + + true + + = + true + address[${admin_customer_address_entity_id}][middlename] + + + true + ${admin_customer_address_postcode} + = + true + address[${admin_customer_address_entity_id}][postcode] + + + true + + = + true + address[${admin_customer_address_entity_id}][prefix] + + + true + ${admin_customer_address_region} + = + true + address[${admin_customer_address_entity_id}][region] + + + true + ${admin_customer_address_region_id} + = + true + address[${admin_customer_address_entity_id}][region_id] + + + true + ${admin_customer_address_street} + = + true + address[${admin_customer_address_entity_id}][street][0] + + + true + + = + true + address[${admin_customer_address_entity_id}][street][1] + + + true + + = + true + address[${admin_customer_address_entity_id}][suffix] + + + true + ${admin_customer_address_telephone} + = + true + address[${admin_customer_address_entity_id}][telephone] + + + true + + = + true + address[${admin_customer_address_entity_id}][vat_id] + + + true + ${admin_customer_address_customer_id} + = + true + address[${admin_customer_address_entity_id}][customer_id] + + + true + true + = + true + address[${admin_customer_address_entity_id}][default_billing] + + + true + true + = + true + address[${admin_customer_address_entity_id}][default_shipping] + + + true + + = + true + address[new_0][prefix] + + + true + John + = + true + address[new_0][firstname] + + + true + + = + true + address[new_0][middlename] + + + true + Doe + = + true + address[new_0][lastname] + + + true + + = + true + address[new_0][suffix] + + + true + Test Company + = + true + address[new_0][company] + + + true + Folsom + = + true + address[new_0][city] + + + true + 95630 + = + true + address[new_0][postcode] + + + true + 1234567890 + = + true + address[new_0][telephone] + + + true + + = + true + address[new_0][vat_id] + + + true + false + = + true + address[new_0][default_billing] + + + true + false + = + true + address[new_0][default_shipping] + + + true + 123 Main + = + true + address[new_0][street][0] + + + true + + = + true + address[new_0][street][1] + + + true + + = + true + address[new_0][region] + + + true + US + = + true + address[new_0][country_id] + + + true + 12 + = + true + address[new_0][region_id] + + + true + ${admin_form_key} + = + true + form_key + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/customer/index/save/ + POST + true + false + true + true + false + + + + + + You saved the customer. + + Assertion.response_data + false + 2 + + + + + 1 + 0 + ${__javaScript(Math.round(${adminCustomerManagementDelay}*1000))} + - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - 1 - ${grid_pages_count} - 1 - page_number - - true - false - mpaf/tool/fragments/ce/admin_grid_browsing/select_page_number.jmx - - - + - - - true - ${grid_namespace} - = - true - namespace - true - - - true - - = - true - search - true - - - true - true - = - true - filters[placeholder] - true - - - true - ${grid_entity_page_size} - = - true - paging[pageSize] - true - - - true - ${page_number} - = - true - paging[current] - true - - - true - entity_id - = - true - sorting[field] - true - - - true - asc - = - true - sorting[direction] - true - - - true - true - = - true - isAjax - true - - + - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid.jmx - - - - \"totalRecords\":[^0]\d* - - Assertion.response_data - false - 2 - - - - - - 1 - ${grid_pages_count_filtered} - 1 - page_number - - true - false - mpaf/tool/fragments/ce/admin_grid_browsing/select_filtered_page_number.jmx - - - - mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid_sort_and_filter.jmx - - - - grid_sort_field - grid_sort_field - true - 0 - 3 - - - - grid_sort_order - grid_sort_order - true - 0 - 2 - - - - - - - true - ${grid_namespace} - = - true - namespace - false - - - true - ${grid_admin_browse_filter_text} - = - true - filters[${grid_filter_field}] - false - - - true - true - = - true - filters[placeholder] - false - - - true - ${grid_entity_page_size} - = - true - paging[pageSize] - false - - - true - ${page_number} - = - true - paging[current] - false - - - true - ${grid_sort_field} - = - true - sorting[field] - false - - - true - ${grid_sort_order} - = - true - sorting[direction] - false - - - true - true - = - true - isAjax - false - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - - - - - \"totalRecords\":[^0]\d* - - Assertion.response_data - false - 2 - - - - - - + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx + + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + - + 1 false 1 - ${browseOrderGridPercentage} + ${adminEditOrderPercentage} mpaf/tool/fragments/_system/scenario_controller_tmpl.jmx @@ -33528,7 +34018,7 @@ if (testLabel - vars.put("testLabel", "Browse Order Grid"); + vars.put("testLabel", "Admin Edit Order"); true @@ -33588,31 +34078,36 @@ if (testLabel mpaf/tool/fragments/ce/http_cookie_manager_without_clear_each_iteration.jmx - - - vars.put("gridEntityType" , "Order"); - - pagesCount = parseInt(vars.get("orders_page_size")) || 20; - vars.put("grid_entity_page_size" , pagesCount); - vars.put("grid_namespace" , "sales_order_grid"); - vars.put("grid_admin_browse_filter_text" , vars.get("admin_browse_orders_filter_text")); - vars.put("grid_filter_field", "status"); - - // set sort fields and sort directions - vars.put("grid_sort_field_1", "increment_id"); - vars.put("grid_sort_field_2", "created_at"); - vars.put("grid_sort_field_3", "billing_name"); - vars.put("grid_sort_order_1", "asc"); - vars.put("grid_sort_order_2", "desc"); + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + get-admin-email + mpaf/tool/fragments/ce/lock_controller.jmx + + + + mpaf/tool/fragments/ce/get_admin_email.jmx + +adminUserList = props.get("adminUserList"); +adminUser = adminUserList.poll(); +if (adminUser == null) { + SampleResult.setResponseMessage("adminUser list is empty"); + SampleResult.setResponseData("adminUser list is empty","UTF-8"); + IsSuccess=false; + SampleResult.setSuccessful(false); + SampleResult.setStopThread(true); +} +vars.put("admin_user", adminUser); - javascript - mpaf/tool/fragments/ce/admin_browse_orders_grid/setup.jmx + + + true + + - - mpaf/tool/fragments/ce/once_only_controller.jmx - - @@ -33715,74 +34210,421 @@ if (testLabel mpaf/tool/fragments/ce/admin_login/admin_login_submit_form.jmx - + + + false + admin_form_key + <input name="form_key" type="hidden" value="([^'"]+)" /> + $1$ + + 1 + mpaf/tool/fragments/ce/admin_login/admin_retrieve_form_key.jmx + + + - + + mpaf/tool/fragments/ce/simple_controller.jmx + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/orders_page.jmx + + + + Create New Order + + Assertion.response_data + false + 2 + + + + + + + + + true + sales_order_grid + = + true + namespace + + + true + + = + true + search + + + true + true + = + true + filters[placeholder] + + + true + 200 + = + true + paging[pageSize] + + + true + 1 + = + true + paging[current] + + + true + increment_id + = + true + sorting[field] + + + true + desc + = + true + sorting[direction] + + + true + true + = + true + isAjax + + + true + ${admin_form_key} + = + true + form_key + false + + + true + pending + = + true + filters[status] + true + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/open_orders.jmx + + + + totalRecords + + Assertion.response_data + false + 2 + + + + + + + + + true + ${admin_form_key} + = + true + form_key + + + true + sales_order_grid + = + true + namespace + true + + + true + + = + true + search + true + + + true + true + = + true + filters[placeholder] + true + + + true + 200 + = + true + paging[pageSize] + true + + + true + 1 + = + true + paging[current] + true + + + true + increment_id + = + true + sorting[field] + true + + + true + asc + = + true + sorting[direction] + true + + + true + true + = + true + isAjax + true + + + true + pending + = + true + filters[status] + + + true + ${__time()}${__Random(1,1000000)} + = + true + _ + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/mui/index/render/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/search_orders.jmx + + + + totalRecords + + Assertion.response_data + false + 2 + + + + false + order_numbers + \"increment_id\":\"(\d+)\"\, + $1$ + + -1 + simple_products + + + + false + order_ids + \"entity_id\":\"(\d+)\"\, + $1$ + + -1 + simple_products + + + + + + mpaf/tool/fragments/ce/admin_create_process_returns/setup.jmx + + import java.util.ArrayList; + import java.util.HashMap; + import org.apache.jmeter.protocol.http.util.Base64Encoder; + import java.util.Random; + + // get count of "order_numbers" variable defined in "Search Pending Orders Limit" + int ordersCount = Integer.parseInt(vars.get("order_numbers_matchNr")); + + + int clusterLength; + int threadsNumber = ctx.getThreadGroup().getNumThreads(); + if (threadsNumber == 0) { + //Number of orders for one thread + clusterLength = ordersCount; + } else { + clusterLength = Math.round(ordersCount / threadsNumber); + if (clusterLength == 0) { + clusterLength = 1; + } + } + + //Current thread number starts from 0 + int currentThreadNum = ctx.getThreadNum(); + + //Index of the current product from the cluster + Random random = new Random(); + int iterator = random.nextInt(clusterLength); + if (iterator == 0) { + iterator = 1; + } + + int i = clusterLength * currentThreadNum + iterator; + + orderNumber = vars.get("order_numbers_" + i.toString()); + orderId = vars.get("order_ids_" + i.toString()); + vars.put("order_number", orderNumber); + vars.put("order_id", orderId); + + + + + false + + + + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order/view/order_id/${order_id}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/open_order.jmx + + + + #${order_number} + + Assertion.response_data + false + 2 + + + + false + order_status + <span id="order_status">([^<]+)</span> + $1$ + + 1 + simple_products + + + + + + "${order_status}" == "Pending" + false + mpaf/tool/fragments/ce/admin_edit_order/if_controller.jmx + + - - true - ${grid_namespace} - = - true - namespace - true - - - true - - = - true - search - true - - - true - true - = - true - filters[placeholder] - true - - - true - ${grid_entity_page_size} - = - true - paging[pageSize] - true - - - true - 1 - = - true - paging[current] - true - - + true - entity_id + pending = true - sorting[field] - true + history[status] + false - + true - asc + Some text = true - sorting[direction] - true + history[comment] - + true - true + ${admin_form_key} = true - isAjax - true + form_key + false @@ -33792,116 +34634,132 @@ if (testLabel ${request_protocol} - ${base_path}${admin_path}/mui/index/render/ - GET + ${base_path}${admin_path}/sales/order/addComment/order_id/${order_id}/?isAjax=true + POST true false true false false - mpaf/tool/fragments/ce/admin_grid_browsing/set_pages_count.jmx + mpaf/tool/fragments/ce/admin_edit_order/add_comment.jmx - - $.totalRecords - 0 - true - false - true - - - - entity_total_records - $.totalRecords - - - BODY - - - - - - - - var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; - var totalsRecord = parseInt(vars.get("entity_total_records")); - var pageCount = Math.round(totalsRecord/pageSize); - - vars.put("grid_pages_count", pageCount); - - javascript - + + + Not Notified + + Assertion.response_data + false + 2 + - + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order_invoice/start/order_id/${order_id}/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/invoice_start.jmx + + + + Invoice Totals + + Assertion.response_data + false + 2 + + + + false + item_ids + <div id="order_item_(\d+)_title"\s*class="product-title"> + $1$ + + -1 + simple_products + + + + + + + + + true + ${admin_form_key} + = + true + form_key + false + + + true + 1 + = + true + invoice[items][${item_ids_1}] + + + true + 1 + = + true + invoice[items][${item_ids_2}] + + + true + Invoiced + = + true + invoice[comment_text] + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/sales/order_invoice/save/order_id/${order_id}/ + POST + true + false + true + false + false + + mpaf/tool/fragments/ce/admin_create_process_returns/invoice_submit.jmx + + + + The invoice has been created + + Assertion.response_data + false + 2 + + + + + - - - true - ${grid_namespace} - = - true - namespace - true - - - true - - = - true - search - true - - - true - ${grid_admin_browse_filter_text} - = - true - filters[placeholder] - true - - - true - ${grid_entity_page_size} - = - true - paging[pageSize] - true - - - true - 1 - = - true - paging[current] - true - - - true - entity_id - = - true - sorting[field] - true - - - true - asc - = - true - sorting[direction] - true - - - true - true - = - true - isAjax - true - - + @@ -33909,7 +34767,7 @@ if (testLabel ${request_protocol} - ${base_path}${admin_path}/mui/index/render/ + ${base_path}${admin_path}/admin/order_shipment/start/order_id/${order_id}/ GET true false @@ -33917,122 +34775,50 @@ if (testLabel false false - mpaf/tool/fragments/ce/admin_grid_browsing/set_filtered_pages_count.jmx + mpaf/tool/fragments/ce/admin_edit_order/shipment_start.jmx - - $.totalRecords - 0 - true - false - true - true - - - - entity_total_records - $.totalRecords - - - BODY - - - - - - - var pageSize = parseInt(vars.get("grid_entity_page_size")) || 20; -var totalsRecord = parseInt(vars.get("entity_total_records")); -var pageCount = Math.round(totalsRecord/pageSize); - -vars.put("grid_pages_count_filtered", pageCount); - - javascript - + + + New Shipment + + Assertion.response_data + false + 2 + - - - - mpaf/tool/fragments/ce/simple_controller.jmx - - - - 1 - ${grid_pages_count} - 1 - page_number - - true - false - mpaf/tool/fragments/ce/admin_grid_browsing/select_page_number.jmx - - + - - true - ${grid_namespace} - = - true - namespace - true - - - true - - = - true - search - true - - - true - true - = - true - filters[placeholder] - true - - - true - ${grid_entity_page_size} - = - true - paging[pageSize] - true - - + true - ${page_number} + ${admin_form_key} = true - paging[current] - true + form_key + false - + true - entity_id + 1 = true - sorting[field] - true + shipment[items][${item_ids_1}] - + true - asc + 1 = true - sorting[direction] - true + shipment[items][${item_ids_2}] - + true - true + Shipped = true - isAjax - true + shipment[comment_text] @@ -34042,19 +34828,19 @@ vars.put("grid_pages_count_filtered", pageCount); ${request_protocol} - ${base_path}${admin_path}/mui/index/render/ - GET + ${base_path}${admin_path}/admin/order_shipment/save/order_id/${order_id}/ + POST true false true false false - mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid.jmx + mpaf/tool/fragments/ce/admin_edit_order/shipment_submit.jmx - \"totalRecords\":[^0]\d* + The shipment has been created Assertion.response_data false @@ -34062,136 +34848,40 @@ vars.put("grid_pages_count_filtered", pageCount); + + - - 1 - ${grid_pages_count_filtered} - 1 - page_number - - true - false - mpaf/tool/fragments/ce/admin_grid_browsing/select_filtered_page_number.jmx - - - - mpaf/tool/fragments/ce/admin_grid_browsing/admin_browse_grid_sort_and_filter.jmx - + + + + + + + + + ${request_protocol} + + ${base_path}${admin_path}/admin/auth/logout/ + GET + true + false + true + false + false + + mpaf/tool/fragments/ce/setup/admin_logout.jmx - - grid_sort_field - grid_sort_field - true - 0 - 3 - - - - grid_sort_order - grid_sort_order - true - 0 - 2 - - - - - - - true - ${grid_namespace} - = - true - namespace - false - - - true - ${grid_admin_browse_filter_text} - = - true - filters[${grid_filter_field}] - false - - - true - true - = - true - filters[placeholder] - false - - - true - ${grid_entity_page_size} - = - true - paging[pageSize] - false - - - true - ${page_number} - = - true - paging[current] - false - - - true - ${grid_sort_field} - = - true - sorting[field] - false - - - true - ${grid_sort_order} - = - true - sorting[direction] - false - - - true - true - = - true - isAjax - false - - - - - - - - ${request_protocol} - - ${base_path}${admin_path}/mui/index/render/ - GET - true - false - true - false - false - - - - - - \"totalRecords\":[^0]\d* - - Assertion.response_data - false - 2 - - - - - - + + + false + + + +adminUserList = props.get("adminUserList"); +adminUserList.add(vars.get("admin_user")); + + mpaf/tool/fragments/ce/common/return_admin_email_to_pool.jmx + @@ -34292,17 +34982,6 @@ vars.put("grid_pages_count_filtered", pageCount); true - - props.remove("category_url_key"); -props.remove("category_name"); -props.remove("simple_products_list"); -props.remove("configurable_products_list"); -props.remove("customer_emails_list"); - - - false - - From 93df8bf33a25756cbaedfc686be3e9f982df6ff8 Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov Date: Tue, 12 Dec 2017 13:58:50 +0200 Subject: [PATCH 533/653] Update ProductRepository.php --- app/code/Magento/Catalog/Model/ProductRepository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Model/ProductRepository.php b/app/code/Magento/Catalog/Model/ProductRepository.php index 90b18031c1448..e76bba52b4a3f 100644 --- a/app/code/Magento/Catalog/Model/ProductRepository.php +++ b/app/code/Magento/Catalog/Model/ProductRepository.php @@ -491,7 +491,7 @@ private function processLinks(\Magento\Catalog\Api\Data\ProductInterface $produc * @throws LocalizedException * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ - protected function processMediaGallery(ProductInterface $product, array $mediaGalleryEntries) + protected function processMediaGallery(ProductInterface $product, $mediaGalleryEntries) { $existingMediaGallery = $product->getMediaGallery('images'); $newEntries = []; From 70122b57918fd8709f48afedbc85c1de2802a71b Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Tue, 12 Dec 2017 14:47:14 +0200 Subject: [PATCH 534/653] 2907: magento/magento2#2907: Integration Test Annotation magentoAppArea breaks with some valid values --- .../Magento/Test/Annotation/AppAreaTest.php | 52 +++++- .../Magento/Test/ApplicationTest.php | 171 ++++++++++++++++-- 2 files changed, 210 insertions(+), 13 deletions(-) diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/AppAreaTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/AppAreaTest.php index a4c8816b13ee1..dd361a5d0ed74 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/AppAreaTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Annotation/AppAreaTest.php @@ -3,8 +3,11 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Test\Annotation; +use Magento\Framework\App\Area; + class AppAreaTest extends \PHPUnit\Framework\TestCase { /** @@ -13,12 +16,12 @@ class AppAreaTest extends \PHPUnit\Framework\TestCase protected $_object; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var \Magento\TestFramework\Application|\PHPUnit_Framework_MockObject_MockObject */ protected $_applicationMock; /** - * @var \PHPUnit_Framework_MockObject_MockObject + * @var \PHPUnit\Framework\TestCase|\PHPUnit_Framework_MockObject_MockObject */ protected $_testCaseMock; @@ -69,6 +72,22 @@ public function testGetTestAppAreaWithInvalidArea() $this->_object->startTest($this->_testCaseMock); } + /** + * Check startTest() with different allowed area codes. + * + * @dataProvider startTestWithDifferentAreaCodes + * @param string $areaCode + */ + public function testStartTestWithDifferentAreaCodes(string $areaCode) + { + $annotations = ['method' => ['magentoAppArea' => [$areaCode]]]; + $this->_testCaseMock->expects($this->once())->method('getAnnotations')->will($this->returnValue($annotations)); + $this->_applicationMock->expects($this->any())->method('getArea')->willReturn(null); + $this->_applicationMock->expects($this->once())->method('reinitialize'); + $this->_applicationMock->expects($this->once())->method('loadArea')->with($areaCode); + $this->_object->startTest($this->_testCaseMock); + } + public function testStartTestPreventDoubleAreaLoadingAfterReinitialization() { $annotations = ['method' => ['magentoAppArea' => ['global']]]; @@ -89,4 +108,33 @@ public function testStartTestPreventDoubleAreaLoading() $this->_applicationMock->expects($this->never())->method('loadArea'); $this->_object->startTest($this->_testCaseMock); } + + /** + * Provide test data for testStartTestWithDifferentAreaCodes(). + * + * @return array + */ + public function startTestWithDifferentAreaCodes() + { + return [ + [ + 'area_code' => Area::AREA_GLOBAL, + ], + [ + 'area_code' => Area::AREA_ADMINHTML, + ], + [ + 'area_code' => Area::AREA_FRONTEND, + ], + [ + 'area_code' => Area::AREA_WEBAPI_REST, + ], + [ + 'area_code' => Area::AREA_WEBAPI_SOAP, + ], + [ + 'area_code' => Area::AREA_CRONTAB, + ], + ]; + } } diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php index f8f49613c41b4..ee794fc262a4d 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php @@ -3,39 +3,71 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Test; +use Magento\Framework\App\Area; +use Magento\Framework\App\AreaList; use Magento\Framework\App\Bootstrap; +use Magento\Framework\App\ObjectManager\ConfigLoader; use Magento\Framework\App\State; +use Magento\Framework\Autoload\ClassLoaderWrapper; +use Magento\Framework\Config\Scope; +use Magento\Framework\ObjectManagerInterface; +use Magento\Framework\Shell; +use Magento\TestFramework\Application; +/** + * Provide tests for \Magento\TestFramework\Application. + */ class ApplicationTest extends \PHPUnit\Framework\TestCase { /** - * @covers \Magento\TestFramework\Application::getTempDir - * @covers \Magento\TestFramework\Application::getDbInstance() - * @covers \Magento\TestFramework\Application::getInitParams() + * Test subject. + * + * @var Application */ - public function testConstructor() + private $subject; + + /** + * @var string + */ + private $tempDir; + + /** + * @inheritdoc + */ + protected function setUp() { - $shell = $this->createMock(\Magento\Framework\Shell::class); - $autoloadWrapper = $this->getMockBuilder(\Magento\Framework\Autoload\ClassLoaderWrapper::class) + /** @var Shell|\PHPUnit_Framework_MockObject_MockObject $shell */ + $shell = $this->createMock(Shell::class); + /** @var ClassLoaderWrapper|\PHPUnit_Framework_MockObject_MockObject $autoloadWrapper */ + $autoloadWrapper = $this->getMockBuilder(ClassLoaderWrapper::class) ->disableOriginalConstructor()->getMock(); - $tempDir = '/temp/dir'; + $this->tempDir = '/temp/dir'; $appMode = \Magento\Framework\App\State::MODE_DEVELOPER; - $object = new \Magento\TestFramework\Application( + $this->subject = new Application( $shell, - $tempDir, + $this->tempDir, 'config.php', 'global-config.php', '', $appMode, $autoloadWrapper ); + } - $this->assertEquals($tempDir, $object->getTempDir(), 'Temp directory is not set in Application'); + /** + * @covers \Magento\TestFramework\Application::getTempDir + * @covers \Magento\TestFramework\Application::getDbInstance() + * @covers \Magento\TestFramework\Application::getInitParams() + */ + public function testConstructor() + { + $this->assertEquals($this->tempDir, $this->subject->getTempDir(), 'Temp directory is not set in Application'); - $initParams = $object->getInitParams(); + $initParams = $this->subject->getInitParams(); $this->assertInternalType('array', $initParams, 'Wrong initialization parameters type'); $this->assertArrayHasKey( Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS, @@ -49,4 +81,121 @@ public function testConstructor() 'Wrong application mode configured' ); } + + /** + * Test \Magento\TestFramework\Application will correctly load different areas. + * + * @dataProvider loadAreaDataProvider + * + * @param string $areaCode + * @param bool $partialLoad + */ + public function testLoadArea(string $areaCode, bool $partialLoad) + { + $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + /** @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject $objectManagerMock */ + $objectManagerMock = $this->getMockBuilder(ObjectManagerInterface::class) + ->disableOriginalConstructor() + ->getMock(); + $configScope = $this->getMockBuilder(Scope::class) + ->disableOriginalConstructor() + ->getMock(); + $configScope->expects($this->once()) + ->method('setCurrentScope') + ->with($this->identicalTo($areaCode)); + $configLoader = $this->getMockBuilder(ConfigLoader::class) + ->disableOriginalConstructor() + ->getMock(); + $configLoader->expects($this->once()) + ->method('load') + ->with($this->identicalTo($areaCode)) + ->willReturn([]); + $areaList = $this->getMockBuilder(AreaList::class) + ->disableOriginalConstructor() + ->getMock(); + $area = $this->getMockBuilder(Area::class) + ->disableOriginalConstructor() + ->getMock(); + $appState = $this->getMockBuilder(State::class) + ->disableOriginalConstructor() + ->getMock(); + $objectManagerMock->expects($this->once()) + ->method('configure') + ->with($this->identicalTo([])); + if ($partialLoad) { + $objectManagerMock->expects($this->exactly(3)) + ->method('get') + ->willReturnOnConsecutiveCalls( + $configScope, + $configLoader, + $areaList + ); + $areaList->expects($this->once()) + ->method('getArea') + ->with($this->identicalTo($areaCode)) + ->willReturn($area); + $area->expects($this->once()) + ->method('load') + ->with($this->identicalTo(Area::PART_CONFIG)); + } else { + $area->expects($this->once()) + ->method('load'); + $appState->expects($this->once()) + ->method('setAreaCode') + ->with($this->identicalTo($areaCode)); + $areaList->expects($this->once()) + ->method('getArea') + ->with($this->identicalTo($areaCode)) + ->willReturn($area); + $objectManagerMock->expects($this->exactly(5)) + ->method('get') + ->willReturnOnConsecutiveCalls( + $configScope, + $configLoader, + $areaList, + $appState, + $areaList + ); + } + \Magento\TestFramework\Helper\Bootstrap::setObjectManager($objectManagerMock); + $this->subject->loadArea($areaCode); + + //restore Object Manager to successfully finish the test. + \Magento\TestFramework\Helper\Bootstrap::setObjectManager($objectManager); + } + + /** + * Provide test data for testLoadArea(). + * + * @return array + */ + public function loadAreaDataProvider() + { + return [ + [ + 'area_code' => Area::AREA_GLOBAL, + 'partial_load' => true, + ], + [ + 'area_code' => Area::AREA_ADMINHTML, + 'partial_load' => false, + ], + [ + 'area_code' => Area::AREA_FRONTEND, + 'partial_load' => false, + ], + [ + 'area_code' => Area::AREA_WEBAPI_REST, + 'partial_load' => true, + ], + [ + 'area_code' => Area::AREA_WEBAPI_SOAP, + 'partial_load' => true, + ], + [ + 'area_code' => Area::AREA_CRONTAB, + 'partial_load' => true, + ], + ]; + } } From cef5991721a1c85bc937b9d4d33fe79417ccc55e Mon Sep 17 00:00:00 2001 From: Miguel Balparda Date: Tue, 12 Dec 2017 10:18:46 -0300 Subject: [PATCH 535/653] Removed old Connect css class --- .../Magento/Marketplace/view/adminhtml/templates/index.phtml | 2 +- .../backend/Magento_Marketplace/web/css/source/_module.less | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml b/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml index ab84e91170ed1..a37306bf1eed7 100644 --- a/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml +++ b/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml @@ -46,7 +46,7 @@
    Date: Tue, 12 Dec 2017 14:59:17 +0200 Subject: [PATCH 536/653] 8204: catalog:images:resize = getimagesize(): Read error! --- .../Console/Command/ImagesResizeCommand.php | 28 +++++++--- .../Catalog/Model/Product/Image/Cache.php | 33 ++++++++++-- .../Command/ImagesResizeCommandTest.php | 40 ++++++++++++++ .../Unit/Model/Product/Image/CacheTest.php | 52 +++++++++++++++++++ 4 files changed, 142 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/Catalog/Console/Command/ImagesResizeCommand.php b/app/code/Magento/Catalog/Console/Command/ImagesResizeCommand.php index 49f82562f33db..b0c93ee3283a9 100644 --- a/app/code/Magento/Catalog/Console/Command/ImagesResizeCommand.php +++ b/app/code/Magento/Catalog/Console/Command/ImagesResizeCommand.php @@ -5,6 +5,9 @@ */ namespace Magento\Catalog\Console\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + class ImagesResizeCommand extends \Symfony\Component\Console\Command\Command { /** @@ -58,10 +61,8 @@ protected function configure() /** * {@inheritdoc} */ - protected function execute( - \Symfony\Component\Console\Input\InputInterface $input, - \Symfony\Component\Console\Output\OutputInterface $output - ) { + protected function execute(InputInterface $input, OutputInterface $output) + { $this->appState->setAreaCode(\Magento\Framework\App\Area::AREA_GLOBAL); /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */ @@ -73,6 +74,7 @@ protected function execute( return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } + $exceptionMessage = ''; try { foreach ($productIds as $productId) { try { @@ -82,9 +84,13 @@ protected function execute( continue; } - /** @var \Magento\Catalog\Model\Product\Image\Cache $imageCache */ - $imageCache = $this->imageCacheFactory->create(); - $imageCache->generate($product); + try { + /** @var \Magento\Catalog\Model\Product\Image\Cache $imageCache */ + $imageCache = $this->imageCacheFactory->create(); + $imageCache->generate($product); + } catch (\Exception $e) { + $exceptionMessage = $e->getMessage(); + } $output->write("."); } @@ -95,6 +101,12 @@ protected function execute( } $output->write("\n"); - $output->writeln("Product images resized successfully"); + $output->writeln("Product images resized successfully."); + + if ($exceptionMessage) { + $output->writeln("{$exceptionMessage}"); + } + + return 0; } } diff --git a/app/code/Magento/Catalog/Model/Product/Image/Cache.php b/app/code/Magento/Catalog/Model/Product/Image/Cache.php index c5e5e0ecac4c0..cd66257657cb1 100644 --- a/app/code/Magento/Catalog/Model/Product/Image/Cache.php +++ b/app/code/Magento/Catalog/Model/Product/Image/Cache.php @@ -10,6 +10,7 @@ use Magento\Theme\Model\ResourceModel\Theme\Collection as ThemeCollection; use Magento\Framework\App\Area; use Magento\Framework\View\ConfigInterface; +use Psr\Log\LoggerInterface; class Cache { @@ -33,19 +34,29 @@ class Cache */ protected $data = []; + /** + * Logger. + * + * @var LoggerInterface + */ + private $logger; + /** * @param ConfigInterface $viewConfig * @param ThemeCollection $themeCollection * @param ImageHelper $imageHelper + * @param LoggerInterface $logger */ public function __construct( ConfigInterface $viewConfig, ThemeCollection $themeCollection, - ImageHelper $imageHelper + ImageHelper $imageHelper, + LoggerInterface $logger = null ) { $this->viewConfig = $viewConfig; $this->themeCollection = $themeCollection; $this->imageHelper = $imageHelper; + $this->logger = $logger ?: \Magento\Framework\App\ObjectManager::getInstance()->get(LoggerInterface::class); } /** @@ -74,21 +85,37 @@ protected function getData() } /** - * Resize product images and save results to image cache + * Resize product images and save results to image cache. * * @param Product $product + * * @return $this + * @throws \Exception */ public function generate(Product $product) { + $isException = false; $galleryImages = $product->getMediaGalleryImages(); if ($galleryImages) { foreach ($galleryImages as $image) { foreach ($this->getData() as $imageData) { - $this->processImageData($product, $imageData, $image->getFile()); + try { + $this->processImageData($product, $imageData, $image->getFile()); + } catch (\Exception $e) { + $isException = true; + $this->logger->error($e->getMessage()); + $this->logger->error(__('The image could not be resized: ') . $image->getPath()); + } } } } + + if ($isException === true) { + throw new \Magento\Framework\Exception\RuntimeException( + __('Some images could not be resized. See log file for details.') + ); + } + return $this; } diff --git a/app/code/Magento/Catalog/Test/Unit/Console/Command/ImagesResizeCommandTest.php b/app/code/Magento/Catalog/Test/Unit/Console/Command/ImagesResizeCommandTest.php index 457ba7b94529b..b4687e18daf8d 100644 --- a/app/code/Magento/Catalog/Test/Unit/Console/Command/ImagesResizeCommandTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Console/Command/ImagesResizeCommandTest.php @@ -208,4 +208,44 @@ protected function prepareImageCache() ->method('create') ->willReturn($this->imageCache); } + + public function testExecuteWithExceptionInGenerate() + { + $productsIds = [1, 2]; + + $this->appState->expects($this->once()) + ->method('setAreaCode') + ->with(Area::AREA_GLOBAL) + ->willReturnSelf(); + + $this->productCollection->expects($this->once()) + ->method('getAllIds') + ->willReturn($productsIds); + + $productMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->productRepository->expects($this->at(0)) + ->method('getById') + ->with($productsIds[0]) + ->willReturn($productMock); + $this->productRepository->expects($this->at(1)) + ->method('getById') + ->with($productsIds[1]) + ->willThrowException(new NoSuchEntityException()); + + $this->imageCache->expects($this->exactly(count($productsIds) - 1)) + ->method('generate') + ->with($productMock) + ->willThrowException(new \Magento\Framework\Exception\RuntimeException(__('Some text is here.'))); + + $commandTester = new CommandTester($this->command); + $commandTester->execute([]); + + $this->assertContains( + 'Some text is here.', + $commandTester->getDisplay() + ); + } } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Image/CacheTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Image/CacheTest.php index 3ff3601da8ccc..428ef432888f0 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Image/CacheTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Image/CacheTest.php @@ -189,6 +189,58 @@ public function testGenerate() $this->model->generate($this->product); } + /** + * @expectedException \Magento\Framework\Exception\RuntimeException + */ + public function testGenerateWithException() + { + $imageFile = 'image.jpg'; + $imageItem = $this->objectManager->getObject( + \Magento\Framework\DataObject::class, + [ + 'data' => ['file' => $imageFile] + ] + ); + $this->mediaGalleryCollection->expects($this->once()) + ->method('getIterator') + ->willReturn(new \ArrayIterator([$imageItem])); + + $this->product->expects($this->atLeastOnce()) + ->method('getMediaGalleryImages') + ->willReturn($this->mediaGalleryCollection); + + $data = $this->getTestData(); + $this->config->expects($this->once()) + ->method('getMediaEntities') + ->with('Magento_Catalog') + ->willReturn($data); + + $themeMock = $this->getMockBuilder(\Magento\Theme\Model\Theme::class) + ->disableOriginalConstructor() + ->getMock(); + $themeMock->expects($this->exactly(3)) + ->method('getCode') + ->willReturn('Magento\theme'); + + $this->themeCollection->expects($this->once()) + ->method('loadRegisteredThemes') + ->willReturn([$themeMock]); + + $this->viewConfig->expects($this->once()) + ->method('getViewConfig') + ->with([ + 'area' => Area::AREA_FRONTEND, + 'themeModel' => $themeMock, + ]) + ->willReturn($this->config); + + $this->imageHelper->expects($this->exactly(3)) + ->method('init') + ->willThrowException(new \Exception('Some text ')); + + $this->model->generate($this->product); + } + /** * @return array */ From f5bdc45addf879d2006432a47fb327c0a4962db4 Mon Sep 17 00:00:00 2001 From: RomanKis Date: Tue, 12 Dec 2017 15:33:05 +0200 Subject: [PATCH 537/653] 8601: Can bypass Minimum Order Amount Logic --- .../Magento/Multishipping/Model/Checkout/Type/Multishipping.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php b/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php index 7c72c09c0d9e9..767f58bb9e4ed 100644 --- a/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php +++ b/app/code/Magento/Multishipping/Model/Checkout/Type/Multishipping.php @@ -1066,7 +1066,7 @@ private function validateMinimumAmountForAddressItems() $baseTotal = 0; foreach ($addresses as $address) { - $taxes = ($taxInclude) ? $address->getBaseTaxAmount() : 0; + $taxes = $taxInclude ? $address->getBaseTaxAmount() : 0; $baseTotal += $address->getBaseSubtotalWithDiscount() + $taxes; } From baaff9580dc804f49f22448b372f7adf9bed683b Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Tue, 12 Dec 2017 15:40:02 +0200 Subject: [PATCH 538/653] 2907: magento/magento2#2907: Integration Test Annotation magentoAppArea breaks with some valid values --- .../Magento/Test/ApplicationTest.php | 164 +++++++++++------- 1 file changed, 102 insertions(+), 62 deletions(-) diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php index ee794fc262a4d..9e7f6cc8dd7cf 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php @@ -13,6 +13,7 @@ use Magento\Framework\App\State; use Magento\Framework\Autoload\ClassLoaderWrapper; use Magento\Framework\Config\Scope; +use Magento\Framework\Exception\LocalizedException; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Shell; use Magento\TestFramework\Application; @@ -83,26 +84,20 @@ public function testConstructor() } /** - * Test \Magento\TestFramework\Application will correctly load different areas. + * Test \Magento\TestFramework\Application will correctly load specified areas. * * @dataProvider loadAreaDataProvider - * * @param string $areaCode - * @param bool $partialLoad */ - public function testLoadArea(string $areaCode, bool $partialLoad) + public function testLoadArea(string $areaCode) { - $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - /** @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject $objectManagerMock */ - $objectManagerMock = $this->getMockBuilder(ObjectManagerInterface::class) - ->disableOriginalConstructor() - ->getMock(); $configScope = $this->getMockBuilder(Scope::class) ->disableOriginalConstructor() ->getMock(); $configScope->expects($this->once()) ->method('setCurrentScope') ->with($this->identicalTo($areaCode)); + $configLoader = $this->getMockBuilder(ConfigLoader::class) ->disableOriginalConstructor() ->getMock(); @@ -113,88 +108,133 @@ public function testLoadArea(string $areaCode, bool $partialLoad) $areaList = $this->getMockBuilder(AreaList::class) ->disableOriginalConstructor() ->getMock(); - $area = $this->getMockBuilder(Area::class) - ->disableOriginalConstructor() - ->getMock(); - $appState = $this->getMockBuilder(State::class) + + /** @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject $objectManager */ + $objectManager = $this->getMockBuilder(ObjectManagerInterface::class) ->disableOriginalConstructor() ->getMock(); - $objectManagerMock->expects($this->once()) + $objectManager->expects($this->once()) ->method('configure') ->with($this->identicalTo([])); - if ($partialLoad) { - $objectManagerMock->expects($this->exactly(3)) - ->method('get') - ->willReturnOnConsecutiveCalls( - $configScope, - $configLoader, - $areaList - ); - $areaList->expects($this->once()) - ->method('getArea') - ->with($this->identicalTo($areaCode)) - ->willReturn($area); - $area->expects($this->once()) - ->method('load') - ->with($this->identicalTo(Area::PART_CONFIG)); - } else { - $area->expects($this->once()) - ->method('load'); - $appState->expects($this->once()) - ->method('setAreaCode') + $objectManager->expects($this->exactly(3)) + ->method('get') + ->willReturnOnConsecutiveCalls( + $configScope, + $configLoader, + $areaList + ); + + \Magento\TestFramework\Helper\Bootstrap::setObjectManager($objectManager); + try { + \Magento\TestFramework\Helper\Bootstrap::getInstance(); + } catch (LocalizedException $e) { + /** @var \Magento\TestFramework\Helper\Bootstrap|\PHPUnit_Framework_MockObject_MockObject $bootstrap */ + $bootstrap = $this->getMockBuilder(\Magento\TestFramework\Helper\Bootstrap::class) + ->disableOriginalConstructor() + ->getMock(); + $bootstrap->expects($this->once()) + ->method('loadArea') ->with($this->identicalTo($areaCode)); - $areaList->expects($this->once()) - ->method('getArea') - ->with($this->identicalTo($areaCode)) - ->willReturn($area); - $objectManagerMock->expects($this->exactly(5)) - ->method('get') - ->willReturnOnConsecutiveCalls( - $configScope, - $configLoader, - $areaList, - $appState, - $areaList - ); + \Magento\TestFramework\Helper\Bootstrap::setInstance($bootstrap); } - \Magento\TestFramework\Helper\Bootstrap::setObjectManager($objectManagerMock); + $this->subject->loadArea($areaCode); + } + + /** + * Test \Magento\TestFramework\Application will correctly load specified areas. + * + * @dataProvider partialLoadAreaDataProvider + * @param string $areaCode + */ + public function testPartialLoadArea(string $areaCode) + { + $configScope = $this->getMockBuilder(Scope::class) + ->disableOriginalConstructor() + ->getMock(); + $configScope->expects($this->once()) + ->method('setCurrentScope') + ->with($this->identicalTo($areaCode)); + + $configLoader = $this->getMockBuilder(ConfigLoader::class) + ->disableOriginalConstructor() + ->getMock(); + $configLoader->expects($this->once()) + ->method('load') + ->with($this->identicalTo($areaCode)) + ->willReturn([]); + + $area = $this->getMockBuilder(Area::class) + ->disableOriginalConstructor() + ->getMock(); + $area->expects($this->once()) + ->method('load') + ->with($this->identicalTo(Area::PART_CONFIG)); + + $areaList = $this->getMockBuilder(AreaList::class) + ->disableOriginalConstructor() + ->getMock(); + $areaList->expects($this->once()) + ->method('getArea') + ->with($this->identicalTo($areaCode)) + ->willReturn($area); + + /** @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject $objectManager */ + $objectManager = $this->getMockBuilder(ObjectManagerInterface::class) + ->disableOriginalConstructor() + ->getMock(); + $objectManager->expects($this->once()) + ->method('configure') + ->with($this->identicalTo([])); + $objectManager->expects($this->exactly(3)) + ->method('get') + ->willReturnOnConsecutiveCalls( + $configScope, + $configLoader, + $areaList + ); - //restore Object Manager to successfully finish the test. \Magento\TestFramework\Helper\Bootstrap::setObjectManager($objectManager); + + $this->subject->loadArea($areaCode); } /** - * Provide test data for testLoadArea(). + * Provide test data for testPartialLoadArea(). * * @return array */ - public function loadAreaDataProvider() + public function partialLoadAreaDataProvider() { return [ [ 'area_code' => Area::AREA_GLOBAL, - 'partial_load' => true, ], [ - 'area_code' => Area::AREA_ADMINHTML, - 'partial_load' => false, + 'area_code' => Area::AREA_WEBAPI_REST, ], [ - 'area_code' => Area::AREA_FRONTEND, - 'partial_load' => false, + 'area_code' => Area::AREA_WEBAPI_SOAP, ], [ - 'area_code' => Area::AREA_WEBAPI_REST, - 'partial_load' => true, + 'area_code' => Area::AREA_CRONTAB, ], + ]; + } + + /** + * Provide test data for testLoadArea(). + * + * @return array + */ + public function loadAreaDataProvider() + { + return [ [ - 'area_code' => Area::AREA_WEBAPI_SOAP, - 'partial_load' => true, + 'area_code' => Area::AREA_ADMINHTML, ], [ - 'area_code' => Area::AREA_CRONTAB, - 'partial_load' => true, + 'area_code' => Area::AREA_FRONTEND, ], ]; } From 97e43c1dbeefdc38120c9d62b2083e194c971bb2 Mon Sep 17 00:00:00 2001 From: RomanKis Date: Tue, 12 Dec 2017 15:48:37 +0200 Subject: [PATCH 539/653] 8204: catalog:images:resize = getimagesize(): Read error! --- .../Catalog/Console/Command/ImagesResizeCommand.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Catalog/Console/Command/ImagesResizeCommand.php b/app/code/Magento/Catalog/Console/Command/ImagesResizeCommand.php index b0c93ee3283a9..09cd6793b4785 100644 --- a/app/code/Magento/Catalog/Console/Command/ImagesResizeCommand.php +++ b/app/code/Magento/Catalog/Console/Command/ImagesResizeCommand.php @@ -74,7 +74,7 @@ protected function execute(InputInterface $input, OutputInterface $output) return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } - $exceptionMessage = ''; + $errorMessage = ''; try { foreach ($productIds as $productId) { try { @@ -88,8 +88,8 @@ protected function execute(InputInterface $input, OutputInterface $output) /** @var \Magento\Catalog\Model\Product\Image\Cache $imageCache */ $imageCache = $this->imageCacheFactory->create(); $imageCache->generate($product); - } catch (\Exception $e) { - $exceptionMessage = $e->getMessage(); + } catch (\Magento\Framework\Exception\RuntimeException $e) { + $errorMessage = $e->getMessage(); } $output->write("."); @@ -103,8 +103,8 @@ protected function execute(InputInterface $input, OutputInterface $output) $output->write("\n"); $output->writeln("Product images resized successfully."); - if ($exceptionMessage) { - $output->writeln("{$exceptionMessage}"); + if ($errorMessage !== '') { + $output->writeln("{$errorMessage}"); } return 0; From 6b749c0b2d8cc6952cae0f2037ae41b1a91ac048 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Tue, 12 Dec 2017 16:00:31 +0200 Subject: [PATCH 540/653] magento/magento2#2907 --- .../Magento/Test/ApplicationTest.php | 96 +++++++++---------- 1 file changed, 44 insertions(+), 52 deletions(-) diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php index 9e7f6cc8dd7cf..47c3ef64280b9 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php @@ -85,37 +85,59 @@ public function testConstructor() /** * Test \Magento\TestFramework\Application will correctly load specified areas. - * - * @dataProvider loadAreaDataProvider - * @param string $areaCode */ - public function testLoadArea(string $areaCode) + public function testBackEndLoadArea() { - $configScope = $this->getMockBuilder(Scope::class) - ->disableOriginalConstructor() - ->getMock(); - $configScope->expects($this->once()) - ->method('setCurrentScope') - ->with($this->identicalTo($areaCode)); + $configScope = $this->getMockBuilder(Scope::class)->disableOriginalConstructor()->getMock(); + $configScope->expects($this->once())->method('setCurrentScope')->with($this->identicalTo(Area::AREA_ADMINHTML)); - $configLoader = $this->getMockBuilder(ConfigLoader::class) - ->disableOriginalConstructor() - ->getMock(); + $configLoader = $this->getMockBuilder(ConfigLoader::class)->disableOriginalConstructor()->getMock(); $configLoader->expects($this->once()) ->method('load') - ->with($this->identicalTo($areaCode)) + ->with($this->identicalTo(Area::AREA_ADMINHTML)) ->willReturn([]); - $areaList = $this->getMockBuilder(AreaList::class) - ->disableOriginalConstructor() - ->getMock(); + $areaList = $this->getMockBuilder(AreaList::class)->disableOriginalConstructor()->getMock(); /** @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject $objectManager */ - $objectManager = $this->getMockBuilder(ObjectManagerInterface::class) + $objectManager = $this->getMockBuilder(ObjectManagerInterface::class)->disableOriginalConstructor()->getMock(); + $objectManager->expects($this->once())->method('configure')->with($this->identicalTo([])); + $objectManager->expects($this->exactly(3)) + ->method('get') + ->willReturnOnConsecutiveCalls( + $configScope, + $configLoader, + $areaList + ); + + \Magento\TestFramework\Helper\Bootstrap::setObjectManager($objectManager); + + $bootstrap = $this->getMockBuilder(\Magento\TestFramework\Helper\Bootstrap::class) ->disableOriginalConstructor() ->getMock(); - $objectManager->expects($this->once()) - ->method('configure') - ->with($this->identicalTo([])); + $bootstrap->expects($this->once())->method('loadArea')->with($this->identicalTo(Area::AREA_ADMINHTML)); + \Magento\TestFramework\Helper\Bootstrap::setInstance($bootstrap); + + $this->subject->loadArea(Area::AREA_ADMINHTML); + } + + /** + * Test \Magento\TestFramework\Application will correctly load specified areas. + */ + public function testFrontEndLoadArea() + { + $configScope = $this->getMockBuilder(Scope::class)->disableOriginalConstructor()->getMock(); + $configScope->expects($this->once())->method('setCurrentScope')->with($this->identicalTo(Area::AREA_FRONTEND)); + + $configLoader = $this->getMockBuilder(ConfigLoader::class)->disableOriginalConstructor()->getMock(); + $configLoader->expects($this->once()) + ->method('load') + ->with($this->identicalTo(Area::AREA_FRONTEND)) + ->willReturn([]); + $areaList = $this->getMockBuilder(AreaList::class)->disableOriginalConstructor()->getMock(); + + /** @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject $objectManager */ + $objectManager = $this->getMockBuilder(ObjectManagerInterface::class)->disableOriginalConstructor()->getMock(); + $objectManager->expects($this->once())->method('configure')->with($this->identicalTo([])); $objectManager->expects($this->exactly(3)) ->method('get') ->willReturnOnConsecutiveCalls( @@ -125,20 +147,7 @@ public function testLoadArea(string $areaCode) ); \Magento\TestFramework\Helper\Bootstrap::setObjectManager($objectManager); - try { - \Magento\TestFramework\Helper\Bootstrap::getInstance(); - } catch (LocalizedException $e) { - /** @var \Magento\TestFramework\Helper\Bootstrap|\PHPUnit_Framework_MockObject_MockObject $bootstrap */ - $bootstrap = $this->getMockBuilder(\Magento\TestFramework\Helper\Bootstrap::class) - ->disableOriginalConstructor() - ->getMock(); - $bootstrap->expects($this->once()) - ->method('loadArea') - ->with($this->identicalTo($areaCode)); - \Magento\TestFramework\Helper\Bootstrap::setInstance($bootstrap); - } - - $this->subject->loadArea($areaCode); + $this->subject->loadArea(Area::AREA_FRONTEND); } /** @@ -221,21 +230,4 @@ public function partialLoadAreaDataProvider() ], ]; } - - /** - * Provide test data for testLoadArea(). - * - * @return array - */ - public function loadAreaDataProvider() - { - return [ - [ - 'area_code' => Area::AREA_ADMINHTML, - ], - [ - 'area_code' => Area::AREA_FRONTEND, - ], - ]; - } } From 0d3d70cd1cf32abf1cd588b096b9cdc20e94b18f Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov Date: Tue, 12 Dec 2017 16:29:26 +0200 Subject: [PATCH 541/653] magento/magento2#12259: Save and Duplicated product not working --- app/code/Magento/Catalog/Model/Product/Copier.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Copier.php b/app/code/Magento/Catalog/Model/Product/Copier.php index 70f8b9883325a..39fb948579fcc 100644 --- a/app/code/Magento/Catalog/Model/Product/Copier.php +++ b/app/code/Magento/Catalog/Model/Product/Copier.php @@ -9,9 +9,6 @@ use Magento\Catalog\Api\Data\ProductInterface; -/** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - */ class Copier { /** @@ -56,8 +53,6 @@ public function copy(\Magento\Catalog\Model\Product $product) { $product->getWebsiteIds(); $product->getCategoryIds(); - - /** @var \Magento\Framework\EntityManager\EntityMetadataInterface $metadata */ $metadata = $this->getMetadataPool()->getMetadata(ProductInterface::class); /** @var \Magento\Catalog\Model\Product $duplicate */ From 7be1e58c14db3af2c47af5702292ed19118e1b9c Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Tue, 12 Dec 2017 16:30:20 +0200 Subject: [PATCH 542/653] 2907: magento/magento2#2907: Integration Test Annotation magentoAppArea breaks with some valid values --- .../Magento/Test/ApplicationTest.php | 68 ------------------- 1 file changed, 68 deletions(-) diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php index 47c3ef64280b9..50b18c3a86d48 100644 --- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php +++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ApplicationTest.php @@ -13,7 +13,6 @@ use Magento\Framework\App\State; use Magento\Framework\Autoload\ClassLoaderWrapper; use Magento\Framework\Config\Scope; -use Magento\Framework\Exception\LocalizedException; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Shell; use Magento\TestFramework\Application; @@ -83,73 +82,6 @@ public function testConstructor() ); } - /** - * Test \Magento\TestFramework\Application will correctly load specified areas. - */ - public function testBackEndLoadArea() - { - $configScope = $this->getMockBuilder(Scope::class)->disableOriginalConstructor()->getMock(); - $configScope->expects($this->once())->method('setCurrentScope')->with($this->identicalTo(Area::AREA_ADMINHTML)); - - $configLoader = $this->getMockBuilder(ConfigLoader::class)->disableOriginalConstructor()->getMock(); - $configLoader->expects($this->once()) - ->method('load') - ->with($this->identicalTo(Area::AREA_ADMINHTML)) - ->willReturn([]); - $areaList = $this->getMockBuilder(AreaList::class)->disableOriginalConstructor()->getMock(); - - /** @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject $objectManager */ - $objectManager = $this->getMockBuilder(ObjectManagerInterface::class)->disableOriginalConstructor()->getMock(); - $objectManager->expects($this->once())->method('configure')->with($this->identicalTo([])); - $objectManager->expects($this->exactly(3)) - ->method('get') - ->willReturnOnConsecutiveCalls( - $configScope, - $configLoader, - $areaList - ); - - \Magento\TestFramework\Helper\Bootstrap::setObjectManager($objectManager); - - $bootstrap = $this->getMockBuilder(\Magento\TestFramework\Helper\Bootstrap::class) - ->disableOriginalConstructor() - ->getMock(); - $bootstrap->expects($this->once())->method('loadArea')->with($this->identicalTo(Area::AREA_ADMINHTML)); - \Magento\TestFramework\Helper\Bootstrap::setInstance($bootstrap); - - $this->subject->loadArea(Area::AREA_ADMINHTML); - } - - /** - * Test \Magento\TestFramework\Application will correctly load specified areas. - */ - public function testFrontEndLoadArea() - { - $configScope = $this->getMockBuilder(Scope::class)->disableOriginalConstructor()->getMock(); - $configScope->expects($this->once())->method('setCurrentScope')->with($this->identicalTo(Area::AREA_FRONTEND)); - - $configLoader = $this->getMockBuilder(ConfigLoader::class)->disableOriginalConstructor()->getMock(); - $configLoader->expects($this->once()) - ->method('load') - ->with($this->identicalTo(Area::AREA_FRONTEND)) - ->willReturn([]); - $areaList = $this->getMockBuilder(AreaList::class)->disableOriginalConstructor()->getMock(); - - /** @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject $objectManager */ - $objectManager = $this->getMockBuilder(ObjectManagerInterface::class)->disableOriginalConstructor()->getMock(); - $objectManager->expects($this->once())->method('configure')->with($this->identicalTo([])); - $objectManager->expects($this->exactly(3)) - ->method('get') - ->willReturnOnConsecutiveCalls( - $configScope, - $configLoader, - $areaList - ); - - \Magento\TestFramework\Helper\Bootstrap::setObjectManager($objectManager); - $this->subject->loadArea(Area::AREA_FRONTEND); - } - /** * Test \Magento\TestFramework\Application will correctly load specified areas. * From 67c1dbfea5e291a163236022ed27720bc639e64c Mon Sep 17 00:00:00 2001 From: Andrii Voskoboinikov Date: Tue, 12 Dec 2017 16:32:37 +0200 Subject: [PATCH 543/653] MAGETWO-83659: Enable metrics validation for PAT --- app/code/Magento/Catalog/Model/Product/Image.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/Catalog/Model/Product/Image.php b/app/code/Magento/Catalog/Model/Product/Image.php index c17254f99bfb4..c784abe7beb9d 100644 --- a/app/code/Magento/Catalog/Model/Product/Image.php +++ b/app/code/Magento/Catalog/Model/Product/Image.php @@ -894,7 +894,6 @@ public function getResizedImageInfo() $imageProperties = getimagesize($image); return $imageProperties; - } finally { if (empty($imageProperties)) { throw new NotLoadInfoImageException(__($errorMessage . $image)); From ccc35c24de7b27d5e3cd4e42bdbfd57f8ce6de9d Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky Date: Tue, 12 Dec 2017 16:46:35 +0200 Subject: [PATCH 544/653] magento/magento2#12285: The option false for mobile device don't work in product view page gallery --- .../Framework/Config/ConverterTest.php | 92 +++++++++++++++++++ .../Magento/Framework/Config/Converter.php | 4 +- 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 dev/tests/integration/testsuite/Magento/Framework/Config/ConverterTest.php diff --git a/dev/tests/integration/testsuite/Magento/Framework/Config/ConverterTest.php b/dev/tests/integration/testsuite/Magento/Framework/Config/ConverterTest.php new file mode 100644 index 0000000000000..f68e36d39a3bf --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Framework/Config/ConverterTest.php @@ -0,0 +1,92 @@ +loadXML($sourceString); + $actual = $this->converter->convert($document); + + self::assertEquals( + $expected, + $actual + ); + } + + /** + * Data provider for testParseVarElement. + * + * @return array + */ + public function parseVarElementDataProvider() + { + $sourceString = <<<'XML' + + + + some string + 1 + 0 + true + false + + +XML; + $expectedResult = [ + 'vars' => [ + 'Magento_Test' => [ + 'str' => 'some string', + 'int-1' => '1', + 'int-0' => '0', + 'bool-true' => true, + 'bool-false' => false + ] + ] + ]; + + return [ + [ + $sourceString, + $expectedResult + ], + ]; + } + + /** + * @inheritdoc + */ + protected function setUp() + { + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $this->converter = $this->objectManager->get(Converter::class); + } +} diff --git a/lib/internal/Magento/Framework/Config/Converter.php b/lib/internal/Magento/Framework/Config/Converter.php index 0401471f27ea5..380aeeee5a068 100644 --- a/lib/internal/Magento/Framework/Config/Converter.php +++ b/lib/internal/Magento/Framework/Config/Converter.php @@ -103,7 +103,9 @@ protected function parseVarElement(\DOMElement $node) } } if (!count($result)) { - $result = $node->nodeValue; + $result = (strtolower($node->nodeValue) !== 'true' && strtolower($node->nodeValue) !== 'false') + ? $node->nodeValue + : filter_var($node->nodeValue, FILTER_VALIDATE_BOOLEAN); } return $result; } From e49c198d24b09d40f151e5ac7ffad1801db6c5a3 Mon Sep 17 00:00:00 2001 From: Stanislav Lopukhov Date: Tue, 12 Dec 2017 16:48:43 +0200 Subject: [PATCH 545/653] MAGETWO-81090: Run benchmark in multithread mode --- setup/src/Magento/Setup/Fixtures/FixtureModel.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup/src/Magento/Setup/Fixtures/FixtureModel.php b/setup/src/Magento/Setup/Fixtures/FixtureModel.php index f9a1482f2db9e..bb4f8948bf5d0 100644 --- a/setup/src/Magento/Setup/Fixtures/FixtureModel.php +++ b/setup/src/Magento/Setup/Fixtures/FixtureModel.php @@ -65,11 +65,11 @@ class FixtureModel */ private $config; - private $configurationFixtureInstanceClassName = 'Magento\Setup\Fixtures\ConfigsApplyFixture'; + private $configurationFixtureInstanceClassName = \Magento\Setup\Fixtures\ConfigsApplyFixture::class; private $configurationFixture; - private $indexerFixtureInstanceClassName = 'Magento\Setup\Fixtures\IndexersStatesApplyFixture'; + private $indexerFixtureInstanceClassName = \Magento\Setup\Fixtures\IndexersStatesApplyFixture::class; private $indexerFixture; From a0f205f3a8a8b7384c0b3e2929e06099d815a041 Mon Sep 17 00:00:00 2001 From: Andrii Lugovyi Date: Tue, 12 Dec 2017 17:24:43 +0200 Subject: [PATCH 546/653] MAGETWO-83365: Stabilize Frontend Pool for multi thread run --- .../Test/Unit/Fixtures/ConfigsApplyFixtureTest.php | 12 +++++++++--- .../Fixtures/IndexersStatesApplyFixtureTest.php | 13 ++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigsApplyFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigsApplyFixtureTest.php index 7622347aebb93..954ea4be82521 100644 --- a/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigsApplyFixtureTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigsApplyFixtureTest.php @@ -33,21 +33,27 @@ public function testExecute() $cacheMock = $this->createMock(\Magento\Framework\App\Cache::class); $valueMock = $this->createMock(\Magento\Framework\App\Config::class); + $configMock = $this->createMock(\Magento\Config\App\Config\Type\System::class); $objectManagerMock = $this->createMock(\Magento\Framework\ObjectManager\ObjectManager::class); - $objectManagerMock->expects($this->once()) + $objectManagerMock ->method('get') - ->will($this->returnValue($cacheMock)); + ->willReturnMap([ + [\Magento\Framework\App\CacheInterface::class, $cacheMock], + [\Magento\Config\App\Config\Type\System::class, $configMock] + ]); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->will($this->returnValue(['config' => $valueMock])); $this->fixtureModelMock - ->expects($this->once()) ->method('getObjectManager') ->will($this->returnValue($objectManagerMock)); + $cacheMock->method('clean'); + $configMock->method('clean'); + $this->model->execute(); } diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/IndexersStatesApplyFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/IndexersStatesApplyFixtureTest.php index 0298fc05116f6..3c8d30fb6dfcc 100644 --- a/setup/src/Magento/Setup/Test/Unit/Fixtures/IndexersStatesApplyFixtureTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/IndexersStatesApplyFixtureTest.php @@ -30,11 +30,23 @@ public function setUp() public function testExecute() { $cacheInterfaceMock = $this->createMock(\Magento\Framework\App\CacheInterface::class); + $indexerRegistryMock = $this->createMock(\Magento\Framework\Indexer\IndexerRegistry::class); + $indexerMock = $this->getMockForAbstractClass(\Magento\Framework\Indexer\IndexerInterface::class); + + $indexerRegistryMock->expects($this->once()) + ->method('get') + ->willReturn($indexerMock); + + $indexerMock->expects($this->once()) + ->method('setScheduled'); $objectManagerMock = $this->createMock(\Magento\Framework\ObjectManager\ObjectManager::class); $objectManagerMock->expects($this->once()) ->method('get') ->willReturn($cacheInterfaceMock); + $objectManagerMock->expects($this->once()) + ->method('create') + ->willReturn($indexerRegistryMock); $this->fixtureModelMock ->expects($this->once()) @@ -43,7 +55,6 @@ public function testExecute() 'indexer' => ['id' => 1] ]); $this->fixtureModelMock - ->expects($this->once()) ->method('getObjectManager') ->willReturn($objectManagerMock); From 5c36f9888bc39efbfe479adb0e11d2d49f94d715 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky Date: Tue, 12 Dec 2017 17:28:48 +0200 Subject: [PATCH 547/653] magento/magento2#12378: Regions list in Directory module for India --- .../Magento/Directory/Setup/UpgradeData.php | 80 ++++++++++++++++--- app/code/Magento/Directory/etc/module.xml | 2 +- 2 files changed, 71 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/Directory/Setup/UpgradeData.php b/app/code/Magento/Directory/Setup/UpgradeData.php index aa0f81a32fff0..ea7e36cfbee1f 100644 --- a/app/code/Magento/Directory/Setup/UpgradeData.php +++ b/app/code/Magento/Directory/Setup/UpgradeData.php @@ -41,23 +41,21 @@ public function __construct(Data $directoryData) public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context) { if (version_compare($context->getVersion(), '2.0.1', '<')) { - $this->addCroatia($setup); + $this->addCountry($setup, $this->getCroatianData()); + } + if (version_compare($context->getVersion(), '2.0.2', '<')) { + $this->addCountry($setup, $this->getIndianData()); } } /** - * Add Croatia and it's states to appropriate tables. + * Croatian states data. * - * @param ModuleDataSetupInterface $setup - * @return void + * @return array */ - private function addCroatia($setup) + private function getCroatianData() { - /** - * Fill table directory/country_region - * Fill table directory/country_region_name for en_US locale - */ - $data = [ + return [ ['HR', 'HR-01', 'Zagrebačka županija'], ['HR', 'HR-02', 'Krapinsko-zagorska županija'], ['HR', 'HR-03', 'Sisačko-moslavačka županija'], @@ -80,6 +78,68 @@ private function addCroatia($setup) ['HR', 'HR-20', 'Međimurska županija'], ['HR', 'HR-21', 'Grad Zagreb'] ]; + } + + /** + * Indian states data. + * + * @return array + */ + private function getIndianData() + { + return [ + ['IN', 'AN', 'Andaman and Nicobar Islands'], + ['IN', 'AP', 'Andhra Pradesh'], + ['IN', 'AR', 'Arunachal Pradesh'], + ['IN', 'AS', 'Assam'], + ['IN', 'BR', 'Bihar'], + ['IN', 'CH', 'Chandigarh'], + ['IN', 'CT', 'Chhattisgarh'], + ['IN', 'DN', 'Dadra and Nagar Haveli'], + ['IN', 'DD', 'Daman and Diu'], + ['IN', 'DL', 'Delhi'], + ['IN', 'GA', 'Goa'], + ['IN', 'GJ', 'Gujarat'], + ['IN', 'HR', 'Haryana'], + ['IN', 'HP', 'Himachal Pradesh'], + ['IN', 'JK', 'Jammu and Kashmir'], + ['IN', 'JH', 'Jharkhand'], + ['IN', 'KA', 'Karnataka'], + ['IN', 'KL', 'Kerala'], + ['IN', 'LD', 'Lakshadweep'], + ['IN', 'MP', 'Madhya Pradesh'], + ['IN', 'MH', 'Maharashtra'], + ['IN', 'MN', 'Manipur'], + ['IN', 'ML', 'Meghalaya'], + ['IN', 'MZ', 'Mizoram'], + ['IN', 'NL', 'Nagaland'], + ['IN', 'OR', 'Odisha'], + ['IN', 'PY', 'Puducherry'], + ['IN', 'PB', 'Punjab'], + ['IN', 'RJ', 'Rajasthan'], + ['IN', 'SK', 'Sikkim'], + ['IN', 'TN', 'Tamil Nadu'], + ['IN', 'TG', 'Telangana'], + ['IN', 'TR', 'Tripura'], + ['IN', 'UP', 'Uttar Pradesh'], + ['IN', 'UT', 'Uttarakhand'], + ['IN', 'WB', 'West Bengal'] + ]; + } + + /** + * Add country data to appropriate tables. + * + * @param ModuleDataSetupInterface $setup + * @param array $data + * @return void + */ + private function addCountry(ModuleDataSetupInterface $setup, array $data) + { + /** + * Fill table directory/country_region + * Fill table directory/country_region_name for en_US locale + */ foreach ($data as $row) { $bind = ['country_id' => $row[0], 'code' => $row[1], 'default_name' => $row[2]]; $setup->getConnection()->insert($setup->getTable('directory_country_region'), $bind); diff --git a/app/code/Magento/Directory/etc/module.xml b/app/code/Magento/Directory/etc/module.xml index 2711a91577a9a..a3735ca6ddde1 100644 --- a/app/code/Magento/Directory/etc/module.xml +++ b/app/code/Magento/Directory/etc/module.xml @@ -6,7 +6,7 @@ */ --> - + From 3747258db22d993e9150f4644a251a6eda857f90 Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Tue, 12 Dec 2017 18:27:40 +0200 Subject: [PATCH 548/653] 10814: magento/magento2#10814: Attribute repository resets sourceModel for new attributes. Disable ability to set custom sourceModel, backendModel and backendType during update with Attribute repository, as they depends on frontend input for user defined attributes. --- .../Model/Product/Attribute/Repository.php | 32 +++++++++++++------ .../Api/ProductAttributeRepositoryTest.php | 31 +++++++++++++++++- 2 files changed, 53 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Repository.php b/app/code/Magento/Catalog/Model/Product/Attribute/Repository.php index 270a2f229678b..f538d15a47424 100644 --- a/app/code/Magento/Catalog/Model/Product/Attribute/Repository.php +++ b/app/code/Magento/Catalog/Model/Product/Attribute/Repository.php @@ -118,6 +118,9 @@ public function save(\Magento\Catalog\Api\Data\ProductAttributeInterface $attrib $attribute->setAttributeId($existingModel->getAttributeId()); $attribute->setIsUserDefined($existingModel->getIsUserDefined()); $attribute->setFrontendInput($existingModel->getFrontendInput()); + if ($attribute->getIsUserDefined()) { + $this->processAttributeData($attribute); + } if (is_array($attribute->getFrontendLabels())) { $defaultFrontendLabel = $attribute->getDefaultFrontendLabel(); @@ -156,15 +159,7 @@ public function save(\Magento\Catalog\Api\Data\ProductAttributeInterface $attrib $this->validateCode($attribute->getAttributeCode()); $this->validateFrontendInput($attribute->getFrontendInput()); - $attribute->setBackendType( - $attribute->getBackendTypeByInput($attribute->getFrontendInput()) - ); - $attribute->setSourceModel( - $this->productHelper->getAttributeSourceModelByInputType($attribute->getFrontendInput()) - ); - $attribute->setBackendModel( - $this->productHelper->getAttributeBackendModelByInputType($attribute->getFrontendInput()) - ); + $this->processAttributeData($attribute); $attribute->setEntityTypeId( $this->eavConfig ->getEntityType(\Magento\Catalog\Api\Data\ProductAttributeInterface::ENTITY_TYPE_CODE) @@ -275,4 +270,23 @@ protected function validateFrontendInput($frontendInput) throw InputException::invalidFieldValue('frontend_input', $frontendInput); } } + + /** + * Process attribute data depends on attribute frontend input type. + * + * @param \Magento\Catalog\Api\Data\ProductAttributeInterface $attribute + * @return void + */ + private function processAttributeData(\Magento\Catalog\Api\Data\ProductAttributeInterface $attribute) + { + $attribute->setBackendType( + $attribute->getBackendTypeByInput($attribute->getFrontendInput()) + ); + $attribute->setSourceModel( + $this->productHelper->getAttributeSourceModelByInputType($attribute->getFrontendInput()) + ); + $attribute->setBackendModel( + $this->productHelper->getAttributeBackendModelByInputType($attribute->getFrontendInput()) + ); + } } diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeRepositoryTest.php index e48c5ad018db4..00b20ae8eecdb 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeRepositoryTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductAttributeRepositoryTest.php @@ -7,7 +7,6 @@ namespace Magento\Catalog\Api; use Magento\Framework\Webapi\Exception as HTTPExceptionCodes; -use Magento\TestFramework\Helper\Bootstrap; class ProductAttributeRepositoryTest extends \Magento\TestFramework\TestCase\WebapiAbstract { @@ -194,6 +193,36 @@ public function testUpdate() $this->assertEquals("Default Blue Updated", $result['options'][1]['label']); } + /** + * Test source model and backend type can not be changed to custom, as they depends on attribute frontend type. + * + * @magentoApiDataFixture Magento/Catalog/Model/Product/Attribute/_files/create_attribute_service.php + * @return void + */ + public function testUpdateAttributeSourceAndType() + { + $attributeCode = uniqid('label_attr_code'); + $attribute = $this->createAttribute($attributeCode); + $attributeData = [ + 'attribute' => [ + 'attribute_id' => $attribute['attribute_id'], + 'attribute_code' => $attributeCode, + 'entity_type_id' => 4, + 'is_required' => false, + 'frontend_input' => 'select', + 'source_model' => "Some/Custom/Source/Model", + 'backend_type' => 'varchar', + 'frontend_labels' => [ + ['store_id' => 1, 'label' => 'front_lbl_new'], + ], + ], + ]; + + $result = $this->updateAttribute($attributeCode, $attributeData); + $this->assertEquals(\Magento\Eav\Model\Entity\Attribute\Source\Table::class, $result['source_model']); + $this->assertEquals('int', $result['backend_type']); + } + /** * @magentoApiDataFixture Magento/Catalog/Model/Product/Attribute/_files/create_attribute_service.php */ From 2602e7ec18fd2f0bed5fefeee91a52b0fbde160e Mon Sep 17 00:00:00 2001 From: Tommy Quissens Date: Tue, 12 Dec 2017 22:40:37 +0100 Subject: [PATCH 549/653] fixed unit test for checkout configprovider --- .../Model/Checkout/ConfigProviderTest.php | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/app/code/Magento/Customer/Test/Unit/Model/Checkout/ConfigProviderTest.php b/app/code/Magento/Customer/Test/Unit/Model/Checkout/ConfigProviderTest.php index 011ba9091eaf2..6b4a3a4bc4d8e 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/Checkout/ConfigProviderTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/Checkout/ConfigProviderTest.php @@ -29,7 +29,7 @@ class ConfigProviderTest extends \PHPUnit\Framework\TestCase /** * @var UrlInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $urlBuilder; + protected $customerUrl; /** * @var ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject @@ -49,12 +49,9 @@ protected function setUp() '', false ); - $this->urlBuilder = $this->getMockForAbstractClass( - \Magento\Framework\UrlInterface::class, - [], - '', - false - ); + + $this->customerUrl = $this->createMock(\Magento\Customer\Model\Url::class); + $this->scopeConfig = $this->getMockForAbstractClass( \Magento\Framework\App\Config\ScopeConfigInterface::class, [], @@ -72,7 +69,7 @@ protected function setUp() ); $this->provider = new ConfigProvider( - $this->urlBuilder, + $this->customerUrl, $this->storeManager, $this->scopeConfig ); @@ -83,9 +80,8 @@ public function testGetConfigWithoutRedirect() $loginUrl = 'http://url.test/customer/login'; $baseUrl = 'http://base-url.test'; - $this->urlBuilder->expects($this->exactly(2)) - ->method('getUrl') - ->with(Url::ROUTE_ACCOUNT_LOGIN) + $this->customerUrl->expects($this->exactly(2)) + ->method('getLoginUrl') ->willReturn($loginUrl); $this->storeManager->expects($this->once()) ->method('getStore') @@ -112,9 +108,8 @@ public function testGetConfig() $loginUrl = 'http://base-url.test/customer/login'; $baseUrl = 'http://base-url.test'; - $this->urlBuilder->expects($this->exactly(2)) - ->method('getUrl') - ->with(Url::ROUTE_ACCOUNT_LOGIN) + $this->customerUrl->expects($this->exactly(2)) + ->method('getLoginUrl') ->willReturn($loginUrl); $this->storeManager->expects($this->once()) ->method('getStore') From bf40afa9414d35fe7f9125af8fc9c8042a054842 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky Date: Wed, 13 Dec 2017 10:21:19 +0200 Subject: [PATCH 550/653] magento/magento2#12285: The option false for mobile device don't work in product view page gallery --- .../testsuite/Magento/Framework/Config/ConverterTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev/tests/integration/testsuite/Magento/Framework/Config/ConverterTest.php b/dev/tests/integration/testsuite/Magento/Framework/Config/ConverterTest.php index f68e36d39a3bf..1d2e090d1923b 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Config/ConverterTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Config/ConverterTest.php @@ -49,6 +49,7 @@ public function testParseVarElement($sourceString, $expected) */ public function parseVarElementDataProvider() { + // @codingStandardsIgnoreStart $sourceString = <<<'XML' @@ -61,6 +62,7 @@ public function parseVarElementDataProvider() XML; + // @codingStandardsIgnoreEnd $expectedResult = [ 'vars' => [ 'Magento_Test' => [ From d29548fcb731511869c7dda4994b51541a02700b Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Wed, 13 Dec 2017 10:28:56 +0200 Subject: [PATCH 551/653] 10814: magento/magento2#10814: Attribute repository resets sourceModel for new attributes. Disable ability to set custom sourceModel, backendModel and backendType during update with Attribute repository, as they depends on frontend input for user defined attributes. --- app/code/Magento/Catalog/Model/Product/Attribute/Repository.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Repository.php b/app/code/Magento/Catalog/Model/Product/Attribute/Repository.php index f538d15a47424..c19efac12ae0e 100644 --- a/app/code/Magento/Catalog/Model/Product/Attribute/Repository.php +++ b/app/code/Magento/Catalog/Model/Product/Attribute/Repository.php @@ -272,7 +272,7 @@ protected function validateFrontendInput($frontendInput) } /** - * Process attribute data depends on attribute frontend input type. + * Process attribute data based on attribute frontend input type. * * @param \Magento\Catalog\Api\Data\ProductAttributeInterface $attribute * @return void From b8232c5d957b25cbb0c902f4928349617803b488 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky Date: Wed, 13 Dec 2017 11:26:26 +0200 Subject: [PATCH 552/653] magento/magento2#12285: The option false for mobile device don't work in product view page gallery --- lib/internal/Magento/Framework/Config/Converter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/Magento/Framework/Config/Converter.php b/lib/internal/Magento/Framework/Config/Converter.php index 380aeeee5a068..3e66f641b8697 100644 --- a/lib/internal/Magento/Framework/Config/Converter.php +++ b/lib/internal/Magento/Framework/Config/Converter.php @@ -103,7 +103,7 @@ protected function parseVarElement(\DOMElement $node) } } if (!count($result)) { - $result = (strtolower($node->nodeValue) !== 'true' && strtolower($node->nodeValue) !== 'false') + $result = (strtolower($node->nodeValue) !== 'true' && strtolower($node->nodeValue) !== 'false') ? $node->nodeValue : filter_var($node->nodeValue, FILTER_VALIDATE_BOOLEAN); } From c27a56a5d1527ffb3a66a375fc486675d716d54b Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky Date: Wed, 13 Dec 2017 11:36:25 +0200 Subject: [PATCH 553/653] magento/magento2#12378: Regions list in Directory module for India --- app/code/Magento/Directory/Setup/UpgradeData.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/code/Magento/Directory/Setup/UpgradeData.php b/app/code/Magento/Directory/Setup/UpgradeData.php index ea7e36cfbee1f..4ee9ea33673d7 100644 --- a/app/code/Magento/Directory/Setup/UpgradeData.php +++ b/app/code/Magento/Directory/Setup/UpgradeData.php @@ -41,10 +41,10 @@ public function __construct(Data $directoryData) public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context) { if (version_compare($context->getVersion(), '2.0.1', '<')) { - $this->addCountry($setup, $this->getCroatianData()); + $this->addCountryRegions($setup, $this->getDataForCroatia()); } if (version_compare($context->getVersion(), '2.0.2', '<')) { - $this->addCountry($setup, $this->getIndianData()); + $this->addCountryRegions($setup, $this->getDataForIndia()); } } @@ -53,7 +53,7 @@ public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface * * @return array */ - private function getCroatianData() + private function getDataForCroatia() { return [ ['HR', 'HR-01', 'Zagrebačka županija'], @@ -85,7 +85,7 @@ private function getCroatianData() * * @return array */ - private function getIndianData() + private function getDataForIndia() { return [ ['IN', 'AN', 'Andaman and Nicobar Islands'], @@ -128,13 +128,13 @@ private function getIndianData() } /** - * Add country data to appropriate tables. + * Add country regions data to appropriate tables. * * @param ModuleDataSetupInterface $setup * @param array $data * @return void */ - private function addCountry(ModuleDataSetupInterface $setup, array $data) + private function addCountryRegions(ModuleDataSetupInterface $setup, array $data) { /** * Fill table directory/country_region From 8e3348b908db6480dc5b050c068ab7de38d63007 Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov Date: Wed, 13 Dec 2017 11:42:57 +0200 Subject: [PATCH 554/653] magento/magento2#12259: Save and Duplicated product not working --- .../Magento/Catalog/Model/Product/Copier.php | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Copier.php b/app/code/Magento/Catalog/Model/Product/Copier.php index 39fb948579fcc..a7941ba5c0a79 100644 --- a/app/code/Magento/Catalog/Model/Product/Copier.php +++ b/app/code/Magento/Catalog/Model/Product/Copier.php @@ -1,18 +1,24 @@ productFactory = $productFactory; $this->copyConstructor = $copyConstructor; @@ -46,16 +52,16 @@ public function __construct( /** * Create product duplicate * - * @param \Magento\Catalog\Model\Product $product - * @return \Magento\Catalog\Model\Product + * @param Product $product + * @return Product */ - public function copy(\Magento\Catalog\Model\Product $product) + public function copy(Product $product) { $product->getWebsiteIds(); $product->getCategoryIds(); + $metadata = $this->getMetadataPool()->getMetadata(ProductInterface::class); - /** @var \Magento\Catalog\Model\Product $duplicate */ $duplicate = $this->productFactory->create(); $productData = $product->getData(); $productData = $this->removeStockItem($productData); @@ -93,27 +99,25 @@ public function copy(\Magento\Catalog\Model\Product $product) } /** - * @return Option\Repository + * @return OptionRepository * @deprecated 101.0.0 */ private function getOptionRepository() { if (null === $this->optionRepository) { - $this->optionRepository = \Magento\Framework\App\ObjectManager::getInstance() - ->get(\Magento\Catalog\Model\Product\Option\Repository::class); + $this->optionRepository = ObjectManager::getInstance()->get(OptionRepository::class); } return $this->optionRepository; } /** - * @return \Magento\Framework\EntityManager\MetadataPool + * @return MetadataPool * @deprecated 101.0.0 */ private function getMetadataPool() { if (null === $this->metadataPool) { - $this->metadataPool = \Magento\Framework\App\ObjectManager::getInstance() - ->get(\Magento\Framework\EntityManager\MetadataPool::class); + $this->metadataPool = ObjectManager::getInstance()->get(MetadataPool::class); } return $this->metadataPool; } From c7abab1d2351d8c6dad59d5bb153f23924ae2e6d Mon Sep 17 00:00:00 2001 From: Tomasz Gregorczyk Date: Wed, 13 Dec 2017 11:08:59 +0100 Subject: [PATCH 555/653] Fixes #12660 invalid parameter configuration provided for argument --- .../Magento/Framework/View/Element/UiComponentFactory.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/internal/Magento/Framework/View/Element/UiComponentFactory.php b/lib/internal/Magento/Framework/View/Element/UiComponentFactory.php index 94d84dd0560df..93fe88a30f065 100755 --- a/lib/internal/Magento/Framework/View/Element/UiComponentFactory.php +++ b/lib/internal/Magento/Framework/View/Element/UiComponentFactory.php @@ -147,6 +147,14 @@ protected function createChildComponent( } $components = array_filter($components); $componentArguments['components'] = $components; + + /** + * Prevent passing ACL restricted blocks to htmlContent constructor + */ + if (isset($componentArguments['block']) && !$componentArguments['block']) { + return null; + } + if (!isset($componentArguments['context'])) { $componentArguments['context'] = $renderContext; } From e5479b4e7b87b8ad22dc1ca8e4c33556999da5f2 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Tue, 26 Sep 2017 16:32:48 +0200 Subject: [PATCH 556/653] Add alternative usage to deprecation comment --- app/code/Magento/Checkout/Model/Cart.php | 3 ++- app/code/Magento/Checkout/Model/Cart/CartInterface.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Checkout/Model/Cart.php b/app/code/Magento/Checkout/Model/Cart.php index be5692a894865..c0ba9616754bb 100644 --- a/app/code/Magento/Checkout/Model/Cart.php +++ b/app/code/Magento/Checkout/Model/Cart.php @@ -13,9 +13,10 @@ /** * Shopping cart model + * * @api * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - * @deprecated 100.1.0 + * @deprecated 100.1.0 Use \Magento\Quote\Model\Quote instead */ class Cart extends DataObject implements CartInterface { diff --git a/app/code/Magento/Checkout/Model/Cart/CartInterface.php b/app/code/Magento/Checkout/Model/Cart/CartInterface.php index 2f4b679381740..890e6a5012ea5 100644 --- a/app/code/Magento/Checkout/Model/Cart/CartInterface.php +++ b/app/code/Magento/Checkout/Model/Cart/CartInterface.php @@ -12,7 +12,7 @@ * * @api * @author Magento Core Team - * @deprecated 100.1.0 + * @deprecated 100.1.0 Use \Magento\Quote\Model\Quote instead */ interface CartInterface { From 4d5ea55540002dcdfb47784943fab60c5f5dde07 Mon Sep 17 00:00:00 2001 From: gwharton Date: Wed, 13 Dec 2017 10:39:01 +0000 Subject: [PATCH 557/653] Updated Product Codes Updated product codes for Products I, O and 1 in accordance with DHL Document DHLIS1 - Products and Services Version 2.1 Legacy product codes, no longer listed in the above document left in place and not changed. http://www.dhl.co.uk/content/dam/downloads/uk/Express/PDFs/developer_centre/dhlis1_products_and_services.pdf --- app/code/Magento/Dhl/Model/Carrier.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Dhl/Model/Carrier.php b/app/code/Magento/Dhl/Model/Carrier.php index 45a97e2287827..41c00cb822ce4 100644 --- a/app/code/Magento/Dhl/Model/Carrier.php +++ b/app/code/Magento/Dhl/Model/Carrier.php @@ -607,8 +607,9 @@ public function getDhlProducts($doc) 'G' => __('Domestic economy select'), 'W' => __('Economy select'), 'I' => __('Break bulk economy'), + 'I' => __('Domestic express 9:00'), 'N' => __('Domestic express'), - 'O' => __('Others'), + 'O' => __('Domestic express 10:30'), 'R' => __('Globalmail business'), 'S' => __('Same day'), 'T' => __('Express 12:00'), @@ -616,7 +617,7 @@ public function getDhlProducts($doc) ]; $nonDocType = [ - '1' => __('Customer services'), + '1' => __('Domestic express 12:00'), '3' => __('Easy shop'), '4' => __('Jetline'), '8' => __('Express easy'), From 30a426bd996a5bb95e2bcf2a7a99ed02774a9171 Mon Sep 17 00:00:00 2001 From: gwharton Date: Wed, 13 Dec 2017 10:44:18 +0000 Subject: [PATCH 558/653] Removed old code "I" Old code "I" was not removed in initial commit for some reason. --- app/code/Magento/Dhl/Model/Carrier.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/code/Magento/Dhl/Model/Carrier.php b/app/code/Magento/Dhl/Model/Carrier.php index 41c00cb822ce4..a9bdc99e8dcdd 100644 --- a/app/code/Magento/Dhl/Model/Carrier.php +++ b/app/code/Magento/Dhl/Model/Carrier.php @@ -606,7 +606,6 @@ public function getDhlProducts($doc) 'L' => __('Express 10:30'), 'G' => __('Domestic economy select'), 'W' => __('Economy select'), - 'I' => __('Break bulk economy'), 'I' => __('Domestic express 9:00'), 'N' => __('Domestic express'), 'O' => __('Domestic express 10:30'), From a6abc596a1e5a6c901cc721393000e8e25e6dff5 Mon Sep 17 00:00:00 2001 From: gwharton Date: Wed, 13 Dec 2017 10:54:28 +0000 Subject: [PATCH 559/653] Updated i18n Added product codes to i18n --- app/code/Magento/Dhl/i18n/en_US.csv | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/code/Magento/Dhl/i18n/en_US.csv b/app/code/Magento/Dhl/i18n/en_US.csv index 90ec8b5f17a22..412f69af14b09 100644 --- a/app/code/Magento/Dhl/i18n/en_US.csv +++ b/app/code/Magento/Dhl/i18n/en_US.csv @@ -81,3 +81,6 @@ Size,Size "Show Method if Not Applicable","Show Method if Not Applicable" "Sort Order","Sort Order" Debug,Debug +Domestic express 9:00,Domestic express 9:00 +Domestic express 10:30,Domestic express 10:30 +Domestic express 12:00,Domestic express 12:00 From b422f2c8ad83127a725d12336c5bd287c745128d Mon Sep 17 00:00:00 2001 From: gwharton Date: Wed, 13 Dec 2017 10:57:21 +0000 Subject: [PATCH 560/653] Removed legacy codes from i18n These codes have been renamed, so entries removed from i18n --- app/code/Magento/Dhl/i18n/en_US.csv | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/code/Magento/Dhl/i18n/en_US.csv b/app/code/Magento/Dhl/i18n/en_US.csv index 412f69af14b09..27c36bb466b86 100644 --- a/app/code/Magento/Dhl/i18n/en_US.csv +++ b/app/code/Magento/Dhl/i18n/en_US.csv @@ -23,14 +23,11 @@ Europack,Europack "Express 10:30","Express 10:30" "Domestic economy select","Domestic economy select" "Economy select","Economy select" -"Break bulk economy","Break bulk economy" "Domestic express","Domestic express" -Others,Others "Globalmail business","Globalmail business" "Same day","Same day" "Express 12:00","Express 12:00" "Express envelope","Express envelope" -"Customer services","Customer services" Jetline,Jetline "Freight worldwide","Freight worldwide" "Jumbo box","Jumbo box" From 2ba87c689ef2a8d356ddd5a986a9fa2abd9e13ce Mon Sep 17 00:00:00 2001 From: gwharton Date: Wed, 13 Dec 2017 10:59:36 +0000 Subject: [PATCH 561/653] Fixed quotes around strings Added quotes around strings in i18n --- app/code/Magento/Dhl/i18n/en_US.csv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/Dhl/i18n/en_US.csv b/app/code/Magento/Dhl/i18n/en_US.csv index 27c36bb466b86..998cc51c63653 100644 --- a/app/code/Magento/Dhl/i18n/en_US.csv +++ b/app/code/Magento/Dhl/i18n/en_US.csv @@ -78,6 +78,6 @@ Size,Size "Show Method if Not Applicable","Show Method if Not Applicable" "Sort Order","Sort Order" Debug,Debug -Domestic express 9:00,Domestic express 9:00 -Domestic express 10:30,Domestic express 10:30 -Domestic express 12:00,Domestic express 12:00 +"Domestic express 9:00","Domestic express 9:00" +"Domestic express 10:30","Domestic express 10:30" +"Domestic express 12:00","Domestic express 12:00" From 5ed651b7e96318cacea484b8b3eef064ab6c96d3 Mon Sep 17 00:00:00 2001 From: Andrii Voskoboinikov Date: Wed, 13 Dec 2017 13:23:28 +0200 Subject: [PATCH 562/653] MAGETWO-83370: Fix products distribution in shared catalogs --- .../testsuite/Magento/Setup/Fixtures/FixtureModelTest.php | 2 +- .../Setup/Fixtures/FixturesAsserts/BundleProductsAssert.php | 4 +++- .../Fixtures/FixturesAsserts/ConfigurableProductsAssert.php | 4 +++- .../Magento/Setup/Fixtures/FixturesAsserts/ImagesAssert.php | 3 +++ .../Setup/Fixtures/FixturesAsserts/SimpleProductsAssert.php | 4 +++- 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixtureModelTest.php b/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixtureModelTest.php index 1320c5aa5844d..312f29898d709 100644 --- a/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixtureModelTest.php +++ b/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixtureModelTest.php @@ -118,7 +118,7 @@ public function testFixtureGeneration() foreach ($this->entityAsserts as $entityAssert) { try { - $entityAssert->assert(); + $this->assertTrue($entityAssert->assert()); } catch (\AssertionError $assertionError) { $this->assertTrue(false, $assertionError->getMessage()); } diff --git a/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/BundleProductsAssert.php b/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/BundleProductsAssert.php index 496dc1b5c8e43..ae8faab3897a5 100644 --- a/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/BundleProductsAssert.php +++ b/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/BundleProductsAssert.php @@ -48,7 +48,7 @@ public function __construct( /** * Asserts that generated bundled products are valid * - * @return void + * @return bool * @throws \Magento\Framework\Exception\NoSuchEntityException * @throws \AssertionError */ @@ -74,5 +74,7 @@ public function assert() throw new \AssertionError('Bundle option product links amount is wrong'); } } + + return true; } } diff --git a/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/ConfigurableProductsAssert.php b/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/ConfigurableProductsAssert.php index b7463f48d4bff..fce73b137763f 100644 --- a/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/ConfigurableProductsAssert.php +++ b/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/ConfigurableProductsAssert.php @@ -46,7 +46,7 @@ public function __construct( /** * Asserts that generated configurable products are valid * - * @return void + * @return bool * @throws \Magento\Framework\Exception\NoSuchEntityException * @throws \Magento\Framework\Exception\InputException * @throws \AssertionError @@ -86,5 +86,7 @@ public function assert() throw new \AssertionError('Configurable option values amount is wrong'); } } + + return true; } } diff --git a/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/ImagesAssert.php b/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/ImagesAssert.php index da86878996229..4c035b99ba738 100644 --- a/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/ImagesAssert.php +++ b/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/ImagesAssert.php @@ -70,6 +70,7 @@ public function __construct( /** * Performs assertions over images * + * @return bool * @throws \AssertionError */ public function assert() @@ -82,6 +83,8 @@ public function assert() $this->assertProductMediaAttributes($product); $this->assertProductImageExistsInFS($product); } + + return true; } /** diff --git a/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/SimpleProductsAssert.php b/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/SimpleProductsAssert.php index f43622f13680b..d3e5d2226a87c 100644 --- a/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/SimpleProductsAssert.php +++ b/dev/tests/integration/testsuite/Magento/Setup/Fixtures/FixturesAsserts/SimpleProductsAssert.php @@ -43,7 +43,7 @@ public function __construct( /** * Asserts that generated simple products are valid * - * @return void + * @return bool * @throws \Magento\Framework\Exception\NoSuchEntityException * @throws \AssertionError */ @@ -52,5 +52,7 @@ public function assert() $product = $this->productRepository->get(sprintf(SimpleProductsFixture::SKU_PATTERN, 1)); $this->productAssert->assertProductsCount(SimpleProductsFixture::SKU_PATTERN, 2); $this->productAssert->assertProductType('simple', $product); + + return true; } } From c27282c5c7c67fe5ea2c8e03fa99a9b029c54907 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky Date: Wed, 13 Dec 2017 14:08:34 +0200 Subject: [PATCH 563/653] magento/magento2#12084: Product csv import > fail on round brackets in image filename --- .../Model/Import/Product/Validator/Media.php | 2 +- .../Model/Import/_files/import_media_existing_images.csv | 2 +- .../Model/Import/_files/import_with_filesystem_images.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/Validator/Media.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/Validator/Media.php index d1fe1eee80e19..e6d6136498a62 100644 --- a/app/code/Magento/CatalogImportExport/Model/Import/Product/Validator/Media.php +++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/Validator/Media.php @@ -17,7 +17,7 @@ class Media extends AbstractImportValidator implements RowValidatorInterface */ const URL_REGEXP = '|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i'; - const PATH_REGEXP = '#^(?!.*[\\/]\.{2}[\\/])(?!\.{2}[\\/])[-\w.\\/]+$#'; + const PATH_REGEXP = '#^(?!.*[\\/]\.{2}[\\/])(?!\.{2}[\\/])[-\w.\\/()]+$#'; const ADDITIONAL_IMAGES = 'additional_images'; diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/import_media_existing_images.csv b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/import_media_existing_images.csv index a3e8f8e47ab08..1e7303d9b7308 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/import_media_existing_images.csv +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/import_media_existing_images.csv @@ -1,2 +1,2 @@ sku,store_view_code,attribute_set_code,product_type,categories,product_websites,name,description,short_description,weight,product_online,tax_class_name,visibility,price,special_price,special_price_from_date,special_price_to_date,url_key,meta_title,meta_keywords,meta_description,base_image,base_image_label,small_image,small_image_label,thumbnail_image,thumbnail_image_label,swatch_image,swatch_image_label1,created_at,updated_at,new_from_date,new_to_date,display_product_options_in,map_price,msrp_price,map_enabled,gift_message_available,custom_design,custom_design_from,custom_design_to,custom_layout_update,page_layout,product_options_container,msrp_display_actual_price_type,country_of_manufacture,additional_attributes,qty,out_of_stock_qty,use_config_min_qty,is_qty_decimal,allow_backorders,use_config_backorders,min_cart_qty,use_config_min_sale_qty,max_cart_qty,use_config_max_sale_qty,is_in_stock,notify_on_stock_below,use_config_notify_stock_qty,manage_stock,use_config_manage_stock,use_config_qty_increments,qty_increments,use_config_enable_qty_inc,enable_qty_increments,is_decimal_divided,website_id,related_skus,crosssell_skus,upsell_skus,additional_images,additional_image_labels,hide_from_product_page,custom_options,bundle_price_type,bundle_sku_type,bundle_price_view,bundle_weight_type,bundle_values,associated_skus -simple_new,,Default,simple,,base,New Product,,,,1,Taxable Goods,"Catalog, Search",10,,,,new-product,New Product,New Product,New Product ,magento_image.jpg,Image Label,magento_small_image.jpg,Small Image Label,magento_thumbnail.jpg,Thumbnail Label,magento_image.jpg,Image Label,10/20/15 07:05,10/20/15 07:05,,,Block after Info Column,,,,,,,,,,,,,"has_options=1,quantity_and_stock_status=In Stock,required_options=1",100,0,1,0,0,1,1,1,10000,1,1,1,1,1,0,1,1,0,0,0,1,,,,"magento_additional_image_one.jpg, magento_additional_image_two.jpg","Additional Image Label One,Additional Image Label Two",,,,,,,, +simple_new,,Default,simple,,base,New Product,,,,1,Taxable Goods,"Catalog, Search",10,,,,new-product,New Product,New Product,New Product ,magento_image(1).jpg,Image Label,magento_small_image.jpg,Small Image Label,magento_thumbnail.jpg,Thumbnail Label,magento_image(1).jpg,Image Label,10/20/15 07:05,10/20/15 07:05,,,Block after Info Column,,,,,,,,,,,,,"has_options=1,quantity_and_stock_status=In Stock,required_options=1",100,0,1,0,0,1,1,1,10000,1,1,1,1,1,0,1,1,0,0,0,1,,,,"magento_additional_image_one.jpg, magento_additional_image_two.jpg","Additional Image Label One,Additional Image Label Two",,,,,,,, diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/import_with_filesystem_images.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/import_with_filesystem_images.php index 04b3092c8fa8a..23e8fbd5d0f3d 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/import_with_filesystem_images.php +++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/_files/import_with_filesystem_images.php @@ -20,7 +20,7 @@ $items = [ [ 'source' => __DIR__ . '/../../../../../Magento/Catalog/_files/magento_image.jpg', - 'dest' => $dirPath . '/magento_image.jpg', + 'dest' => $dirPath . '/magento_image(1).jpg', ], [ 'source' => __DIR__ . '/../../../../../Magento/Catalog/_files/magento_small_image.jpg', From 2629726dd4754b5fd50eebb4860794b7931fdd88 Mon Sep 17 00:00:00 2001 From: serhii balko Date: Wed, 13 Dec 2017 14:11:24 +0200 Subject: [PATCH 564/653] #11743: [GitHub] AbstractPdf - ZendException font is not set --- .../Sales/Model/Order/Pdf/AbstractPdf.php | 62 +++++++++----- .../Sales/Model/Order/Pdf/AbstractTest.php | 85 +++++++++++++++++++ 2 files changed, 128 insertions(+), 19 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractTest.php diff --git a/app/code/Magento/Sales/Model/Order/Pdf/AbstractPdf.php b/app/code/Magento/Sales/Model/Order/Pdf/AbstractPdf.php index 850e9cf08413b..1a25ff7bfdb80 100644 --- a/app/code/Magento/Sales/Model/Order/Pdf/AbstractPdf.php +++ b/app/code/Magento/Sales/Model/Order/Pdf/AbstractPdf.php @@ -953,7 +953,7 @@ public function newPage(array $settings = []) * feed int; x position (required) * font string; font style, optional: bold, italic, regular * font_file string; path to font file (optional for use your custom font) - * font_size int; font size (default 7) + * font_size int; font size (default 10) * align string; text align (also see feed parametr), optional left, right * height int;line spacing (default 10) * @@ -1005,24 +1005,8 @@ public function drawLineBlocks(\Zend_Pdf_Page $page, array $draw, array $pageSet foreach ($lines as $line) { $maxHeight = 0; foreach ($line as $column) { - $fontSize = empty($column['font_size']) ? 10 : $column['font_size']; - if (!empty($column['font_file'])) { - $font = \Zend_Pdf_Font::fontWithPath($column['font_file']); - $page->setFont($font, $fontSize); - } else { - $fontStyle = empty($column['font']) ? 'regular' : $column['font']; - switch ($fontStyle) { - case 'bold': - $font = $this->_setFontBold($page, $fontSize); - break; - case 'italic': - $font = $this->_setFontItalic($page, $fontSize); - break; - default: - $font = $this->_setFontRegular($page, $fontSize); - break; - } - } + $font = $this->setFont($page, $column); + $fontSize = $column['font_size']; if (!is_array($column['text'])) { $column['text'] = [$column['text']]; @@ -1033,6 +1017,8 @@ public function drawLineBlocks(\Zend_Pdf_Page $page, array $draw, array $pageSet foreach ($column['text'] as $part) { if ($this->y - $lineSpacing < 15) { $page = $this->newPage($pageSettings); + $font = $this->setFont($page, $column); + $fontSize = $column['font_size']; } $feed = $column['feed']; @@ -1066,4 +1052,42 @@ public function drawLineBlocks(\Zend_Pdf_Page $page, array $draw, array $pageSet return $page; } + + /** + * Set page font. + * + * column array format + * font string; font style, optional: bold, italic, regular + * font_file string; path to font file (optional for use your custom font) + * font_size int; font size (default 10) + * + * @param \Zend_Pdf_Page $page + * @param array $column + * @return \Zend_Pdf_Resource_Font + * @throws \Zend_Pdf_Exception + */ + private function setFont($page, &$column) + { + $fontSize = empty($column['font_size']) ? 10 : $column['font_size']; + $column['font_size'] = $fontSize; + if (!empty($column['font_file'])) { + $font = \Zend_Pdf_Font::fontWithPath($column['font_file']); + $page->setFont($font, $fontSize); + } else { + $fontStyle = empty($column['font']) ? 'regular' : $column['font']; + switch ($fontStyle) { + case 'bold': + $font = $this->_setFontBold($page, $fontSize); + break; + case 'italic': + $font = $this->_setFontItalic($page, $fontSize); + break; + default: + $font = $this->_setFontRegular($page, $fontSize); + break; + } + } + + return $font; + } } diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractTest.php new file mode 100644 index 0000000000000..2980b3a0cda7b --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractTest.php @@ -0,0 +1,85 @@ +create(\Magento\Payment\Helper\Data::class); + $string = $objectManager->create(\Magento\Framework\Stdlib\StringUtils::class); + $scopeConfig = $objectManager->create(\Magento\Framework\App\Config\ScopeConfigInterface::class); + $filesystem = $objectManager->create(\Magento\Framework\Filesystem::class); + $config = $objectManager->create(\Magento\Sales\Model\Order\Pdf\Config::class); + $pdfTotalFactory = $objectManager->create(\Magento\Sales\Model\Order\Pdf\Total\Factory::class); + $pdfItemsFactory = $objectManager->create(\Magento\Sales\Model\Order\Pdf\ItemsFactory::class); + $locale = $objectManager->create(\Magento\Framework\Stdlib\DateTime\TimezoneInterface::class); + $translate = $objectManager->create(\Magento\Framework\Translate\Inline\StateInterface::class); + $addressRenderer = $objectManager->create(\Magento\Sales\Model\Order\Address\Renderer::class); + + // Test model + /** @var \Magento\Sales\Model\Order\Pdf\AbstractPdf|MockObject $model */ + $model = $this->getMockForAbstractClass( + \Magento\Sales\Model\Order\Pdf\AbstractPdf::class, + [ + $paymentData, + $string, + $scopeConfig, + $filesystem, + $config, + $pdfTotalFactory, + $pdfItemsFactory, + $locale, + $translate, + $addressRenderer, + ], + '', + true, + true, + true, + ['getPdf', '_getPdf'] + ); + $pdf = new \Zend_Pdf(); + $model->expects($this->any())->method('getPdf')->will($this->returnValue($pdf)); + $model->expects($this->any())->method('_getPdf')->will($this->returnValue($pdf)); + + /** Generate multiline block, that cover more than one page */ + $lines = []; + for ($lineNumber = 1; $lineNumber <= 100; $lineNumber++ ) { + $lines[] = [[ + 'feed' => 0, + 'font_size' => 10, + 'text' => 'Text line ' . $lineNumber, + ]]; + } + $draw = [[ + 'height' => 12, + 'lines' => $lines, + ]]; + + $page = $model->newPage(['page_size' => \Zend_Pdf_Page::SIZE_A4]); + + $model->drawLineBlocks($page, $draw); + $this->assertEquals( + 3, + count($pdf->pages) + ); + } +} From 540972ed80dec6c0ff9f2ac5e9a819f0c61fb17f Mon Sep 17 00:00:00 2001 From: Andrii Dimov Date: Wed, 13 Dec 2017 15:21:29 +0200 Subject: [PATCH 565/653] MAGETWO-85050: Prepare codebase for 2.2.4 --- composer.json | 2 +- composer.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index eb6d57902b416..affd28d1fe133 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "magento/magento2ce", "description": "Magento 2 (Open Source)", "type": "project", - "version": "2.2.2", + "version": "2.2.4-dev", "license": [ "OSL-3.0", "AFL-3.0" diff --git a/composer.lock b/composer.lock index 450696bc3efa6..0f16d512409c0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "596ceba5e0eec6618bd6e3c2e3c1b2df", + "content-hash": "a6f1ec648029ca7b40870c3356fa955c", "packages": [ { "name": "braintree/braintree_php", From 1ef474cb75650e68f4ea7f13e9704a237eab9fe7 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Wed, 13 Dec 2017 15:35:12 +0200 Subject: [PATCH 566/653] magento/magento2#12063 --- .../Aggregation/DataProvider/QueryBuilder.php | 105 ++++++------------ .../DataProvider/QueryBuilderTest.php | 4 +- 2 files changed, 38 insertions(+), 71 deletions(-) diff --git a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilder.php b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilder.php index d27b6dd265833..ca077ef7227d5 100644 --- a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilder.php +++ b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilder.php @@ -9,7 +9,6 @@ use Magento\CatalogInventory\Model\Configuration as CatalogInventoryConfiguration; use Magento\CatalogInventory\Model\Stock; use Magento\Eav\Model\Entity\Attribute\AbstractAttribute; -use Magento\Framework\App\ObjectManager; use Magento\Framework\App\ResourceConnection; use Magento\Framework\App\ScopeResolverInterface; use Magento\Framework\DB\Adapter\AdapterInterface; @@ -17,7 +16,7 @@ use Magento\Framework\Search\Request\BucketInterface; /** - * Class for query building for Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation\DataProvider. + * Attribute query builder */ class QueryBuilder { @@ -36,27 +35,19 @@ class QueryBuilder */ private $inventoryConfig; - /** - * @var AdapterInterface - */ - private $connection; - /** * @param ResourceConnection $resource * @param ScopeResolverInterface $scopeResolver - * @param CatalogInventoryConfiguration|null $inventoryConfig + * @param CatalogInventoryConfiguration $inventoryConfig */ public function __construct( ResourceConnection $resource, ScopeResolverInterface $scopeResolver, - CatalogInventoryConfiguration $inventoryConfig = null + CatalogInventoryConfiguration $inventoryConfig ) { $this->resource = $resource; $this->scopeResolver = $scopeResolver; - $this->inventoryConfig = $inventoryConfig ?: ObjectManager::getInstance()->get( - CatalogInventoryConfiguration::class - ); - $this->connection = $resource->getConnection(); + $this->inventoryConfig = $inventoryConfig; } /** @@ -71,12 +62,11 @@ public function __construct( */ public function build( AbstractAttribute $attribute, - $tableName, - $currentScope, - $customerGroupId - ) { - $select = $this->getSelect(); - + string $tableName, + int $currentScope, + int $customerGroupId + ) : Select { + $select = $this->resource->getConnection()->select(); $select->joinInner( ['entities' => $tableName], 'main_table.entity_id = entities.entity_id', @@ -84,73 +74,60 @@ public function build( ); if ($attribute->getAttributeCode() === 'price') { - /** @var \Magento\Store\Model\Store $store */ - $store = $this->scopeResolver->getScope($currentScope); - if (!$store instanceof \Magento\Store\Model\Store) { - throw new \RuntimeException('Illegal scope resolved'); - } - - $select = $this->buildIfPrice( - $store->getWebsiteId(), - $customerGroupId, - $select - ); - } else { - $currentScopeId = $this->scopeResolver->getScope($currentScope) - ->getId(); - - $select = $this->buildIfNotPrice( - $currentScopeId, - $attribute, - $select - ); + return $this->buildQueryForPriceAttribute($currentScope, $customerGroupId, $select); } - return $select; + return $this->buildQueryForAttribute($currentScope, $attribute, $select); } /** - * Build select if it is price attribute. + * Build select for price attribute. * - * @param int $websiteId + * @param int $currentScope * @param int $customerGroupId * @param Select $select * * @return Select */ - private function buildIfPrice( - $websiteId, - $customerGroupId, + private function buildQueryForPriceAttribute( + int $currentScope, + int $customerGroupId, Select $select - ) { + ) : Select { + /** @var \Magento\Store\Model\Store $store */ + $store = $this->scopeResolver->getScope($currentScope); + if (!$store instanceof \Magento\Store\Model\Store) { + throw new \RuntimeException('Illegal scope resolved'); + } + $table = $this->resource->getTableName('catalog_product_index_price'); $select->from(['main_table' => $table], null) ->columns([BucketInterface::FIELD_VALUE => 'main_table.min_price']) ->where('main_table.customer_group_id = ?', $customerGroupId) - ->where('main_table.website_id = ?', $websiteId); + ->where('main_table.website_id = ?', $store->getWebsiteId()); return $select; } /** - * Build select if it is not price attribute. + * Build select for attribute. * - * @param int $currentScopeId + * @param int $currentScope * @param AbstractAttribute $attribute * @param Select $select * * @return Select */ - private function buildIfNotPrice( - $currentScopeId, + private function buildQueryForAttribute( + int $currentScope, AbstractAttribute $attribute, Select $select - ) { + ) : Select { + $currentScopeId = $this->scopeResolver->getScope($currentScope)->getId(); $table = $this->resource->getTableName( 'catalog_product_index_eav' . ($attribute->getBackendType() === 'decimal' ? '_decimal' : '') ); - $subSelect = $select; - $subSelect->from(['main_table' => $table], ['main_table.entity_id', 'main_table.value']) + $select->from(['main_table' => $table], ['main_table.entity_id', 'main_table.value']) ->distinct() ->joinLeft( ['stock_index' => $this->resource->getTableName('cataloginventory_stock_status')], @@ -161,23 +138,11 @@ private function buildIfNotPrice( ->where('main_table.store_id = ? ', $currentScopeId); if (!$this->inventoryConfig->isShowOutOfStock($currentScopeId)) { - $subSelect->where('stock_index.stock_status = ?', Stock::STOCK_IN_STOCK); + $select->where('stock_index.stock_status = ?', Stock::STOCK_IN_STOCK); } - $parentSelect = $this->getSelect(); - $parentSelect->from(['main_table' => $subSelect], ['main_table.value']); - $select = $parentSelect; - - return $select; - } - - /** - * Get empty select. - * - * @return Select - */ - private function getSelect() - { - return $this->connection->select(); + $parentSelect = $this->resource->getConnection()->select(); + $parentSelect->from(['main_table' => $select], ['main_table.value']); + return $parentSelect; } } diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilderTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilderTest.php index 3a5e2838ef278..b52664df749fe 100644 --- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilderTest.php +++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Aggregation/DataProvider/QueryBuilderTest.php @@ -53,7 +53,9 @@ protected function setUp() $this->adapterMock = $this->createMock(AdapterInterface::class); $this->inventoryConfigMock = $this->createMock(CatalogInventoryConfiguration::class); - $this->resourceConnectionMock->expects($this->once())->method('getConnection')->willReturn($this->adapterMock); + $this->resourceConnectionMock->expects($this->atLeastOnce()) + ->method('getConnection') + ->willReturn($this->adapterMock); $this->model = new QueryBuilder( $this->resourceConnectionMock, From 5e1fc304a270f394111d5fc0a5fbd06c85645977 Mon Sep 17 00:00:00 2001 From: Andrii Lugovyi Date: Wed, 13 Dec 2017 15:41:29 +0200 Subject: [PATCH 567/653] MAGETWO-83365: Stabilize Frontend Pool for multi thread run --- app/code/Magento/Catalog/Model/Product/Image.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Image.php b/app/code/Magento/Catalog/Model/Product/Image.php index c784abe7beb9d..770531f1768dc 100644 --- a/app/code/Magento/Catalog/Model/Product/Image.php +++ b/app/code/Magento/Catalog/Model/Product/Image.php @@ -883,7 +883,6 @@ protected function _fileExists($filename) */ public function getResizedImageInfo() { - $errorMessage = 'Can\'t get information about the picture: '; try { if ($this->isBaseFilePlaceholder() == true) { $image = $this->imageAsset->getSourceFile(); @@ -896,7 +895,7 @@ public function getResizedImageInfo() return $imageProperties; } finally { if (empty($imageProperties)) { - throw new NotLoadInfoImageException(__($errorMessage . $image)); + throw new NotLoadInfoImageException(__('Can\'t get information about the picture: ' . $image)); } } } From 2c4fa0771676b562f84de41069d64aff648172ba Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Wed, 13 Dec 2017 16:11:41 +0200 Subject: [PATCH 568/653] 6965: magento/magento2#6965: \Magento\Directory\Model\PriceCurrency::format() fails without conversion rate --- .../Magento/Directory/Model/PriceCurrency.php | 11 ++++- .../Directory/Model/PriceCurrencyTest.php | 43 +++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Directory/Model/PriceCurrencyTest.php diff --git a/app/code/Magento/Directory/Model/PriceCurrency.php b/app/code/Magento/Directory/Model/PriceCurrency.php index a211242d377f3..c0c8e949ea4da 100644 --- a/app/code/Magento/Directory/Model/PriceCurrency.php +++ b/app/code/Magento/Directory/Model/PriceCurrency.php @@ -77,8 +77,15 @@ public function format( $scope = null, $currency = null ) { - return $this->getCurrency($scope, $currency) - ->formatPrecision($amount, $precision, [], $includeContainer); + if ($currency instanceof Currency) { + $currentCurrency = $currency; + } elseif (is_string($currency)) { + $currentCurrency = $this->currencyFactory->create()->load($currency); + } else { + $currentCurrency = $this->getStore($scope)->getCurrentCurrency(); + } + + return $currentCurrency->formatPrecision($amount, $precision, [], $includeContainer); } /** diff --git a/dev/tests/integration/testsuite/Magento/Directory/Model/PriceCurrencyTest.php b/dev/tests/integration/testsuite/Magento/Directory/Model/PriceCurrencyTest.php new file mode 100644 index 0000000000000..fd6b8577eaf98 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Directory/Model/PriceCurrencyTest.php @@ -0,0 +1,43 @@ +priceCurrency = Bootstrap::getObjectManager()->get(PriceCurrency::class); + } + + /** + * Check PriceCurrency::format() doesn't depend on currency rate configuration. + * @return void + */ + public function testFormat() + { + self::assertSame( + 'AFN10.00', + $this->priceCurrency->format(10, true, 2, null, 'AFN') + ); + } +} From 7982b300b4d7e20f60f0873c246739e02adbd390 Mon Sep 17 00:00:00 2001 From: RomanKis Date: Wed, 13 Dec 2017 16:21:59 +0200 Subject: [PATCH 569/653] magento/magento2#12656: Checkout: Whitespace in front of coupon code causes "Coupon code is not valid" --- .../Magento/Quote/Model/CouponManagement.php | 1 + .../Quote/Api/CouponManagementTest.php | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/app/code/Magento/Quote/Model/CouponManagement.php b/app/code/Magento/Quote/Model/CouponManagement.php index 7701e41e0b55a..87398ad36cfab 100644 --- a/app/code/Magento/Quote/Model/CouponManagement.php +++ b/app/code/Magento/Quote/Model/CouponManagement.php @@ -50,6 +50,7 @@ public function get($cartId) */ public function set($cartId, $couponCode) { + $couponCode = trim($couponCode); /** @var \Magento\Quote\Model\Quote $quote */ $quote = $this->quoteRepository->getActive($cartId); if (!$quote->getItemsCount()) { diff --git a/dev/tests/api-functional/testsuite/Magento/Quote/Api/CouponManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Quote/Api/CouponManagementTest.php index f50276fd6ce60..c58b5c1654470 100644 --- a/dev/tests/api-functional/testsuite/Magento/Quote/Api/CouponManagementTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Quote/Api/CouponManagementTest.php @@ -297,4 +297,46 @@ public function testSetMyCouponSuccess() $this->assertEquals($quoteWithCoupon->getCouponCode(), $couponCode); } + + /** + * @magentoApiDataFixture Magento/Sales/_files/quote.php + * @magentoApiDataFixture Magento/Checkout/_files/discount_10percent.php + */ + public function testSetCouponWihSpaces() + { + /** @var \Magento\Quote\Model\Quote $quote */ + $quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class); + $quote->load('test01', 'reserved_order_id'); + $cartId = $quote->getId(); + /** @var \Magento\SalesRule\Model\Rule $salesRule */ + $salesRule = $this->objectManager->create(\Magento\SalesRule\Model\Rule::class); + $salesRuleId = $this->objectManager->get(\Magento\Framework\Registry::class) + ->registry('Magento/Checkout/_file/discount_10percent'); + $salesRule->load($salesRuleId); + $couponCode = $salesRule->getPrimaryCoupon()->getCode() ; + $serviceInfo = [ + 'rest' => [ + 'resourcePath' => self::RESOURCE_PATH . $cartId . '/coupons/' + . rawurlencode(' ') . $couponCode . rawurlencode(' '), + 'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_PUT, + ], + 'soap' => [ + 'service' => self::SERVICE_NAME, + 'serviceVersion' => self::SERVICE_VERSION, + 'operation' => self::SERVICE_NAME . 'Set', + ], + ]; + + $requestData = [ + "cartId" => $cartId, + "couponCode" => $couponCode, + ]; + + $this->assertTrue($this->_webApiCall($serviceInfo, $requestData)); + + $quoteWithCoupon = $this->objectManager->create(\Magento\Quote\Model\Quote::class); + $quoteWithCoupon->load('test01', 'reserved_order_id'); + + $this->assertEquals($quoteWithCoupon->getCouponCode(), $couponCode); + } } From b326714be1661f917b23fea90576512b9c631f99 Mon Sep 17 00:00:00 2001 From: serhii balko Date: Wed, 13 Dec 2017 16:35:45 +0200 Subject: [PATCH 570/653] #11743: [GitHub] AbstractPdf - ZendException font is not set --- .../Model/Order/Pdf/{AbstractTest.php => AbstractPdfTest.php} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/{AbstractTest.php => AbstractPdfTest.php} (96%) diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php similarity index 96% rename from dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractTest.php rename to dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php index 2980b3a0cda7b..387b8ced7dfb0 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php @@ -12,7 +12,7 @@ * * @see \Magento\Sales\Model\Order\Pdf\AbstarctPdf */ -class AbstractTest extends \PHPUnit\Framework\TestCase +class AbstractPdfTest extends \PHPUnit\Framework\TestCase { /** * Tests Draw lines method. @@ -62,7 +62,7 @@ public function testDrawLineBlocks() /** Generate multiline block, that cover more than one page */ $lines = []; - for ($lineNumber = 1; $lineNumber <= 100; $lineNumber++ ) { + for($lineNumber = 1; $lineNumber <= 100; $lineNumber++) { $lines[] = [[ 'feed' => 0, 'font_size' => 10, From 5f4363b243fa0c297a8be2cab4c00f0d806b14c1 Mon Sep 17 00:00:00 2001 From: serhii balko Date: Wed, 13 Dec 2017 16:37:38 +0200 Subject: [PATCH 571/653] #11743: [GitHub] AbstractPdf - ZendException font is not set --- .../testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php index 387b8ced7dfb0..a41a4ceb8ae5f 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php @@ -11,6 +11,7 @@ * Tests Sales Order PDF abstract model. * * @see \Magento\Sales\Model\Order\Pdf\AbstarctPdf + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class AbstractPdfTest extends \PHPUnit\Framework\TestCase { From f99ae4ddf32873bed7e6e1cb5a2237a84fe4ff16 Mon Sep 17 00:00:00 2001 From: gwharton Date: Wed, 13 Dec 2017 15:51:15 +0000 Subject: [PATCH 572/653] Reverted change for product code "O" Product code "O" changed in error. This reverts the change. --- app/code/Magento/Dhl/Model/Carrier.php | 2 +- app/code/Magento/Dhl/i18n/en_US.csv | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Dhl/Model/Carrier.php b/app/code/Magento/Dhl/Model/Carrier.php index a9bdc99e8dcdd..9a26efee744d5 100644 --- a/app/code/Magento/Dhl/Model/Carrier.php +++ b/app/code/Magento/Dhl/Model/Carrier.php @@ -608,7 +608,7 @@ public function getDhlProducts($doc) 'W' => __('Economy select'), 'I' => __('Domestic express 9:00'), 'N' => __('Domestic express'), - 'O' => __('Domestic express 10:30'), + 'O' => __('Others'), 'R' => __('Globalmail business'), 'S' => __('Same day'), 'T' => __('Express 12:00'), diff --git a/app/code/Magento/Dhl/i18n/en_US.csv b/app/code/Magento/Dhl/i18n/en_US.csv index 998cc51c63653..a5532c2cea963 100644 --- a/app/code/Magento/Dhl/i18n/en_US.csv +++ b/app/code/Magento/Dhl/i18n/en_US.csv @@ -24,6 +24,7 @@ Europack,Europack "Domestic economy select","Domestic economy select" "Economy select","Economy select" "Domestic express","Domestic express" +Others,Others "Globalmail business","Globalmail business" "Same day","Same day" "Express 12:00","Express 12:00" @@ -79,5 +80,4 @@ Size,Size "Sort Order","Sort Order" Debug,Debug "Domestic express 9:00","Domestic express 9:00" -"Domestic express 10:30","Domestic express 10:30" "Domestic express 12:00","Domestic express 12:00" From 07efe6497a63dfa63c3eece5f1ec63f50d908825 Mon Sep 17 00:00:00 2001 From: Andrii Lugovyi Date: Wed, 13 Dec 2017 17:58:05 +0200 Subject: [PATCH 573/653] MAGETWO-83365: Stabilize Frontend Pool for multi thread run --- app/code/Magento/Catalog/Model/Product/Image.php | 2 +- .../Model/Product/Image/NotLoadInfoImageException.php | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Product/Image.php b/app/code/Magento/Catalog/Model/Product/Image.php index 770531f1768dc..91f589f9b5bd7 100644 --- a/app/code/Magento/Catalog/Model/Product/Image.php +++ b/app/code/Magento/Catalog/Model/Product/Image.php @@ -895,7 +895,7 @@ public function getResizedImageInfo() return $imageProperties; } finally { if (empty($imageProperties)) { - throw new NotLoadInfoImageException(__('Can\'t get information about the picture: ' . $image)); + throw new NotLoadInfoImageException(__('Can\'t get information about the picture: %1', $image)); } } } diff --git a/app/code/Magento/Catalog/Model/Product/Image/NotLoadInfoImageException.php b/app/code/Magento/Catalog/Model/Product/Image/NotLoadInfoImageException.php index 6d6aab32ccd11..0feec11c62a59 100644 --- a/app/code/Magento/Catalog/Model/Product/Image/NotLoadInfoImageException.php +++ b/app/code/Magento/Catalog/Model/Product/Image/NotLoadInfoImageException.php @@ -5,12 +5,6 @@ */ namespace Magento\Catalog\Model\Product\Image; -use Magento\Framework\Exception\LocalizedException; - -/** - * @api - * @since 102.0.0 - */ -class NotLoadInfoImageException extends LocalizedException +class NotLoadInfoImageException extends \Exception { } From 585803acd949ac5f1be4297ec93144b4e1de74de Mon Sep 17 00:00:00 2001 From: RomanKis Date: Wed, 13 Dec 2017 18:01:45 +0200 Subject: [PATCH 574/653] magento/magento2#12667: Incorrect partial attribute (EAV) reindex (Update by Schedule) for configurable product with childs visibility "Not Visible Individually" --- .../Catalog/Model/Indexer/Product/Eav/AbstractAction.php | 1 + .../Unit/Model/Indexer/Product/Eav/AbstractActionTest.php | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/AbstractAction.php index 6a2642a8568f4..ffd912a7cf367 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/AbstractAction.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/AbstractAction.php @@ -143,6 +143,7 @@ protected function syncData($indexer, $destinationTable, $ids) protected function processRelations($indexer, $ids, $onlyParents = false) { $parentIds = $indexer->getRelationsByChild($ids); + $parentIds = array_unique(array_merge($parentIds, $ids)); $childIds = $onlyParents ? [] : $indexer->getRelationsByParent($parentIds); return array_unique(array_merge($ids, $childIds, $parentIds)); } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/AbstractActionTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/AbstractActionTest.php index 58654136ab5a8..b621f1a4906d6 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/AbstractActionTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/AbstractActionTest.php @@ -129,8 +129,9 @@ public function testReindexWithNotNullArgumentExecutesReindexEntities() ->disableOriginalConstructor() ->getMock(); - $eavSource->expects($this->once())->method('getRelationsByChild')->with($childIds)->willReturn($childIds); - $eavSource->expects($this->once())->method('getRelationsByParent')->with($childIds)->willReturn($parentIds); + $eavSource->expects($this->once())->method('getRelationsByChild')->with($childIds)->willReturn($parentIds); + $eavSource->expects($this->once())->method('getRelationsByParent') + ->with(array_unique(array_merge($parentIds, $childIds)))->willReturn($parentIds); $eavDecimal->expects($this->once())->method('getRelationsByChild')->with($reindexIds)->willReturn($reindexIds); $eavDecimal->expects($this->once())->method('getRelationsByParent')->with($reindexIds)->willReturn([]); From bb838b9648a836cb5cb931f7cb929a7c6379aa02 Mon Sep 17 00:00:00 2001 From: Andrii Voskoboinikov Date: Wed, 13 Dec 2017 18:30:14 +0200 Subject: [PATCH 575/653] MAGETWO-83365: Stabilize Frontend Pool for multi thread run --- setup/src/Magento/Setup/Fixtures/FixtureModel.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/setup/src/Magento/Setup/Fixtures/FixtureModel.php b/setup/src/Magento/Setup/Fixtures/FixtureModel.php index bb4f8948bf5d0..c26f6fd377942 100644 --- a/setup/src/Magento/Setup/Fixtures/FixtureModel.php +++ b/setup/src/Magento/Setup/Fixtures/FixtureModel.php @@ -161,11 +161,19 @@ public function getFixtures() return $this->fixtures; } + /** + * Returns configuration fixture + * @return \Magento\Setup\Fixtures\ConfigsApplyFixture + */ public function getConfigurationFixture() { return $this->configurationFixture; } + /** + * Returns indexer fixture + * @return \Magento\Setup\Fixtures\IndexersStatesApplyFixture + */ public function getIndexerFixture() { return $this->indexerFixture; From 1f77aaad920551ae0309a9964989213f6c265e4f Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky Date: Wed, 13 Dec 2017 18:54:40 +0200 Subject: [PATCH 576/653] magento/magento2#10734: Magento 2 is not showing Popular Search Terms [backport] --- app/code/Magento/Search/Block/Term.php | 6 +- .../Search/view/frontend/templates/term.phtml | 2 +- .../Magento/CatalogSearch/Block/TermTest.php | 2 +- .../Magento/Search/Block/TermTest.php | 117 ++++++++++++++++++ .../testsuite/Magento/Search/_files/query.php | 61 +++++++++ .../Magento/Search/_files/query_rollback.php | 24 ++++ 6 files changed, 207 insertions(+), 5 deletions(-) create mode 100644 dev/tests/integration/testsuite/Magento/Search/Block/TermTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Search/_files/query.php create mode 100644 dev/tests/integration/testsuite/Magento/Search/_files/query_rollback.php diff --git a/app/code/Magento/Search/Block/Term.php b/app/code/Magento/Search/Block/Term.php index d92ba03bfcff8..ee62129051b97 100644 --- a/app/code/Magento/Search/Block/Term.php +++ b/app/code/Magento/Search/Block/Term.php @@ -95,8 +95,8 @@ protected function _loadTerms() continue; } $term->setRatio(($term->getPopularity() - $this->_minPopularity) / $range); - $temp[$term->getName()] = $term; - $termKeys[] = $term->getName(); + $temp[$term->getData('query_text')] = $term; + $termKeys[] = $term->getData('query_text'); } natcasesort($termKeys); @@ -128,7 +128,7 @@ public function getSearchUrl($obj) * url encoding will be done in Url.php http_build_query * so no need to explicitly called urlencode for the text */ - $url->setQueryParam('q', $obj->getName()); + $url->setQueryParam('q', $obj->getData('query_text')); return $url->getUrl('catalogsearch/result'); } diff --git a/app/code/Magento/Search/view/frontend/templates/term.phtml b/app/code/Magento/Search/view/frontend/templates/term.phtml index 4285b42fa0329..8acee0cf3d408 100644 --- a/app/code/Magento/Search/view/frontend/templates/term.phtml +++ b/app/code/Magento/Search/view/frontend/templates/term.phtml @@ -13,7 +13,7 @@
  • - escapeHtml($_term->getName()) ?> + escapeHtml($_term->getData('query_text')) ?>
  • diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/TermTest.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/TermTest.php index a6b0fcc463e1d..bc1bc3a79688b 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/TermTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/TermTest.php @@ -24,7 +24,7 @@ protected function setUp() public function testGetSearchUrl() { $query = uniqid(); - $obj = new \Magento\Framework\DataObject(['name' => $query]); + $obj = new \Magento\Framework\DataObject(['query_text' => $query]); $this->assertStringEndsWith("/catalogsearch/result/?q={$query}", $this->_block->getSearchUrl($obj)); } } diff --git a/dev/tests/integration/testsuite/Magento/Search/Block/TermTest.php b/dev/tests/integration/testsuite/Magento/Search/Block/TermTest.php new file mode 100644 index 0000000000000..08645869f36cb --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Search/Block/TermTest.php @@ -0,0 +1,117 @@ +term->getTerms(); + $actual = array_map(function ($object) { + return $object->setUpdatedAt(null)->getData(); + }, + $result); + + self::assertEquals( + $expected, + $actual + ); + } + + /** + * Data provider for testGetTerms. + * + * @return array + */ + public function getTermsDataProvider() + { + return [ + [ + [ + '1st query' => + [ + 'query_id' => '1', + 'query_text' => '1st query', + 'num_results' => '1', + 'popularity' => '5', + 'redirect' => null, + 'store_id' => '1', + 'display_in_terms' => '1', + 'is_active' => '1', + 'is_processed' => '1', + 'updated_at' => null, + 'ratio' => 0.44444444444444, + ], + '2nd query' => + [ + 'query_id' => '2', + 'query_text' => '2nd query', + 'num_results' => '1', + 'popularity' => '10', + 'redirect' => null, + 'store_id' => '1', + 'display_in_terms' => '1', + 'is_active' => '1', + 'is_processed' => '1', + 'updated_at' => null, + 'ratio' => 1, + ], + '3rd query' => + [ + 'query_id' => '3', + 'query_text' => '3rd query', + 'num_results' => '1', + 'popularity' => '1', + 'redirect' => null, + 'store_id' => '1', + 'display_in_terms' => '1', + 'is_active' => '1', + 'is_processed' => '1', + 'updated_at' => null, + 'ratio' => 0, + ], + ], + ], + ]; + } + + protected function setUp() + { + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $this->term = $this->objectManager->get( + LayoutInterface::class + )->createBlock( + Term::class + ); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Search/_files/query.php b/dev/tests/integration/testsuite/Magento/Search/_files/query.php new file mode 100644 index 0000000000000..f088da0e83a57 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Search/_files/query.php @@ -0,0 +1,61 @@ + '1st query', + 'results' => 1, + 'popularity' => 5, + 'display' => 1, + 'active' => 1, + 'processed' => 1 + ], + [ + 'text' => '2nd query', + 'results' => 1, + 'popularity' => 10, + 'display' => 1, + 'active' => 1, + 'processed' => 1 + ], + [ + 'text' => '3rd query', + 'results' => 1, + 'popularity' => 1, + 'display' => 1, + 'active' => 1, + 'processed' => 1 + ], + [ + 'text' => '4th query', + 'results' => 0, + 'popularity' => 1, + 'display' => 1, + 'active' => 1, + 'processed' => 1 + ], +]; + +foreach ($queries as $queryData) { + /** @var $queryData \Magento\Search\Model\Query */ + $query = $objectManager->create(\Magento\Search\Model\Query::class); + $query->setStoreId(1); + $query->setQueryText( + $queryData['text'] + )->setNumResults( + $queryData['results'] + )->setPopularity( + $queryData['popularity'] + )->setDisplayInTerms( + $queryData['display'] + )->setIsActive( + $queryData['active'] + )->setIsProcessed( + $queryData['processed'] + ); + $query->save(); +} diff --git a/dev/tests/integration/testsuite/Magento/Search/_files/query_rollback.php b/dev/tests/integration/testsuite/Magento/Search/_files/query_rollback.php new file mode 100644 index 0000000000000..5bf123fcd96ed --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Search/_files/query_rollback.php @@ -0,0 +1,24 @@ +get(\Magento\Search\Model\Query::class); + +$queries = [ + '1st query', + '2nd query', + '3rd query', + '4th query', +]; + +foreach ($queries as $queryText) { + try { + $query->loadByQueryText($queryText); + $query->delete(); + } catch (\Magento\Framework\Exception\NoSuchEntityException $exception) { + } +} From cc10dc1d4f6ca7e2d88fd05122facacc0d0cf5ae Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Thu, 14 Dec 2017 09:12:33 +0200 Subject: [PATCH 577/653] magento/magento2#12666 --- .../Dhl/Test/Unit/Model/CarrierTest.php | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/app/code/Magento/Dhl/Test/Unit/Model/CarrierTest.php b/app/code/Magento/Dhl/Test/Unit/Model/CarrierTest.php index 0f0d784813dfc..8738d3bb8dae2 100644 --- a/app/code/Magento/Dhl/Test/Unit/Model/CarrierTest.php +++ b/app/code/Magento/Dhl/Test/Unit/Model/CarrierTest.php @@ -447,4 +447,67 @@ public function requestToShipmentDataProvider() ] ]; } + + /** + * @dataProvider dhlProductsDataProvider + * + * @param string $docType + * @param array $products + */ + public function testGetDhlProducts(string $docType, array $products) + { + $this->assertEquals($products, $this->model->getDhlProducts($docType)); + } + + /** + * @return array + */ + public function dhlProductsDataProvider() : array + { + return [ + 'doc' => [ + 'docType' => \Magento\Dhl\Model\Carrier::DHL_CONTENT_TYPE_DOC, + 'products' => [ + '2' => 'Easy shop', + '5' => 'Sprintline', + '6' => 'Secureline', + '7' => 'Express easy', + '9' => 'Europack', + 'B' => 'Break bulk express', + 'C' => 'Medical express', + 'D' => 'Express worldwide', + 'U' => 'Express worldwide', + 'K' => 'Express 9:00', + 'L' => 'Express 10:30', + 'G' => 'Domestic economy select', + 'W' => 'Economy select', + 'I' => 'Domestic express 9:00', + 'N' => 'Domestic express', + 'O' => 'Others', + 'R' => 'Globalmail business', + 'S' => 'Same day', + 'T' => 'Express 12:00', + 'X' => 'Express envelope', + ] + ], + 'non-doc' => [ + 'docType' => \Magento\Dhl\Model\Carrier::DHL_CONTENT_TYPE_NON_DOC, + 'products' => [ + '1' => 'Domestic express 12:00', + '3' => 'Easy shop', + '4' => 'Jetline', + '8' => 'Express easy', + 'P' => 'Express worldwide', + 'Q' => 'Medical express', + 'E' => 'Express 9:00', + 'F' => 'Freight worldwide', + 'H' => 'Economy select', + 'J' => 'Jumbo box', + 'M' => 'Express 10:30', + 'V' => 'Europack', + 'Y' => 'Express 12:00', + ] + ] + ]; + } } From 377668493512c25d6ba94c2fdff1a9f6a35e3530 Mon Sep 17 00:00:00 2001 From: RomanKis Date: Tue, 12 Dec 2017 16:52:57 +0200 Subject: [PATCH 578/653] magento/magento2#8615: REST API unable to make requests with slash (/) in SKU --- .../Controller/Rest/InputParamsResolver.php | 17 +- .../Controller/Soap/Request/Handler.php | 14 +- app/code/Magento/Webapi/Model/UrlDecoder.php | 35 ++++ .../Api/ProductRepositoryInterfaceTest.php | 23 +++ .../CatalogInventory/Api/StockItemTest.php | 154 ++++++++++++++++-- .../CatalogInventory/Api/StockStatusTest.php | 28 ++++ .../_files/product_simple_sku_with_slash.php | 41 +++++ ...product_simple_sku_with_slash_rollback.php | 24 +++ 8 files changed, 318 insertions(+), 18 deletions(-) create mode 100644 app/code/Magento/Webapi/Model/UrlDecoder.php create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_sku_with_slash.php create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_sku_with_slash_rollback.php diff --git a/app/code/Magento/Webapi/Controller/Rest/InputParamsResolver.php b/app/code/Magento/Webapi/Controller/Rest/InputParamsResolver.php index 07d1b4e07fe9d..fa89b7223a92e 100644 --- a/app/code/Magento/Webapi/Controller/Rest/InputParamsResolver.php +++ b/app/code/Magento/Webapi/Controller/Rest/InputParamsResolver.php @@ -6,10 +6,10 @@ namespace Magento\Webapi\Controller\Rest; -use Magento\Framework\Webapi\ServiceInputProcessor; use Magento\Framework\Webapi\Rest\Request as RestRequest; -use Magento\Webapi\Controller\Rest\Router; +use Magento\Framework\Webapi\ServiceInputProcessor; use Magento\Webapi\Controller\Rest\Router\Route; +use Magento\Webapi\Model\UrlDecoder; /** * This class is responsible for retrieving resolved input data @@ -47,26 +47,32 @@ class InputParamsResolver private $requestValidator; /** - * Initialize dependencies - * + * @var UrlDecoder + */ + private $urlDecoder; + + /** * @param RestRequest $request * @param ParamsOverrider $paramsOverrider * @param ServiceInputProcessor $serviceInputProcessor * @param Router $router * @param RequestValidator $requestValidator + * @param UrlDecoder $urlDecoder */ public function __construct( RestRequest $request, ParamsOverrider $paramsOverrider, ServiceInputProcessor $serviceInputProcessor, Router $router, - RequestValidator $requestValidator + RequestValidator $requestValidator, + UrlDecoder $urlDecoder = null ) { $this->request = $request; $this->paramsOverrider = $paramsOverrider; $this->serviceInputProcessor = $serviceInputProcessor; $this->router = $router; $this->requestValidator = $requestValidator; + $this->urlDecoder = $urlDecoder ?: \Magento\Framework\App\ObjectManager::getInstance()->get(UrlDecoder::class); } /** @@ -97,6 +103,7 @@ public function resolve() $inputData = $this->request->getRequestData(); } + $inputData = $this->urlDecoder->decodeParams($inputData); $inputData = $this->paramsOverrider->override($inputData, $route->getParameters()); $inputParams = $this->serviceInputProcessor->process($serviceClassName, $serviceMethodName, $inputData); return $inputParams; diff --git a/app/code/Magento/Webapi/Controller/Soap/Request/Handler.php b/app/code/Magento/Webapi/Controller/Soap/Request/Handler.php index 0e87805daf60a..081b4c829475a 100644 --- a/app/code/Magento/Webapi/Controller/Soap/Request/Handler.php +++ b/app/code/Magento/Webapi/Controller/Soap/Request/Handler.php @@ -17,6 +17,7 @@ use Magento\Webapi\Model\Soap\Config as SoapConfig; use Magento\Framework\Reflection\MethodsMap; use Magento\Webapi\Model\ServiceMetadata; +use Magento\Webapi\Model\UrlDecoder; /** * Handler of requests to SOAP server. @@ -70,8 +71,11 @@ class Handler protected $methodsMapProcessor; /** - * Initialize dependencies. - * + * @var UrlDecoder + */ + private $urlDecoder; + + /** * @param SoapRequest $request * @param \Magento\Framework\ObjectManagerInterface $objectManager * @param SoapConfig $apiConfig @@ -80,6 +84,7 @@ class Handler * @param ServiceInputProcessor $serviceInputProcessor * @param DataObjectProcessor $dataObjectProcessor * @param MethodsMap $methodsMapProcessor + * @param UrlDecoder $urlDecoder */ public function __construct( SoapRequest $request, @@ -89,7 +94,8 @@ public function __construct( SimpleDataObjectConverter $dataObjectConverter, ServiceInputProcessor $serviceInputProcessor, DataObjectProcessor $dataObjectProcessor, - MethodsMap $methodsMapProcessor + MethodsMap $methodsMapProcessor, + UrlDecoder $urlDecoder = null ) { $this->_request = $request; $this->_objectManager = $objectManager; @@ -99,6 +105,7 @@ public function __construct( $this->serviceInputProcessor = $serviceInputProcessor; $this->_dataObjectProcessor = $dataObjectProcessor; $this->methodsMapProcessor = $methodsMapProcessor; + $this->urlDecoder = $urlDecoder ?: \Magento\Framework\App\ObjectManager::getInstance()->get(UrlDecoder::class); } /** @@ -150,6 +157,7 @@ protected function _prepareRequestData($serviceClass, $serviceMethod, $arguments /** SoapServer wraps parameters into array. Thus this wrapping should be removed to get access to parameters. */ $arguments = reset($arguments); $arguments = $this->_dataObjectConverter->convertStdObjectToArray($arguments, true); + $arguments = $this->urlDecoder->decodeParams($arguments); return $this->serviceInputProcessor->process($serviceClass, $serviceMethod, $arguments); } diff --git a/app/code/Magento/Webapi/Model/UrlDecoder.php b/app/code/Magento/Webapi/Model/UrlDecoder.php new file mode 100644 index 0000000000000..f3bab1f45994f --- /dev/null +++ b/app/code/Magento/Webapi/Model/UrlDecoder.php @@ -0,0 +1,35 @@ +decodeParams($param); + } else { + if ($param !== null && is_string($param)) { + $param = rawurldecode($param); + } + } + } + + return $params; + } +} diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php index cb33edce3af39..09f6362c833d4 100644 --- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php +++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php @@ -47,6 +47,15 @@ class ProductRepositoryInterfaceTest extends WebapiAbstract ProductInterface::TYPE_ID => 'simple', ProductInterface::PRICE => 10 ], + [ + ProductInterface::SKU => [ + 'rest' => 'sku%252fwith%252fslashes', + 'soap' => 'sku%2fwith%2fslashes' + ], + ProductInterface::NAME => 'Simple Product with Sku with Slashes', + ProductInterface::TYPE_ID => 'simple', + ProductInterface::PRICE => 10 + ], ]; /** @@ -135,6 +144,20 @@ public function productCreationProvider() ]; } + /** + * @magentoApiDataFixture Magento/Catalog/_files/product_simple_sku_with_slash.php + */ + public function testGetBySkuWithSlash() + { + $productData = $this->productData[2]; + $response = $this->getProduct($productData[ProductInterface::SKU][TESTS_WEB_API_ADAPTER]); + $productData[ProductInterface::SKU] = rawurldecode($productData[ProductInterface::SKU]['soap']); + foreach ([ProductInterface::SKU, ProductInterface::NAME, ProductInterface::PRICE] as $key) { + $this->assertEquals($productData[$key], $response[$key]); + } + $this->assertEquals([1], $response[ProductInterface::EXTENSION_ATTRIBUTES_KEY]["website_ids"]); + } + /** * Test removing association between product and website 1 * @magentoApiDataFixture Magento/Catalog/_files/product_with_two_websites.php diff --git a/dev/tests/api-functional/testsuite/Magento/CatalogInventory/Api/StockItemTest.php b/dev/tests/api-functional/testsuite/Magento/CatalogInventory/Api/StockItemTest.php index 0d9f121ed7745..096baa269f3bd 100644 --- a/dev/tests/api-functional/testsuite/Magento/CatalogInventory/Api/StockItemTest.php +++ b/dev/tests/api-functional/testsuite/Magento/CatalogInventory/Api/StockItemTest.php @@ -49,11 +49,12 @@ public function setUp() /** * @param array $result + * @param string $productSku + * * @return array */ - protected function getStockItemBySku($result) + protected function getStockItemBySku($result, $productSku) { - $productSku = 'simple1'; $serviceInfo = [ 'rest' => [ 'resourcePath' => self::RESOURCE_GET_PATH . "/$productSku", @@ -69,6 +70,7 @@ protected function getStockItemBySku($result) $apiResult = $this->_webApiCall($serviceInfo, $arguments); $result['item_id'] = $apiResult['item_id']; $this->assertEquals($result, array_intersect_key($apiResult, $result), 'The stock data does not match.'); + return $apiResult; } @@ -76,15 +78,33 @@ protected function getStockItemBySku($result) * @param array $newData * @param array $expectedResult * @param array $fixtureData + * * @magentoApiDataFixture Magento/Catalog/_files/multiple_products.php * @dataProvider saveStockItemBySkuWithWrongInputDataProvider */ public function testStockItemPUTWithWrongInput($newData, $expectedResult, $fixtureData) { - $stockItemOld = $this->getStockItemBySku($fixtureData); $productSku = 'simple1'; + $stockItemOld = $this->getStockItemBySku($fixtureData, $productSku); $itemId = $stockItemOld['item_id']; + $actualData = $this->updateStockItemBySku($productSku, $itemId, $newData); + + $this->assertEquals($stockItemOld['item_id'], $actualData); + + /** @var \Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory $stockItemFactory */ + $stockItemFactory = $this->objectManager + ->get(\Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory::class); + $stockItem = $stockItemFactory->create(); + /** @var \Magento\CatalogInventory\Model\ResourceModel\Stock\Item $stockItemResource */ + $stockItemResource = $this->objectManager->get(\Magento\CatalogInventory\Model\ResourceModel\Stock\Item::class); + $stockItemResource->loadByProductId($stockItem, $stockItemOld['product_id'], $stockItemOld['stock_id']); + $expectedResult['item_id'] = $stockItem->getItemId(); + $this->assertEquals($expectedResult, array_intersect_key($stockItem->getData(), $expectedResult)); + } + + private function updateStockItemBySku($productSku, $itemId, $newData) + { $resourcePath = str_replace([':productSku', ':itemId'], [$productSku, $itemId], self::RESOURCE_PUT_PATH); $serviceInfo = [ @@ -113,7 +133,124 @@ public function testStockItemPUTWithWrongInput($newData, $expectedResult, $fixtu $data = $stockItemDetailsDo->getData(); $data['show_default_notification_message'] = false; $arguments = ['productSku' => $productSku, 'stockItem' => $data]; - $this->assertEquals($stockItemOld['item_id'], $this->_webApiCall($serviceInfo, $arguments)); + + return $this->_webApiCall($serviceInfo, $arguments); + } + + /** + * @return array + */ + public function saveStockItemBySkuWithWrongInputDataProvider() + { + return [ + [ + [ + 'item_id' => 222, + 'product_id' => 222, + 'stock_id' => 1, + 'qty' => '111.0000', + 'min_qty' => '0.0000', + 'use_config_min_qty' => 1, + 'is_qty_decimal' => 0, + 'backorders' => 0, + 'use_config_backorders' => 1, + 'min_sale_qty' => '1.0000', + 'use_config_min_sale_qty' => 1, + 'max_sale_qty' => '0.0000', + 'use_config_max_sale_qty' => 1, + 'is_in_stock' => 1, + 'low_stock_date' => '', + 'notify_stock_qty' => null, + 'use_config_notify_stock_qty' => 1, + 'manage_stock' => 0, + 'use_config_manage_stock' => 1, + 'stock_status_changed_auto' => 0, + 'use_config_qty_increments' => 1, + 'qty_increments' => '0.0000', + 'use_config_enable_qty_inc' => 1, + 'enable_qty_increments' => 0, + 'is_decimal_divided' => 0, + ], + [ + 'item_id' => '1', + 'product_id' => '10', + 'stock_id' => '1', + 'qty' => '111.0000', + 'min_qty' => '0.0000', + 'use_config_min_qty' => '1', + 'is_qty_decimal' => '0', + 'backorders' => '0', + 'use_config_backorders' => '1', + 'min_sale_qty' => '1.0000', + 'use_config_min_sale_qty' => '1', + 'max_sale_qty' => '0.0000', + 'use_config_max_sale_qty' => '1', + 'is_in_stock' => '1', + 'low_stock_date' => null, + 'notify_stock_qty' => null, + 'use_config_notify_stock_qty' => '1', + 'manage_stock' => '0', + 'use_config_manage_stock' => '1', + 'stock_status_changed_auto' => '0', + 'use_config_qty_increments' => '1', + 'qty_increments' => '0.0000', + 'use_config_enable_qty_inc' => '1', + 'enable_qty_increments' => '0', + 'is_decimal_divided' => '0', + 'type_id' => 'simple', + ], + [ + 'item_id' => 1, + 'product_id' => 10, + 'stock_id' => 1, + 'qty' => 100, + 'is_in_stock' => 1, + 'is_qty_decimal' => '', + 'show_default_notification_message' => '', + 'use_config_min_qty' => 1, + 'min_qty' => 0, + 'use_config_min_sale_qty' => 1, + 'min_sale_qty' => 1, + 'use_config_max_sale_qty' => 1, + 'max_sale_qty' => 10000, + 'use_config_backorders' => 1, + 'backorders' => 0, + 'use_config_notify_stock_qty' => 1, + 'notify_stock_qty' => 1, + 'use_config_qty_increments' => 1, + 'qty_increments' => 0, + 'use_config_enable_qty_inc' => 1, + 'enable_qty_increments' => '', + 'use_config_manage_stock' => 1, + 'manage_stock' => 1, + 'low_stock_date' => '', + 'is_decimal_divided' => '', + 'stock_status_changed_auto' => 0, + ], + ], + ]; + } + + /** + * @param array $newData + * @param array $expectedResult + * @param array $fixtureData + * + * @magentoApiDataFixture Magento/Catalog/_files/product_simple_sku_with_slash.php + * @dataProvider testUpdateStockItemBySkuDataProvider + */ + public function testUpdateStockItemBySku($newData, $expectedResult, $fixtureData) + { + $productSku = [ + 'rest' => 'sku%252fwith%252fslashes', + 'soap' => 'sku%2fwith%2fslashes' + ]; + $stockItemOld = $this->getStockItemBySku($fixtureData, $productSku[TESTS_WEB_API_ADAPTER]); + $itemId = $stockItemOld['item_id']; + + $actualData = $this->updateStockItemBySku($productSku[TESTS_WEB_API_ADAPTER], $itemId, $newData); + + $this->assertEquals($stockItemOld['item_id'], $actualData); /** @var \Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory $stockItemFactory */ $stockItemFactory = $this->objectManager @@ -126,10 +263,7 @@ public function testStockItemPUTWithWrongInput($newData, $expectedResult, $fixtu $this->assertEquals($expectedResult, array_intersect_key($stockItem->getData(), $expectedResult)); } - /** - * @return array - */ - public function saveStockItemBySkuWithWrongInputDataProvider() + public function testUpdateStockItemBySkuDataProvider() { return [ [ @@ -162,7 +296,7 @@ public function saveStockItemBySkuWithWrongInputDataProvider() ], [ 'item_id' => '1', - 'product_id' => '10', + 'product_id' => '1', 'stock_id' => '1', 'qty' => '111.0000', 'min_qty' => '0.0000', @@ -190,7 +324,7 @@ public function saveStockItemBySkuWithWrongInputDataProvider() ], [ 'item_id' => 1, - 'product_id' => 10, + 'product_id' => 1, 'stock_id' => 1, 'qty' => 100, 'is_in_stock' => 1, diff --git a/dev/tests/api-functional/testsuite/Magento/CatalogInventory/Api/StockStatusTest.php b/dev/tests/api-functional/testsuite/Magento/CatalogInventory/Api/StockStatusTest.php index c7e5736b3324c..c3c80621f2348 100644 --- a/dev/tests/api-functional/testsuite/Magento/CatalogInventory/Api/StockStatusTest.php +++ b/dev/tests/api-functional/testsuite/Magento/CatalogInventory/Api/StockStatusTest.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\CatalogInventory\Api; use Magento\TestFramework\Helper\Bootstrap; @@ -27,6 +28,14 @@ public function testGetProductStockStatus() /** @var \Magento\Catalog\Model\Product $product */ $product = $objectManager->get(\Magento\Catalog\Model\Product::class)->load(1); $expectedData = $product->getQuantityAndStockStatus(); + $actualData = $this->getProductStockStatus($productSku); + $this->assertArrayHasKey('stock_item', $actualData); + $this->assertEquals($expectedData['is_in_stock'], $actualData['stock_item']['is_in_stock']); + $this->assertEquals($expectedData['qty'], $actualData['stock_item']['qty']); + } + + private function getProductStockStatus($productSku) + { $serviceInfo = [ 'rest' => [ 'resourcePath' => self::RESOURCE_PATH . "/$productSku", @@ -41,6 +50,25 @@ public function testGetProductStockStatus() $requestData = ['productSku' => $productSku]; $actualData = $this->_webApiCall($serviceInfo, $requestData); + + return $actualData; + } + + /** + * @magentoApiDataFixture Magento/Catalog/_files/product_simple_sku_with_slash.php + */ + public function testGetProductStockStatusBySkuWithSlashes() + { + $productSku = [ + 'rest' => 'sku%252fwith%252fslashes', + 'soap' => 'sku%2fwith%2fslashes' + ]; + $objectManager = Bootstrap::getObjectManager(); + + /** @var \Magento\Catalog\Model\Product $product */ + $product = $objectManager->get(\Magento\Catalog\Model\Product::class)->load(1); + $expectedData = $product->getQuantityAndStockStatus(); + $actualData = $this->getProductStockStatus($productSku[TESTS_WEB_API_ADAPTER]); $this->assertArrayHasKey('stock_item', $actualData); $this->assertEquals($expectedData['is_in_stock'], $actualData['stock_item']['is_in_stock']); $this->assertEquals($expectedData['qty'], $actualData['stock_item']['qty']); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_sku_with_slash.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_sku_with_slash.php new file mode 100644 index 0000000000000..271eda8a0ffce --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_sku_with_slash.php @@ -0,0 +1,41 @@ +create(\Magento\Catalog\Model\Product::class); +$product->isObjectNew(true); +$product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE) + ->setId(1) + ->setAttributeSetId(4) + ->setWebsiteIds([1]) + ->setName('Simple Product with Sku with Slashes') + ->setSku('sku/with/slashes') + ->setPrice(10) + ->setWeight(1) + ->setShortDescription("Short description") + ->setTaxClassId(0) + ->setDescription('Description with html tag') + ->setMetaTitle('meta title') + ->setMetaKeyword('meta keyword') + ->setMetaDescription('meta description') + ->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH) + ->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED) + ->setStockData( + [ + 'use_config_manage_stock' => 1, + 'qty' => 100, + 'is_qty_decimal' => 0, + 'is_in_stock' => 1, + ] + )->setCanSaveCustomOptions(true) + ->setHasOptions(true); + +/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepositoryFactory */ +$productRepository = $objectManager->create(\Magento\Catalog\Api\ProductRepositoryInterface::class); +$productRepository->save($product); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_sku_with_slash_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_sku_with_slash_rollback.php new file mode 100644 index 0000000000000..9cd5adae15915 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_sku_with_slash_rollback.php @@ -0,0 +1,24 @@ +get(\Magento\Framework\Registry::class); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', true); + +/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ +$productRepository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get(\Magento\Catalog\Api\ProductRepositoryInterface::class); +try { + $product = $productRepository->get('sku/with/slashes', false, null, true); + $productRepository->delete($product); +} catch (NoSuchEntityException $e) { +} +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', false); From 284440e4282c827d7940947febceedb476a335ea Mon Sep 17 00:00:00 2001 From: Andrii Voskoboinikov Date: Thu, 14 Dec 2017 10:20:06 +0200 Subject: [PATCH 579/653] MAGETWO-83365: Stabilize Frontend Pool for multi thread run --- .../Command/GenerateFixturesCommand.php | 6 +- .../Setup/Fixtures/ConfigsApplyFixture.php | 2 +- .../Magento/Setup/Fixtures/FixtureModel.php | 55 ++++++++----------- .../Fixtures/IndexersStatesApplyFixture.php | 2 +- 4 files changed, 30 insertions(+), 35 deletions(-) diff --git a/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php b/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php index 5caaee480d5d2..ef12f59231130 100644 --- a/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php +++ b/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php @@ -8,7 +8,9 @@ use Magento\Framework\App\ResourceConnection; use Magento\Framework\Mview\View\CollectionInterface; +use Magento\Setup\Fixtures\ConfigsApplyFixture; use Magento\Setup\Fixtures\FixtureModel; +use Magento\Setup\Fixtures\IndexersStatesApplyFixture; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -84,7 +86,7 @@ protected function execute(InputInterface $input, OutputInterface $output) } /** @var \Magento\Setup\Fixtures\ConfigsApplyFixture $configFixture */ - $configFixture = $fixtureModel->getConfigurationFixture(); + $configFixture = $fixtureModel->getFixtureByName(ConfigsApplyFixture::class); $configFixture && $this->executeFixture($configFixture, $output); /** @var $config \Magento\Indexer\Model\Config */ @@ -106,7 +108,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $this->clearChangelog(); /** @var \Magento\Setup\Fixtures\IndexersStatesApplyFixture $indexerFixture */ - $indexerFixture = $this->fixtureModel->getIndexerFixture(); + $indexerFixture = $fixtureModel->getFixtureByName(IndexersStatesApplyFixture::class); $indexerFixture && $this->executeFixture($indexerFixture, $output); if (!$input->getOption(self::SKIP_REINDEX_OPTION)) { diff --git a/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php b/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php index 144ac5d7625fa..6c6fdbd9fa6f8 100644 --- a/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php +++ b/setup/src/Magento/Setup/Fixtures/ConfigsApplyFixture.php @@ -14,7 +14,7 @@ class ConfigsApplyFixture extends Fixture /** * @var int */ - protected $priority = 0; + protected $priority = -1; /** * {@inheritdoc} diff --git a/setup/src/Magento/Setup/Fixtures/FixtureModel.php b/setup/src/Magento/Setup/Fixtures/FixtureModel.php index c26f6fd377942..96c4025ac1871 100644 --- a/setup/src/Magento/Setup/Fixtures/FixtureModel.php +++ b/setup/src/Magento/Setup/Fixtures/FixtureModel.php @@ -10,6 +10,7 @@ namespace Magento\Setup\Fixtures; use Magento\Indexer\Console\Command\IndexerReindexCommand; +use Magento\Setup\Exception; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Output\OutputInterface; @@ -47,6 +48,13 @@ class FixtureModel */ protected $fixtures = []; + /** + * List of fixtures indexed by class names + * + * @var \Magento\Setup\Fixtures\Fixture[] + */ + private $fixturesByNames = []; + /** * Parameters labels * @@ -65,14 +73,6 @@ class FixtureModel */ private $config; - private $configurationFixtureInstanceClassName = \Magento\Setup\Fixtures\ConfigsApplyFixture::class; - - private $configurationFixture; - - private $indexerFixtureInstanceClassName = \Magento\Setup\Fixtures\IndexersStatesApplyFixture::class; - - private $indexerFixture; - /** * Constructor * @@ -118,22 +118,17 @@ public function loadFixtures() ] ); - if ($fixture instanceof $this->configurationFixtureInstanceClassName) { - $this->configurationFixture = $fixture; - continue; - } - - if ($fixture instanceof $this->indexerFixtureInstanceClassName) { - $this->indexerFixture = $fixture; - continue; - } - if (isset($this->fixtures[$fixture->getPriority()])) { throw new \InvalidArgumentException( sprintf('Duplicate priority %d in fixture %s', $fixture->getPriority(), $type) ); } - $this->fixtures[$fixture->getPriority()] = $fixture; + + if ($fixture->getPriority() >= 0) { + $this->fixtures[$fixture->getPriority()] = $fixture; + } + + $this->fixturesByNames[get_class($fixture)] = $fixture; } ksort($this->fixtures); @@ -162,23 +157,21 @@ public function getFixtures() } /** - * Returns configuration fixture - * @return \Magento\Setup\Fixtures\ConfigsApplyFixture + * Returns fixture by name + * @param $name string + * @return \Magento\Setup\Fixtures\Fixture + * @throws \Magento\Setup\Exception */ - public function getConfigurationFixture() + public function getFixtureByName($name) { - return $this->configurationFixture; - } + if (!array_key_exists($name, $this->fixturesByNames)) { + throw new Exception('Wrong fixture name'); + } - /** - * Returns indexer fixture - * @return \Magento\Setup\Fixtures\IndexersStatesApplyFixture - */ - public function getIndexerFixture() - { - return $this->indexerFixture; + return $this->fixturesByNames[$name]; } + /** * Get object manager * diff --git a/setup/src/Magento/Setup/Fixtures/IndexersStatesApplyFixture.php b/setup/src/Magento/Setup/Fixtures/IndexersStatesApplyFixture.php index 949bd8a24f51e..b07ce33089814 100644 --- a/setup/src/Magento/Setup/Fixtures/IndexersStatesApplyFixture.php +++ b/setup/src/Magento/Setup/Fixtures/IndexersStatesApplyFixture.php @@ -14,7 +14,7 @@ class IndexersStatesApplyFixture extends Fixture /** * @var int */ - protected $priority = 170; + protected $priority = -1; /** * {@inheritdoc} From 6c0463bb60edea74e90537f3f8e11ab9d8f81913 Mon Sep 17 00:00:00 2001 From: Ievgen Sentiabov Date: Thu, 14 Dec 2017 10:25:29 +0200 Subject: [PATCH 580/653] MAGETWO-81395: Provide possibility to customize error messages from payment methods - Added interface to payment gateway infrastructure to provide error messages customization - Implemented error messages mapping for Braintree payment method - Refactored affected tests - Added messages localization --- .../Gateway/Validator/ErrorCodeValidator.php | 49 ++++ .../Validator/GeneralResponseValidator.php | 19 +- .../GeneralResponseValidatorTest.php | 93 ++++---- .../PaymentNonceResponseValidatorTest.php | 59 +---- .../Validator/ResponseValidatorTest.php | 60 +---- .../etc/adminhtml/braintree_error_mapping.xml | 32 +++ .../Magento/Braintree/etc/adminhtml/di.xml | 13 + .../Braintree/etc/braintree_error_mapping.xml | 64 +++++ app/code/Magento/Braintree/etc/di.xml | 21 ++ app/code/Magento/Braintree/i18n/en_US.csv | 62 +++++ .../Gateway/Command/GatewayCommand.php | 50 +++- .../ErrorMapper/ErrorMessageMapper.php | 40 ++++ .../ErrorMessageMapperInterface.php | 23 ++ .../Gateway/ErrorMapper/MappingData.php | 20 ++ .../Gateway/ErrorMapper/NullMappingData.php | 32 +++ .../ErrorMapper/XmlToArrayConverter.php | 27 +++ .../Gateway/Command/GatewayCommandTest.php | 225 +++++++++--------- .../Test/Unit/Model/Method/FactoryTest.php | 89 ------- .../Method/Specification/FactoryTest.php | 71 ------ app/code/Magento/Payment/etc/di.xml | 26 ++ .../Magento/Payment/etc/error_mapping.xsd | 32 +++ .../Api/PaymentInformationManagementTest.php | 146 ++++++++++++ 22 files changed, 830 insertions(+), 423 deletions(-) create mode 100644 app/code/Magento/Braintree/Gateway/Validator/ErrorCodeValidator.php create mode 100644 app/code/Magento/Braintree/etc/adminhtml/braintree_error_mapping.xml create mode 100644 app/code/Magento/Braintree/etc/braintree_error_mapping.xml create mode 100644 app/code/Magento/Payment/Gateway/ErrorMapper/ErrorMessageMapper.php create mode 100644 app/code/Magento/Payment/Gateway/ErrorMapper/ErrorMessageMapperInterface.php create mode 100644 app/code/Magento/Payment/Gateway/ErrorMapper/MappingData.php create mode 100644 app/code/Magento/Payment/Gateway/ErrorMapper/NullMappingData.php create mode 100644 app/code/Magento/Payment/Gateway/ErrorMapper/XmlToArrayConverter.php delete mode 100644 app/code/Magento/Payment/Test/Unit/Model/Method/FactoryTest.php delete mode 100644 app/code/Magento/Payment/Test/Unit/Model/Method/Specification/FactoryTest.php create mode 100644 app/code/Magento/Payment/etc/error_mapping.xsd create mode 100644 dev/tests/integration/testsuite/Magento/Checkout/Api/PaymentInformationManagementTest.php diff --git a/app/code/Magento/Braintree/Gateway/Validator/ErrorCodeValidator.php b/app/code/Magento/Braintree/Gateway/Validator/ErrorCodeValidator.php new file mode 100644 index 0000000000000..d38b04e46b0db --- /dev/null +++ b/app/code/Magento/Braintree/Gateway/Validator/ErrorCodeValidator.php @@ -0,0 +1,49 @@ +getErrorCodes($response->errors)]; + } + + /** + * Retrieves list of error codes from Braintree response. + * + * @param ErrorCollection $collection + * @return array + */ + private function getErrorCodes(ErrorCollection $collection) + { + $result = []; + /** @var Validation $error */ + foreach ($collection->deepAll() as $error) { + $result[] = $error->code; + } + + return $result; + } +} diff --git a/app/code/Magento/Braintree/Gateway/Validator/GeneralResponseValidator.php b/app/code/Magento/Braintree/Gateway/Validator/GeneralResponseValidator.php index 8028bace0cf24..7bafa35e13185 100644 --- a/app/code/Magento/Braintree/Gateway/Validator/GeneralResponseValidator.php +++ b/app/code/Magento/Braintree/Gateway/Validator/GeneralResponseValidator.php @@ -18,16 +18,26 @@ class GeneralResponseValidator extends AbstractValidator */ protected $subjectReader; + /** + * @var ErrorCodeValidator + */ + private $errorCodeValidator; + /** * Constructor * * @param ResultInterfaceFactory $resultFactory * @param SubjectReader $subjectReader + * @param ErrorCodeValidator $errorCodeValidator */ - public function __construct(ResultInterfaceFactory $resultFactory, SubjectReader $subjectReader) - { + public function __construct( + ResultInterfaceFactory $resultFactory, + SubjectReader $subjectReader, + ErrorCodeValidator $errorCodeValidator + ) { parent::__construct($resultFactory); $this->subjectReader = $subjectReader; + $this->errorCodeValidator = $errorCodeValidator; } /** @@ -62,9 +72,10 @@ protected function getResponseValidators() function ($response) { return [ property_exists($response, 'success') && $response->success === true, - [__('Braintree error response.')] + [$response->message ?? __('Braintree error response.')] ]; - } + }, + $this->errorCodeValidator ]; } } diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php index c8a46da504fef..de8423618ab8d 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/GeneralResponseValidatorTest.php @@ -5,12 +5,14 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Validator; -use Braintree\Transaction; +use Braintree\Result\Error; +use Magento\Braintree\Gateway\SubjectReader; +use Magento\Braintree\Gateway\Validator\ErrorCodeValidator; +use Magento\Braintree\Gateway\Validator\GeneralResponseValidator; use Magento\Framework\Phrase; -use Magento\Payment\Gateway\Validator\ResultInterface; +use Magento\Payment\Gateway\Validator\Result; use Magento\Payment\Gateway\Validator\ResultInterfaceFactory; -use Magento\Braintree\Gateway\Validator\GeneralResponseValidator; -use Magento\Braintree\Gateway\SubjectReader; +use PHPUnit_Framework_MockObject_MockObject as MockObject; class GeneralResponseValidatorTest extends \PHPUnit\Framework\TestCase { @@ -20,14 +22,9 @@ class GeneralResponseValidatorTest extends \PHPUnit\Framework\TestCase private $responseValidator; /** - * @var ResultInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject - */ - private $resultInterfaceFactoryMock; - - /** - * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject + * @var ResultInterfaceFactory|MockObject */ - private $subjectReaderMock; + private $resultInterfaceFactory; /** * Set up @@ -36,23 +33,20 @@ class GeneralResponseValidatorTest extends \PHPUnit\Framework\TestCase */ protected function setUp() { - $this->resultInterfaceFactoryMock = $this->getMockBuilder( - \Magento\Payment\Gateway\Validator\ResultInterfaceFactory::class - )->disableOriginalConstructor() - ->setMethods(['create']) - ->getMock(); - $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class) + $this->resultInterfaceFactory = $this->getMockBuilder(ResultInterfaceFactory::class) ->disableOriginalConstructor() + ->setMethods(['create']) ->getMock(); $this->responseValidator = new GeneralResponseValidator( - $this->resultInterfaceFactoryMock, - $this->subjectReaderMock + $this->resultInterfaceFactory, + new SubjectReader(), + new ErrorCodeValidator() ); } /** - * Run test for validate method + * Checks a case when the validator processes successful and failed transactions. * * @param array $validationSubject * @param bool $isValid @@ -61,45 +55,52 @@ protected function setUp() * * @dataProvider dataProviderTestValidate */ - public function testValidate(array $validationSubject, $isValid, $messages) + public function testValidate(array $validationSubject, bool $isValid, $messages) { - /** @var ResultInterface|\PHPUnit_Framework_MockObject_MockObject $resultMock */ - $resultMock = $this->createMock(ResultInterface::class); + $result = new Result($isValid, $messages); - $this->subjectReaderMock->expects(self::once()) - ->method('readResponseObject') - ->with($validationSubject) - ->willReturn($validationSubject['response']['object']); - - $this->resultInterfaceFactoryMock->expects(self::once()) - ->method('create') + $this->resultInterfaceFactory->method('create') ->with([ 'isValid' => $isValid, 'failsDescription' => $messages ]) - ->willReturn($resultMock); + ->willReturn($result); - $actualMock = $this->responseValidator->validate($validationSubject); + $actual = $this->responseValidator->validate($validationSubject); - self::assertEquals($resultMock, $actualMock); + self::assertEquals($result, $actual); } /** + * Gets variations for different type of response. + * * @return array */ public function dataProviderTestValidate() { - $successTrue = new \stdClass(); - $successTrue->success = true; + $successTransaction = new \stdClass(); + $successTransaction->success = true; + + $failureTransaction = new \stdClass(); + $failureTransaction->success = false; + $failureTransaction->message = 'Transaction was failed.'; - $successFalse = new \stdClass(); - $successFalse->success = false; + $errors = [ + 'errors' => [ + [ + 'code' => 81804, + 'attribute' => 'base', + 'message' => 'Cannot process transaction.' + ] + ] + ]; + $errorTransaction = new Error(['errors' => $errors]); return [ [ 'validationSubject' => [ 'response' => [ - 'object' => $successTrue + 'object' => $successTransaction ], ], 'isValid' => true, @@ -108,12 +109,24 @@ public function dataProviderTestValidate() [ 'validationSubject' => [ 'response' => [ - 'object' => $successFalse + 'object' => $failureTransaction + ] + ], + 'isValid' => false, + [ + __('Transaction was failed.') + ] + ], + [ + 'validationSubject' => [ + 'response' => [ + 'object' => $errorTransaction ] ], 'isValid' => false, [ - __('Braintree error response.') + __('Braintree error response.'), + 81804 ] ] ]; diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/PaymentNonceResponseValidatorTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/PaymentNonceResponseValidatorTest.php index 03363b5463d78..a59bbb6f0d387 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/PaymentNonceResponseValidatorTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/PaymentNonceResponseValidatorTest.php @@ -5,15 +5,13 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Validator; -use Braintree\Transaction; +use Magento\Braintree\Gateway\SubjectReader; +use Magento\Braintree\Gateway\Validator\ErrorCodeValidator; use Magento\Braintree\Gateway\Validator\PaymentNonceResponseValidator; -use Magento\Payment\Gateway\Validator\ResultInterface; +use Magento\Payment\Gateway\Validator\Result; use Magento\Payment\Gateway\Validator\ResultInterfaceFactory; -use Magento\Braintree\Gateway\SubjectReader; +use PHPUnit_Framework_MockObject_MockObject as MockObject; -/** - * Class PaymentNonceResponseValidatorTest - */ class PaymentNonceResponseValidatorTest extends \PHPUnit\Framework\TestCase { /** @@ -22,35 +20,24 @@ class PaymentNonceResponseValidatorTest extends \PHPUnit\Framework\TestCase private $validator; /** - * @var ResultInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject + * @var ResultInterfaceFactory|MockObject */ private $resultInterfaceFactory; - /** - * @var SubjectReader|\PHPUnit_Framework_MockObject_MockObject - */ - private $subjectReader; - protected function setUp() { $this->resultInterfaceFactory = $this->getMockBuilder(ResultInterfaceFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); - $this->subjectReader = $this->getMockBuilder(SubjectReader::class) - ->disableOriginalConstructor() - ->setMethods(['readResponseObject']) - ->getMock(); $this->validator = new PaymentNonceResponseValidator( $this->resultInterfaceFactory, - $this->subjectReader + new SubjectReader(), + new ErrorCodeValidator() ); } - /** - * @covers \Magento\Braintree\Gateway\Validator\PaymentNonceResponseValidator::validate - */ public function testFailedValidate() { $obj = new \stdClass(); @@ -61,23 +48,12 @@ public function testFailedValidate() ] ]; - $this->subjectReader->expects(static::once()) - ->method('readResponseObject') - ->willReturn($obj); - - $result = $this->createMock(ResultInterface::class); - $this->resultInterfaceFactory->expects(self::once()) - ->method('create') - ->with([ - 'isValid' => false, - 'failsDescription' => [ - __('Payment method nonce can\'t be retrieved.') - ] - ]) + $result = new Result(false, [__('Payment method nonce can\'t be retrieved.')]); + $this->resultInterfaceFactory->method('create') ->willReturn($result); $actual = $this->validator->validate($subject); - static::assertEquals($result, $actual); + self::assertEquals($result, $actual); } public function testValidateSuccess() @@ -93,20 +69,11 @@ public function testValidateSuccess() ] ]; - $this->subjectReader->expects(static::once()) - ->method('readResponseObject') - ->willReturn($obj); - - $result = $this->createMock(ResultInterface::class); - $this->resultInterfaceFactory->expects(self::once()) - ->method('create') - ->with([ - 'isValid' => true, - 'failsDescription' => [] - ]) + $result = new Result(true); + $this->resultInterfaceFactory->method('create') ->willReturn($result); $actual = $this->validator->validate($subject); - static::assertEquals($result, $actual); + self::assertEquals($result, $actual); } } diff --git a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ResponseValidatorTest.php b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ResponseValidatorTest.php index 4bd446079f9a7..ba4d6cae062ee 100644 --- a/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ResponseValidatorTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ResponseValidatorTest.php @@ -5,15 +5,16 @@ */ namespace Magento\Braintree\Test\Unit\Gateway\Validator; +use Braintree\Result\Successful; use Braintree\Transaction; +use Magento\Braintree\Gateway\SubjectReader; +use Magento\Braintree\Gateway\Validator\ErrorCodeValidator; +use Magento\Braintree\Gateway\Validator\ResponseValidator; use Magento\Framework\Phrase; +use Magento\Payment\Gateway\Validator\Result; use Magento\Payment\Gateway\Validator\ResultInterface; use Magento\Payment\Gateway\Validator\ResultInterfaceFactory; -use Magento\Braintree\Gateway\Validator\ResponseValidator; -use Magento\Braintree\Gateway\SubjectReader; use PHPUnit_Framework_MockObject_MockObject as MockObject; -use Braintree\Result\Error; -use Braintree\Result\Successful; /** * Class ResponseValidatorTest @@ -30,11 +31,6 @@ class ResponseValidatorTest extends \PHPUnit\Framework\TestCase */ private $resultInterfaceFactory; - /** - * @var SubjectReader|MockObject - */ - private $subjectReader; - /** * Set up * @@ -46,13 +42,11 @@ protected function setUp() ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); - $this->subjectReader = $this->getMockBuilder(SubjectReader::class) - ->disableOriginalConstructor() - ->getMock(); $this->responseValidator = new ResponseValidator( $this->resultInterfaceFactory, - $this->subjectReader + new SubjectReader(), + new ErrorCodeValidator() ); } @@ -65,11 +59,6 @@ public function testValidateReadResponseException() 'response' => null ]; - $this->subjectReader->expects(self::once()) - ->method('readResponseObject') - ->with($validationSubject) - ->willThrowException(new \InvalidArgumentException()); - $this->responseValidator->validate($validationSubject); } @@ -82,11 +71,6 @@ public function testValidateReadResponseObjectException() 'response' => ['object' => null] ]; - $this->subjectReader->expects(self::once()) - ->method('readResponseObject') - ->with($validationSubject) - ->willThrowException(new \InvalidArgumentException()); - $this->responseValidator->validate($validationSubject); } @@ -103,19 +87,9 @@ public function testValidateReadResponseObjectException() public function testValidate(array $validationSubject, $isValid, $messages) { /** @var ResultInterface|MockObject $result */ - $result = $this->createMock(ResultInterface::class); - - $this->subjectReader->expects(self::once()) - ->method('readResponseObject') - ->with($validationSubject) - ->willReturn($validationSubject['response']['object']); - - $this->resultInterfaceFactory->expects(self::once()) - ->method('create') - ->with([ - 'isValid' => $isValid, - 'failsDescription' => $messages - ]) + $result = new Result($isValid, $messages); + + $this->resultInterfaceFactory->method('create') ->willReturn($result); $actual = $this->responseValidator->validate($validationSubject); @@ -141,8 +115,6 @@ public function dataProviderTestValidate() $transactionDeclined->transaction = new \stdClass(); $transactionDeclined->transaction->status = Transaction::SETTLEMENT_DECLINED; - $errorResult = new Error(['errors' => []]); - return [ [ 'validationSubject' => [ @@ -175,18 +147,6 @@ public function dataProviderTestValidate() [ __('Wrong transaction status') ] - ], - [ - 'validationSubject' => [ - 'response' => [ - 'object' => $errorResult, - ] - ], - 'isValid' => false, - [ - __('Braintree error response.'), - __('Wrong transaction status') - ] ] ]; } diff --git a/app/code/Magento/Braintree/etc/adminhtml/braintree_error_mapping.xml b/app/code/Magento/Braintree/etc/adminhtml/braintree_error_mapping.xml new file mode 100644 index 0000000000000..611f9372518fc --- /dev/null +++ b/app/code/Magento/Braintree/etc/adminhtml/braintree_error_mapping.xml @@ -0,0 +1,32 @@ + + + + + Credit card type is not accepted by this merchant account. + Transaction can only be voided if status is authorized, submitted_for_settlement, or - for PayPal - settlement_pending. + Credit transactions cannot be refunded. + Cannot refund a transaction unless it is settled. + Cannot submit for settlement unless status is authorized. + Customer does not have any credit cards. + Transaction has already been completely refunded. + Payment instrument type is not accepted by this merchant account. + Processor authorization code cannot be set unless for a voice authorization. + Refund amount is too large. + Settlement amount is too large. + Cannot provide a billing address unless also providing a credit card. + Cannot refund a transaction with a suspended merchant account. + Merchant account does not support refunds. + Cannot refund a transaction transaction in settling status on this merchant account. Try again after the transaction has settled. + PayPal is not enabled for your merchant account. + Partial settlements are not supported by this processor. + Cannot submit for partial settlement. + Transaction can not be voided if status of a PayPal partial settlement child transaction is settlement_pending. + Too many concurrent attempts to refund this transaction. Try again later. + Too many concurrent attempts to void this transaction. Try again later. + + diff --git a/app/code/Magento/Braintree/etc/adminhtml/di.xml b/app/code/Magento/Braintree/etc/adminhtml/di.xml index 90fc927ed4f80..bb5763469cad3 100644 --- a/app/code/Magento/Braintree/etc/adminhtml/di.xml +++ b/app/code/Magento/Braintree/etc/adminhtml/di.xml @@ -45,6 +45,19 @@
    + + + + Magento\Braintree\Gateway\ErrorMapper\VirtualErrorMessageMapper + + + + + Magento\Braintree\Gateway\ErrorMapper\VirtualErrorMessageMapper + + + + diff --git a/app/code/Magento/Braintree/etc/braintree_error_mapping.xml b/app/code/Magento/Braintree/etc/braintree_error_mapping.xml new file mode 100644 index 0000000000000..81da0a252e567 --- /dev/null +++ b/app/code/Magento/Braintree/etc/braintree_error_mapping.xml @@ -0,0 +1,64 @@ + + + + + Credit card type is not accepted by this merchant account. + CVV is required. + CVV must be 4 digits for American Express and 3 digits for other card types. + Expiration date is required. + Expiration date is invalid. + Expiration year is invalid. It must be between 1975 and 2201. + Expiration month is invalid. + Expiration year is invalid. + Credit card number is required. + Credit card number is invalid. + Credit card number must be 12-19 digits. + Cardholder name is too long. + CVV verification failed. + Postal code verification failed. + Credit card number is prohibited. + Addresses must have at least one field filled in. + Company is too long. + Extended address is too long. + First name is too long. + Last name is too long. + Locality is too long. + Postal code is required. + Postal code may contain no more than 9 letter or number characters. + Region is too long. + Street address is required. + Street address is too long. + Postal code can only contain letters, numbers, spaces, and hyphens. + US state codes must be two characters to meet PayPal Seller Protection requirements. + Incomplete PayPal account information. + Invalid PayPal account information. + PayPal Accounts are not accepted by this merchant account. + Credit card type is not accepted by this merchant account. + Credit card type is not accepted by this merchant account. + Billing address format is invalid. + Country name is not an accepted country. + Country code is not accepted. Please contact the store administrator. + Provided country information is inconsistent. + Country code is not accepted. Please contact the store administrator. + Country code is not accepted. Please contact the store administrator. + Customer has already reached the maximum of 50 addresses. + Address is invalid. Please contact the store administrator. + Address is invalid. Please contact the store administrator. + Address is invalid. Please contact the store administrator. + Address is invalid. Please contact the store administrator. + Address is invalid. Please contact the store administrator. + Address is invalid. Please contact the store administrator. + Address is invalid. Please contact the store administrator. + Address is invalid. Please contact the store administrator. + Address is invalid. Please contact the store administrator. + Error communicating with PayPal. + PayPal authentication expired. + Error executing PayPal order. + Error executing PayPal billing agreement. + + diff --git a/app/code/Magento/Braintree/etc/di.xml b/app/code/Magento/Braintree/etc/di.xml index 86c2911815754..a834503c5882a 100644 --- a/app/code/Magento/Braintree/etc/di.xml +++ b/app/code/Magento/Braintree/etc/di.xml @@ -193,6 +193,23 @@ + + + braintree_error_mapping.xml + + + + + Magento\Braintree\Gateway\ErrorMapper\VirtualConfigReader + braintree_error_mapper + + + + + Magento\Braintree\Gateway\ErrorMapper\VirtualMappingData + + + @@ -201,6 +218,7 @@ Magento\Braintree\Gateway\Http\Client\TransactionSale BraintreeAuthorizationHandler Magento\Braintree\Gateway\Validator\ResponseValidator + Magento\Braintree\Gateway\ErrorMapper\VirtualErrorMessageMapper @@ -240,6 +258,7 @@ Magento\Braintree\Gateway\Http\Client\TransactionSubmitForSettlement Magento\Braintree\Gateway\Response\TransactionIdHandler Magento\Braintree\Gateway\Validator\ResponseValidator + Magento\Braintree\Gateway\ErrorMapper\VirtualErrorMessageMapper @@ -258,6 +277,7 @@ Magento\Braintree\Gateway\Http\Client\TransactionSale BraintreeVaultResponseHandler Magento\Braintree\Gateway\Validator\ResponseValidator + Magento\Braintree\Gateway\ErrorMapper\VirtualErrorMessageMapper @@ -296,6 +316,7 @@ Magento\Braintree\Gateway\Http\Client\TransactionSale Magento\Braintree\Gateway\Response\TransactionIdHandler Magento\Braintree\Gateway\Validator\ResponseValidator + Magento\Braintree\Gateway\ErrorMapper\VirtualErrorMessageMapper diff --git a/app/code/Magento/Braintree/i18n/en_US.csv b/app/code/Magento/Braintree/i18n/en_US.csv index 116f459a1c1c8..194ad14d49751 100644 --- a/app/code/Magento/Braintree/i18n/en_US.csv +++ b/app/code/Magento/Braintree/i18n/en_US.csv @@ -129,3 +129,65 @@ Amount,Amount "Refund Ids","Refund Ids" "Settlement Batch ID","Settlement Batch ID" Currency,Currency +"Addresses must have at least one field filled in.","Addresses must have at least one field filled in." +"Company is too long.","Company is too long." +"Extended address is too long.","Extended address is too long." +"First name is too long.","First name is too long." +"Last name is too long.","Last name is too long." +"Locality is too long.","Locality is too long." +"Postal code can only contain letters, numbers, spaces, and hyphens.","Postal code can only contain letters, numbers, spaces, and hyphens." +"Postal code is required.","Postal code is required." +"Postal code may contain no more than 9 letter or number characters.","Postal code may contain no more than 9 letter or number characters." +"Region is too long.","Region is too long." +"Street address is required.","Street address is required." +"Street address is too long.","Street address is too long." +"US state codes must be two characters to meet PayPal Seller Protection requirements.","US state codes must be two characters to meet PayPal Seller Protection requirements." +"Country name is not an accepted country.","Country name is not an accepted country." +"Provided country information is inconsistent.","Provided country information is inconsistent." +"Country code is not accepted. Please contact the store administrator.","Country code is not accepted. Please contact the store administrator." +"Customer has already reached the maximum of 50 addresses.","Customer has already reached the maximum of 50 addresses." +"Address is invalid. Please contact the store administrator.","Address is invalid. Please contact the store administrator." +"Address is invalid.","Address is invalid." +"Billing address format is invalid.","Billing address format is invalid." +"Cardholder name is too long.","Cardholder name is too long." +"Credit card type is not accepted by this merchant account.","Credit card type is not accepted by this merchant account." +"CVV is required.","CVV is required." +"CVV must be 4 digits for American Express and 3 digits for other card types.","CVV must be 4 digits for American Express and 3 digits for other card types." +"Expiration date is required.","Expiration date is required." +"Expiration date is invalid.","Expiration date is invalid." +"Expiration year is invalid. It must be between 1975 and 2201.","Expiration year is invalid. It must be between 1975 and 2201." +"Expiration month is invalid.","Expiration month is invalid." +"Expiration year is invalid.","Expiration year is invalid." +"Credit card number is required.","Credit card number is required." +"Credit card number is invalid.","Credit card number is invalid." +"Credit card number must be 12-19 digits.","Credit card number must be 12-19 digits." +"CVV verification failed.","CVV verification failed." +"Postal code verification failed.","Postal code verification failed." +"Credit card number is prohibited.","Credit card number is prohibited." +"Incomplete PayPal account information.","Incomplete PayPal account information." +"Invalid PayPal account information.","Invalid PayPal account information." +"PayPal Accounts are not accepted by this merchant account.","PayPal Accounts are not accepted by this merchant account." +"Error communicating with PayPal.","Error communicating with PayPal." +"PayPal authentication expired.","PayPal authentication expired." +"Error executing PayPal order.","Error executing PayPal order." +"Error executing PayPal billing agreement.","Error executing PayPal billing agreement." +"Cannot provide a billing address unless also providing a credit card.","Cannot provide a billing address unless also providing a credit card." +"Transaction can only be voided if status is authorized, submitted_for_settlement, or - for PayPal - settlement_pending.","Transaction can only be voided if status is authorized, submitted_for_settlement, or - for PayPal - settlement_pending." +"Credit transactions cannot be refunded.","Credit transactions cannot be refunded." +"Cannot refund a transaction unless it is settled.","Cannot refund a transaction unless it is settled." +"Cannot submit for settlement unless status is authorized.","Cannot submit for settlement unless status is authorized." +"Customer does not have any credit cards.","Customer does not have any credit cards." +"Transaction has already been completely refunded.","Transaction has already been completely refunded." +"Payment instrument type is not accepted by this merchant account.","Payment instrument type is not accepted by this merchant account." +"Processor authorization code cannot be set unless for a voice authorization.","Processor authorization code cannot be set unless for a voice authorization." +"Refund amount is too large.","Refund amount is too large." +"Settlement amount is too large.","Settlement amount is too large." +"Cannot refund a transaction with a suspended merchant account.","Cannot refund a transaction with a suspended merchant account." +"Merchant account does not support refunds.","Merchant account does not support refunds." +"PayPal is not enabled for your merchant account.","PayPal is not enabled for your merchant account." +"Cannot refund a transaction transaction in settling status on this merchant account. Try again after the transaction has settled.","Cannot refund a transaction transaction in settling status on this merchant account. Try again after the transaction has settled." +"Cannot submit for partial settlement.","Cannot submit for partial settlement." +"Partial settlements are not supported by this processor.","Partial settlements are not supported by this processor." +"Transaction can not be voided if status of a PayPal partial settlement child transaction is settlement_pending.","Transaction can not be voided if status of a PayPal partial settlement child transaction is settlement_pending." +"Too many concurrent attempts to refund this transaction. Try again later.","Too many concurrent attempts to refund this transaction. Try again later." +"Too many concurrent attempts to void this transaction. Try again later.","Too many concurrent attempts to void this transaction. Try again later." \ No newline at end of file diff --git a/app/code/Magento/Payment/Gateway/Command/GatewayCommand.php b/app/code/Magento/Payment/Gateway/Command/GatewayCommand.php index a6f9d4383918c..bb07408ad0e06 100644 --- a/app/code/Magento/Payment/Gateway/Command/GatewayCommand.php +++ b/app/code/Magento/Payment/Gateway/Command/GatewayCommand.php @@ -5,14 +5,13 @@ */ namespace Magento\Payment\Gateway\Command; -use Magento\Framework\Phrase; use Magento\Payment\Gateway\CommandInterface; +use Magento\Payment\Gateway\ErrorMapper\ErrorMessageMapperInterface; use Magento\Payment\Gateway\Http\ClientInterface; use Magento\Payment\Gateway\Http\TransferFactoryInterface; -use Magento\Payment\Gateway\Request; use Magento\Payment\Gateway\Request\BuilderInterface; -use Magento\Payment\Gateway\Response; use Magento\Payment\Gateway\Response\HandlerInterface; +use Magento\Payment\Gateway\Validator\ResultInterface; use Magento\Payment\Gateway\Validator\ValidatorInterface; use Psr\Log\LoggerInterface; @@ -54,6 +53,11 @@ class GatewayCommand implements CommandInterface */ private $logger; + /** + * @var ErrorMessageMapperInterface + */ + private $errorMessageMapper; + /** * @param BuilderInterface $requestBuilder * @param TransferFactoryInterface $transferFactory @@ -61,6 +65,7 @@ class GatewayCommand implements CommandInterface * @param LoggerInterface $logger * @param HandlerInterface $handler * @param ValidatorInterface $validator + * @param ErrorMessageMapperInterface|null $errorMessageMapper */ public function __construct( BuilderInterface $requestBuilder, @@ -68,7 +73,8 @@ public function __construct( ClientInterface $client, LoggerInterface $logger, HandlerInterface $handler = null, - ValidatorInterface $validator = null + ValidatorInterface $validator = null, + ErrorMessageMapperInterface $errorMessageMapper = null ) { $this->requestBuilder = $requestBuilder; $this->transferFactory = $transferFactory; @@ -76,6 +82,7 @@ public function __construct( $this->handler = $handler; $this->validator = $validator; $this->logger = $logger; + $this->errorMessageMapper = $errorMessageMapper; } /** @@ -98,10 +105,7 @@ public function execute(array $commandSubject) array_merge($commandSubject, ['response' => $response]) ); if (!$result->isValid()) { - $this->logExceptions($result->getFailsDescription()); - throw new CommandException( - __('Transaction has been declined. Please try again later.') - ); + $this->processErrors($result); } } @@ -114,13 +118,33 @@ public function execute(array $commandSubject) } /** - * @param Phrase[] $fails - * @return void + * Tries to map error messages from validation result and logs processed message. + * Throws an exception with mapped message or default error. + * + * @param ResultInterface $result + * @throws CommandException */ - private function logExceptions(array $fails) + private function processErrors(ResultInterface $result) { - foreach ($fails as $failPhrase) { - $this->logger->critical((string) $failPhrase); + $messages = []; + foreach ($result->getFailsDescription() as $failPhrase) { + $message = (string) $failPhrase; + + // error messages mapper can be not configured if payment method doesn't have custom error messages. + if ($this->errorMessageMapper !== null) { + $mapped = (string) $this->errorMessageMapper->getMessage($message); + if (!empty($mapped)) { + $messages[] = $mapped; + $message = $mapped; + } + } + $this->logger->critical('Payment Error: ' . $message); } + + throw new CommandException( + !empty($messages) + ? __(implode(PHP_EOL, $messages)) + : __('Transaction has been declined. Please try again later.') + ); } } diff --git a/app/code/Magento/Payment/Gateway/ErrorMapper/ErrorMessageMapper.php b/app/code/Magento/Payment/Gateway/ErrorMapper/ErrorMessageMapper.php new file mode 100644 index 0000000000000..c5759d41bf4d7 --- /dev/null +++ b/app/code/Magento/Payment/Gateway/ErrorMapper/ErrorMessageMapper.php @@ -0,0 +1,40 @@ +messageMapping = $messageMapping; + } + + /** + * @inheritdoc + */ + public function getMessage(string $code) + { + $message = $this->messageMapping->get($code); + return $message ? __($message) : null; + } +} diff --git a/app/code/Magento/Payment/Gateway/ErrorMapper/ErrorMessageMapperInterface.php b/app/code/Magento/Payment/Gateway/ErrorMapper/ErrorMessageMapperInterface.php new file mode 100644 index 0000000000000..077226fd9a062 --- /dev/null +++ b/app/code/Magento/Payment/Gateway/ErrorMapper/ErrorMessageMapperInterface.php @@ -0,0 +1,23 @@ +message` format and converts it to [code => message] array format. + */ +class XmlToArrayConverter implements ConverterInterface +{ + /** + * @inheritdoc + */ + public function convert($source) + { + $result = []; + $messageList = $source->getElementsByTagName('message'); + foreach ($messageList as $messageNode) { + $result[(string) $messageNode->getAttribute('code')] = (string) $messageNode->nodeValue; + } + return $result; + } +} diff --git a/app/code/Magento/Payment/Test/Unit/Gateway/Command/GatewayCommandTest.php b/app/code/Magento/Payment/Test/Unit/Gateway/Command/GatewayCommandTest.php index df8bdc9bca54b..d17a7f302f31b 100644 --- a/app/code/Magento/Payment/Test/Unit/Gateway/Command/GatewayCommandTest.php +++ b/app/code/Magento/Payment/Test/Unit/Gateway/Command/GatewayCommandTest.php @@ -6,11 +6,15 @@ namespace Magento\Payment\Test\Unit\Gateway\Command; use Magento\Payment\Gateway\Command\GatewayCommand; +use Magento\Payment\Gateway\ErrorMapper\ErrorMessageMapperInterface; use Magento\Payment\Gateway\Http\ClientInterface; use Magento\Payment\Gateway\Http\TransferFactoryInterface; +use Magento\Payment\Gateway\Http\TransferInterface; use Magento\Payment\Gateway\Request\BuilderInterface; use Magento\Payment\Gateway\Response\HandlerInterface; +use Magento\Payment\Gateway\Validator\ResultInterface; use Magento\Payment\Gateway\Validator\ValidatorInterface; +use PHPUnit_Framework_MockObject_MockObject as MockObject; use Psr\Log\LoggerInterface; /** @@ -18,175 +22,176 @@ */ class GatewayCommandTest extends \PHPUnit\Framework\TestCase { - /** @var GatewayCommand */ - protected $command; + /** + * @var GatewayCommand + */ + private $command; /** - * @var BuilderInterface|\PHPUnit_Framework_MockObject_MockObject + * @var BuilderInterface|MockObject */ - protected $requestBuilderMock; + private $requestBuilder; /** - * @var TransferFactoryInterface|\PHPUnit_Framework_MockObject_MockObject + * @var TransferFactoryInterface|MockObject */ - protected $transferFactoryMock; + private $transferFactory; /** - * @var ClientInterface|\PHPUnit_Framework_MockObject_MockObject + * @var ClientInterface|MockObject */ - protected $clientMock; + private $client; /** - * @var HandlerInterface|\PHPUnit_Framework_MockObject_MockObject + * @var HandlerInterface|MockObject */ - protected $responseHandlerMock; + private $responseHandler; /** - * @var ValidatorInterface|\PHPUnit_Framework_MockObject_MockObject + * @var ValidatorInterface|MockObject */ - protected $validatorMock; + private $validator; /** - * @var LoggerInterface |\PHPUnit_Framework_MockObject_MockObject + * @var LoggerInterface|MockObject */ private $logger; + /** + * @var ErrorMessageMapperInterface|MockObject + */ + private $errorMessageMapper; + protected function setUp() { - $this->requestBuilderMock = $this->createMock( - BuilderInterface::class - ); - $this->transferFactoryMock = $this->createMock( - TransferFactoryInterface::class - ); - $this->clientMock = $this->createMock( - ClientInterface::class - ); - $this->responseHandlerMock = $this->createMock( - HandlerInterface::class - ); - $this->validatorMock = $this->createMock( - ValidatorInterface::class - ); + $this->requestBuilder = $this->createMock(BuilderInterface::class); + $this->transferFactory = $this->createMock(TransferFactoryInterface::class); + $this->client = $this->createMock(ClientInterface::class); + $this->responseHandler = $this->createMock(HandlerInterface::class); + $this->validator = $this->createMock(ValidatorInterface::class); $this->logger = $this->createMock(LoggerInterface::class); + $this->errorMessageMapper = $this->createMock(ErrorMessageMapperInterface::class); $this->command = new GatewayCommand( - $this->requestBuilderMock, - $this->transferFactoryMock, - $this->clientMock, + $this->requestBuilder, + $this->transferFactory, + $this->client, $this->logger, - $this->responseHandlerMock, - $this->validatorMock + $this->responseHandler, + $this->validator, + $this->errorMessageMapper ); } public function testExecute() { $commandSubject = ['authorize']; - $request = [ - 'request_field1' => 'request_value1', - 'request_field2' => 'request_value2' - ]; - $response = ['response_field1' => 'response_value1']; - $validationResult = $this->getMockBuilder( - \Magento\Payment\Gateway\Validator\ResultInterface::class - ) - ->getMockForAbstractClass(); + $this->processRequest($commandSubject, true); - $transferO = $this->getMockBuilder( - \Magento\Payment\Gateway\Http\TransferInterface::class - ) - ->getMockForAbstractClass(); + $this->responseHandler->method('handle') + ->with($commandSubject, ['response_field1' => 'response_value1']); - $this->requestBuilderMock->expects(static::once()) - ->method('build') - ->with($commandSubject) - ->willReturn($request); + $this->command->execute($commandSubject); + } - $this->transferFactoryMock->expects(static::once()) - ->method('create') - ->with($request) - ->willReturn($transferO); + /** + * Checks a case when request fails. + * + * @expectedException \Magento\Payment\Gateway\Command\CommandException + * @expectedExceptionMessage Transaction has been declined. Please try again later. + */ + public function testExecuteValidationFail() + { + $commandSubject = ['authorize']; + $validationFailures = [ + __('Failure #1'), + __('Failure #2'), + ]; - $this->clientMock->expects(static::once()) - ->method('placeRequest') - ->with($transferO) - ->willReturn($response); - $this->validatorMock->expects(static::once()) - ->method('validate') - ->with(array_merge($commandSubject, ['response' =>$response])) - ->willReturn($validationResult); - $validationResult->expects(static::once()) - ->method('isValid') - ->willReturn(true); + $this->processRequest($commandSubject, false, $validationFailures); - $this->responseHandlerMock->expects(static::once()) - ->method('handle') - ->with($commandSubject, $response); + $this->logger->expects(self::exactly(count($validationFailures))) + ->method('critical') + ->withConsecutive( + [self::equalTo('Payment Error: ' . $validationFailures[0])], + [self::equalTo('Payment Error: ' . $validationFailures[1])] + ); $this->command->execute($commandSubject); } - public function testExecuteValidationFail() + /** + * Checks a case when request fails and response errors are mapped. + * + * @expectedException \Magento\Payment\Gateway\Command\CommandException + * @expectedExceptionMessage Failure Mapped + */ + public function testExecuteValidationFailWithMappedErrors() { - $this->expectException( - \Magento\Payment\Gateway\Command\CommandException::class - ); - $commandSubject = ['authorize']; - $request = [ - 'request_field1' => 'request_value1', - 'request_field2' => 'request_value2' - ]; - $response = ['response_field1' => 'response_value1']; $validationFailures = [ __('Failure #1'), __('Failure #2'), ]; - $validationResult = $this->getMockBuilder( - \Magento\Payment\Gateway\Validator\ResultInterface::class - ) - ->getMockForAbstractClass(); - $transferO = $this->getMockBuilder( - \Magento\Payment\Gateway\Http\TransferInterface::class - ) + $this->processRequest($commandSubject, false, $validationFailures); + + $this->errorMessageMapper->method('getMessage') + ->willReturnMap( + [ + ['Failure #1', 'Failure Mapped'], + ['Failure #2', null] + ] + ); + + $this->logger->expects(self::exactly(count($validationFailures))) + ->method('critical') + ->withConsecutive( + [self::equalTo('Payment Error: Failure Mapped')], + [self::equalTo('Payment Error: Failure #2')] + ); + + $this->command->execute($commandSubject); + } + + /** + * Performs command actions like request, response and validation. + * + * @param array $commandSubject + * @param bool $validationResult + * @param array $validationFailures + */ + private function processRequest(array $commandSubject, bool $validationResult, array $validationFailures = []) + { + $request = [ + 'request_field1' => 'request_value1', + 'request_field2' => 'request_value2' + ]; + $response = ['response_field1' => 'response_value1']; + $transferO = $this->getMockBuilder(TransferInterface::class) ->getMockForAbstractClass(); - $this->requestBuilderMock->expects(static::once()) - ->method('build') + $this->requestBuilder->method('build') ->with($commandSubject) ->willReturn($request); - $this->transferFactoryMock->expects(static::once()) - ->method('create') + $this->transferFactory->method('create') ->with($request) ->willReturn($transferO); - $this->clientMock->expects(static::once()) - ->method('placeRequest') + $this->client->method('placeRequest') ->with($transferO) ->willReturn($response); - $this->validatorMock->expects(static::once()) - ->method('validate') - ->with(array_merge($commandSubject, ['response' =>$response])) - ->willReturn($validationResult); - $validationResult->expects(static::once()) - ->method('isValid') - ->willReturn(false); - $validationResult->expects(static::once()) - ->method('getFailsDescription') - ->willReturn( - $validationFailures - ); - $this->logger->expects(static::exactly(count($validationFailures))) - ->method('critical') - ->withConsecutive( - [$validationFailures[0]], - [$validationFailures[1]] - ); + $result = $this->getMockBuilder(ResultInterface::class) + ->getMockForAbstractClass(); - $this->command->execute($commandSubject); + $this->validator->method('validate') + ->with(array_merge($commandSubject, ['response' => $response])) + ->willReturn($result); + $result->method('isValid') + ->willReturn($validationResult); + $result->method('getFailsDescription') + ->willReturn($validationFailures); } } diff --git a/app/code/Magento/Payment/Test/Unit/Model/Method/FactoryTest.php b/app/code/Magento/Payment/Test/Unit/Model/Method/FactoryTest.php deleted file mode 100644 index f0cb19ef0fa0f..0000000000000 --- a/app/code/Magento/Payment/Test/Unit/Model/Method/FactoryTest.php +++ /dev/null @@ -1,89 +0,0 @@ -_objectManagerMock = $this->createMock(\Magento\Framework\ObjectManagerInterface::class); - $this->_factory = $objectManagerHelper->getObject( - \Magento\Payment\Model\Method\Factory::class, - ['objectManager' => $this->_objectManagerMock] - ); - } - - public function testCreateMethod() - { - $className = \Magento\Payment\Model\Method\AbstractMethod::class; - $methodMock = $this->createMock($className); - $this->_objectManagerMock->expects( - $this->once() - )->method( - 'create' - )->with( - $className, - [] - )->will( - $this->returnValue($methodMock) - ); - - $this->assertEquals($methodMock, $this->_factory->create($className)); - } - - public function testCreateMethodWithArguments() - { - $className = \Magento\Payment\Model\Method\AbstractMethod::class; - $data = ['param1', 'param2']; - $methodMock = $this->createMock($className); - $this->_objectManagerMock->expects( - $this->once() - )->method( - 'create' - )->with( - $className, - $data - )->will( - $this->returnValue($methodMock) - ); - - $this->assertEquals($methodMock, $this->_factory->create($className, $data)); - } - - /** - * @expectedException \Magento\Framework\Exception\LocalizedException - * @expectedExceptionMessage WrongClass class doesn't implement \Magento\Payment\Model\MethodInterface - */ - public function testWrongTypeException() - { - $className = 'WrongClass'; - $methodMock = $this->createMock($className); - $this->_objectManagerMock->expects( - $this->once() - )->method( - 'create' - )->with( - $className, - [] - )->will( - $this->returnValue($methodMock) - ); - - $this->_factory->create($className); - } -} diff --git a/app/code/Magento/Payment/Test/Unit/Model/Method/Specification/FactoryTest.php b/app/code/Magento/Payment/Test/Unit/Model/Method/Specification/FactoryTest.php deleted file mode 100644 index 9bdc90829f6fe..0000000000000 --- a/app/code/Magento/Payment/Test/Unit/Model/Method/Specification/FactoryTest.php +++ /dev/null @@ -1,71 +0,0 @@ -objectManagerMock = $this->createMock(\Magento\Framework\ObjectManagerInterface::class); - - $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); - $this->factory = $objectManagerHelper->getObject( - \Magento\Payment\Model\Method\Specification\Factory::class, - ['objectManager' => $this->objectManagerMock] - ); - } - - public function testCreateMethod() - { - $className = \Magento\Payment\Model\Method\SpecificationInterface::class; - $methodMock = $this->createMock($className); - $this->objectManagerMock->expects( - $this->once() - )->method( - 'get' - )->with( - $className - )->will( - $this->returnValue($methodMock) - ); - - $this->assertEquals($methodMock, $this->factory->create($className)); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Specification must implement SpecificationInterface - */ - public function testWrongTypeException() - { - $className = 'WrongClass'; - $methodMock = $this->createMock($className); - $this->objectManagerMock->expects( - $this->once() - )->method( - 'get' - )->with( - $className - )->will( - $this->returnValue($methodMock) - ); - - $this->factory->create($className); - } -} diff --git a/app/code/Magento/Payment/etc/di.xml b/app/code/Magento/Payment/etc/di.xml index e2de2244bff89..e62c5e1c1cd4d 100644 --- a/app/code/Magento/Payment/etc/di.xml +++ b/app/code/Magento/Payment/etc/di.xml @@ -12,6 +12,7 @@ + @@ -36,4 +37,29 @@ Magento\Payment\Gateway\Config\Config + + + + Magento_Payment + error_mapping.xsd + + + + + Magento\Payment\Gateway\ErrorMapper\XmlToArrayConverter + Magento\Payment\Gateway\ErrorMapper\VirtualSchemaLocator + error_mapping.xml + + + + + Magento\Payment\Gateway\ErrorMapper\VirtualConfigReader + payment_error_mapper + + + + + Magento\Payment\Gateway\ErrorMapper\NullMappingData + + diff --git a/app/code/Magento/Payment/etc/error_mapping.xsd b/app/code/Magento/Payment/etc/error_mapping.xsd new file mode 100644 index 0000000000000..97f3c181beb37 --- /dev/null +++ b/app/code/Magento/Payment/etc/error_mapping.xsd @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/tests/integration/testsuite/Magento/Checkout/Api/PaymentInformationManagementTest.php b/dev/tests/integration/testsuite/Magento/Checkout/Api/PaymentInformationManagementTest.php new file mode 100644 index 0000000000000..d2ade6296e71c --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Checkout/Api/PaymentInformationManagementTest.php @@ -0,0 +1,146 @@ +objectManager = Bootstrap::getObjectManager(); + + $this->client = $this->getMockBuilder(TransactionSale::class) + ->disableOriginalConstructor() + ->getMock(); + $this->objectManager->addSharedInstance($this->client, TransactionSale::class); + } + + /** + * @inheritdoc + */ + protected function tearDown() + { + $this->objectManager->removeSharedInstance(TransactionSale::class); + parent::tearDown(); + } + + /** + * Checks a case when payment method triggers an error during place order flow and + * error messages from payment gateway should be mapped. + * Error messages might be specific for different areas. + * + * @magentoAppIsolation enabled + * @magentoDataFixture Magento/Checkout/_files/quote_with_shipping_method.php + * @magentoConfigFixture current_store payment/braintree/active 1 + * @dataProvider getErrorPerAreaDataProvider + * @expectedException \Magento\Framework\Exception\CouldNotSaveException + */ + public function testSavePaymentInformationAndPlaceOrderWithErrors(string $area, string $errorMessage) + { + /** @var State $state */ + $state = $this->objectManager->get(State::class); + $state->setAreaCode($area); + + $quote = $this->getQuote('test_order_1'); + + /** @var PaymentInterface $payment */ + $payment = $this->objectManager->create(PaymentInterface::class); + $payment->setMethod(ConfigProvider::CODE); + + $errors = [ + 'errors' => [ + [ + 'code' => 'fake_code', + 'attribute' => 'base', + 'message' => 'Error message should not be mapped.' + ], + [ + 'code' => 81802, + 'attribute' => 'base', + 'message' => 'Company is too long.' + ], + [ + 'code' => 91511, + 'attribute' => 'base', + 'message' => 'Customer does not have any credit cards.' + ] + ] + ]; + $response = new Error(['errors' => $errors]); + + $this->client->method('placeRequest') + ->willReturn(['object' => $response]); + + $this->expectExceptionMessage($errorMessage); + + /** @var PaymentInformationManagementInterface $paymentInformationManagement */ + $paymentInformationManagement = $this->objectManager->get(PaymentInformationManagementInterface::class); + $paymentInformationManagement->savePaymentInformationAndPlaceOrder( + $quote->getId(), + $payment + ); + } + + /** + * Gets list of areas with specific error messages. + * + * @return array + */ + public function getErrorPerAreaDataProvider() + { + $globalAreaError = 'Company is too long.'; + return [ + ['area' => 'frontend', 'error' => $globalAreaError], + ['area' => 'adminhtml', 'error' => $globalAreaError . PHP_EOL . 'Customer does not have any credit cards.'], + ]; + } + + /** + * Retrieves quote by provided order ID. + * + * @param string $reservedOrderId + * @return CartInterface + */ + private function getQuote(string $reservedOrderId) : CartInterface + { + /** @var SearchCriteriaBuilder $searchCriteriaBuilder */ + $searchCriteriaBuilder = $this->objectManager->get(SearchCriteriaBuilder::class); + $searchCriteria = $searchCriteriaBuilder->addFilter('reserved_order_id', $reservedOrderId) + ->create(); + + /** @var CartRepositoryInterface $quoteRepository */ + $quoteRepository = $this->objectManager->get(CartRepositoryInterface::class); + $items = $quoteRepository->getList($searchCriteria) + ->getItems(); + + return array_pop($items); + } +} From 9a1a340b5c6bfde11c232dd85d7b93e439608cdd Mon Sep 17 00:00:00 2001 From: Andrii Voskoboinikov Date: Thu, 14 Dec 2017 10:43:59 +0200 Subject: [PATCH 581/653] MAGETWO-83365: Stabilize Frontend Pool for multi thread run --- .../Setup/Console/Command/GenerateFixturesCommand.php | 8 ++++---- setup/src/Magento/Setup/Fixtures/FixtureModel.php | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php b/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php index ef12f59231130..b42002cc1967a 100644 --- a/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php +++ b/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php @@ -8,9 +8,7 @@ use Magento\Framework\App\ResourceConnection; use Magento\Framework\Mview\View\CollectionInterface; -use Magento\Setup\Fixtures\ConfigsApplyFixture; use Magento\Setup\Fixtures\FixtureModel; -use Magento\Setup\Fixtures\IndexersStatesApplyFixture; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -86,7 +84,8 @@ protected function execute(InputInterface $input, OutputInterface $output) } /** @var \Magento\Setup\Fixtures\ConfigsApplyFixture $configFixture */ - $configFixture = $fixtureModel->getFixtureByName(ConfigsApplyFixture::class); + $configFixture = $fixtureModel + ->getFixtureByName(\Magento\Setup\Fixtures\ConfigsApplyFixture::class); $configFixture && $this->executeFixture($configFixture, $output); /** @var $config \Magento\Indexer\Model\Config */ @@ -108,7 +107,8 @@ protected function execute(InputInterface $input, OutputInterface $output) $this->clearChangelog(); /** @var \Magento\Setup\Fixtures\IndexersStatesApplyFixture $indexerFixture */ - $indexerFixture = $fixtureModel->getFixtureByName(IndexersStatesApplyFixture::class); + $indexerFixture = $fixtureModel + ->getFixtureByName(\Magento\Setup\Fixtures\IndexersStatesApplyFixture::class); $indexerFixture && $this->executeFixture($indexerFixture, $output); if (!$input->getOption(self::SKIP_REINDEX_OPTION)) { diff --git a/setup/src/Magento/Setup/Fixtures/FixtureModel.php b/setup/src/Magento/Setup/Fixtures/FixtureModel.php index 96c4025ac1871..104c9cb343216 100644 --- a/setup/src/Magento/Setup/Fixtures/FixtureModel.php +++ b/setup/src/Magento/Setup/Fixtures/FixtureModel.php @@ -171,7 +171,6 @@ public function getFixtureByName($name) return $this->fixturesByNames[$name]; } - /** * Get object manager * From 9ce4730da51d91f1a1925f41b9ae6d573d9e96bd Mon Sep 17 00:00:00 2001 From: serhii balko Date: Thu, 14 Dec 2017 10:52:52 +0200 Subject: [PATCH 582/653] #11743: [GitHub] AbstractPdf - ZendException font is not set --- .../testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php index a41a4ceb8ae5f..a70d4a3b6f0c1 100644 --- a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php +++ b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/Pdf/AbstractPdfTest.php @@ -63,7 +63,7 @@ public function testDrawLineBlocks() /** Generate multiline block, that cover more than one page */ $lines = []; - for($lineNumber = 1; $lineNumber <= 100; $lineNumber++) { + for ($lineNumber = 1; $lineNumber <= 100; $lineNumber++) { $lines[] = [[ 'feed' => 0, 'font_size' => 10, From 54dd81a49f5ba96bff7ca1aacbb721c00c6c134e Mon Sep 17 00:00:00 2001 From: Andrii Voskoboinikov Date: Thu, 14 Dec 2017 11:01:15 +0200 Subject: [PATCH 583/653] MAGETWO-83365: Stabilize Frontend Pool for multi thread run --- .../Magento/Setup/Console/Command/GenerateFixturesCommand.php | 1 + 1 file changed, 1 insertion(+) diff --git a/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php b/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php index b42002cc1967a..c817d2e07660a 100644 --- a/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php +++ b/setup/src/Magento/Setup/Console/Command/GenerateFixturesCommand.php @@ -17,6 +17,7 @@ /** * Command generates fixtures for performance tests + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class GenerateFixturesCommand extends Command { From 115ba8ef9d739ee131fccf5baff6d3a8b9d4b192 Mon Sep 17 00:00:00 2001 From: Tommy Quissens Date: Thu, 14 Dec 2017 10:02:52 +0100 Subject: [PATCH 584/653] updated code following code review & backward compatible development guide --- .../Model/Checkout/ConfigProvider.php | 17 +++++++++++---- .../Model/Checkout/ConfigProviderTest.php | 21 +++++++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php b/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php index 6b84ca9aaaa9a..4b87b3fa502e9 100644 --- a/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php +++ b/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php @@ -22,6 +22,12 @@ class ConfigProvider implements ConfigProviderInterface /** * @var UrlInterface + * @deprecated + */ + protected $urlBuilder; + + /** + * @var Url */ protected $customerUrl; @@ -31,18 +37,21 @@ class ConfigProvider implements ConfigProviderInterface protected $scopeConfig; /** - * @param Url $customerUrl + * @param UrlInterface $urlBuilder * @param StoreManagerInterface $storeManager * @param ScopeConfigInterface $scopeConfig + * @param Url $customerUrl */ public function __construct( - Url $customerUrl, + UrlInterface $urlBuilder, StoreManagerInterface $storeManager, - ScopeConfigInterface $scopeConfig + ScopeConfigInterface $scopeConfig, + Url $customerUrl = null ) { - $this->customerUrl = $customerUrl; + $this->urlBuilder=$urlBuilder; $this->storeManager = $storeManager; $this->scopeConfig = $scopeConfig; + $this->customerUrl = $customerUrl ?? \Magento\Framework\App\ObjectManager::getInstance()->get(\Magento\Customer\Model\Url::class); } /** diff --git a/app/code/Magento/Customer/Test/Unit/Model/Checkout/ConfigProviderTest.php b/app/code/Magento/Customer/Test/Unit/Model/Checkout/ConfigProviderTest.php index 6b4a3a4bc4d8e..58b099a1d387d 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/Checkout/ConfigProviderTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/Checkout/ConfigProviderTest.php @@ -29,7 +29,7 @@ class ConfigProviderTest extends \PHPUnit\Framework\TestCase /** * @var UrlInterface|\PHPUnit_Framework_MockObject_MockObject */ - protected $customerUrl; + protected $urlBuilder; /** * @var ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject @@ -41,6 +41,11 @@ class ConfigProviderTest extends \PHPUnit\Framework\TestCase */ protected $store; + /** + * @var Url|\PHPUnit_Framework_MockObject_MockObject + */ + private $customerUrl; + protected function setUp() { $this->storeManager = $this->getMockForAbstractClass( @@ -50,7 +55,12 @@ protected function setUp() false ); - $this->customerUrl = $this->createMock(\Magento\Customer\Model\Url::class); + $this->urlBuilder = $this->getMockForAbstractClass( + \Magento\Framework\UrlInterface::class, + [], + '', + false + ); $this->scopeConfig = $this->getMockForAbstractClass( \Magento\Framework\App\Config\ScopeConfigInterface::class, @@ -68,10 +78,13 @@ protected function setUp() ['getBaseUrl'] ); + $this->customerUrl = $this->createMock(\Magento\Customer\Model\Url::class); + $this->provider = new ConfigProvider( - $this->customerUrl, + $this->urlBuilder, $this->storeManager, - $this->scopeConfig + $this->scopeConfig, + $this->customerUrl ); } From e340347310cfd1c2e91e79f07d21291de7a55348 Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky Date: Thu, 14 Dec 2017 11:04:41 +0200 Subject: [PATCH 585/653] magento/magento2#10734: Magento 2 is not showing Popular Search Terms [backport] --- .../testsuite/Magento/Search/_files/query_rollback.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/integration/testsuite/Magento/Search/_files/query_rollback.php b/dev/tests/integration/testsuite/Magento/Search/_files/query_rollback.php index 5bf123fcd96ed..87b2d112220ff 100644 --- a/dev/tests/integration/testsuite/Magento/Search/_files/query_rollback.php +++ b/dev/tests/integration/testsuite/Magento/Search/_files/query_rollback.php @@ -19,6 +19,6 @@ try { $query->loadByQueryText($queryText); $query->delete(); - } catch (\Magento\Framework\Exception\NoSuchEntityException $exception) { + } catch (\Magento\Framework\Exception\NoSuchEntityException $exception) { } } From 97f77e64e7db6c04958632906ae9519590918414 Mon Sep 17 00:00:00 2001 From: Tommy Quissens Date: Thu, 14 Dec 2017 10:04:46 +0100 Subject: [PATCH 586/653] updated code following code review & backward compatible development guide --- .../Magento/Customer/Model/Checkout/ConfigProvider.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php b/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php index 4b87b3fa502e9..1e8b3daddae93 100644 --- a/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php +++ b/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php @@ -27,14 +27,14 @@ class ConfigProvider implements ConfigProviderInterface protected $urlBuilder; /** - * @var Url + * @var ScopeConfigInterface */ - protected $customerUrl; + protected $scopeConfig; /** - * @var ScopeConfigInterface + * @var Url */ - protected $scopeConfig; + private $customerUrl; /** * @param UrlInterface $urlBuilder From cba8749b4813a76dfd286f96576413bcd90404f9 Mon Sep 17 00:00:00 2001 From: Andrii Voskoboinikov Date: Thu, 14 Dec 2017 11:15:55 +0200 Subject: [PATCH 587/653] MAGETWO-83365: Stabilize Frontend Pool for multi thread run --- .../Test/Integrity/_files/blacklist/exception_hierarchy.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/exception_hierarchy.txt b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/exception_hierarchy.txt index 6897f43a02b34..79f4cc280a15e 100644 --- a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/exception_hierarchy.txt +++ b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/exception_hierarchy.txt @@ -11,3 +11,4 @@ \Magento\Framework\DB\FieldDataConversionException \Magento\Signifyd\Model\SignifydGateway\GatewayException \Magento\Signifyd\Model\SignifydGateway\ApiCallException +\Magento\Catalog\Model\Product\Image\NotLoadInfoImageException \ No newline at end of file From bb3932cfdb8985fe8c1e752ab99414bdffc47ebf Mon Sep 17 00:00:00 2001 From: Tommy Quissens Date: Thu, 14 Dec 2017 10:27:01 +0100 Subject: [PATCH 588/653] fixed code styles --- app/code/Magento/Customer/Model/Checkout/ConfigProvider.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php b/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php index 1e8b3daddae93..2ad32b0b42209 100644 --- a/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php +++ b/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php @@ -51,7 +51,8 @@ public function __construct( $this->urlBuilder=$urlBuilder; $this->storeManager = $storeManager; $this->scopeConfig = $scopeConfig; - $this->customerUrl = $customerUrl ?? \Magento\Framework\App\ObjectManager::getInstance()->get(\Magento\Customer\Model\Url::class); + $this->customerUrl = $customerUrl ?? \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Customer\Model\Url::class); } /** From 43ede3ca2718c3c3bb9242e99a8bd121680ecf6e Mon Sep 17 00:00:00 2001 From: Pavel Bystritsky Date: Thu, 14 Dec 2017 11:47:35 +0200 Subject: [PATCH 589/653] magento/magento2#10734: Magento 2 is not showing Popular Search Terms [backport] --- .../testsuite/Magento/Search/Block/TermTest.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Search/Block/TermTest.php b/dev/tests/integration/testsuite/Magento/Search/Block/TermTest.php index 08645869f36cb..c1b3b6062faad 100644 --- a/dev/tests/integration/testsuite/Magento/Search/Block/TermTest.php +++ b/dev/tests/integration/testsuite/Magento/Search/Block/TermTest.php @@ -37,10 +37,12 @@ class TermTest extends \PHPUnit\Framework\TestCase public function testGetTerms(array $expected) { $result = $this->term->getTerms(); - $actual = array_map(function ($object) { - return $object->setUpdatedAt(null)->getData(); - }, - $result); + $actual = array_map( + function ($object) { + return $object->setUpdatedAt(null)->getData(); + }, + $result + ); self::assertEquals( $expected, From ed5ffedd4cd28492f299e5d059414dd3d2540b8e Mon Sep 17 00:00:00 2001 From: nmalevanec Date: Thu, 14 Dec 2017 12:09:58 +0200 Subject: [PATCH 590/653] 6965: magento/magento2#6965: \Magento\Directory\Model\PriceCurrency::format() fails without conversion rate --- .../Magento/Directory/Model/PriceCurrency.php | 51 ++++++++++--------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/app/code/Magento/Directory/Model/PriceCurrency.php b/app/code/Magento/Directory/Model/PriceCurrency.php index c0c8e949ea4da..07d2e60d61335 100644 --- a/app/code/Magento/Directory/Model/PriceCurrency.php +++ b/app/code/Magento/Directory/Model/PriceCurrency.php @@ -77,15 +77,7 @@ public function format( $scope = null, $currency = null ) { - if ($currency instanceof Currency) { - $currentCurrency = $currency; - } elseif (is_string($currency)) { - $currentCurrency = $this->currencyFactory->create()->load($currency); - } else { - $currentCurrency = $this->getStore($scope)->getCurrentCurrency(); - } - - return $currentCurrency->formatPrecision($amount, $precision, [], $includeContainer); + return $this->createCurrency($scope, $currency)->formatPrecision($amount, $precision, [], $includeContainer); } /** @@ -108,20 +100,7 @@ public function convertAndFormat( */ public function getCurrency($scope = null, $currency = null) { - if ($currency instanceof Currency) { - $currentCurrency = $currency; - } elseif (is_string($currency)) { - $currency = $this->currencyFactory->create() - ->load($currency); - $baseCurrency = $this->getStore($scope) - ->getBaseCurrency(); - $currentCurrency = $baseCurrency->getRate($currency) ? $currency : $baseCurrency; - } else { - $currentCurrency = $this->getStore($scope) - ->getCurrentCurrency(); - } - - return $currentCurrency; + return $this->createCurrency($scope, $currency, true); } /** @@ -164,4 +143,30 @@ public function round($price) { return round($price, 2); } + + /** + * Get currency considering currency rate configuration. + * + * @param null|string|bool|int|\Magento\Framework\App\ScopeInterface $scope + * @param \Magento\Framework\Model\AbstractModel|string|null $currency + * @param bool $includeRate + * + * @return Currency + */ + private function createCurrency($scope, $currency, bool $includeRate = false) + { + if ($currency instanceof Currency) { + $currentCurrency = $currency; + } elseif (is_string($currency)) { + $currentCurrency = $this->currencyFactory->create()->load($currency); + if ($includeRate) { + $baseCurrency = $this->getStore($scope)->getBaseCurrency(); + $currentCurrency = $baseCurrency->getRate($currentCurrency) ? $currentCurrency : $baseCurrency; + } + } else { + $currentCurrency = $this->getStore($scope)->getCurrentCurrency(); + } + + return $currentCurrency; + } } From 8986107dfe5dadb582fc11113287cc933b06cf9e Mon Sep 17 00:00:00 2001 From: Tommy Quissens Date: Thu, 14 Dec 2017 11:46:01 +0100 Subject: [PATCH 591/653] add nullable in comment & code cleanup --- app/code/Magento/Customer/Model/Checkout/ConfigProvider.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php b/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php index 2ad32b0b42209..3746e0ae2a819 100644 --- a/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php +++ b/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php @@ -40,7 +40,7 @@ class ConfigProvider implements ConfigProviderInterface * @param UrlInterface $urlBuilder * @param StoreManagerInterface $storeManager * @param ScopeConfigInterface $scopeConfig - * @param Url $customerUrl + * @param Url|null $customerUrl */ public function __construct( UrlInterface $urlBuilder, @@ -48,7 +48,7 @@ public function __construct( ScopeConfigInterface $scopeConfig, Url $customerUrl = null ) { - $this->urlBuilder=$urlBuilder; + $this->urlBuilder = $urlBuilder; $this->storeManager = $storeManager; $this->scopeConfig = $scopeConfig; $this->customerUrl = $customerUrl ?? \Magento\Framework\App\ObjectManager::getInstance() From 5c87fb020fb2317eeaef1dc76132b3bd272b05ec Mon Sep 17 00:00:00 2001 From: Tommy Quissens Date: Thu, 14 Dec 2017 12:10:22 +0100 Subject: [PATCH 592/653] code cleanup --- app/code/Magento/Customer/Model/Checkout/ConfigProvider.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php b/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php index 3746e0ae2a819..36eabe3571ceb 100644 --- a/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php +++ b/app/code/Magento/Customer/Model/Checkout/ConfigProvider.php @@ -7,6 +7,7 @@ use Magento\Checkout\Model\ConfigProviderInterface; use Magento\Customer\Model\Url; +use Magento\Framework\App\ObjectManager; use Magento\Framework\UrlInterface; use Magento\Store\Model\StoreManagerInterface; use Magento\Framework\App\Config\ScopeConfigInterface; @@ -51,8 +52,8 @@ public function __construct( $this->urlBuilder = $urlBuilder; $this->storeManager = $storeManager; $this->scopeConfig = $scopeConfig; - $this->customerUrl = $customerUrl ?? \Magento\Framework\App\ObjectManager::getInstance() - ->get(\Magento\Customer\Model\Url::class); + $this->customerUrl = $customerUrl ?? ObjectManager::getInstance() + ->get(Url::class); } /** From 1ab55ec53228ac6183124eb54031e7a6bdf2ec99 Mon Sep 17 00:00:00 2001 From: Oleksandr Miroshnichenko Date: Thu, 14 Dec 2017 16:36:53 +0200 Subject: [PATCH 593/653] magento/magento2#8830: Can`t delete row in dynamicRows component --- .../Product/Form/Modifier/Attributes.php | 5 ++++ .../adminhtml/web/js/form/element/input.js | 11 ++++++-- .../product_attribute_add_form.xml | 24 +++-------------- .../web/js/form/element/swatch-visual.js | 26 ++++++++++++++++--- .../adminhtml/web/template/swatch-visual.html | 2 +- .../base/web/js/dynamic-rows/dynamic-rows.js | 6 +++++ 6 files changed, 46 insertions(+), 28 deletions(-) diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Attributes.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Attributes.php index aec6549f400fc..683a96133ad30 100644 --- a/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Attributes.php +++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/Form/Modifier/Attributes.php @@ -182,6 +182,11 @@ private function customizeAddAttributeModal(array $meta) . '.create_new_attribute_modal', 'actionName' => 'toggleModal', ], + [ + 'targetName' => 'product_form.product_form.add_attribute_modal' + . '.create_new_attribute_modal.product_attribute_add_form', + 'actionName' => 'destroyInserted' + ], [ 'targetName' => 'product_form.product_form.add_attribute_modal' diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/form/element/input.js b/app/code/Magento/Catalog/view/adminhtml/web/js/form/element/input.js index 51ffeaea0fc0c..2f6703cc92eac 100644 --- a/app/code/Magento/Catalog/view/adminhtml/web/js/form/element/input.js +++ b/app/code/Magento/Catalog/view/adminhtml/web/js/form/element/input.js @@ -54,9 +54,16 @@ define([ if (!_.isEmpty(this.suffixName) || _.isNumber(this.suffixName)) { suffixName = '.' + this.suffixName; } - this.dataScope = 'data.' + this.prefixName + '.' + this.elementName + suffixName; - this.links.value = this.provider + ':' + this.dataScope; + this.exportDataLink = 'data.' + this.prefixName + '.' + this.elementName + suffixName; + this.exports.value = this.provider + ':' + this.exportDataLink; + }, + + /** @inheritdoc */ + destroy: function () { + this._super(); + + this.source.remove(this.exportDataLink); }, /** diff --git a/app/code/Magento/Swatches/view/adminhtml/ui_component/product_attribute_add_form.xml b/app/code/Magento/Swatches/view/adminhtml/ui_component/product_attribute_add_form.xml index 4152c06fa3ddc..2fdf5f3cd0ea9 100644 --- a/app/code/Magento/Swatches/view/adminhtml/ui_component/product_attribute_add_form.xml +++ b/app/code/Magento/Swatches/view/adminhtml/ui_component/product_attribute_add_form.xml @@ -87,7 +87,6 @@ true - text_swatch dynamicRows @@ -96,8 +95,6 @@ true true container - text_swatch.position - @@ -183,15 +180,11 @@ - - true - text false - position - + true @@ -227,7 +220,6 @@ true true - visual_swatch dynamicRows @@ -236,8 +228,6 @@ true true container - text_swatch.position - @@ -276,7 +266,6 @@ true - swatchvisual @@ -290,7 +279,6 @@ text - optionvisual_default_store_view @@ -304,7 +292,6 @@ text - optionvisual_admin @@ -315,15 +302,10 @@ - - true - - text - false - position + false - + true diff --git a/app/code/Magento/Swatches/view/adminhtml/web/js/form/element/swatch-visual.js b/app/code/Magento/Swatches/view/adminhtml/web/js/form/element/swatch-visual.js index e63c9a2138a36..2fbce5aefbdeb 100644 --- a/app/code/Magento/Swatches/view/adminhtml/web/js/form/element/swatch-visual.js +++ b/app/code/Magento/Swatches/view/adminhtml/web/js/form/element/swatch-visual.js @@ -305,18 +305,30 @@ define([ */ initialize: function () { this._super() - .initOldCode(); + .initOldCode() + .on('value', this.onChangeColor.bind(this)); return this; }, + /** + * Handler function that execute when color changes. + * + * @param {String} data - color + */ + onChangeColor: function (data) { + if (!data) { + jQuery('.' + this.elementName).parent().removeClass('unavailable'); + } + }, + /** * Initialize wrapped former implementation. * * @returns {Object} Chainable. */ initOldCode: function () { - jQuery.async('.' + this.elementName, function (elem) { + jQuery.async('.' + this.elementName, this.name, function (elem) { oldCode(this.value(), elem.parentElement, this.uploadUrl, this.elementName); }.bind(this)); @@ -336,9 +348,15 @@ define([ this.elementName = this.prefixElementName + recordId; this.inputName = prefixName + '[' + this.elementName + ']'; - this.dataScope = 'data.' + this.prefixName + '.' + this.elementName; + this.exportDataLink = 'data.' + this.prefixName + '.' + this.elementName; + this.exports.value = this.provider + ':' + this.exportDataLink; + }, + + /** @inheritdoc */ + destroy: function () { + this._super(); - this.links.value = this.provider + ':' + this.dataScope; + this.source.remove(this.exportDataLink); }, /** diff --git a/app/code/Magento/Swatches/view/adminhtml/web/template/swatch-visual.html b/app/code/Magento/Swatches/view/adminhtml/web/template/swatch-visual.html index 271cea918b7be..3f4a5273bcde5 100644 --- a/app/code/Magento/Swatches/view/adminhtml/web/template/swatch-visual.html +++ b/app/code/Magento/Swatches/view/adminhtml/web/template/swatch-visual.html @@ -11,7 +11,7 @@ }, value: value "/> -
    +
    diff --git a/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js b/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js index 01fa03d1b4b67..9e7646f6b05b3 100644 --- a/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js +++ b/app/code/Magento/Ui/view/base/web/js/dynamic-rows/dynamic-rows.js @@ -224,6 +224,12 @@ define([ return this; }, + /** @inheritdoc */ + destroy: function () { + this.dnd().destroy(); + this._super(); + }, + /** * Calls 'initObservable' of parent * From f69dd0fd83b067a84faddebd378837568866c4bc Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov Date: Thu, 13 Jul 2017 16:50:27 +0300 Subject: [PATCH 594/653] Create CODE_OF_CONDUCT.md --- CODE_OF_CONDUCT.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000000..4e82725a7fb08 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at engcom@magento.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ From 104faf3cd9d4353cfa7f6dc86abb828eebc412cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=B6ller?= Date: Tue, 5 Sep 2017 14:37:14 +0200 Subject: [PATCH 595/653] Fix: Move GitHub-specific documents into .github --- CODE_OF_CONDUCT.md => .github/CODE_OF_CONDUCT.md | 0 CONTRIBUTING.md => .github/CONTRIBUTING.md | 0 ISSUE_TEMPLATE.md => .github/ISSUE_TEMPLATE.md | 0 PULL_REQUEST_TEMPLATE.md => .github/PULL_REQUEST_TEMPLATE.md | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename CODE_OF_CONDUCT.md => .github/CODE_OF_CONDUCT.md (100%) rename CONTRIBUTING.md => .github/CONTRIBUTING.md (100%) rename ISSUE_TEMPLATE.md => .github/ISSUE_TEMPLATE.md (100%) rename PULL_REQUEST_TEMPLATE.md => .github/PULL_REQUEST_TEMPLATE.md (100%) diff --git a/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md similarity index 100% rename from CODE_OF_CONDUCT.md rename to .github/CODE_OF_CONDUCT.md diff --git a/CONTRIBUTING.md b/.github/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTING.md rename to .github/CONTRIBUTING.md diff --git a/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md similarity index 100% rename from ISSUE_TEMPLATE.md rename to .github/ISSUE_TEMPLATE.md diff --git a/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md similarity index 100% rename from PULL_REQUEST_TEMPLATE.md rename to .github/PULL_REQUEST_TEMPLATE.md From 3d2e1eb5e9ddf20b6c4e78bedfea2d2403b62ff3 Mon Sep 17 00:00:00 2001 From: Ievgen Shakhsuvarov Date: Fri, 15 Dec 2017 01:15:27 +0200 Subject: [PATCH 596/653] Deny access to .github directory --- .github/.htaccess | 8 ++++++++ .htaccess | 9 --------- .htaccess.sample | 9 --------- 3 files changed, 8 insertions(+), 18 deletions(-) create mode 100644 .github/.htaccess diff --git a/.github/.htaccess b/.github/.htaccess new file mode 100644 index 0000000000000..707c26b075e16 --- /dev/null +++ b/.github/.htaccess @@ -0,0 +1,8 @@ + + order allow,deny + deny from all + += 2.4> + Require all denied + + diff --git a/.htaccess b/.htaccess index f824f0b7bbc59..6247830fa8d14 100644 --- a/.htaccess +++ b/.htaccess @@ -274,15 +274,6 @@ Require all denied - - - order allow,deny - deny from all - - = 2.4> - Require all denied - - order allow,deny diff --git a/.htaccess.sample b/.htaccess.sample index f3a4474aec949..3c412725f2134 100644 --- a/.htaccess.sample +++ b/.htaccess.sample @@ -251,15 +251,6 @@ Require all denied - - - order allow,deny - deny from all - - = 2.4> - Require all denied - - order allow,deny From 8870cf2a0943bcc7c85e44782284baeaf2ab39b9 Mon Sep 17 00:00:00 2001 From: RomanKis Date: Fri, 15 Dec 2017 10:37:29 +0200 Subject: [PATCH 597/653] magento/magento2#8615: REST API unable to make requests with slash (/) in SKU --- app/code/Magento/Webapi/Model/UrlDecoder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Webapi/Model/UrlDecoder.php b/app/code/Magento/Webapi/Model/UrlDecoder.php index f3bab1f45994f..5a8ae37c607bf 100644 --- a/app/code/Magento/Webapi/Model/UrlDecoder.php +++ b/app/code/Magento/Webapi/Model/UrlDecoder.php @@ -22,7 +22,7 @@ public function decodeParams(array $params) { foreach ($params as &$param) { if (is_array($param)) { - $this->decodeParams($param); + $param = $this->decodeParams($param); } else { if ($param !== null && is_string($param)) { $param = rawurldecode($param); From 370e526de6b6f67b5f07dea5bfbc91884f9311ea Mon Sep 17 00:00:00 2001 From: VasilinaHrebets Date: Fri, 15 Dec 2017 11:17:27 +0200 Subject: [PATCH 598/653] magento/magento2 - updated the "currency-addon-symbol__width" variable in "app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct". --- .../web/css/source/module/components/_currency-addon.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_currency-addon.less b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_currency-addon.less index 0c33b8d3b8a02..4ecf7e03e1be1 100644 --- a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_currency-addon.less +++ b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_currency-addon.less @@ -10,7 +10,7 @@ @currency-addon-symbol__border-color: @field-control__border-color; @currency-addon-symbol__color: @color-gray52; @currency-addon-symbol__height: @field-control__height; -@currency-addon-symbol__width: 1.6rem; +@currency-addon-symbol__width: 2.6rem; // // Common From ff7029f231b4289ced181485708e35fca0ad6a42 Mon Sep 17 00:00:00 2001 From: VasilinaHrebets Date: Fri, 15 Dec 2017 11:44:29 +0200 Subject: [PATCH 599/653] magento/magento2#12713: Currency symbol overlaps entered attribute option's price while creating Configurable Product - updated the "currency-addon-symbol__width" variable in "app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct". --- .../web/css/source/module/components/_currency-addon.less | 1 + 1 file changed, 1 insertion(+) diff --git a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_currency-addon.less b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_currency-addon.less index 4ecf7e03e1be1..1e5d03d6f25c2 100644 --- a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_currency-addon.less +++ b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_currency-addon.less @@ -12,6 +12,7 @@ @currency-addon-symbol__height: @field-control__height; @currency-addon-symbol__width: 2.6rem; + // // Common // _____________________________________________ From 96b4755b4d2da316987bc943163cc8634be468c3 Mon Sep 17 00:00:00 2001 From: Andrii Voskoboinikov Date: Fri, 15 Dec 2017 11:55:19 +0200 Subject: [PATCH 600/653] MAGETWO-83659: Enable metrics validation for PAT --- setup/performance-toolkit/benchmark.jmx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx index dcce4208957fb..154915cd3a4fc 100644 --- a/setup/performance-toolkit/benchmark.jmx +++ b/setup/performance-toolkit/benchmark.jmx @@ -231,7 +231,7 @@ apiProcessOrders - ${__P(apiProcessOrders,5)} + ${__P(apiProcessOrders,1)} = From ecf27becd6bc99842527153f45e0e7fc91c95624 Mon Sep 17 00:00:00 2001 From: Ihor Sviziev Date: Fri, 15 Dec 2017 12:12:05 +0200 Subject: [PATCH 601/653] magento/magento2#12206: Tracking link returns 404 page in admin panel --- app/code/Magento/Shipping/Helper/Data.php | 24 +++++++++++++++---- .../Magento/Shipping/etc/adminhtml/di.xml | 7 ++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/app/code/Magento/Shipping/Helper/Data.php b/app/code/Magento/Shipping/Helper/Data.php index 78e23cb4aeac2..dd0933b5a340e 100644 --- a/app/code/Magento/Shipping/Helper/Data.php +++ b/app/code/Magento/Shipping/Helper/Data.php @@ -11,6 +11,10 @@ */ namespace Magento\Shipping\Helper; +use Magento\Framework\App\ObjectManager; +use Magento\Framework\UrlInterface; +use Magento\Store\Model\StoreManagerInterface; + class Data extends \Magento\Framework\App\Helper\AbstractHelper { /** @@ -21,19 +25,28 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper protected $_allowedHashKeys = ['ship_id', 'order_id', 'track_id']; /** - * @var \Magento\Store\Model\StoreManagerInterface + * @var StoreManagerInterface */ protected $_storeManager; + /** + * @var UrlInterface|null + */ + private $url; + /** * @param \Magento\Framework\App\Helper\Context $context - * @param \Magento\Store\Model\StoreManagerInterface $storeManager + * @param StoreManagerInterface $storeManager + * @param UrlInterface|null $url */ public function __construct( \Magento\Framework\App\Helper\Context $context, - \Magento\Store\Model\StoreManagerInterface $storeManager + StoreManagerInterface $storeManager, + UrlInterface $url = null ) { $this->_storeManager = $storeManager; + $this->url = $url ?: ObjectManager::getInstance()->get(UrlInterface::class); + parent::__construct($context); } @@ -64,12 +77,13 @@ protected function _getTrackingUrl($key, $model, $method = 'getId') { $urlPart = "{$key}:{$model->{$method}()}:{$model->getProtectCode()}"; $params = [ + '_scope' => $model->getStoreId(), + '_nosid' => true, '_direct' => 'shipping/tracking/popup', '_query' => ['hash' => $this->urlEncoder->encode($urlPart)] ]; - $storeModel = $this->_storeManager->getStore($model->getStoreId()); - return $storeModel->getUrl('', $params); + return $this->url->getUrl('', $params); } /** diff --git a/app/code/Magento/Shipping/etc/adminhtml/di.xml b/app/code/Magento/Shipping/etc/adminhtml/di.xml index 54d5d9664e66f..36bd1ae9d3505 100644 --- a/app/code/Magento/Shipping/etc/adminhtml/di.xml +++ b/app/code/Magento/Shipping/etc/adminhtml/di.xml @@ -7,4 +7,11 @@ --> + + + + + Magento\Framework\Url + + From a847d89917cca3f1680dbebc2611503a63fa5b1a Mon Sep 17 00:00:00 2001 From: Sergii Shkiria Date: Fri, 15 Dec 2017 12:17:17 +0200 Subject: [PATCH 602/653] magento/magento2#12374: Model hasDataChanges always true. -Added false for collection items. --- .../Magento/Eav/Model/Entity/Collection/AbstractCollection.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php b/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php index bd3fd17393d7c..f623cfc8c7b37 100644 --- a/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php +++ b/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php @@ -920,6 +920,7 @@ public function load($printQuery = false, $logQuery = false) foreach ($this->_items as $item) { $item->setOrigData(); $this->beforeAddLoadedItem($item); + $item->setDataChanges(false); } \Magento\Framework\Profiler::stop('set_orig_data'); From 3e38118c1e7f92e77963a6ae4f42e66520e6f58f Mon Sep 17 00:00:00 2001 From: David Manners Date: Fri, 15 Dec 2017 10:45:24 +0000 Subject: [PATCH 603/653] magento/magento2#7241: No option to start with blank option for prefix and suffix in checkout. - replace usage of empty string for optional value with space so that the knockout.js picks up the optional values --- app/code/Magento/Customer/Block/Widget/Name.php | 14 ++++++++++---- app/code/Magento/Customer/Model/Options.php | 7 ++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Customer/Block/Widget/Name.php b/app/code/Magento/Customer/Block/Widget/Name.php index ecd09319cd85e..35f3bbefb8f00 100644 --- a/app/code/Magento/Customer/Block/Widget/Name.php +++ b/app/code/Magento/Customer/Block/Widget/Name.php @@ -106,8 +106,11 @@ public function getPrefixOptions() $prefixOptions = $this->options->getNamePrefixOptions(); if ($this->getObject() && !empty($prefixOptions)) { - $oldPrefix = $this->escapeHtml(trim($this->getObject()->getPrefix())); - $prefixOptions[$oldPrefix] = $oldPrefix; + $prefixOption = $this->getObject()->getPrefix(); + $oldPrefix = $this->escapeHtml(trim($prefixOption)); + if ($prefixOption !== null && !isset($prefixOptions[$oldPrefix]) && !isset($prefixOptions[$prefixOption])) { + $prefixOptions[$oldPrefix] = $oldPrefix; + } } return $prefixOptions; } @@ -161,8 +164,11 @@ public function getSuffixOptions() { $suffixOptions = $this->options->getNameSuffixOptions(); if ($this->getObject() && !empty($suffixOptions)) { - $oldSuffix = $this->escapeHtml(trim($this->getObject()->getSuffix())); - $suffixOptions[$oldSuffix] = $oldSuffix; + $suffixOption = $this->getObject()->getSuffix(); + $oldSuffix = $this->escapeHtml(trim($suffixOption)); + if ($suffixOption !== null && !isset($suffixOptions[$oldSuffix]) && !isset($suffixOptions[$suffixOption])) { + $suffixOptions[$oldSuffix] = $oldSuffix; + } } return $suffixOptions; } diff --git a/app/code/Magento/Customer/Model/Options.php b/app/code/Magento/Customer/Model/Options.php index b074adf39004f..7747e309d82a6 100644 --- a/app/code/Magento/Customer/Model/Options.php +++ b/app/code/Magento/Customer/Model/Options.php @@ -92,13 +92,14 @@ private function prepareNamePrefixSuffixOptions($options, $isOptional = false) } $result = []; $options = explode(';', $options); - if ($isOptional && trim(current($options))) { - array_unshift($options, ''); - } foreach ($options as $value) { $value = $this->escaper->escapeHtml(trim($value)); $result[$value] = $value; } + if ($isOptional && trim(current($options))) { + $result = array_merge([' ' => ' '], $result); + } + return $result; } } From e6a7a4e82099de6e90239e7b0598c3ff43d1fb48 Mon Sep 17 00:00:00 2001 From: Dzianis Yurevich Date: Fri, 15 Dec 2017 12:50:22 +0200 Subject: [PATCH 604/653] #6916 Fix notice during Update Bundle Product without changes in bundle items --- .../Adminhtml/Product/Initialization/Helper/Plugin/Bundle.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Bundle/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Bundle.php b/app/code/Magento/Bundle/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Bundle.php index 6688648a3c4fd..7f21d9e69c6e0 100644 --- a/app/code/Magento/Bundle/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Bundle.php +++ b/app/code/Magento/Bundle/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Bundle.php @@ -127,7 +127,7 @@ protected function processBundleOptionsData(\Magento\Catalog\Model\Product $prod } $options = []; foreach ($bundleOptionsData as $key => $optionData) { - if ((bool)$optionData['delete']) { + if (!empty($optionData['delete'])) { continue; } From 5cf0d3480fcc302f922fce12a588afd5e5771491 Mon Sep 17 00:00:00 2001 From: "a.muntian" Date: Fri, 15 Dec 2017 13:54:04 +0200 Subject: [PATCH 605/653] magento/magento2#11953: Product configuration creator does not warn about invalid SKUs - Added validation for SKU field inside "Configurations" tab --- .../Product/Form/Modifier/ConfigurablePanel.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/ConfigurableProduct/Ui/DataProvider/Product/Form/Modifier/ConfigurablePanel.php b/app/code/Magento/ConfigurableProduct/Ui/DataProvider/Product/Form/Modifier/ConfigurablePanel.php index 0e03dfe3cde51..f1d67eee8e6d0 100644 --- a/app/code/Magento/ConfigurableProduct/Ui/DataProvider/Product/Form/Modifier/ConfigurablePanel.php +++ b/app/code/Magento/ConfigurableProduct/Ui/DataProvider/Product/Form/Modifier/ConfigurablePanel.php @@ -466,7 +466,17 @@ protected function getRows() [], ['dataScope' => 'product_link'] ), - 'sku_container' => $this->getColumn('sku', __('SKU')), + 'sku_container' => $this->getColumn( + 'sku', + __('SKU'), + [ + 'validation' => + [ + 'min_text_length' => '1', + 'max_text_length' => '10', + ] + ] + ), 'price_container' => $this->getColumn( 'price', __('Price'), From 7418f1ac607c68003c2f4122f2b1bf07a35c044e Mon Sep 17 00:00:00 2001 From: zamoroka Date: Fri, 15 Dec 2017 14:19:27 +0200 Subject: [PATCH 606/653] magento/magento2#11953: Product configuration creator does not warn about invalid SKUs - Make sku field as required - Length of sku gets from Sku model --- .../DataProvider/Product/Form/Modifier/ConfigurablePanel.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/ConfigurableProduct/Ui/DataProvider/Product/Form/Modifier/ConfigurablePanel.php b/app/code/Magento/ConfigurableProduct/Ui/DataProvider/Product/Form/Modifier/ConfigurablePanel.php index f1d67eee8e6d0..9fd225e8acaab 100644 --- a/app/code/Magento/ConfigurableProduct/Ui/DataProvider/Product/Form/Modifier/ConfigurablePanel.php +++ b/app/code/Magento/ConfigurableProduct/Ui/DataProvider/Product/Form/Modifier/ConfigurablePanel.php @@ -5,6 +5,7 @@ */ namespace Magento\ConfigurableProduct\Ui\DataProvider\Product\Form\Modifier; +use Magento\Catalog\Model\Product\Attribute\Backend\Sku; use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\AbstractModifier; use Magento\Ui\Component\Container; use Magento\Ui\Component\Form; @@ -472,8 +473,8 @@ protected function getRows() [ 'validation' => [ - 'min_text_length' => '1', - 'max_text_length' => '10', + 'required-entry' => true, + 'max_text_length' => Sku::SKU_MAX_LENGTH, ] ] ), From 6b9c39cadfe86a62a5b0c4b13470431f0409c651 Mon Sep 17 00:00:00 2001 From: Oleh Kravets Date: Fri, 15 Dec 2017 12:40:17 +0100 Subject: [PATCH 607/653] magento/magento2#12719: Use full name in welcome message --- .../Magento/Theme/view/frontend/templates/html/header.phtml | 2 +- .../Checkout/Test/Constraint/AssertCartPerCustomer.php | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Theme/view/frontend/templates/html/header.phtml b/app/code/Magento/Theme/view/frontend/templates/html/header.phtml index cc3ea276e2230..58548a0ba268a 100644 --- a/app/code/Magento/Theme/view/frontend/templates/html/header.phtml +++ b/app/code/Magento/Theme/view/frontend/templates/html/header.phtml @@ -15,7 +15,7 @@ $welcomeMessage = $block->getWelcome(); case 'welcome': ?>
  • - + diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertCartPerCustomer.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertCartPerCustomer.php index 2442bd8fe1f5f..1aee48ad307ad 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertCartPerCustomer.php +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertCartPerCustomer.php @@ -53,7 +53,10 @@ public function processAssert( ['customer' => $customer] )->run(); \PHPUnit_Framework_Assert::assertEquals( - sprintf(self::WELCOME_MESSAGE, $customer->getFirstname()), + sprintf( + self::WELCOME_MESSAGE, + $customer->getFirstname() . ' ' . $customer->getLastname() + ), $cmsIndex->getLinksBlock()->getWelcomeText(), 'Customer welcome message is wrong.' ); From 465e14bdee949bf8c92ed1640119930e0cce4091 Mon Sep 17 00:00:00 2001 From: "a.muntian" Date: Fri, 15 Dec 2017 14:33:20 +0200 Subject: [PATCH 608/653] magento/magento2#6113: Validate range-words in Form component (UI Component) - Fixed regexp pattern for range-words validation --- app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js b/app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js index 01a1575541408..f9e70d8796ddb 100644 --- a/app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js +++ b/app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js @@ -85,7 +85,7 @@ define([ 'range-words': [ function (value, params) { return utils.stripHtml(value).match(/\b\w+\b/g).length >= params[0] && - value.match(/bw+b/g).length < params[1]; + utils.stripHtml(value).match(/\b\w+\b/g).length < params[1]; }, $.mage.__('Please enter between {0} and {1} words.') ], From 38720ea0920622b8b66e2b576ea7d630ff9294c1 Mon Sep 17 00:00:00 2001 From: Roman Strilenko Date: Fri, 15 Dec 2017 14:22:12 +0100 Subject: [PATCH 609/653] #9453 - ported down c2e5d77a9516c8305585e819c2f0a0629648cc14 - MAGETWO-70322: [2.1.x][GitHub] SID in URL even if disabled #9453 --- .../Framework/Session/SidResolverTest.php | 41 +++++++++++++++++-- .../Magento/Framework/Session/SidResolver.php | 20 +++++---- 2 files changed, 50 insertions(+), 11 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Framework/Session/SidResolverTest.php b/dev/tests/integration/testsuite/Magento/Framework/Session/SidResolverTest.php index 5af3e52420f11..2cfb8b47da7c3 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Session/SidResolverTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Session/SidResolverTest.php @@ -112,6 +112,7 @@ public function testGetSid($sid, $useFrontedSid, $isOwnOriginUrl, $testSid) $this->request->getQuery()->set($this->model->getSessionIdQueryParam($this->session), $testSid); } $this->assertEquals($sid, $this->model->getSid($this->session)); + $this->assertEquals($useFrontedSid, $this->model->getUseSessionInUrl()); } /** @@ -150,10 +151,42 @@ public function testSetGetUseSessionVar() $this->assertTrue($this->model->getUseSessionVar()); } - public function testSetGetUseSessionInUrl() + /** + * Variations of Use SID on frontend value. + * + * @return array + */ + public function dataProviderSessionInUrl() + { + return [ + [true], + [false], + ]; + } + + /** + * Testing "Use SID in URLs" flag. + * Checking that the method returns config value if not explicitly + * overridden. + * + * @param bool $configValue Use SID on frontend config value. + * @dataProvider dataProviderSessionInUrl + */ + public function testSetGetUseSessionInUrl($configValue) { - $this->assertTrue($this->model->getUseSessionInUrl()); - $this->model->setUseSessionInUrl(false); - $this->assertFalse($this->model->getUseSessionInUrl()); + $this->scopeConfig->expects( + $this->any() + )->method( + 'getValue' + )->with( + \Magento\Framework\Session\SidResolver::XML_PATH_USE_FRONTEND_SID, + \Magento\Store\Model\ScopeInterface::SCOPE_STORE + )->will( + $this->returnValue($configValue) + ); + + $this->assertEquals($configValue, $this->model->getUseSessionInUrl()); + $this->model->setUseSessionInUrl(!$configValue); + $this->assertEquals(!$configValue, $this->model->getUseSessionInUrl()); } } diff --git a/lib/internal/Magento/Framework/Session/SidResolver.php b/lib/internal/Magento/Framework/Session/SidResolver.php index 40d985614a3c6..18f6138b661bf 100644 --- a/lib/internal/Magento/Framework/Session/SidResolver.php +++ b/lib/internal/Magento/Framework/Session/SidResolver.php @@ -44,10 +44,10 @@ class SidResolver implements SidResolverInterface /** * Use session in URL flag * - * @var bool + * @var bool|null * @see \Magento\Framework\UrlInterface */ - protected $_useSessionInUrl = true; + protected $_useSessionInUrl; /** * @var string @@ -82,10 +82,7 @@ public function __construct( public function getSid(SessionManagerInterface $session) { $sidKey = null; - $useSidOnFrontend = $this->scopeConfig->getValue( - self::XML_PATH_USE_FRONTEND_SID, - $this->_scopeType - ); + $useSidOnFrontend = $this->getUseSessionInUrl(); if ($useSidOnFrontend && $this->request->getQuery( $this->getSessionIdQueryParam($session), false @@ -147,13 +144,22 @@ public function setUseSessionInUrl($flag = true) } /** - * Retrieve use session in URL flag + * Retrieve use session in URL flag. * * @return bool * @SuppressWarnings(PHPMD.BooleanGetMethodName) */ public function getUseSessionInUrl() { + if ($this->_useSessionInUrl === null) { + //Using config value by default, can be overridden by using the + //setter. + $this->_useSessionInUrl = (bool)$this->scopeConfig->getValue( + self::XML_PATH_USE_FRONTEND_SID, + $this->_scopeType + ); + } + return $this->_useSessionInUrl; } } From 781ec89aaca6e6ee2853e98065416614f2edffce Mon Sep 17 00:00:00 2001 From: serhii balko Date: Fri, 15 Dec 2017 15:51:14 +0200 Subject: [PATCH 610/653] #12712: [GitHub] Latest Google Chrome Browser issue with duplicate id="email" --- .../view/frontend/web/template/authentication-popup.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html b/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html index ad3d62f6c1c27..6b3a232cd3e39 100644 --- a/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html +++ b/app/code/Magento/Customer/view/frontend/web/template/authentication-popup.html @@ -54,10 +54,10 @@ id="login-form">