151 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
 | 
						|
namespace Magento\Setup\Fixtures;
 | 
						|
 | 
						|
use Magento\Framework\Indexer\IndexerRegistry;
 | 
						|
use Magento\Indexer\Model\Config;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class Application test
 | 
						|
 *
 | 
						|
 * @magentoDbIsolation disabled
 | 
						|
 *
 | 
						|
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 | 
						|
 */
 | 
						|
class FixtureModelTest extends \Magento\TestFramework\Indexer\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Profile generator working directory
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected static $_generatorWorkingDir;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var \Magento\Framework\ObjectManagerInterface
 | 
						|
     */
 | 
						|
    private $objectManager;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    private $indexersState = [];
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var IndexerRegistry
 | 
						|
     */
 | 
						|
    private $indexerRegistry;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    private $entityAsserts = [];
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set indexer mode to "scheduled" for do not perform reindex after creation entity
 | 
						|
     */
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->objectManager = Bootstrap::getObjectManager();
 | 
						|
        $this->indexerRegistry = $this->objectManager->get(IndexerRegistry::class);
 | 
						|
 | 
						|
        $this->entityAsserts[] = $this->objectManager->get(FixturesAsserts\SimpleProductsAssert::class);
 | 
						|
        $this->entityAsserts[] = $this->objectManager->get(FixturesAsserts\ConfigurableProductsAssert::class);
 | 
						|
        $this->entityAsserts[] = $this->objectManager->get(FixturesAsserts\BundleProductsAssert::class);
 | 
						|
        $this->entityAsserts[] = $this->objectManager->get(FixturesAsserts\ImagesAssert::class);
 | 
						|
 | 
						|
        foreach ($this->objectManager->get(Config::class)->getIndexers() as $indexerId) {
 | 
						|
            $indexer = $this->indexerRegistry->get($indexerId['indexer_id']);
 | 
						|
            $this->indexersState[$indexerId['indexer_id']] = $indexer->isScheduled();
 | 
						|
            $indexer->setScheduled(true);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return indexer to previous state
 | 
						|
     */
 | 
						|
    protected function tearDown(): void
 | 
						|
    {
 | 
						|
        foreach ($this->indexersState as $indexerId => $state) {
 | 
						|
            $indexer = $this->indexerRegistry->get($indexerId);
 | 
						|
            $indexer->setScheduled($state);
 | 
						|
        }
 | 
						|
        self::restoreFromDb();
 | 
						|
        self::$dbRestored = true;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function setUpBeforeClass(): void
 | 
						|
    {
 | 
						|
        $db = Bootstrap::getInstance()->getBootstrap()
 | 
						|
            ->getApplication()
 | 
						|
            ->getDbInstance();
 | 
						|
        if (!$db->isDbDumpExists()) {
 | 
						|
            throw new \LogicException('DB dump does not exist.');
 | 
						|
        }
 | 
						|
        $db->restoreFromDbDump();
 | 
						|
 | 
						|
        self::$_generatorWorkingDir = realpath(
 | 
						|
            __DIR__ . '/../../../../../../../setup/src/Magento/Setup/Fixtures/_files'
 | 
						|
        );
 | 
						|
        copy(
 | 
						|
            self::$_generatorWorkingDir . '/tax_rates.csv',
 | 
						|
            self::$_generatorWorkingDir . '/tax_rates.csv.bak'
 | 
						|
        );
 | 
						|
        copy(
 | 
						|
            __DIR__ . '/_files/tax_rates.csv',
 | 
						|
            self::$_generatorWorkingDir . '/tax_rates.csv'
 | 
						|
        );
 | 
						|
        parent::setUpBeforeClass();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Generate test profile and performs assertions that generated entities are valid
 | 
						|
     */
 | 
						|
    public function testFixtureGeneration()
 | 
						|
    {
 | 
						|
        $reindexCommand = Bootstrap::getObjectManager()->get(
 | 
						|
            \Magento\Indexer\Console\Command\IndexerReindexCommand::class
 | 
						|
        );
 | 
						|
        $itfApplication = Bootstrap::getInstance()->getBootstrap()->getApplication();
 | 
						|
        $model = new FixtureModel($reindexCommand, $itfApplication->getInitParams());
 | 
						|
        $model->loadConfig(__DIR__ . '/_files/small.xml');
 | 
						|
        $model->initObjectManager();
 | 
						|
 | 
						|
        foreach ($model->loadFixtures()->getFixtures() as $fixture) {
 | 
						|
            $fixture->execute();
 | 
						|
        }
 | 
						|
 | 
						|
        foreach ($this->entityAsserts as $entityAssert) {
 | 
						|
            try {
 | 
						|
                $this->assertTrue($entityAssert->assert());
 | 
						|
            } catch (\AssertionError $assertionError) {
 | 
						|
                $this->assertTrue(false, $assertionError->getMessage());
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public static function tearDownAfterClass(): void
 | 
						|
    {
 | 
						|
        parent::tearDownAfterClass();
 | 
						|
 | 
						|
        unlink(self::$_generatorWorkingDir . '/tax_rates.csv');
 | 
						|
        rename(
 | 
						|
            self::$_generatorWorkingDir . '/tax_rates.csv.bak',
 | 
						|
            self::$_generatorWorkingDir . '/tax_rates.csv'
 | 
						|
        );
 | 
						|
        /** @var $appCache \Magento\Framework\App\Cache */
 | 
						|
        $appCache = Bootstrap::getObjectManager()->get(\Magento\Framework\App\Cache::class);
 | 
						|
        $appCache->clean(
 | 
						|
            [
 | 
						|
                \Magento\Eav\Model\Cache\Type::CACHE_TAG,
 | 
						|
                \Magento\Eav\Model\Entity\Attribute::CACHE_TAG,
 | 
						|
            ]
 | 
						|
        );
 | 
						|
    }
 | 
						|
}
 |