Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AddColumnTest.php
Go to the documentation of this file.
1 <?php
8 
24 
32 class AddColumnTest extends \PHPUnit\Framework\TestCase
33 {
37  private $model;
38 
42  private $objectManagerHelper;
43 
47  private $definitionAggregatorMock;
48 
52  private $dbSchemaWriterMock;
53 
57  private $elementFactoryMock;
58 
62  private $elementHistoryFactoryMock;
63 
67  private $addComplexElementMock;
68 
72  private $dropElementMock;
73 
75  private $migrateDataTrigger;
76 
77  protected function setUp()
78  {
79  $this->definitionAggregatorMock = $this->getMockBuilder(DefinitionAggregator::class)
80  ->disableOriginalConstructor()
81  ->getMock();
82  $this->dbSchemaWriterMock = $this->getMockBuilder(DbSchemaWriterInterface::class)
83  ->getMockForAbstractClass();
84  $this->elementFactoryMock = $this->getMockBuilder(ElementFactory::class)
85  ->disableOriginalConstructor()
86  ->getMock();
87  $this->elementHistoryFactoryMock = $this->getMockBuilder(ElementHistoryFactory::class)
88  ->disableOriginalConstructor()
89  ->getMock();
90  $this->addComplexElementMock = $this->getMockBuilder(AddComplexElement::class)
91  ->disableOriginalConstructor()
92  ->getMock();
93  $this->dropElementMock = $this->getMockBuilder(DropElement::class)
94  ->disableOriginalConstructor()
95  ->getMock();
96  $this->migrateDataTrigger = $this->getMockBuilder(MigrateDataFrom::class)
97  ->disableOriginalConstructor()
98  ->getMock();
99  $this->objectManagerHelper = new ObjectManagerHelper($this);
100  $this->model = $this->objectManagerHelper->getObject(
101  AddColumn::class,
102  [
103  'definitionAggregator' => $this->definitionAggregatorMock,
104  'dbSchemaWriter' => $this->dbSchemaWriterMock,
105  'elementFactory' => $this->elementFactoryMock,
106  'elementHistoryFactory' => $this->elementHistoryFactoryMock,
107  'addComplexElement' => $this->addComplexElementMock,
108  'dropElement' => $this->dropElementMock,
109  'triggers' => [
110  'migrateDataFrom' => $this->migrateDataTrigger
111  ]
112  ]
113  );
114  }
115 
119  private function prepareColumn()
120  {
121  $table = new Table(
122  'table',
123  'table',
124  'table',
125  'default',
126  'innodb',
127  'utf-8',
128  'utf-8',
129  ''
130  );
131  $column = new Integer(
132  'int',
133  'int',
134  $table,
135  11,
136  false,
137  false,
138  true,
139  0,
140  'Azaza',
141  'migrateDataFrom(v)'
142  );
143  $table->addColumns([$column]);
144  return $column;
145  }
146 
147  public function testDoOperation()
148  {
149  $addComplexStatement = $this->getMockBuilder(Statement::class)
150  ->disableOriginalConstructor()
151  ->getMock();
152  $dropComplexElement = $this->getMockBuilder(Statement::class)
153  ->disableOriginalConstructor()
154  ->getMock();
155  $callback = function () {
156  };
157  $column = $this->prepareColumn();
158  $elementHistory = new ElementHistory($column);
159  $definition = '`int` INT(11) NOT NULL DEFAULT 0 Comment "Azaza"';
160  $this->definitionAggregatorMock->expects(self::once())
161  ->method('toDefinition')
162  ->with($column)
163  ->willReturn($definition);
164  $this->migrateDataTrigger->expects(self::once())
165  ->method('isApplicable')
166  ->with('migrateDataFrom(v)')
167  ->willReturn(true);
168  $this->migrateDataTrigger->expects(self::once())
169  ->method('getCallback')
170  ->with($elementHistory)
171  ->willReturn($callback);
172  $statement = $this->getMockBuilder(Statement::class)
173  ->disableOriginalConstructor()
174  ->getMock();
175  $statement->expects(self::once())
176  ->method('addTrigger')
177  ->with($callback);
178  $this->dbSchemaWriterMock->expects(self::once())
179  ->method('addElement')
180  ->with('int', 'default', 'table', $definition, 'column')
181  ->willReturn($statement);
182  $index = new Index('index', 'index', $column->getTable(), [$column], 'btree', 'index');
183  $this->elementFactoryMock->expects(self::once())
184  ->method('create')
185  ->willReturn($index);
186  $indexHistory = new ElementHistory($index);
187  $statement->expects(self::once())
188  ->method('getTriggers')
189  ->willReturn([$callback]);
190  $this->elementHistoryFactoryMock->expects(self::once())
191  ->method('create')
192  ->willReturn($indexHistory);
193  $this->addComplexElementMock->expects(self::once())
194  ->method('doOperation')
195  ->with($indexHistory)
196  ->willReturn([$addComplexStatement]);
197  $this->dropElementMock->expects(self::once())
198  ->method('doOperation')
199  ->with($indexHistory)
200  ->willReturn([$dropComplexElement]);
201  $resetAIStatement = $this->getMockBuilder(Statement::class)
202  ->disableOriginalConstructor()
203  ->getMock();
204  $this->dbSchemaWriterMock->expects(self::once())
205  ->method('resetAutoIncrement')
206  ->willReturn($resetAIStatement);
207  self::assertEquals(
208  [$addComplexStatement, $statement, $dropComplexElement, $resetAIStatement],
209  $this->model->doOperation($elementHistory)
210  );
211  }
212 }
$table
Definition: trigger.php:14
$index
Definition: list.phtml:44