240 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			240 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
 | 
						|
namespace Magento\Setup;
 | 
						|
 | 
						|
use Magento\Framework\Module\ModuleResource;
 | 
						|
use Magento\Framework\Setup\Patch\PatchHistory;
 | 
						|
use Magento\TestFramework\Deploy\CliCommand;
 | 
						|
use Magento\TestFramework\Deploy\TableData;
 | 
						|
use Magento\TestFramework\Deploy\TestModuleManager;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use Magento\TestFramework\TestCase\SetupTestCase;
 | 
						|
use Magento\TestSetupDeclarationModule3\Setup\Patch\Data\IncrementalSomeIntegerPatch;
 | 
						|
use Magento\TestSetupDeclarationModule3\Setup\Patch\Data\ReferenceIncrementalSomeIntegerPatch;
 | 
						|
use Magento\TestSetupDeclarationModule3\Setup\Patch\Data\ZFirstPatch;
 | 
						|
 | 
						|
/**
 | 
						|
 * The purpose of this test is validating schema reader operations.
 | 
						|
 */
 | 
						|
class DataPatchInstallationTest extends SetupTestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var TestModuleManager
 | 
						|
     */
 | 
						|
    private $moduleManager;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var CliCommand
 | 
						|
     */
 | 
						|
    private $cliCommad;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var ModuleResource
 | 
						|
     */
 | 
						|
    private $moduleResource;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var PatchHistory
 | 
						|
     */
 | 
						|
    private $patchList;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var TableData
 | 
						|
     */
 | 
						|
    private $tableData;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $objectManager = Bootstrap::getObjectManager();
 | 
						|
        $this->moduleManager = $objectManager->get(TestModuleManager::class);
 | 
						|
        $this->cliCommad = $objectManager->get(CliCommand::class);
 | 
						|
        $this->moduleResource = $objectManager->get(ModuleResource::class);
 | 
						|
        $this->patchList = $objectManager->get(PatchHistory::class);
 | 
						|
        $this->tableData = $objectManager->get(TableData::class);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @moduleName Magento_TestSetupDeclarationModule3
 | 
						|
     */
 | 
						|
    public function testDataPatchesInstallation()
 | 
						|
    {
 | 
						|
        $this->cliCommad->install(
 | 
						|
            ['Magento_TestSetupDeclarationModule3']
 | 
						|
        );
 | 
						|
 | 
						|
        self::assertEquals(
 | 
						|
            '0.0.1',
 | 
						|
            $this->moduleResource->getDataVersion('Magento_TestSetupDeclarationModule3')
 | 
						|
        );
 | 
						|
 | 
						|
        $this->moduleManager->updateRevision(
 | 
						|
            'Magento_TestSetupDeclarationModule3',
 | 
						|
            'first_patch_revision',
 | 
						|
            'module.xml',
 | 
						|
            'etc'
 | 
						|
        );
 | 
						|
        $this->movePatches();
 | 
						|
        ModuleResource::flush();
 | 
						|
        $this->cliCommad->upgrade();
 | 
						|
        self::assertEquals(
 | 
						|
            '0.0.3',
 | 
						|
            $this->moduleResource->getDataVersion('Magento_TestSetupDeclarationModule3')
 | 
						|
        );
 | 
						|
        self::assertTrue($this->patchList->isApplied(IncrementalSomeIntegerPatch::class));
 | 
						|
        self::assertTrue($this->patchList->isApplied(ReferenceIncrementalSomeIntegerPatch::class));
 | 
						|
        self::assertTrue($this->patchList->isApplied(ZFirstPatch::class));
 | 
						|
        $tableData = $this->tableData->describeTableData('test_table');
 | 
						|
        self::assertEquals($this->getTestTableData(), $tableData);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @moduleName Magento_TestSetupDeclarationModule3
 | 
						|
     */
 | 
						|
    public function testCyclomaticDependency()
 | 
						|
    {
 | 
						|
        $this->expectException(\Magento\Framework\Exception\LocalizedException::class);
 | 
						|
 | 
						|
        $this->moduleManager->updateRevision(
 | 
						|
            'Magento_TestSetupDeclarationModule3',
 | 
						|
            'cyclomatic_and_bic_revision',
 | 
						|
            'module.xml',
 | 
						|
            'etc'
 | 
						|
        );
 | 
						|
 | 
						|
        $this->movePatches();
 | 
						|
        /**
 | 
						|
         * Test whether installation give the same result as upgrade
 | 
						|
         */
 | 
						|
        $this->cliCommad->install(
 | 
						|
            ['Magento_TestSetupDeclarationModule3']
 | 
						|
        );
 | 
						|
        $tableData = $this->tableData->describeTableData('test_table');
 | 
						|
        self::assertEquals($this->getTestTableData(), $tableData);
 | 
						|
        $this->moduleManager->updateRevision(
 | 
						|
            'Magento_TestSetupDeclarationModule3',
 | 
						|
            'cyclomatic_and_bic_revision',
 | 
						|
            'BicPatch.php',
 | 
						|
            'Setup/Patch/Data'
 | 
						|
        );
 | 
						|
        $this->moduleManager->updateRevision(
 | 
						|
            'Magento_TestSetupDeclarationModule3',
 | 
						|
            'cyclomatic_and_bic_revision',
 | 
						|
            'RefBicPatch.php',
 | 
						|
            'Setup/Patch/Data'
 | 
						|
        );
 | 
						|
 | 
						|
        $this->cliCommad->upgrade();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Move patches
 | 
						|
     */
 | 
						|
    private function movePatches()
 | 
						|
    {
 | 
						|
        //Install with patches
 | 
						|
        $this->moduleManager->addRevision(
 | 
						|
            'Magento_TestSetupDeclarationModule3',
 | 
						|
            'patches_revision',
 | 
						|
            'Setup/Patch/Data'
 | 
						|
        );
 | 
						|
        //Upgrade with UpgradeData
 | 
						|
        $this->moduleManager->updateRevision(
 | 
						|
            'Magento_TestSetupDeclarationModule3',
 | 
						|
            'first_patch_revision',
 | 
						|
            'UpgradeData.php',
 | 
						|
            'Setup'
 | 
						|
        );
 | 
						|
 | 
						|
        //Upgrade with UpgradeData
 | 
						|
        $this->moduleManager->updateRevision(
 | 
						|
            'Magento_TestSetupDeclarationModule3',
 | 
						|
            'first_patch_revision',
 | 
						|
            'module.xml',
 | 
						|
            'etc'
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @moduleName Magento_TestSetupDeclarationModule3
 | 
						|
     */
 | 
						|
    public function testPatchesRevert()
 | 
						|
    {
 | 
						|
        $this->movePatches();
 | 
						|
        $this->cliCommad->install(['Magento_TestSetupDeclarationModule3']);
 | 
						|
        $this->cliCommad->uninstallModule('Magento_TestSetupDeclarationModule3');
 | 
						|
        $testTableData = $this->tableData->describeTableData('test_table');
 | 
						|
        $patchListTableData = $this->tableData->describeTableData('patch_list');
 | 
						|
        self::assertEmpty($patchListTableData);
 | 
						|
        self::assertEmpty($testTableData);
 | 
						|
        $refTableData = $this->tableData->describeTableData('reference_table');
 | 
						|
        self::assertEquals($this->getRefTableData(), $refTableData);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    private function getTestTableData()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            [
 | 
						|
                'smallint' => '1',
 | 
						|
                'tinyint' => null,
 | 
						|
                'varchar' => 'Ololo123',
 | 
						|
                'varbinary' => '33288',
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                'smallint' => '2',
 | 
						|
                'tinyint' => null,
 | 
						|
                'varchar' => 'Ololo123_ref',
 | 
						|
                'varbinary' => '33288',
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                'smallint' => '3',
 | 
						|
                'tinyint' => null,
 | 
						|
                'varchar' => 'changed__very_secret_string',
 | 
						|
                'varbinary' => '0',
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve reference table data
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    private function getRefTableData()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            [
 | 
						|
                'tinyint_ref' => '2',
 | 
						|
                'some_integer' => '2',
 | 
						|
                'for_patch_testing' => null,
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                'tinyint_ref' => '3',
 | 
						|
                'some_integer' => '3',
 | 
						|
                'for_patch_testing' => null,
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                'tinyint_ref' => '4',
 | 
						|
                'some_integer' => '5',
 | 
						|
                'for_patch_testing' => null,
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                'tinyint_ref' => '5',
 | 
						|
                'some_integer' => '6',
 | 
						|
                'for_patch_testing' => null,
 | 
						|
            ],
 | 
						|
            [
 | 
						|
                'tinyint_ref' => '6',
 | 
						|
                'some_integer' => '12',
 | 
						|
                'for_patch_testing' => null,
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
    }
 | 
						|
}
 |