cliCommand = $objectManager->get(CliCommand::class); $this->moduleManager = $objectManager->get(TestModuleManager::class); $this->componentRegistrar = $objectManager->create( ComponentRegistrar::class ); } /** * @moduleName Magento_TestSetupDeclarationModule8 * @moduleName Magento_TestSetupDeclarationModule9 * @throws \Exception */ public function testUpgradeWithConverting() { $modules = [ 'Magento_TestSetupDeclarationModule8', 'Magento_TestSetupDeclarationModule9', ]; foreach ($modules as $moduleName) { $this->moduleManager->updateRevision( $moduleName, 'setup_install_with_converting', 'InstallSchema.php', 'Setup' ); } $this->cliCommand->install($modules, ['convert-old-scripts' => true]); foreach ($modules as $moduleName) { $this->assertInstallScriptChanges($moduleName); } foreach ($modules as $moduleName) { $this->moduleManager->updateRevision( $moduleName, 'setup_install_with_converting', 'UpgradeSchema.php', 'Setup' ); $this->moduleManager->updateRevision( $moduleName, 'setup_install_with_converting', 'module.xml', 'etc' ); } $this->cliCommand->upgrade(['convert-old-scripts' => true]); foreach ($modules as $moduleName) { $this->assertUpgradeScriptChanges($moduleName); } } /** * Convert file content in the DOM document. * * @param string $schemaFileName * @return \DOMDocument */ private function getSchemaDocument(string $schemaFileName): \DOMDocument { $schemaDocument = new \DOMDocument(); $schemaDocument->preserveWhiteSpace = false; $schemaDocument->formatOutput = true; $schemaDocument->loadXML(file_get_contents($schemaFileName)); return $schemaDocument; } /** * @param string $moduleName */ private function assertInstallScriptChanges(string $moduleName): void { $generatedSchema = $this->getGeneratedSchema($moduleName); $expectedSchema = $this->getSchemaDocument($this->getSchemaFixturePath($moduleName, 'install')); $this->assertEquals($expectedSchema->saveXML(), $generatedSchema->saveXML()); } /** * @param string $moduleName */ private function assertUpgradeScriptChanges(string $moduleName): void { $generatedSchema = $this->getGeneratedSchema($moduleName); $expectedSchema = $this->getSchemaDocument($this->getSchemaFixturePath($moduleName, 'upgrade')); $this->assertEquals($expectedSchema->saveXML(), $generatedSchema->saveXML()); } /** * @param string $moduleName * @return \DOMDocument */ private function getGeneratedSchema(string $moduleName): \DOMDocument { $modulePath = $this->componentRegistrar->getPath('module', $moduleName); $schemaFileName = $modulePath . DIRECTORY_SEPARATOR . \Magento\Framework\Module\Dir::MODULE_ETC_DIR . DIRECTORY_SEPARATOR . 'db_schema.xml'; return $this->getSchemaDocument($schemaFileName); } /** * @param string $moduleName * @param string $suffix * @return string */ private function getSchemaFixturePath(string $moduleName, string $suffix): string { $schemaFixturePath = dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . implode( DIRECTORY_SEPARATOR, [ '_files', 'SetupUpgrade', str_replace('Magento_', '', $moduleName), 'db_schema_' . $suffix . '.xml' ] ); return $schemaFixturePath; } }