Loading bean_migrate.module +1 −0 Original line number Diff line number Diff line Loading @@ -17,4 +17,5 @@ function bean_migrate_migration_plugins_alter(array &$migrations) { MigrationPluginAlterer::copyCoreBlockRegionMappingToBeanBlockPlacement($migrations); MigrationPluginAlterer::mapBeanToBlockContent($migrations); MigrationPluginAlterer::finalizeDerivedFieldMigrations($migrations); MigrationPluginAlterer::removeUuidProcessIfNotNeeded($migrations); } src/MigrationPluginAlterer.php +27 −0 Original line number Diff line number Diff line Loading @@ -309,6 +309,33 @@ class MigrationPluginAlterer { } } /** * Remove uuid destination process pipeline from bean migration if not needed. * * @param array $migration_definitions * An associative array of migrations keyed by migration ID, as passed to * hook_migration_plugins_alter(). */ public static function removeUuidProcessIfNotNeeded(array &$migration_definitions): void { $bean_source = static::getSourcePlugin('bean_type'); assert($bean_source instanceof DrupalSqlBase); $bean_uuid_enabled = !empty($bean_source->getSystemData()['module']['bean_uuid']['status'] ?? NULL); if ($bean_uuid_enabled) { return; } $bean_migrations = array_filter( $migration_definitions, function (array $definition) { return $definition['source']['plugin'] === 'bean'; } ); foreach (array_keys($bean_migrations) as $plugin_id) { unset($migration_definitions[$plugin_id]['process']['uuid']); } } /** * Converts a destination process to an associative array. * Loading tests/src/Kernel/BeanMigrateTest.php +16 −0 Original line number Diff line number Diff line Loading @@ -18,4 +18,20 @@ class BeanMigrateTest extends BeanMigrateTestBase { $this->performBeanMigrationAssertions(); } /** * Tests bean migrations without bean UUIDs. * * @depends testMigrations */ public function testMigrationsWithoutUuid() { $this->sourceDatabase->update('system') ->condition('name', 'bean_uuid') ->fields(['status' => 0]) ->execute(); $this->sourceDatabase->schema()->dropField('bean', 'uuid'); $this->sourceDatabase->schema()->dropField('bean_revision', 'vuuid'); $this->testMigrations(); } } tests/src/Kernel/BeanMigrateTestBase.php +6 −12 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ namespace Drupal\Tests\bean_migrate\Kernel; use Drupal\Tests\bean_migrate\Traits\BeanMigrateAssertionsTrait; use Drupal\Tests\migmag\Traits\MigMagKernelTestDxTrait; use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase; /** Loading @@ -11,6 +12,7 @@ use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase; abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { use BeanMigrateAssertionsTrait; use MigMagKernelTestDxTrait; /** * Multilingual migration test. Loading Loading @@ -159,7 +161,6 @@ abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { 'd7_field', 'd7_node_type', ]); $this->stopCollectingMessages(); $this->startCollectingMessages(); $this->executeMigrations([ Loading @@ -171,10 +172,8 @@ abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { 'bean_translation_settings', ]); } $this->stopCollectingMessages(); $this->assertEmpty($this->migrateMessages); $this->assertExpectedMigrationMessages(); $this->startCollectingMessages(); $this->executeMigrations([ 'block_content_type', 'block_content_body_field', Loading @@ -184,7 +183,6 @@ abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { 'd7_user_role', 'd7_user', ]); $this->stopCollectingMessages(); // Migrate the Bean title related field storage and instance entities. $this->startCollectingMessages(); Loading @@ -194,16 +192,14 @@ abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { 'bean_title_field_formatter', 'bean_title_field_widget', ]); $this->stopCollectingMessages(); $this->assertEmpty($this->migrateMessages); $this->assertExpectedMigrationMessages(); // Migrate the actual content entities. $this->startCollectingMessages(); $this->executeMigrations([ 'bean', ]); $this->stopCollectingMessages(); $this->assertEmpty($this->migrateMessages); $this->assertExpectedMigrationMessages(); // Drupal core's Migrate Drupal UI executes d7_custom_block" migrations // after bean entity migrations. Loading @@ -212,7 +208,6 @@ abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { 'd7_block', 'd7_node_complete', ]); $this->stopCollectingMessages(); // Migrate Bean block placements. $this->startCollectingMessages(); Loading @@ -225,8 +220,7 @@ abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { 'bean_block_translation_et', ]); } $this->stopCollectingMessages(); $this->assertEmpty($this->migrateMessages); $this->assertExpectedMigrationMessages(); } } tests/src/Traits/BeanContentAssertionsTrait.php +41 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,11 @@ trait BeanContentAssertionsTrait { 'content_translation_created' => [], ]; } if (!$this->beanUuidsShouldBeMigrated()) { unset($expected['uuid']); } $this->assertEquals($expected, $this->getImportantEntityProperties($default_block_revision)); } Loading Loading @@ -117,6 +122,10 @@ trait BeanContentAssertionsTrait { 'content_translation_created' => [], ]; } if (!$this->beanUuidsShouldBeMigrated()) { unset($expected['uuid']); } $this->assertEquals($expected, $this->getImportantEntityProperties($default_block_revision)); // Test the previous revision. Loading Loading @@ -150,6 +159,10 @@ trait BeanContentAssertionsTrait { 'content_translation_created' => [], ]; } if (!$this->beanUuidsShouldBeMigrated()) { unset($expected['uuid']); } $this->assertEquals($expected, $this->getImportantEntityProperties(reset($other_revisions))); } Loading Loading @@ -199,6 +212,10 @@ trait BeanContentAssertionsTrait { 'content_translation_created' => [], ]; } if (!$this->beanUuidsShouldBeMigrated()) { unset($expected['uuid']); } $this->assertEquals($expected, $this->getImportantEntityProperties($default_block_revision)); } Loading Loading @@ -252,6 +269,10 @@ trait BeanContentAssertionsTrait { 'content_translation_created' => [], ]; } if (!$this->beanUuidsShouldBeMigrated()) { unset($expected['uuid']); } $this->assertEquals($expected, $this->getImportantEntityProperties($default_block_revision)); // Check the next revision. Loading Loading @@ -285,6 +306,10 @@ trait BeanContentAssertionsTrait { 'content_translation_created' => [], ]; } if (!$this->beanUuidsShouldBeMigrated()) { unset($expected['uuid']); } $this->assertEquals($expected, $this->getImportantEntityProperties(reset($other_revisions))); } Loading Loading @@ -703,4 +728,20 @@ trait BeanContentAssertionsTrait { $this->assertEquals($default_revision_english, $this->getImportantEntityProperties($default_block_revision->getTranslation('en'))); } /** * Whether there were bean entity UUIDs to migrate over. * * @return bool * Whether there were bean entity UUIDs to migrate over. */ protected function beanUuidsShouldBeMigrated(): bool { $bean_uuid_installed_in_source = $this->sourceDatabase->select('system', 's') ->fields('s', ['status']) ->condition('s.name', 'bean_uuid') ->execute() ->fetchField(); return $bean_uuid_installed_in_source; } } Loading
bean_migrate.module +1 −0 Original line number Diff line number Diff line Loading @@ -17,4 +17,5 @@ function bean_migrate_migration_plugins_alter(array &$migrations) { MigrationPluginAlterer::copyCoreBlockRegionMappingToBeanBlockPlacement($migrations); MigrationPluginAlterer::mapBeanToBlockContent($migrations); MigrationPluginAlterer::finalizeDerivedFieldMigrations($migrations); MigrationPluginAlterer::removeUuidProcessIfNotNeeded($migrations); }
src/MigrationPluginAlterer.php +27 −0 Original line number Diff line number Diff line Loading @@ -309,6 +309,33 @@ class MigrationPluginAlterer { } } /** * Remove uuid destination process pipeline from bean migration if not needed. * * @param array $migration_definitions * An associative array of migrations keyed by migration ID, as passed to * hook_migration_plugins_alter(). */ public static function removeUuidProcessIfNotNeeded(array &$migration_definitions): void { $bean_source = static::getSourcePlugin('bean_type'); assert($bean_source instanceof DrupalSqlBase); $bean_uuid_enabled = !empty($bean_source->getSystemData()['module']['bean_uuid']['status'] ?? NULL); if ($bean_uuid_enabled) { return; } $bean_migrations = array_filter( $migration_definitions, function (array $definition) { return $definition['source']['plugin'] === 'bean'; } ); foreach (array_keys($bean_migrations) as $plugin_id) { unset($migration_definitions[$plugin_id]['process']['uuid']); } } /** * Converts a destination process to an associative array. * Loading
tests/src/Kernel/BeanMigrateTest.php +16 −0 Original line number Diff line number Diff line Loading @@ -18,4 +18,20 @@ class BeanMigrateTest extends BeanMigrateTestBase { $this->performBeanMigrationAssertions(); } /** * Tests bean migrations without bean UUIDs. * * @depends testMigrations */ public function testMigrationsWithoutUuid() { $this->sourceDatabase->update('system') ->condition('name', 'bean_uuid') ->fields(['status' => 0]) ->execute(); $this->sourceDatabase->schema()->dropField('bean', 'uuid'); $this->sourceDatabase->schema()->dropField('bean_revision', 'vuuid'); $this->testMigrations(); } }
tests/src/Kernel/BeanMigrateTestBase.php +6 −12 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ namespace Drupal\Tests\bean_migrate\Kernel; use Drupal\Tests\bean_migrate\Traits\BeanMigrateAssertionsTrait; use Drupal\Tests\migmag\Traits\MigMagKernelTestDxTrait; use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase; /** Loading @@ -11,6 +12,7 @@ use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase; abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { use BeanMigrateAssertionsTrait; use MigMagKernelTestDxTrait; /** * Multilingual migration test. Loading Loading @@ -159,7 +161,6 @@ abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { 'd7_field', 'd7_node_type', ]); $this->stopCollectingMessages(); $this->startCollectingMessages(); $this->executeMigrations([ Loading @@ -171,10 +172,8 @@ abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { 'bean_translation_settings', ]); } $this->stopCollectingMessages(); $this->assertEmpty($this->migrateMessages); $this->assertExpectedMigrationMessages(); $this->startCollectingMessages(); $this->executeMigrations([ 'block_content_type', 'block_content_body_field', Loading @@ -184,7 +183,6 @@ abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { 'd7_user_role', 'd7_user', ]); $this->stopCollectingMessages(); // Migrate the Bean title related field storage and instance entities. $this->startCollectingMessages(); Loading @@ -194,16 +192,14 @@ abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { 'bean_title_field_formatter', 'bean_title_field_widget', ]); $this->stopCollectingMessages(); $this->assertEmpty($this->migrateMessages); $this->assertExpectedMigrationMessages(); // Migrate the actual content entities. $this->startCollectingMessages(); $this->executeMigrations([ 'bean', ]); $this->stopCollectingMessages(); $this->assertEmpty($this->migrateMessages); $this->assertExpectedMigrationMessages(); // Drupal core's Migrate Drupal UI executes d7_custom_block" migrations // after bean entity migrations. Loading @@ -212,7 +208,6 @@ abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { 'd7_block', 'd7_node_complete', ]); $this->stopCollectingMessages(); // Migrate Bean block placements. $this->startCollectingMessages(); Loading @@ -225,8 +220,7 @@ abstract class BeanMigrateTestBase extends MigrateDrupalTestBase { 'bean_block_translation_et', ]); } $this->stopCollectingMessages(); $this->assertEmpty($this->migrateMessages); $this->assertExpectedMigrationMessages(); } }
tests/src/Traits/BeanContentAssertionsTrait.php +41 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,11 @@ trait BeanContentAssertionsTrait { 'content_translation_created' => [], ]; } if (!$this->beanUuidsShouldBeMigrated()) { unset($expected['uuid']); } $this->assertEquals($expected, $this->getImportantEntityProperties($default_block_revision)); } Loading Loading @@ -117,6 +122,10 @@ trait BeanContentAssertionsTrait { 'content_translation_created' => [], ]; } if (!$this->beanUuidsShouldBeMigrated()) { unset($expected['uuid']); } $this->assertEquals($expected, $this->getImportantEntityProperties($default_block_revision)); // Test the previous revision. Loading Loading @@ -150,6 +159,10 @@ trait BeanContentAssertionsTrait { 'content_translation_created' => [], ]; } if (!$this->beanUuidsShouldBeMigrated()) { unset($expected['uuid']); } $this->assertEquals($expected, $this->getImportantEntityProperties(reset($other_revisions))); } Loading Loading @@ -199,6 +212,10 @@ trait BeanContentAssertionsTrait { 'content_translation_created' => [], ]; } if (!$this->beanUuidsShouldBeMigrated()) { unset($expected['uuid']); } $this->assertEquals($expected, $this->getImportantEntityProperties($default_block_revision)); } Loading Loading @@ -252,6 +269,10 @@ trait BeanContentAssertionsTrait { 'content_translation_created' => [], ]; } if (!$this->beanUuidsShouldBeMigrated()) { unset($expected['uuid']); } $this->assertEquals($expected, $this->getImportantEntityProperties($default_block_revision)); // Check the next revision. Loading Loading @@ -285,6 +306,10 @@ trait BeanContentAssertionsTrait { 'content_translation_created' => [], ]; } if (!$this->beanUuidsShouldBeMigrated()) { unset($expected['uuid']); } $this->assertEquals($expected, $this->getImportantEntityProperties(reset($other_revisions))); } Loading Loading @@ -703,4 +728,20 @@ trait BeanContentAssertionsTrait { $this->assertEquals($default_revision_english, $this->getImportantEntityProperties($default_block_revision->getTranslation('en'))); } /** * Whether there were bean entity UUIDs to migrate over. * * @return bool * Whether there were bean entity UUIDs to migrate over. */ protected function beanUuidsShouldBeMigrated(): bool { $bean_uuid_installed_in_source = $this->sourceDatabase->select('system', 's') ->fields('s', ['status']) ->condition('s.name', 'bean_uuid') ->execute() ->fetchField(); return $bean_uuid_installed_in_source; } }