From 9a877cfb7883d098ea2bb5d3e7c2b7f7abb26a98 Mon Sep 17 00:00:00 2001 From: catch Date: Wed, 2 Mar 2022 09:51:40 +0000 Subject: [PATCH] Issue #3265483 by quietone, danflanagan8, daffie: Handle block migration for modules moved to contrib --- .../Kernel/Migrate/d6/MigrateBlockTest.php | 108 ++++++++++++++++++ .../migrate/destination/EntityBlock.php | 15 +++ .../d6/MigrateBlockContentTranslationTest.php | 1 - .../Kernel/Migrate/d6/MigrateBlockTest.php | 10 +- .../d7/MigrateBlockContentTranslationTest.php | 1 - 5 files changed, 130 insertions(+), 5 deletions(-) create mode 100644 core/modules/aggregator/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php diff --git a/core/modules/aggregator/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php b/core/modules/aggregator/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php new file mode 100644 index 00000000000..bc8a4e3cc07 --- /dev/null +++ b/core/modules/aggregator/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php @@ -0,0 +1,108 @@ +container->get('theme_installer')->install(['bartik', 'test_theme']); + + $this->installEntitySchema('block_content'); + $this->installConfig(['block_content']); + + // Set Bartik as the default public theme. + $config = $this->config('system.theme'); + $config->set('default', 'bartik'); + $config->save(); + + $this->executeMigrations([ + 'd6_filter_format', + 'block_content_type', + 'block_content_body_field', + 'd6_custom_block', + 'd6_user_role', + 'd6_block', + ]); + block_rebuild(); + } + + /** + * Asserts various aspects of a block. + * + * @param string $id + * The block ID. + * @param array $visibility + * The block visibility settings. + * @param string $region + * The display region. + * @param string $theme + * The theme. + * @param int $weight + * The block weight. + * @param array $settings + * (optional) The block settings. + * @param bool $status + * Whether the block is expected to be enabled or disabled. + * + * @internal + */ + public function assertEntity(string $id, array $visibility, string $region, string $theme, int $weight, array $settings = NULL, bool $status = TRUE): void { + $block = Block::load($id); + $this->assertInstanceOf(Block::class, $block); + $this->assertSame($visibility, $block->getVisibility()); + $this->assertSame($region, $block->getRegion()); + $this->assertSame($theme, $block->getTheme()); + $this->assertSame($weight, $block->getWeight()); + $this->assertSame($status, $block->status()); + if ($settings) { + $block_settings = $block->get('settings'); + $block_settings['id'] = current(explode(':', $block_settings['id'])); + $this->assertEquals($settings, $block_settings); + } + } + + /** + * Tests the block migration. + */ + public function testBlockMigration() { + $blocks = Block::loadMultiple(); + $this->assertCount(14, $blocks); + + // Check aggregator block. + $settings = [ + 'id' => 'aggregator_feed_block', + 'label' => '', + 'provider' => 'aggregator', + 'label_display' => '0', + 'block_count' => 7, + 'feed' => '5', + ]; + $this->assertEntity('aggregator', [], 'sidebar_second', 'bartik', -2, $settings); + } + +} diff --git a/core/modules/block/src/Plugin/migrate/destination/EntityBlock.php b/core/modules/block/src/Plugin/migrate/destination/EntityBlock.php index 537b16073ed..33ebcdda0d9 100644 --- a/core/modules/block/src/Plugin/migrate/destination/EntityBlock.php +++ b/core/modules/block/src/Plugin/migrate/destination/EntityBlock.php @@ -2,6 +2,8 @@ namespace Drupal\block\Plugin\migrate\destination; +use Drupal\Core\Config\Schema\SchemaIncompleteException; +use Drupal\migrate\MigrateException; use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase; use Drupal\migrate\Row; @@ -25,4 +27,17 @@ class EntityBlock extends EntityConfigBase { return reset($blocks); } + /** + * {@inheritdoc} + */ + public function import(Row $row, array $old_destination_id_values = []) { + try { + $entity_ids = parent::import($row, $old_destination_id_values); + } + catch (SchemaIncompleteException $e) { + throw new MigrateException($e->getMessage()); + } + return $entity_ids; + } + } diff --git a/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockContentTranslationTest.php b/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockContentTranslationTest.php index f9673cde760..78b40a0c620 100644 --- a/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockContentTranslationTest.php +++ b/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockContentTranslationTest.php @@ -15,7 +15,6 @@ class MigrateBlockContentTranslationTest extends MigrateDrupal6TestBase { * {@inheritdoc} */ protected static $modules = [ - 'aggregator', 'book', 'block', 'comment', diff --git a/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php b/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php index ecbea2ffb90..55f48c3e5a5 100644 --- a/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php +++ b/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php @@ -23,7 +23,6 @@ class MigrateBlockTest extends MigrateDrupal6TestBase { 'block_content', 'taxonomy', 'node', - 'aggregator', 'book', 'forum', 'path_alias', @@ -197,9 +196,9 @@ class MigrateBlockTest extends MigrateDrupal6TestBase { // Check aggregator block. $settings = [ - 'id' => 'aggregator_feed_block', + 'id' => 'broken', 'label' => '', - 'provider' => 'aggregator', + 'provider' => 'core', 'label_display' => '0', 'block_count' => 7, 'feed' => '5', @@ -306,6 +305,11 @@ class MigrateBlockTest extends MigrateDrupal6TestBase { // Custom block with php code is not migrated. $block = Block::load('block_3'); $this->assertNotInstanceOf(Block::class, $block); + + // Check migrate messages. + $messages = iterator_to_array($this->getMigration('d6_block')->getIdMap()->getMessages()); + $this->assertCount(2, $messages); + $this->assertSame($messages[1]->message, 'Schema errors for block.block.aggregator with the following errors: block.block.aggregator:settings.block_count missing schema, block.block.aggregator:settings.feed missing schema'); } } diff --git a/core/modules/block/tests/src/Kernel/Migrate/d7/MigrateBlockContentTranslationTest.php b/core/modules/block/tests/src/Kernel/Migrate/d7/MigrateBlockContentTranslationTest.php index 9f3a5c77a02..9ddedf987d5 100644 --- a/core/modules/block/tests/src/Kernel/Migrate/d7/MigrateBlockContentTranslationTest.php +++ b/core/modules/block/tests/src/Kernel/Migrate/d7/MigrateBlockContentTranslationTest.php @@ -17,7 +17,6 @@ class MigrateBlockContentTranslationTest extends MigrateDrupal7TestBase { protected static $modules = [ 'node', 'text', - 'aggregator', 'book', 'block', 'comment',