Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SchemaListenerTest.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
16 
22 class SchemaListenerTest extends \PHPUnit\Framework\TestCase
23 {
27  private $model;
28 
32  private $objectManagerHelper;
33 
34  protected function setUp() : void
35  {
36  $this->objectManagerHelper = new ObjectManagerHelper($this);
37  $this->model = $this->objectManagerHelper->getObject(
38  \Magento\Framework\Setup\SchemaListener::class,
39  [
40  'definitionMappers' => [
41  'timestamp' => new TimestampDefinition(),
42  'integer' => new IntegerDefinition(
43  new BooleanDefinition()
44  ),
45  'decimal' => new RealDefinition()
46  ]
47  ]
48  );
49  $this->model->flush();
50  }
51 
55  private function getCreateTableDDL($tableName) : Table
56  {
57  $table = new Table();
58  $table->setName($tableName);
59  $table->setOption('type', 'innodb');
60  return $table->addColumn(
61  'timestamp',
62  \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
63  null,
64  ['nullable' => false, 'default' => \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT_UPDATE],
65  'Column with type timestamp init update'
66  )->addColumn(
67  'integer',
68  \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
69  null,
70  ['nullable' => false, 'primary' => true, 'identity' => true],
71  'Integer'
72  )->addColumn(
73  'decimal',
74  \Magento\Framework\DB\Ddl\Table::TYPE_DECIMAL,
75  '25,12',
76  ['unsigned' => false, 'nullable' => false],
77  'Decimal'
78  )
79  ->addIndex(
80  'INDEX_KEY',
81  ['column_with_type_text'],
82  ['type' => \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_FULLTEXT]
83  )
84  ->addForeignKey(
85  'some_key',
86  'decimal',
87  'setup_tests_table1',
88  'column_with_type_integer',
89  \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
90  )->setComment(
91  'Related Table'
92  );
93  }
94 
95  public function testRenameTable() : void
96  {
97  $this->model->setModuleName('First_Module');
98  $this->model->createTable($this->getCreateTableDDL('old_table'));
99  $this->model->renameTable('old_table', 'new_table');
100  $tables = $this->model->getTables();
101  self::assertArrayHasKey('new_table', $tables['First_Module']);
102  self::assertArrayNotHasKey('old_table', $tables['First_Module']);
103  }
104 
105  public function testDropIndex() : void
106  {
107  $this->model->setModuleName('First_Module');
108  $this->model->createTable($this->getCreateTableDDL('index_table'));
109  $this->model->dropIndex('index_table', 'INDEX_KEY', 'index');
110  self::assertTrue($this->model->getTables()['First_Module']['index_table']['indexes']['INDEX_KEY']['disabled']);
111  }
112 
113  public function testCreateTable() : void
114  {
115  $this->model->setModuleName('First_Module');
116  $this->model->createTable($this->getCreateTableDDL('new_table'));
117  $tables = $this->model->getTables();
118  self::assertArrayHasKey('new_table', $tables['First_Module']);
119  self::assertEquals(
120  [
121  'timestamp' =>
122  [
123  'xsi:type' => 'timestamp',
124  'name' => 'timestamp',
125  'on_update' => true,
126  'nullable' => false,
127  'default' => 'CURRENT_TIMESTAMP',
128  'disabled' => false,
129  'onCreate' => null,
130  ],
131  'integer' =>
132  [
133  'xsi:type' => 'int',
134  'name' => 'integer',
135  'padding' => 11,
136  'unsigned' => false,
137  'nullable' => false,
138  'identity' => true,
139  'default' => null,
140  'disabled' => false,
141  'onCreate' => null,
142  ],
143  'decimal' =>
144  [
145  'xsi:type' => 'decimal',
146  'name' => 'decimal',
147  'scale' => '12',
148  'precision' => '25',
149  'unsigned' => false,
150  'nullable' => false,
151  'default' => null,
152  'disabled' => false,
153  'onCreate' => null,
154  ],
155  ],
156  $tables['First_Module']['new_table']['columns']
157  );
158  self::assertEquals(
159  [
160  'primary' =>
161  [
162  'PRIMARY' =>
163  [
164  'type' => 'primary',
165  'name' => 'PRIMARY',
166  'disabled' => false,
167  'columns' =>
168  [
169  'INTEGER' => 'integer',
170  ],
171  ],
172  ],
173  'foreign' =>
174  [
175  'SOME_KEY' =>
176  [
177  'table' => 'new_table',
178  'column' => 'decimal',
179  'referenceTable' => 'setup_tests_table1',
180  'referenceColumn' => 'column_with_type_integer',
181  'onDelete' => 'CASCADE',
182  'disabled' => false,
183  ],
184  ],
185  ],
186  $tables['First_Module']['new_table']['constraints']
187  );
188 
189  self::assertEquals(
190  [
191  'INDEX_KEY' =>
192  [
193  'columns' =>
194  [
195  'column_with_type_text' => 'column_with_type_text',
196  ],
197  'indexType' => 'fulltext',
198  'disabled' => false,
199  ],
200  ],
201  $tables['First_Module']['new_table']['indexes']
202  );
203  }
204 
205  public function testDropTable() : void
206  {
207  $this->model->setModuleName('Old_Module');
208  $this->model->createTable($this->getCreateTableDDL('old_table'));
209  $this->model->setModuleName('New_Module');
210  $this->model->dropTable('old_table');
211  self::assertTrue($this->model->getTables()['New_Module']['old_table']['disabled']);
212  }
213 
214  public function testDropTableInSameModule() : void
215  {
216  $this->model->setModuleName('Old_Module');
217  $this->model->createTable($this->getCreateTableDDL('old_table'));
218  $this->model->dropTable('old_table');
219  self::assertArrayNotHasKey('old_table', $this->model->getTables()['Old_Module']);
220  }
221 }
$tableName
Definition: trigger.php:13
$table
Definition: trigger.php:14