magento2-docker/dev/tests/setup-integration/testsuite/Magento/Setup/DataPatchInstallationTest.php

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,
],
];
}
}