Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
DiffManagerTest.php
Go to the documentation of this file.
1 <?php
8 
15 
19 class DiffManagerTest extends \PHPUnit\Framework\TestCase
20 {
24  private $model;
25 
29  private $objectManagerHelper;
30 
34  private $comparatorMock;
35 
36  protected function setUp()
37  {
38  $this->comparatorMock = $this->getMockBuilder(\Magento\Framework\Setup\Declaration\Schema\Comparator::class)
39  ->getMockForAbstractClass();
40 
41  $this->objectManagerHelper = new ObjectManagerHelper($this);
42  $this->model = $this->objectManagerHelper->getObject(
43  \Magento\Framework\Setup\Declaration\Schema\Diff\DiffManager::class,
44  [
45  'comparator' => $this->comparatorMock
46  ]
47  );
48  }
49 
50  public function testShouldBeCreated()
51  {
52  $elements = ['first' => new \stdClass(), 'second' => new \stdClass()];
53  $table = new Table(
54  'name',
55  'name',
56  'table',
57  'default',
58  'innodb',
59  'utf-8',
60  'utf_8_general_ci',
61  ''
62  );
63  $element = new Column('third', 'int', $table);
64  $existingElement = new Column('second', 'int', $table);
65  self::assertTrue($this->model->shouldBeCreated($elements, $element));
66  self::assertFalse($this->model->shouldBeCreated($elements, $existingElement));
67  }
68 
69  public function testRegisterModification()
70  {
72  $diff = $this->getMockBuilder(Diff::class)
73  ->disableOriginalConstructor()
74  ->getMock();
75  $table = new Table(
76  'name',
77  'name',
78  'table',
79  'default',
80  'innodb',
81  'utf-8',
82  'utf_8_general_ci',
83  ''
84  );
85  $element = new Column('third', 'int', $table);
86  $generatedElement = new Column('third', 'int', $table, 'Previous column');
87  $diff->expects(self::once())
88  ->method('register')
89  ->with($element, 'modify_column', $generatedElement);
90  $this->model->registerModification($diff, $element, $generatedElement);
91  }
92 
93  public function testRegisterIndexModification()
94  {
96  $diff = $this->getMockBuilder(Diff::class)
97  ->disableOriginalConstructor()
98  ->getMock();
99  $table = new Table(
100  'name',
101  'name',
102  'table',
103  'default',
104  'innodb',
105  'utf-8',
106  'utf_8_general_ci',
107  ''
108  );
109  $column = new Column('third', 'int', $table, 'Previous column');
110  $index = new Index('index_type', 'index', $table, [$column], 'btree', 'index_type');
111  $generatedIndex = new Index('index_type', 'index', $table, [$column], 'hash', 'index_type');
112  $diff->expects(self::exactly(2))
113  ->method('register')
114  ->withConsecutive([$generatedIndex, 'drop_element', $generatedIndex], [$index, 'add_complex_element']);
115  $this->model->registerModification($diff, $index, $generatedIndex);
116  }
117 
118  public function testRegisterRemovalReference()
119  {
121  $diff = $this->getMockBuilder(Diff::class)
122  ->disableOriginalConstructor()
123  ->getMock();
124  $table = new Table(
125  'name',
126  'name',
127  'table',
128  'default',
129  'innodb',
130  'utf-8',
131  'utf_8_general_ci',
132  ''
133  );
134  $refTable = new Table(
135  'ref_table',
136  'ref_table',
137  'table',
138  'default',
139  'innodb',
140  'utf-8',
141  'utf-8',
142  ''
143  );
144  $column = new Column('third', 'int', $table, 'Previous column');
145  $reference = new Reference('ref', 'foreign', $table, 'ref', $column, $refTable, $column, 'CASCADE');
146  $diff->expects(self::exactly(2))
147  ->method('register')
148  ->withConsecutive(
149  [$reference, 'drop_reference', $reference],
150  [$table, 'drop_table', $table]
151  );
152  $this->model->registerRemoval($diff, [$reference, $table]);
153  }
154 
155  public function testRegisterCreation()
156  {
158  $diff = $this->getMockBuilder(Diff::class)
159  ->disableOriginalConstructor()
160  ->getMock();
161  $table = new Table(
162  'name',
163  'name',
164  'table',
165  'default',
166  'innodb',
167  'utf-8',
168  'utf_8_general_ci',
169  ''
170  );
171  $column = new Column('third', 'int', $table, 'Previous column');
172  $reference = new Reference('ref', 'foreign', $table, 'ref', $column, $table, $column, 'CASCADE');
173  $diff->expects(self::exactly(3))
174  ->method('register')
175  ->withConsecutive(
176  [$table, 'create_table'],
177  [$column, 'add_column'],
178  [$reference, 'add_complex_element']
179  );
180  $this->model->registerCreation($diff, $table);
181  $this->model->registerCreation($diff, $column);
182  $this->model->registerCreation($diff, $reference);
183  }
184 
185  public function testRegisterTableModificationWhenChangeResource()
186  {
188  $diff = $this->getMockBuilder(Diff::class)
189  ->disableOriginalConstructor()
190  ->getMock();
191  $table = new Table(
192  'name',
193  'name',
194  'table',
195  'default',
196  'innodb',
197  'utf-8',
198  'utf_8_general_ci',
199  ''
200  );
201  $generateTable = new Table(
202  'name',
203  'name',
204  'table',
205  'sales',
206  'innodb',
207  'utf-8',
208  'utf_8_general_ci',
209  ''
210  );
211  $diff->expects(self::once())
212  ->method('register')
213  ->with($table, 'recreate_table', $generateTable);
214  $this->model->registerRecreation($table, $generateTable, $diff);
215  }
216 
217  public function testRegisterTableModificationWhenChangeEngine()
218  {
220  $diff = $this->getMockBuilder(Diff::class)
221  ->disableOriginalConstructor()
222  ->getMock();
223  $table = new Table(
224  'name',
225  'name',
226  'table',
227  'default',
228  'innodb',
229  'utf-8',
230  'utf_8_general_ci',
231  ''
232  );
233  $generateTable = new Table(
234  'name',
235  'name',
236  'table',
237  'default',
238  'memory',
239  'utf-8',
240  'utf_8_general_ci',
241  ''
242  );
243  $diff->expects(self::once())
244  ->method('register')
245  ->with($table, 'modify_table', $generateTable);
246  $this->model->registerTableModification($table, $generateTable, $diff);
247  }
248 }
$table
Definition: trigger.php:14
$index
Definition: list.phtml:44
$element
Definition: element.phtml:12