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

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