183 lines
5.1 KiB
PHP
Executable File
183 lines
5.1 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\Setup;
|
|
|
|
use Magento\Framework\Setup\Declaration\Schema\Diff\DiffFactory;
|
|
use Magento\Framework\Setup\Declaration\Schema\Diff\SchemaDiff;
|
|
use Magento\Framework\Setup\Declaration\Schema\SchemaConfigInterface;
|
|
use Magento\TestFramework\Deploy\CliCommand;
|
|
use Magento\TestFramework\Deploy\TestModuleManager;
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
use Magento\TestFramework\TestCase\SetupTestCase;
|
|
|
|
/**
|
|
* The purpose of this test is verifying initial InstallSchema, InstallData scripts.
|
|
*/
|
|
class DiffOldSchemaTest extends SetupTestCase
|
|
{
|
|
/**
|
|
* @var TestModuleManager
|
|
*/
|
|
private $moduleManager;
|
|
|
|
/**
|
|
* @var CliCommand
|
|
*/
|
|
private $cliCommad;
|
|
|
|
/**
|
|
* @var SchemaDiff
|
|
*/
|
|
private $schemaDiff;
|
|
|
|
/**
|
|
* @var DiffFactory
|
|
*/
|
|
private $changeRegistryFactory;
|
|
|
|
/**
|
|
* @var SchemaConfigInterface
|
|
*/
|
|
private $schemaConfig;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$objectManager = Bootstrap::getObjectManager();
|
|
$this->moduleManager = $objectManager->get(TestModuleManager::class);
|
|
$this->cliCommad = $objectManager->get(CliCommand::class);
|
|
$this->schemaConfig = $objectManager->get(SchemaConfigInterface::class);
|
|
$this->schemaDiff = $objectManager->get(SchemaDiff::class);
|
|
$this->changeRegistryFactory = $objectManager->get(DiffFactory::class);
|
|
}
|
|
|
|
/**
|
|
* @moduleName Magento_TestSetupDeclarationModule1
|
|
*/
|
|
public function testOldDiff()
|
|
{
|
|
//Move db_schema.xml
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule1',
|
|
'old_diff_before',
|
|
'db_schema.xml',
|
|
'etc'
|
|
);
|
|
//Move InstallSchema file and tried to install
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule1',
|
|
'old_diff',
|
|
'InstallSchema.php',
|
|
'Setup'
|
|
);
|
|
$this->cliCommad->install(['Magento_TestSetupDeclarationModule1']);
|
|
//Move db_schema.xml
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule1',
|
|
'old_diff',
|
|
'db_schema.xml',
|
|
'etc'
|
|
);
|
|
$declarativeSchema = $this->schemaConfig->getDeclarationConfig();
|
|
$generatedSchema = $this->schemaConfig->getDbConfig();
|
|
$diff = $this->schemaDiff->diff($declarativeSchema, $generatedSchema);
|
|
$allChanges = $diff->getAll();
|
|
self::assertCount(1, $allChanges);
|
|
self::assertEquals(
|
|
$this->getBigIntKeyXmlSensitiveData(),
|
|
reset($allChanges)['modify_column'][0]->getNew()->getDiffSensitiveParams()
|
|
);
|
|
self::assertEquals(
|
|
$this->getBigIntKeyDbSensitiveData(),
|
|
reset($allChanges)['modify_column'][0]->getOld()->getDiffSensitiveParams()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @moduleName Magento_TestSetupDeclarationModule1
|
|
* @param string $dbPrefix
|
|
* @throws \Exception
|
|
* @dataProvider oldSchemaUpgradeDataProvider
|
|
*/
|
|
public function testOldSchemaUpgrade(string $dbPrefix)
|
|
{
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule1',
|
|
'old_diff_before',
|
|
'db_schema.xml',
|
|
'etc'
|
|
);
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule1',
|
|
'base_update',
|
|
'InstallSchema.php',
|
|
'Setup'
|
|
);
|
|
$this->cliCommad->install(
|
|
['Magento_TestSetupDeclarationModule1'],
|
|
['db-prefix' => $dbPrefix]
|
|
);
|
|
//Move db_schema.xml
|
|
$this->moduleManager->updateRevision(
|
|
'Magento_TestSetupDeclarationModule1',
|
|
'base_update',
|
|
'db_schema.xml',
|
|
'etc'
|
|
);
|
|
$declarativeSchema = $this->schemaConfig->getDeclarationConfig();
|
|
$generatedSchema = $this->schemaConfig->getDbConfig();
|
|
$diff = $this->schemaDiff->diff($declarativeSchema, $generatedSchema);
|
|
self::assertEmpty($diff->getAll());
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function oldSchemaUpgradeDataProvider(): array
|
|
{
|
|
return [
|
|
'Without db prefix' => [
|
|
'dbPrefix' => '',
|
|
],
|
|
'With db prefix' => [
|
|
'dbPrefix' => 'spec_',
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
private function getBigIntKeyDbSensitiveData()
|
|
{
|
|
return [
|
|
'type' => 'bigint',
|
|
'nullable' => true,
|
|
'padding' => null,
|
|
'unsigned' => false,
|
|
'identity' => false,
|
|
'default' => 0,
|
|
'comment' => 'Bigint'
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
private function getBigIntKeyXmlSensitiveData()
|
|
{
|
|
return [
|
|
'type' => 'bigint',
|
|
'nullable' => true,
|
|
'padding' => null,
|
|
'unsigned' => false,
|
|
'identity' => false,
|
|
'default' => 1,
|
|
'comment' => 'Bigint',
|
|
];
|
|
}
|
|
}
|