266 lines
8.5 KiB
PHP
Executable File
266 lines
8.5 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\Setup;
|
|
|
|
use Magento\Framework\Module\DbVersionInfo;
|
|
use Magento\Framework\Module\ModuleResource;
|
|
use Magento\Framework\Setup\Declaration\Schema\Db\DbSchemaReaderInterface;
|
|
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;
|
|
|
|
/**
|
|
* The purpose of this test is to check whether whole declarative installation is work
|
|
* in mixed mode
|
|
*/
|
|
class BCMultiModuleTest extends SetupTestCase
|
|
{
|
|
/**
|
|
* @var TestModuleManager
|
|
*/
|
|
private $moduleManager;
|
|
|
|
/**
|
|
* @var CliCommand
|
|
*/
|
|
private $cliCommand;
|
|
|
|
/**
|
|
* @var DbVersionInfo
|
|
*/
|
|
private $dbVersionInfo;
|
|
|
|
/**
|
|
* @var TableData
|
|
*/
|
|
private $tableData;
|
|
|
|
/**
|
|
* @var ModuleResource
|
|
*/
|
|
private $moduleResource;
|
|
|
|
/**
|
|
* @var DbSchemaReaderInterface
|
|
*/
|
|
private $dbSchemaReader;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$objectManager = Bootstrap::getObjectManager();
|
|
$this->moduleManager = $objectManager->get(TestModuleManager::class);
|
|
$this->cliCommand = $objectManager->get(CliCommand::class);
|
|
$this->dbVersionInfo = $objectManager->get(DbVersionInfo::class);
|
|
$this->tableData = $objectManager->get(TableData::class);
|
|
$this->moduleResource = $objectManager->get(ModuleResource::class);
|
|
$this->dbSchemaReader = $objectManager->get(DbSchemaReaderInterface::class);
|
|
}
|
|
|
|
/**
|
|
* @moduleName Magento_TestSetupDeclarationModule6
|
|
* @moduleName Magento_TestSetupDeclarationModule7
|
|
*/
|
|
public function testFirstCleanInstall()
|
|
{
|
|
$this->cliCommand->install([
|
|
'Magento_TestSetupDeclarationModule6',
|
|
'Magento_TestSetupDeclarationModule7'
|
|
]);
|
|
//Check if declaration is applied
|
|
$indexes = $this->dbSchemaReader->readIndexes('test_table', 'default');
|
|
self::assertCount(1, $indexes);
|
|
self::assertArrayHasKey('TEST_TABLE_TINYINT_BIGINT', $indexes);
|
|
//Check UpgradeSchema old format, that modify declaration
|
|
$columns = $this->dbSchemaReader->readColumns('test_table', 'default');
|
|
$floatColumn = $columns['float'];
|
|
self::assertEquals(29, $floatColumn['default']);
|
|
}
|
|
|
|
private function doUsToUsRevision()
|
|
{
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule7',
|
|
'us_to_us',
|
|
'UpgradeSchema.php',
|
|
'Setup'
|
|
);
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule7',
|
|
'us_to_us',
|
|
'module.xml',
|
|
'etc'
|
|
);
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule7',
|
|
'us_to_us',
|
|
'UpgradeData.php',
|
|
'Setup'
|
|
);
|
|
}
|
|
|
|
private function doUsToDsRevision()
|
|
{
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule7',
|
|
'swap_with_declaration',
|
|
'db_schema.xml',
|
|
'etc'
|
|
);
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule7',
|
|
'swap_with_declaration',
|
|
'SomePatch.php',
|
|
'Setup/Patch/Data'
|
|
);
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule7',
|
|
'swap_with_declaration',
|
|
'SomeSkippedPatch.php',
|
|
'Setup/Patch/Data'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Assert that data and schema of 2 modules are installed successfully
|
|
*/
|
|
private function assertUsToUsUpgrade()
|
|
{
|
|
$usToUsTables = $this->dbSchemaReader->readTables('default');
|
|
self::assertContains('custom_table', $usToUsTables);
|
|
self::assertTrue($this->dbVersionInfo->isDataUpToDate('Magento_TestSetupDeclarationModule7'));
|
|
self::assertTrue($this->dbVersionInfo->isSchemaUpToDate('Magento_TestSetupDeclarationModule7'));
|
|
self::assertEquals(
|
|
[6,12],
|
|
$this->tableData->describeTableData('reference_table', 'bigint_without_padding')
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Assert that data and schema of 2 modules are installed successfully
|
|
*/
|
|
private function assertUsToDsUpgrade()
|
|
{
|
|
//Check UpgradeSchema old format, that modify declaration
|
|
$columns = $this->dbSchemaReader->readColumns('test_table', 'default');
|
|
$floatColumn = $columns['float'];
|
|
//Check whether declaration will be applied
|
|
self::assertEquals(35, $floatColumn['default']);
|
|
self::assertTrue($this->dbVersionInfo->isDataUpToDate('Magento_TestSetupDeclarationModule7'));
|
|
self::assertTrue($this->dbVersionInfo->isSchemaUpToDate('Magento_TestSetupDeclarationModule7'));
|
|
self::assertEquals(
|
|
[6,12],
|
|
$this->tableData->describeTableData('reference_table', 'bigint_without_padding')
|
|
);
|
|
self::assertEquals(
|
|
['_ref'],
|
|
$this->tableData->describeTableData('test_table', 'varchar')
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @moduleName Magento_TestSetupDeclarationModule6
|
|
* @moduleName Magento_TestSetupDeclarationModule7
|
|
*/
|
|
public function testDSFirstRelease()
|
|
{
|
|
$this->cliCommand->install([
|
|
'Magento_TestSetupDeclarationModule6',
|
|
'Magento_TestSetupDeclarationModule7'
|
|
]);
|
|
//Check no change upgrade with US
|
|
$this->cliCommand->upgrade();
|
|
|
|
$this->doUsToUsRevision();
|
|
//Check US to US upgrade
|
|
$this->cliCommand->upgrade();
|
|
$this->assertUsToUsUpgrade();
|
|
|
|
$this->doUsToDsRevision();
|
|
//Check US to declarative schema upgrade
|
|
$this->cliCommand->upgrade();
|
|
$this->assertUsToDsUpgrade();
|
|
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule7',
|
|
'wl_remove_table',
|
|
'db_schema_whitelist.json',
|
|
'etc'
|
|
);
|
|
//Check removal case, when we need to remove table with declaration and table was created in old scripts
|
|
$this->cliCommand->upgrade();
|
|
$tables = $this->dbSchemaReader->readTables('default');
|
|
self::assertNotContains('custom_table', $tables);
|
|
}
|
|
|
|
/**
|
|
* @moduleName Magento_TestSetupDeclarationModule1
|
|
* @dataProvider firstCleanInstallOneModuleDataProvider
|
|
* @param string $dbPrefix
|
|
* @param string $tableName
|
|
* @param string $indexName
|
|
* @param string $constraintName
|
|
* @param string $foreignKeyName
|
|
* @throws \Exception
|
|
*/
|
|
public function testFirstCleanInstallOneModule(
|
|
string $dbPrefix,
|
|
string $tableName,
|
|
string $indexName,
|
|
string $constraintName,
|
|
string $foreignKeyName
|
|
) {
|
|
$this->cliCommand->install(
|
|
[
|
|
'Magento_TestSetupDeclarationModule1'
|
|
],
|
|
[
|
|
'db-prefix' => $dbPrefix,
|
|
]
|
|
);
|
|
|
|
$indexes = $this->dbSchemaReader
|
|
->readIndexes($tableName, 'default');
|
|
self::assertCount(1, $indexes);
|
|
self::assertArrayHasKey($indexName, $indexes);
|
|
|
|
$constraints = $this->dbSchemaReader
|
|
->readConstraints($tableName, 'default');
|
|
self::assertCount(1, $constraints);
|
|
self::assertArrayHasKey($constraintName, $constraints);
|
|
|
|
$foreignKeys = $this->dbSchemaReader
|
|
->readReferences($tableName, 'default');
|
|
self::assertCount(1, $foreignKeys);
|
|
self::assertArrayHasKey($foreignKeyName, $foreignKeys);
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function firstCleanInstallOneModuleDataProvider()
|
|
{
|
|
return [
|
|
'Installation without db prefix' => [
|
|
'dbPrefix' => '',
|
|
'tableName' => 'test_table',
|
|
'indexName' => 'TEST_TABLE_TINYINT_BIGINT',
|
|
'constraintName' => 'TEST_TABLE_SMALLINT_BIGINT',
|
|
'foreignKeyName' => 'TEST_TABLE_TINYINT_REFERENCE_TABLE_TINYINT_REF',
|
|
],
|
|
'Installation with db prefix' => [
|
|
'dbPrefix' => 'spec_',
|
|
'tableName' => 'spec_test_table',
|
|
'indexName' => 'SPEC_TEST_TABLE_TINYINT_BIGINT',
|
|
'constraintName' => 'SPEC_TEST_TABLE_SMALLINT_BIGINT',
|
|
'foreignKeyName' => 'SPEC_TEST_TABLE_TINYINT_SPEC_REFERENCE_TABLE_TINYINT_REF',
|
|
]
|
|
];
|
|
}
|
|
}
|