165 lines
4.9 KiB
PHP
Executable File
165 lines
4.9 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Setup\Console\Command;
|
|
|
|
use Magento\Catalog\Model\Indexer\Product\Price\DimensionModeConfiguration;
|
|
use Symfony\Component\Console\Tester\CommandTester;
|
|
use Magento\Framework\Console\Cli;
|
|
use Magento\Framework\ObjectManagerInterface;
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
|
|
/**
|
|
* Test command that sets indexer mode for catalog_product_price indexer
|
|
*
|
|
* @magentoDbIsolation disabled
|
|
*/
|
|
class PriceIndexerDimensionsModeSetCommandTest extends \Magento\TestFramework\Indexer\TestCase
|
|
{
|
|
/** @var ObjectManagerInterface */
|
|
private $objectManager;
|
|
|
|
/** @var \Magento\Indexer\Console\Command\IndexerSetDimensionsModeCommand */
|
|
private $command;
|
|
|
|
/** @var CommandTester */
|
|
private $commandTester;
|
|
|
|
/**
|
|
* setUp
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
$this->objectManager = Bootstrap::getObjectManager();
|
|
|
|
$this->objectManager->get(\Magento\TestFramework\App\Config::class)->clean();
|
|
|
|
$this->command = $this->objectManager->create(
|
|
\Magento\Indexer\Console\Command\IndexerSetDimensionsModeCommand::class
|
|
);
|
|
|
|
$this->commandTester = new CommandTester($this->command);
|
|
|
|
parent::setUp();
|
|
}
|
|
|
|
/**
|
|
* setUpBeforeClass
|
|
*/
|
|
public static function setUpBeforeClass(): void
|
|
{
|
|
$db = Bootstrap::getInstance()->getBootstrap()
|
|
->getApplication()
|
|
->getDbInstance();
|
|
if (!$db->isDbDumpExists()) {
|
|
throw new \LogicException('DB dump does not exist.');
|
|
}
|
|
$db->restoreFromDbDump();
|
|
|
|
parent::setUpBeforeClass();
|
|
}
|
|
|
|
/**
|
|
* @magentoAppArea adminhtml
|
|
* @magentoAppIsolation enabled
|
|
*
|
|
* @param string $previousMode
|
|
* @param string $currentMode
|
|
* @dataProvider modesDataProvider
|
|
*/
|
|
public function testSwitchMode($previousMode, $currentMode)
|
|
{
|
|
$this->commandTester->execute(
|
|
[
|
|
'indexer' => 'catalog_product_price',
|
|
'mode' => $currentMode,
|
|
]
|
|
);
|
|
$expectedOutput = 'Dimensions mode for indexer "Product Price" was changed from \''
|
|
. $previousMode . '\' to \'' . $currentMode . '\'' . PHP_EOL;
|
|
|
|
$actualOutput = $this->commandTester->getDisplay();
|
|
|
|
$this->assertStringContainsString($expectedOutput, $actualOutput);
|
|
|
|
static::assertEquals(
|
|
Cli::RETURN_SUCCESS,
|
|
$this->commandTester->getStatusCode(),
|
|
$this->commandTester->getDisplay(true)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Modes data provider
|
|
* @return array
|
|
*/
|
|
public function modesDataProvider()
|
|
{
|
|
return [
|
|
[DimensionModeConfiguration::DIMENSION_NONE, DimensionModeConfiguration::DIMENSION_WEBSITE],
|
|
[DimensionModeConfiguration::DIMENSION_WEBSITE, DimensionModeConfiguration::DIMENSION_CUSTOMER_GROUP],
|
|
[
|
|
DimensionModeConfiguration::DIMENSION_CUSTOMER_GROUP,
|
|
DimensionModeConfiguration::DIMENSION_WEBSITE_AND_CUSTOMER_GROUP
|
|
],
|
|
[
|
|
DimensionModeConfiguration::DIMENSION_WEBSITE_AND_CUSTOMER_GROUP,
|
|
DimensionModeConfiguration::DIMENSION_NONE
|
|
],
|
|
[
|
|
DimensionModeConfiguration::DIMENSION_NONE,
|
|
DimensionModeConfiguration::DIMENSION_WEBSITE_AND_CUSTOMER_GROUP
|
|
],
|
|
[
|
|
DimensionModeConfiguration::DIMENSION_WEBSITE_AND_CUSTOMER_GROUP,
|
|
DimensionModeConfiguration::DIMENSION_CUSTOMER_GROUP
|
|
],
|
|
[DimensionModeConfiguration::DIMENSION_CUSTOMER_GROUP, DimensionModeConfiguration::DIMENSION_WEBSITE],
|
|
[DimensionModeConfiguration::DIMENSION_WEBSITE, DimensionModeConfiguration::DIMENSION_NONE],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @magentoAppArea adminhtml
|
|
* @magentoAppIsolation enabled
|
|
*/
|
|
public function testSwitchModeForSameMode()
|
|
{
|
|
$this->commandTester->execute(
|
|
[
|
|
'indexer' => 'catalog_product_price',
|
|
'mode' => DimensionModeConfiguration::DIMENSION_NONE
|
|
]
|
|
);
|
|
$expectedOutput = 'Dimensions mode for indexer "Product Price" has not been changed' . PHP_EOL;
|
|
|
|
$actualOutput = $this->commandTester->getDisplay();
|
|
|
|
$this->assertStringContainsString($expectedOutput, $actualOutput);
|
|
|
|
static::assertEquals(
|
|
Cli::RETURN_SUCCESS,
|
|
$this->commandTester->getStatusCode(),
|
|
$this->commandTester->getDisplay(true)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @magentoAppArea adminhtml
|
|
* @magentoAppIsolation enabled
|
|
*
|
|
*/
|
|
public function testSwitchModeWithInvalidArgument()
|
|
{
|
|
$this->expectException(\InvalidArgumentException::class);
|
|
|
|
$this->commandTester->execute(
|
|
[
|
|
'indexer' => 'indexer_not_valid'
|
|
]
|
|
);
|
|
}
|
|
}
|