42 private $objectManagerHelper;
47 private $definitionAggregatorMock;
52 private $dbSchemaWriterMock;
57 private $elementFactoryMock;
62 private $elementHistoryFactoryMock;
67 private $addComplexElementMock;
72 private $dropElementMock;
75 private $migrateDataTrigger;
79 $this->definitionAggregatorMock = $this->getMockBuilder(DefinitionAggregator::class)
80 ->disableOriginalConstructor()
82 $this->dbSchemaWriterMock = $this->getMockBuilder(DbSchemaWriterInterface::class)
83 ->getMockForAbstractClass();
84 $this->elementFactoryMock = $this->getMockBuilder(ElementFactory::class)
85 ->disableOriginalConstructor()
87 $this->elementHistoryFactoryMock = $this->getMockBuilder(ElementHistoryFactory::class)
88 ->disableOriginalConstructor()
90 $this->addComplexElementMock = $this->getMockBuilder(AddComplexElement::class)
91 ->disableOriginalConstructor()
93 $this->dropElementMock = $this->getMockBuilder(DropElement::class)
94 ->disableOriginalConstructor()
96 $this->migrateDataTrigger = $this->getMockBuilder(MigrateDataFrom::class)
97 ->disableOriginalConstructor()
99 $this->objectManagerHelper =
new ObjectManagerHelper($this);
100 $this->model = $this->objectManagerHelper->getObject(
103 'definitionAggregator' => $this->definitionAggregatorMock,
104 'dbSchemaWriter' => $this->dbSchemaWriterMock,
105 'elementFactory' => $this->elementFactoryMock,
106 'elementHistoryFactory' => $this->elementHistoryFactoryMock,
107 'addComplexElement' => $this->addComplexElementMock,
108 'dropElement' => $this->dropElementMock,
110 'migrateDataFrom' => $this->migrateDataTrigger
119 private function prepareColumn()
143 $table->addColumns([$column]);
149 $addComplexStatement = $this->getMockBuilder(Statement::class)
150 ->disableOriginalConstructor()
152 $dropComplexElement = $this->getMockBuilder(Statement::class)
153 ->disableOriginalConstructor()
155 $callback =
function () {
157 $column = $this->prepareColumn();
159 $definition =
'`int` INT(11) NOT NULL DEFAULT 0 Comment "Azaza"';
160 $this->definitionAggregatorMock->expects(self::once())
161 ->method(
'toDefinition')
163 ->willReturn($definition);
164 $this->migrateDataTrigger->expects(self::once())
165 ->method(
'isApplicable')
166 ->with(
'migrateDataFrom(v)')
168 $this->migrateDataTrigger->expects(self::once())
169 ->method(
'getCallback')
170 ->with($elementHistory)
171 ->willReturn($callback);
172 $statement = $this->getMockBuilder(Statement::class)
173 ->disableOriginalConstructor()
175 $statement->expects(self::once())
176 ->method(
'addTrigger')
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())
187 $statement->expects(self::once())
188 ->method(
'getTriggers')
189 ->willReturn([$callback]);
190 $this->elementHistoryFactoryMock->expects(self::once())
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()
204 $this->dbSchemaWriterMock->expects(self::once())
205 ->method(
'resetAutoIncrement')
206 ->willReturn($resetAIStatement);
208 [$addComplexStatement, $statement, $dropComplexElement, $resetAIStatement],
209 $this->model->doOperation($elementHistory)