/vendor/magento/framework/Module/Test/Unit/Setup/MigrationTest.php
PHP | 251 lines | 164 code | 28 blank | 59 comment | 6 complexity | cf7b405623ca47ecfac96d682b4fbb5a MD5 | raw file
- <?php
- /**
- * Copyright © 2016 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
- /**
- * Tests for resource setup model needed for migration process between Magento versions
- */
- namespace Magento\Framework\Module\Test\Unit\Setup;
- class MigrationTest extends \PHPUnit_Framework_TestCase
- {
- /**
- * Result of update class aliases to compare with expected.
- * Used in callback for \Magento\Framework\DB\Select::update.
- *
- * @var array
- */
- protected $_actualUpdateResult;
- /**
- * Where conditions to compare with expected.
- * Used in callback for \Magento\Framework\DB\Select::where.
- *
- * @var array
- */
- protected $_actualWhere;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\DB\Select
- */
- protected $_selectMock;
- protected function tearDown()
- {
- unset($this->_actualUpdateResult);
- unset($this->_actualWhere);
- unset($this->_selectMock);
- }
- /**
- * Retrieve all necessary objects mocks which used inside customer storage
- *
- * @param int $tableRowsCount
- * @param array $tableData
- * @param array $aliasesMap
- *
- * @return array
- */
- protected function _getModelDependencies($tableRowsCount = 0, $tableData = [], $aliasesMap = [])
- {
- $this->_selectMock = $this->getMock('Magento\Framework\DB\Select', [], [], '', false);
- $this->_selectMock->expects($this->any())->method('from')->will($this->returnSelf());
- $this->_selectMock->expects(
- $this->any()
- )->method(
- 'where'
- )->will(
- $this->returnCallback([$this, 'whereCallback'])
- );
- $connectionMock = $this->getMock(
- 'Magento\Framework\DB\Adapter\Pdo\Mysql',
- ['select', 'update', 'fetchAll', 'fetchOne'],
- [],
- '',
- false
- );
- $connectionMock->expects($this->any())->method('select')->will($this->returnValue($this->_selectMock));
- $connectionMock->expects(
- $this->any()
- )->method(
- 'update'
- )->will(
- $this->returnCallback([$this, 'updateCallback'])
- );
- $connectionMock->expects($this->any())->method('fetchAll')->will($this->returnValue($tableData));
- $connectionMock->expects($this->any())->method('fetchOne')->will($this->returnValue($tableRowsCount));
- return [
- 'resource_config' => 'not_used',
- 'connection_config' => 'not_used',
- 'module_config' => 'not_used',
- 'base_dir' => 'not_used',
- 'path_to_map_file' => 'not_used',
- 'connection' => $connectionMock,
- 'core_helper' => $this->getMock('Magento\Framework\Json\Helper\Data', [], [], '', false, false),
- 'aliases_map' => $aliasesMap
- ];
- }
- /**
- * Callback for \Magento\Framework\DB\Select::update
- *
- * @param string $table
- * @param array $bind
- * @param array $where
- */
- public function updateCallback($table, array $bind, $where)
- {
- $fields = array_keys($bind);
- $replacements = array_values($bind);
- $this->_actualUpdateResult[] = [
- 'table' => $table,
- 'field' => $fields[0],
- 'to' => $replacements[0],
- 'from' => $where,
- ];
- }
- /**
- * Callback for \Magento\Framework\DB\Select::where
- *
- * @param string $condition
- * @return \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\DB\Select
- */
- public function whereCallback($condition)
- {
- if (null === $this->_actualWhere) {
- $this->_actualWhere = [];
- }
- if (!empty($condition) && false === strpos(
- $condition,
- ' IS NOT NULL'
- ) && !in_array(
- $condition,
- $this->_actualWhere
- )
- ) {
- $this->_actualWhere[] = $condition;
- }
- return $this->_selectMock;
- }
- /**
- * @covers \Magento\Framework\Module\Setup\Migration::appendClassAliasReplace
- */
- public function testAppendClassAliasReplace()
- {
- $setupMock = $this->getMockForAbstractClass('\Magento\Framework\Setup\ModuleDataSetupInterface');
- $filesystemMock = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
- $migrationData = $this->getMock('Magento\Framework\Module\Setup\MigrationData', [], [], '', false);
- $setupModel = new \Magento\Framework\Module\Setup\Migration(
- $setupMock,
- $filesystemMock,
- $migrationData,
- 'app/etc/aliases_to_classes_map.json'
- );
- $setupModel->appendClassAliasReplace(
- 'tableName',
- 'fieldName',
- 'entityType',
- 'fieldContentType',
- ['pk_field1', 'pk_field2'],
- 'additionalWhere'
- );
- $expectedRulesList = [
- 'tableName' => [
- 'fieldName' => [
- 'entity_type' => 'entityType',
- 'content_type' => 'fieldContentType',
- 'pk_fields' => ['pk_field1', 'pk_field2'],
- 'additional_where' => 'additionalWhere',
- ],
- ],
- ];
- $this->assertAttributeEquals($expectedRulesList, '_replaceRules', $setupModel);
- // Check that replace for the same field is not set twice
- $setupModel->appendClassAliasReplace(
- 'tableName',
- 'fieldName',
- 'newEntityType',
- 'newFieldContentType',
- ['new_pk_field1', 'new_pk_field2'],
- 'newAdditionalWhere'
- );
- $this->assertAttributeEquals($expectedRulesList, '_replaceRules', $setupModel);
- }
- /**
- * @dataProvider updateClassAliasesDataProvider
- */
- public function testDoUpdateClassAliases($replaceRules, $tableData, $expected, $aliasesMap = [])
- {
- $this->markTestIncomplete('Requires refactoring of class that is tested, covers to many methods');
- $this->_actualUpdateResult = [];
- $tableRowsCount = count($tableData);
- $setupMock = $this->getMockForAbstractClass('\Magento\Framework\Setup\ModuleDataSetupInterface');
- $filesystemMock = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
- $migrationData = $this->getMock('Magento\Framework\Module\Setup\MigrationData', [], [], '', false);
- $setupModel = new \Magento\Framework\Module\Setup\Migration(
- $setupMock,
- $filesystemMock,
- $migrationData,
- 'app/etc/aliases_to_classes_map.json',
- $this->_getModelDependencies($tableRowsCount, $tableData, $aliasesMap)
- );
- foreach ($replaceRules as $replaceRule) {
- call_user_func_array([$setupModel, 'appendClassAliasReplace'], $replaceRule);
- }
- $setupModel->doUpdateClassAliases();
- $this->assertEquals($expected['updates'], $this->_actualUpdateResult);
- if (isset($expected['where'])) {
- $this->assertEquals($expected['where'], $this->_actualWhere);
- }
- if (isset($expected['aliases_map'])) {
- $this->assertAttributeEquals($expected['aliases_map'], '_aliasesMap', $setupModel);
- }
- }
- /**
- * Data provider for updating class aliases
- *
- * @return array
- */
- public function updateClassAliasesDataProvider()
- {
- return [
- 'plain text replace model' => include __DIR__ . '/_files/data_content_plain_model.php',
- 'plain text replace resource' => include __DIR__ . '/_files/data_content_plain_resource.php',
- 'plain text replace with pk field' => include __DIR__ . '/_files/data_content_plain_pk_fields.php',
- 'xml replace' => include __DIR__ . '/_files/data_content_xml.php',
- 'wiki markup replace' => include __DIR__ . '/_files/data_content_wiki.php',
- 'serialized php replace' => include __DIR__ . '/_files/data_content_serialized.php'
- ];
- }
- /**
- * @return \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Filesystem
- */
- protected function _getFilesystemMock()
- {
- $mock = $this->getMockBuilder('Magento\Framework\Filesystem')->disableOriginalConstructor()->getMock();
- return $mock;
- }
- }