componentRegistrarMock = $this->getMockBuilder(ComponentRegistrar::class) ->disableOriginalConstructor() ->getMock(); $this->xmlPersistor = $this->getMockBuilder(XmlPersistor::class) ->getMock(); $this->objectManagerHelper = new ObjectManagerHelper($this); $this->model = $this->objectManagerHelper->getObject( \Magento\Framework\Setup\SchemaPersistor::class, [ 'componentRegistrar' => $this->componentRegistrarMock, 'xmlPersistor' => $this->xmlPersistor ] ); } /** * @dataProvider schemaListenerTablesDataProvider * @param array $tables * @param string $expectedXML */ public function testPersist(array $tables, $expectedXML) : void { $moduleName = 'First_Module'; /** @var SchemaListener|\PHPUnit_Framework_MockObject_MockObject $schemaListenerMock */ $schemaListenerMock = $this->getMockBuilder(SchemaListener::class) ->disableOriginalConstructor() ->getMock(); $schemaListenerMock->expects(self::once()) ->method('getTables') ->willReturn($tables); $this->componentRegistrarMock->expects(self::once()) ->method('getPath') ->with('module', $moduleName) ->willReturn('some-non-existing-path'); $simpleXmlElement = new \SimpleXMLElement($expectedXML); $this->xmlPersistor ->expects(self::once()) ->method('persist') ->with($simpleXmlElement, 'some-non-existing-path/etc/db_schema.xml'); $this->model->persist($schemaListenerMock); } /** * Provide listened schema. * * @return array */ public function schemaListenerTablesDataProvider() : array { return [ [ 'schemaListenerTables' => [ 'First_Module' => [ 'first_table' => [ 'disabled' => false, 'name' => 'first_table', 'resource' => 'default', 'engine' => 'innodb', 'columns' => [ 'first_column' => [ 'name' => 'first_column', 'xsi:type' => 'integer', 'nullable' => 1, 'unsigned' => '0', ], 'second_column' => [ 'name' => 'second_column', 'xsi:type' => 'date', 'nullable' => 0, ] ], 'indexes' => [ 'TEST_INDEX' => [ 'name' => 'TEST_INDEX', 'indexType' => 'btree', 'columns' => [ 'first_column' ] ] ], 'constraints' => [ 'foreign' => [ 'some_foreign_constraint' => [ 'referenceTable' => 'table', 'referenceColumn' => 'column', 'table' => 'first_table', 'column' => 'first_column' ] ], 'primary' => [ 'PRIMARY' => [ 'xsi:type' => 'primary', 'name' => 'PRIMARY', 'columns' => [ 'second_column' ] ] ] ] ] ] ], // @codingStandardsIgnoreStart 'XMLResult' => '
' // @codingStandardsIgnoreEnd ] ]; } }