Version 1
[yaffs-website] / web / core / modules / block / tests / src / Kernel / Migrate / d6 / MigrateBlockTest.php
diff --git a/web/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php b/web/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php
new file mode 100644 (file)
index 0000000..bb59f50
--- /dev/null
@@ -0,0 +1,307 @@
+<?php
+
+namespace Drupal\Tests\block\Kernel\Migrate\d6;
+
+use Drupal\block\Entity\Block;
+use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
+
+/**
+ * Tests migration of blocks to configuration entities.
+ *
+ * @group migrate_drupal_6
+ */
+class MigrateBlockTest extends MigrateDrupal6TestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'block',
+    'views',
+    'comment',
+    'menu_ui',
+    'block_content',
+    'taxonomy',
+    'node',
+    'aggregator',
+    'book',
+    'forum',
+    'statistics',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Install the themes used for this test.
+    $this->container->get('theme_installer')->install(['bartik', 'test_theme']);
+
+    $this->installConfig(['block_content']);
+    $this->installEntitySchema('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 string $weight
+   *   The block weight.
+   * @param array $settings
+   *   (optional) The block settings.
+   * @param bool $status
+   *   Whether the block is expected to be enabled or disabled.
+   */
+  public function assertEntity($id, $visibility, $region, $theme, $weight, array $settings = NULL, $status = TRUE) {
+    $block = Block::load($id);
+    $this->assertTrue($block instanceof 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 user blocks.
+    $visibility = [
+      'request_path' => [
+        'id' => 'request_path',
+        'negate' => TRUE,
+        'pages' => "<front>\n/node/1\n/blog/*",
+      ],
+    ];
+    $settings = [
+      'id' => 'user_login_block',
+      'label' => '',
+      'provider' => 'user',
+      'label_display' => '0',
+    ];
+    $this->assertEntity('user', $visibility, 'sidebar_first', 'bartik', -10, $settings);
+
+    $visibility = [];
+    $settings = [
+      'id' => 'system_menu_block',
+      'label' => '',
+      'provider' => 'system',
+      'label_display' => '0',
+      'level' => 1,
+      'depth' => 0,
+    ];
+    $this->assertEntity('user_1', $visibility, 'sidebar_first', 'bartik', -11, $settings);
+
+    $visibility = [
+      'user_role' => [
+        'id' => 'user_role',
+        'roles' => [
+          'authenticated' => 'authenticated',
+        ],
+        'context_mapping' => [
+          'user' => '@user.current_user_context:current_user',
+        ],
+        'negate' => FALSE,
+      ],
+    ];
+    $settings = [
+      'id' => 'broken',
+      'label' => '',
+      'provider' => 'core',
+      'label_display' => '0',
+      'items_per_page' => '5',
+    ];
+    $this->assertEntity('user_2', $visibility, 'sidebar_second', 'bartik', -11, $settings);
+
+    $visibility = [
+      'user_role' => [
+        'id' => 'user_role',
+        'roles' => [
+          'migrate_test_role_1' => 'migrate_test_role_1',
+        ],
+        'context_mapping' => [
+          'user' => '@user.current_user_context:current_user',
+        ],
+        'negate' => FALSE,
+      ],
+    ];
+    $settings = [
+      'id' => 'broken',
+      'label' => '',
+      'provider' => 'core',
+      'label_display' => '0',
+      'items_per_page' => '10',
+    ];
+    $this->assertEntity('user_3', $visibility, 'sidebar_second', 'bartik', -10, $settings);
+
+    // Check system block.
+    $visibility = [
+      'request_path' => [
+        'id' => 'request_path',
+        'negate' => TRUE,
+        'pages' => '/node/1',
+      ],
+    ];
+    $settings = [
+      'id' => 'system_powered_by_block',
+      'label' => '',
+      'provider' => 'system',
+      'label_display' => '0',
+    ];
+    $this->assertEntity('system', $visibility, 'footer_fifth', 'bartik', -5, $settings);
+
+    // Check menu blocks.
+    $settings = [
+      'id' => 'broken',
+      'label' => '',
+      'provider' => 'core',
+      'label_display' => '0',
+    ];
+    $this->assertEntity('menu', [], 'header', 'bartik', -5, $settings);
+
+    // 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);
+
+    // Check book block.
+    $settings = [
+      'id' => 'book_navigation',
+      'label' => '',
+      'provider' => 'book',
+      'label_display' => '0',
+      'block_mode' => 'book pages',
+    ];
+    $this->assertEntity('book', [], 'sidebar_second', 'bartik', -4, $settings);
+
+    // Check forum block settings.
+    $settings = [
+      'id' => 'forum_active_block',
+      'label' => '',
+      'provider' => 'forum',
+      'label_display' => '0',
+      'block_count' => 3,
+      'properties' => [
+        'administrative' => '1',
+      ],
+    ];
+    $this->assertEntity('forum', [], 'sidebar_first', 'bartik', -8, $settings);
+
+    $settings = [
+      'id' => 'forum_new_block',
+      'label' => '',
+      'provider' => 'forum',
+      'label_display' => '0',
+      'block_count' => 4,
+      'properties' => [
+        'administrative' => '1',
+      ],
+    ];
+    $this->assertEntity('forum_1', [], 'sidebar_first', 'bartik', -9, $settings);
+
+    // Check statistic block settings.
+    $settings = [
+      'id' => 'broken',
+      'label' => '',
+      'provider' => 'core',
+      'label_display' => '0',
+      'top_day_num' => 7,
+      'top_all_num' => 8,
+      'top_last_num' => 9,
+    ];
+    $this->assertEntity('statistics', [], 'sidebar_second', 'bartik', 0, $settings);
+
+    // Check custom blocks.
+    $visibility = [
+      'request_path' => [
+        'id' => 'request_path',
+        'negate' => FALSE,
+        'pages' => '<front>',
+      ],
+    ];
+    $settings = [
+      'id' => 'block_content',
+      'label' => 'Static Block',
+      'provider' => 'block_content',
+      'label_display' => 'visible',
+      'status' => TRUE,
+      'info' => '',
+      'view_mode' => 'full',
+    ];
+    $this->assertEntity('block', $visibility, 'content', 'bartik', 0, $settings);
+
+    $visibility = [
+      'request_path' => [
+        'id' => 'request_path',
+        'negate' => FALSE,
+        'pages' => '/node',
+      ],
+    ];
+    $settings = [
+      'id' => 'block_content',
+      'label' => 'Another Static Block',
+      'provider' => 'block_content',
+      'label_display' => 'visible',
+      'status' => TRUE,
+      'info' => '',
+      'view_mode' => 'full',
+    ];
+    // We expect this block to be disabled because '' is not a valid region,
+    // and block_rebuild() will disable any block in an invalid region.
+    $this->assertEntity('block_1', $visibility, '', 'bluemarine', -4, $settings, FALSE);
+
+    $settings = [
+      'id' => 'block_content',
+      'label' => '',
+      'provider' => 'block_content',
+      'label_display' => '0',
+      'status' => TRUE,
+      'info' => '',
+      'view_mode' => 'full',
+    ];
+    $this->assertEntity('block_2', [], 'right', 'test_theme', -7, $settings);
+
+    // Custom block with php code is not migrated.
+    $block = Block::load('block_3');
+    $this->assertFalse($block instanceof Block);
+  }
+
+}