Newer
Older
Angie Byron
committed
<?php
Alex Pott
committed
namespace Drupal\Tests\block\Kernel\Migrate\d7;
Angie Byron
committed
use Drupal\block\Entity\Block;
use Drupal\block_content\Entity\BlockContent;
Alex Pott
committed
use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
Angie Byron
committed
/**
* Tests migration of blocks to configuration entities.
*
* @group block
*/
class MigrateBlockTest extends MigrateDrupal7TestBase {
/**
Angie Byron
committed
* {@inheritdoc}
Angie Byron
committed
*/
Angie Byron
committed
'block',
'views',
'comment',
'menu_ui',
'block_content',
'node',
'text',
'filter',
'user',
];
Angie Byron
committed
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
// Install the themes used for this test.
$this->container->get('theme_installer')->install(['bartik', 'seven']);
Angie Byron
committed
$this->installConfig(static::$modules);
$this->installEntitySchema('block_content');
// Set Bartik and Seven as the default public and admin theme.
$config = $this->config('system.theme');
$config->set('default', 'bartik');
$config->set('admin', 'seven');
$config->save();
Angie Byron
committed
$this->executeMigrations([
'd7_filter_format',
'd7_user_role',
'block_content_type',
'block_content_body_field',
'd7_custom_block',
'd7_block',
]);
Alex Pott
committed
block_rebuild();
Angie Byron
committed
}
/**
* Asserts various aspects of a block.
*
* @param string $id
* The block ID.
* @param string $plugin_id
* The block's plugin ID.
* @param array $roles
* Role IDs the block is expected to have.
* @param string $pages
* The list of pages on which the block should appear.
* @param string $region
* The display region.
* @param string $theme
* The theme.
* @param string $weight
* The block weight.
* @param string $label
* The block label.
* @param string $label_display
* The block label display setting.
Alex Pott
committed
* @param bool $status
* Whether the block is expected to be enabled or disabled.
Angie Byron
committed
*/
public function assertEntity($id, $plugin_id, array $roles, $pages, $region, $theme, $weight, $label, $label_display, $status = TRUE) {
Angie Byron
committed
$block = Block::load($id);
$this->assertTrue($block instanceof Block);
/** @var \Drupal\block\BlockInterface $block */
Alex Pott
committed
$this->assertSame($plugin_id, $block->getPluginId());
Angie Byron
committed
$visibility = $block->getVisibility();
if ($roles) {
Alex Pott
committed
$this->assertSame($roles, array_values($visibility['user_role']['roles']));
$this->assertSame('@user.current_user_context:current_user', $visibility['user_role']['context_mapping']['user']);
Angie Byron
committed
}
if ($pages) {
Alex Pott
committed
$this->assertSame($pages, $visibility['request_path']['pages']);
Angie Byron
committed
}
Alex Pott
committed
$this->assertSame($region, $block->getRegion());
$this->assertSame($theme, $block->getTheme());
$this->assertSame($weight, $block->getWeight());
$this->assertSame($status, $block->status());
$config = $this->config('block.block.' . $id);
Alex Pott
committed
$this->assertSame($label, $config->get('settings.label'));
$this->assertSame($label_display, $config->get('settings.label_display'));
Angie Byron
committed
}
/**
* Tests the block migration.
*/
public function testBlockMigration() {
$this->assertEntity('bartik_system_main', 'system_main_block', [], '', 'content', 'bartik', 0, '', '0');
$this->assertEntity('bartik_search_form', 'search_form_block', [], '', 'sidebar_first', 'bartik', -1, '', '0');
$this->assertEntity('bartik_user_login', 'user_login_block', [], '', 'sidebar_first', 'bartik', 0, '', '0');
Alex Pott
committed
$this->assertEntity('bartik_system_powered_by', 'system_powered_by_block', [], '', 'footer_fifth', 'bartik', 10, '', '0');
$this->assertEntity('seven_system_main', 'system_main_block', [], '', 'content', 'seven', 0, '', '0');
$this->assertEntity('seven_user_login', 'user_login_block', [], '', 'content', 'seven', 10, '', '0');
Angie Byron
committed
// The d7_custom_block migration should have migrated a block containing a
// mildly amusing limerick. We'll need its UUID to determine
// bartik_block_1's plugin ID.
$uuid = BlockContent::load(1)->uuid();
$this->assertEntity('bartik_block_1', 'block_content:' . $uuid, ['authenticated'], '', 'highlighted', 'bartik', 0, 'Mildly amusing limerick of the day', 'visible');
Angie Byron
committed
// Assert that disabled blocks (or enabled blocks whose plugin IDs could
// be resolved) did not migrate.
$non_existent_blocks = [
Angie Byron
committed
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
'bartik_system_navigation',
'bartik_system_help',
'seven_user_new',
'seven_search_form',
'bartik_comment_recent',
'bartik_node_syndicate',
'bartik_node_recent',
'bartik_shortcut_shortcuts',
'bartik_system_management',
'bartik_system_user-menu',
'bartik_system_main-menu',
'bartik_user_new',
'bartik_user_online',
'seven_comment_recent',
'seven_node_syndicate',
'seven_shortcut_shortcuts',
'seven_system_powered-by',
'seven_system_navigation',
'seven_system_management',
'seven_system_user-menu',
'seven_system_main-menu',
'seven_user_online',
'bartik_blog_recent',
'bartik_book_navigation',
'bartik_locale_language',
'bartik_forum_active',
'bartik_forum_new',
'seven_blog_recent',
'seven_book_navigation',
'seven_locale_language',
'seven_forum_active',
'seven_forum_new',
'bartik_menu_menu-test-menu',
'bartik_statistics_popular',
'seven_menu_menu-test-menu',
'seven_statistics_popular',
'seven_block_1',
];
Angie Byron
committed
$this->assertTrue(empty(Block::loadMultiple($non_existent_blocks)));
}
}