DeclarativeSchemaBuilderTest.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Setup;
  7. use Magento\Framework\Setup\Declaration\Schema\Dto\Columns\Timestamp;
  8. use Magento\Framework\Setup\Declaration\Schema\Dto\Constraints\Internal;
  9. use Magento\Framework\Setup\Declaration\Schema\Dto\Constraints\Reference;
  10. use Magento\Framework\Setup\Declaration\Schema\SchemaConfig;
  11. use Magento\TestFramework\Deploy\CliCommand;
  12. use Magento\TestFramework\Deploy\TestModuleManager;
  13. use Magento\TestFramework\Helper\Bootstrap;
  14. use Magento\TestFramework\TestCase\SetupTestCase;
  15. /**
  16. * @magentoAppIsolation enabled
  17. * The purpose of this test is verifying initial InstallSchema, InstallData scripts.
  18. */
  19. class DeclarativeSchemaBuilderTest extends SetupTestCase
  20. {
  21. /**
  22. * @var TestModuleManager
  23. */
  24. private $moduleManager;
  25. /**
  26. * @var SchemaConfig
  27. */
  28. private $schemaConfig;
  29. /**
  30. * @var CliCommand
  31. */
  32. private $cliCommad;
  33. public function setUp()
  34. {
  35. $objectManager = Bootstrap::getObjectManager();
  36. $this->schemaConfig = $objectManager->create(SchemaConfig::class);
  37. $this->moduleManager = $objectManager->get(TestModuleManager::class);
  38. $this->cliCommad = $objectManager->get(CliCommand::class);
  39. }
  40. /**
  41. * Tests primary key constraint conversion from XML and renamed functionality.
  42. *
  43. * @moduleName Magento_TestSetupDeclarationModule1
  44. */
  45. public function testSchemaBuilder()
  46. {
  47. $this->cliCommad->install(
  48. ['Magento_TestSetupDeclarationModule1']
  49. );
  50. $dbSchema = $this->schemaConfig->getDeclarationConfig();
  51. $schemaTables = $dbSchema->getTables();
  52. self::assertArrayHasKey('reference_table', $dbSchema->getTables());
  53. self::assertArrayHasKey('test_table', $dbSchema->getTables());
  54. //Test primary key and renaming
  55. $referenceTable = $schemaTables['reference_table'];
  56. /**
  57. * @var Internal $primaryKey
  58. */
  59. $primaryKey = $referenceTable->getPrimaryConstraint();
  60. $columns = $primaryKey->getColumns();
  61. self::assertEquals('tinyint_ref', reset($columns)->getName());
  62. //Test column
  63. $testTable = $schemaTables['test_table'];
  64. /**
  65. * @var Timestamp $timestampColumn
  66. */
  67. $timestampColumn = $testTable->getColumnByName('timestamp');
  68. self::assertEquals('CURRENT_TIMESTAMP', $timestampColumn->getOnUpdate());
  69. //Test disabled
  70. self::assertArrayNotHasKey('varbinary_rename', $testTable->getColumns());
  71. //Test foreign key
  72. /**
  73. * @var Reference $foreignKey
  74. */
  75. $foreignKey = $testTable->getConstraintByName('TEST_TABLE_TINYINT_REFERENCE_TABLE_TINYINT_REF');
  76. self::assertEquals('NO ACTION', $foreignKey->getOnDelete());
  77. self::assertEquals('tinyint_ref', $foreignKey->getReferenceColumn()->getName());
  78. }
  79. }