DestinationCategoryTest.php
Same filename in other branches
Namespace
Drupal\Tests\migrate_drupal\Kernel\Plugin\migrateFile
-
core/
modules/ migrate_drupal/ tests/ src/ Kernel/ Plugin/ migrate/ DestinationCategoryTest.php
View source
<?php
namespace Drupal\Tests\migrate_drupal\Kernel\Plugin\migrate;
use Drupal\ban\Plugin\migrate\destination\BlockedIp;
use Drupal\color\Plugin\migrate\destination\Color;
use Drupal\KernelTests\FileSystemModuleDiscoveryDataProviderTrait;
use Drupal\migrate\Plugin\migrate\destination\ComponentEntityDisplayBase;
use Drupal\migrate\Plugin\migrate\destination\Config;
use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase;
use Drupal\migrate\Plugin\migrate\destination\EntityContentBase;
use Drupal\shortcut\Plugin\migrate\destination\ShortcutSetUsers;
use Drupal\statistics\Plugin\migrate\destination\NodeCounter;
use Drupal\system\Plugin\migrate\destination\d7\ThemeSettings;
use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase;
use Drupal\Tests\migrate_drupal\Traits\CreateMigrationsTrait;
use Drupal\user\Plugin\migrate\destination\UserData;
/**
* Tests that all migrations are tagged as either content or configuration.
*
* @group migrate_drupal
*/
class DestinationCategoryTest extends MigrateDrupalTestBase {
use FileSystemModuleDiscoveryDataProviderTrait;
use CreateMigrationsTrait;
/**
* The migration plugin manager.
*
* @var \Drupal\migrate\Plugin\MigrationPluginManager
*/
protected $migrationManager;
/**
* {@inheritdoc}
*/
protected function setUp() : void {
// Enable all modules.
self::$modules = array_keys($this->coreModuleListDataProvider());
parent::setUp();
$this->migrationManager = \Drupal::service('plugin.manager.migration');
}
/**
* Tests that all D6 migrations are tagged as either Configuration or Content.
*/
public function testD6Categories() {
$migrations = $this->drupal6Migrations();
$this->assertArrayHasKey('d6_node:page', $migrations);
$this->assertCategories($migrations);
}
/**
* Tests that all D7 migrations are tagged as either Configuration or Content.
*/
public function testD7Categories() {
$migrations = $this->drupal7Migrations();
$this->assertArrayHasKey('d7_node:page', $migrations);
$this->assertCategories($migrations);
}
/**
* Asserts that all migrations are tagged as either Configuration or Content.
*
* @param \Drupal\migrate\Plugin\MigrationInterface[] $migrations
* The migrations.
*
* @internal
*/
protected function assertCategories(array $migrations) : void {
foreach ($migrations as $id => $migration) {
$object_classes = class_parents($migration->getDestinationPlugin());
$object_classes[] = get_class($migration->getDestinationPlugin());
// Ensure that the destination plugin is an instance of at least one of
// the expected classes.
if (in_array('Configuration', $migration->getMigrationTags(), TRUE)) {
$this->assertNotEmpty(array_intersect($object_classes, $this->getConfigurationClasses()), "The migration {$id} is tagged as Configuration.");
}
elseif (in_array('Content', $migration->getMigrationTags(), TRUE)) {
$this->assertNotEmpty(array_intersect($object_classes, $this->getContentClasses()), "The migration {$id} is tagged as Content.");
}
else {
$this->fail("The migration {$id} is not tagged as either 'Content' or 'Configuration'.");
}
}
}
/**
* Get configuration classes.
*
* Configuration migrations should have a destination plugin that is an
* instance of one of the following classes.
*
* @return array
* The configuration class names.
*/
protected function getConfigurationClasses() {
return [
Color::class,
Config::class,
EntityConfigBase::class,
ThemeSettings::class,
ComponentEntityDisplayBase::class,
ShortcutSetUsers::class,
];
}
/**
* Get content classes.
*
* Content migrations should have a destination plugin that is an instance
* of one of the following classes.
*
* @return array
* The content class names.
*/
protected function getContentClasses() {
return [
EntityContentBase::class,
BlockedIp::class,
NodeCounter::class,
UserData::class,
];
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
DestinationCategoryTest | Tests that all migrations are tagged as either content or configuration. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.