Commit 9a877cfb authored by catch's avatar catch
Browse files

Issue #3265483 by quietone, danflanagan8, daffie: Handle block migration for...

Issue #3265483 by quietone, danflanagan8, daffie: Handle block migration for modules moved to contrib
parent 6e739530
Loading
Loading
Loading
Loading
+108 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\Tests\aggregator\Kernel\Migrate\d6;

use Drupal\block\Entity\Block;
// @todo Remove in https://www.drupal.org/node/3267274
use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;

/**
 * Tests migration of aggregator block.
 *
 * @group aggregator
 */
class MigrateBlockTest extends MigrateDrupal6TestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'aggregator',
    'block',
    'block_content',
    'path_alias',
  ];

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    // Install the themes used for this test.
    $this->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);
  }

}
+15 −0
Original line number Diff line number Diff line
@@ -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 @@ protected function getEntityId(Row $row) {
    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;
  }

}
+0 −1
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@ class MigrateBlockContentTranslationTest extends MigrateDrupal6TestBase {
   * {@inheritdoc}
   */
  protected static $modules = [
    'aggregator',
    'book',
    'block',
    'comment',
+7 −3
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ class MigrateBlockTest extends MigrateDrupal6TestBase {
    'block_content',
    'taxonomy',
    'node',
    'aggregator',
    'book',
    'forum',
    'path_alias',
@@ -197,9 +196,9 @@ public function testBlockMigration() {

    // 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 @@ public function testBlockMigration() {
    // 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');
  }

}
+0 −1
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@ class MigrateBlockContentTranslationTest extends MigrateDrupal7TestBase {
  protected static $modules = [
    'node',
    'text',
    'aggregator',
    'book',
    'block',
    'comment',