3 namespace Drupal\Tests\migrate\Kernel\Plugin;
5 use Drupal\Component\Render\FormattableMarkup;
6 use Drupal\KernelTests\FileSystemModuleDiscoveryDataProviderTrait;
7 use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase;
10 * Tests that modules exist for all source and destination plugins.
12 * @group migrate_drupal_ui
14 class MigrationProvidersExistTest extends MigrateDrupalTestBase {
16 use FileSystemModuleDiscoveryDataProviderTrait;
21 public static $modules = ['migration_provider_test'];
24 * Tests that modules exist for all source and destination plugins.
26 public function testProvidersExist() {
27 // Install all available modules.
28 $module_handler = $this->container->get('module_handler');
29 $modules = $this->coreModuleListDataProvider();
30 $modules_enabled = $module_handler->getModuleList();
31 $modules_to_enable = array_keys(array_diff_key($modules, $modules_enabled));
32 $this->enableModules($modules_to_enable);
34 /** @var \Drupal\migrate\Plugin\MigrationPluginManager $plugin_manager */
35 $plugin_manager = $this->container->get('plugin.manager.migration');
36 // Get all the migrations
37 $migrations = $plugin_manager->createInstances(array_keys($plugin_manager->getDefinitions()));
38 // Ensure the test module was enabled.
39 $this->assertTrue(array_key_exists('migration_provider_test', $migrations));
40 $this->assertTrue(array_key_exists('migration_provider_no_annotation', $migrations));
41 /** @var \Drupal\migrate\Plugin\Migration $migration */
42 foreach ($migrations as $migration) {
43 $source_module = $migration->getSourcePlugin()->getSourceModule();
44 $destination_module = $migration->getDestinationPlugin()->getDestinationModule();
45 $migration_id = $migration->getPluginId();
46 if ($migration_id == 'migration_provider_test') {
47 $this->assertFalse($source_module, new FormattableMarkup('Source module not found for @migration_id.', ['@migration_id' => $migration_id]));
48 $this->assertFalse($destination_module, new FormattableMarkup('Destination module not found for @migration_id.', ['@migration_id' => $migration_id]));
50 elseif ($migration_id == 'migration_provider_no_annotation') {
51 $this->assertFalse($source_module, new FormattableMarkup('Source module not found for @migration_id.', ['@migration_id' => $migration_id]));
52 $this->assertTrue($destination_module, new FormattableMarkup('Destination module found for @migration_id.', ['@migration_id' => $migration_id]));
55 $this->assertTrue($source_module, new FormattableMarkup('Source module found for @migration_id.', ['@migration_id' => $migration_id]));
56 $this->assertTrue($destination_module, new FormattableMarkup('Destination module found for @migration_id.', ['@migration_id' => $migration_id]));
58 // Destination module can't be migrate or migrate_drupal or migrate_drupal_ui
59 $invalid_destinations = ['migrate', 'migrate_drupal', 'migrate_drupal_ui'];
60 $this->assertNotContains($destination_module, $invalid_destinations, new FormattableMarkup('Invalid destination for @migration_id.', ['@migration_id' => $migration_id]));