Same name in this branch
  1. 10 core/modules/migrate/tests/src/Kernel/MigrationTest.php \Drupal\Tests\migrate\Kernel\MigrationTest
  2. 10 core/modules/migrate/tests/src/Unit/MigrationTest.php \Drupal\Tests\migrate\Unit\MigrationTest
  3. 10 core/modules/migrate/tests/src/Kernel/Plugin/MigrationTest.php \Drupal\Tests\migrate\Kernel\Plugin\MigrationTest
Same name and namespace in other branches
  1. 8.9.x core/modules/migrate/tests/src/Unit/MigrationTest.php \Drupal\Tests\migrate\Unit\MigrationTest
  2. 9 core/modules/migrate/tests/src/Unit/MigrationTest.php \Drupal\Tests\migrate\Unit\MigrationTest

@coversDefaultClass \Drupal\migrate\Plugin\Migration

@group migrate

Hierarchy

Expanded class hierarchy of MigrationTest

File

core/modules/migrate/tests/src/Unit/MigrationTest.php, line 25

Namespace

Drupal\Tests\migrate\Unit
View source
class MigrationTest extends UnitTestCase {

  /**
   * Tests checking migration dependencies in the constructor.
   *
   * @param array $dependencies
   *   An array of migration dependencies.
   *
   * @covers ::__construct
   *
   * @dataProvider getInvalidMigrationDependenciesProvider
   *
   * @group legacy
   */
  public function testMigrationDependenciesInConstructor(array $dependencies) {
    $configuration = [
      'migration_dependencies' => $dependencies,
    ];
    $plugin_id = 'test_migration';
    $migration_plugin_manager = $this
      ->createMock('\\Drupal\\migrate\\Plugin\\MigrationPluginManagerInterface');
    $source_plugin_manager = $this
      ->createMock('\\Drupal\\migrate\\Plugin\\MigratePluginManagerInterface');
    $process_plugin_manager = $this
      ->createMock('\\Drupal\\migrate\\Plugin\\MigratePluginManagerInterface');
    $destination_plugin_manager = $this
      ->createMock('\\Drupal\\migrate\\Plugin\\MigrateDestinationPluginManager');
    $id_map_plugin_manager = $this
      ->createMock('\\Drupal\\migrate\\Plugin\\MigratePluginManagerInterface');
    $this
      ->expectDeprecation("Invalid migration dependencies for {$plugin_id} is deprecated in drupal:10.1.0 and will cause an error in drupal:11.0.0. See https://www.drupal.org/node/3266691");
    new Migration($configuration, $plugin_id, [], $migration_plugin_manager, $source_plugin_manager, $process_plugin_manager, $destination_plugin_manager, $id_map_plugin_manager);
  }

  /**
   * Tests checking requirements for source plugins.
   *
   * @covers ::checkRequirements
   */
  public function testRequirementsForSourcePlugin() {
    $migration = new TestMigration();
    $source_plugin = $this
      ->createMock('Drupal\\Tests\\migrate\\Unit\\RequirementsAwareSourceInterface');
    $source_plugin
      ->expects($this
      ->once())
      ->method('checkRequirements')
      ->willThrowException(new RequirementsException('Missing source requirement', [
      'key' => 'value',
    ]));
    $destination_plugin = $this
      ->createMock('Drupal\\Tests\\migrate\\Unit\\RequirementsAwareDestinationInterface');
    $migration
      ->setSourcePlugin($source_plugin);
    $migration
      ->setDestinationPlugin($destination_plugin);
    $this
      ->expectException(RequirementsException::class);
    $this
      ->expectExceptionMessage('Missing source requirement');
    $migration
      ->checkRequirements();
  }

  /**
   * Tests checking requirements for destination plugins.
   *
   * @covers ::checkRequirements
   */
  public function testRequirementsForDestinationPlugin() {
    $migration = new TestMigration();
    $source_plugin = $this
      ->createMock('Drupal\\migrate\\Plugin\\MigrateSourceInterface');
    $destination_plugin = $this
      ->createMock('Drupal\\Tests\\migrate\\Unit\\RequirementsAwareDestinationInterface');
    $destination_plugin
      ->expects($this
      ->once())
      ->method('checkRequirements')
      ->willThrowException(new RequirementsException('Missing destination requirement', [
      'key' => 'value',
    ]));
    $migration
      ->setSourcePlugin($source_plugin);
    $migration
      ->setDestinationPlugin($destination_plugin);
    $this
      ->expectException(RequirementsException::class);
    $this
      ->expectExceptionMessage('Missing destination requirement');
    $migration
      ->checkRequirements();
  }

  /**
   * Tests checking requirements for destination plugins.
   *
   * @covers ::checkRequirements
   */
  public function testRequirementsForMigrations() {
    $migration = new TestMigration();

    // Setup source and destination plugins without any requirements.
    $source_plugin = $this
      ->createMock('Drupal\\migrate\\Plugin\\MigrateSourceInterface');
    $destination_plugin = $this
      ->createMock('Drupal\\migrate\\Plugin\\MigrateDestinationInterface');
    $migration
      ->setSourcePlugin($source_plugin);
    $migration
      ->setDestinationPlugin($destination_plugin);
    $plugin_manager = $this
      ->createMock('Drupal\\migrate\\Plugin\\MigrationPluginManagerInterface');
    $migration
      ->setMigrationPluginManager($plugin_manager);

    // We setup the requirements that test_a doesn't exist and test_c is not
    // completed yet.
    $migration
      ->setRequirements([
      'test_a',
      'test_b',
      'test_c',
      'test_d',
    ]);
    $migration_b = $this
      ->createMock(MigrationInterface::class);
    $migration_c = $this
      ->createMock(MigrationInterface::class);
    $migration_d = $this
      ->createMock(MigrationInterface::class);
    $migration_b
      ->expects($this
      ->once())
      ->method('allRowsProcessed')
      ->willReturn(TRUE);
    $migration_c
      ->expects($this
      ->once())
      ->method('allRowsProcessed')
      ->willReturn(FALSE);
    $migration_d
      ->expects($this
      ->once())
      ->method('allRowsProcessed')
      ->willReturn(TRUE);
    $plugin_manager
      ->expects($this
      ->once())
      ->method('createInstances')
      ->with([
      'test_a',
      'test_b',
      'test_c',
      'test_d',
    ])
      ->willReturn([
      'test_b' => $migration_b,
      'test_c' => $migration_c,
      'test_d' => $migration_d,
    ]);
    $this
      ->expectException(RequirementsException::class);
    $this
      ->expectExceptionMessage('Missing migrations test_a, test_c');
    $migration
      ->checkRequirements();
  }

  /**
   * Tests getting requirement list.
   *
   * @covers ::getRequirements
   */
  public function testGetMigrations() {
    $migration = new TestMigration();
    $requirements = [
      'test_a',
      'test_b',
      'test_c',
      'test_d',
    ];
    $migration
      ->setRequirements($requirements);
    $this
      ->assertEquals($requirements, $migration
      ->getRequirements());
  }

  /**
   * Tests valid migration dependencies configuration returns expected values.
   *
   * @param array|null $source
   *   The migration dependencies configuration being tested.
   * @param array $expected_value
   *   The migration dependencies configuration array expected.
   *
   * @covers ::getMigrationDependencies
   * @dataProvider getValidMigrationDependenciesProvider
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   */
  public function testMigrationDependenciesWithValidConfig($source, array $expected_value) {
    $migration = new TestMigration();

    // Set the plugin manager to support getMigrationDependencies().
    $plugin_manager = $this
      ->createMock('Drupal\\migrate\\Plugin\\MigrationPluginManagerInterface');
    $migration
      ->setMigrationPluginManager($plugin_manager);
    $plugin_manager
      ->expects($this
      ->exactly(2))
      ->method('expandPluginIds')
      ->willReturnArgument(0);
    if (!is_null($source)) {
      $migration
        ->set('migration_dependencies', $source);
    }
    $this
      ->assertSame($migration
      ->getMigrationDependencies(TRUE), $expected_value);
  }

  /**
   * Tests that getting migration dependencies fails with invalid configuration.
   *
   * @param array $dependencies
   *   An array of migration dependencies.
   *
   * @covers ::getMigrationDependencies
   *
   * @dataProvider getInvalidMigrationDependenciesProvider
   *
   * @group legacy
   */
  public function testMigrationDependenciesWithInvalidConfig(array $dependencies) {
    $migration = new TestMigration();

    // Set the plugin ID to test the returned message.
    $plugin_id = 'test_migration';
    $migration
      ->setPluginId($plugin_id);

    // Migration dependencies expects ['optional' => []] or ['required' => []]].
    $this
      ->expectDeprecation("Invalid migration dependencies for {$plugin_id} is deprecated in drupal:10.1.0 and will cause an error in drupal:11.0.0. See https://www.drupal.org/node/3266691");
    $migration
      ->set('migration_dependencies', $dependencies);
    $this
      ->expectException(InvalidPluginDefinitionException::class);
    $this
      ->expectExceptionMessage("Invalid migration dependencies configuration for migration {$plugin_id}");
    $migration
      ->getMigrationDependencies(TRUE);
  }

  /**
   * Provides data for valid migration configuration test.
   */
  public static function getValidMigrationDependenciesProvider() {
    return [
      [
        'source' => NULL,
        'expected_value' => [
          'required' => [],
          'optional' => [],
        ],
      ],
      [
        'source' => [],
        'expected_value' => [
          'required' => [],
          'optional' => [],
        ],
      ],
      [
        'source' => [
          'required' => [
            'test_migration',
          ],
        ],
        'expected_value' => [
          'required' => [
            'test_migration',
          ],
          'optional' => [],
        ],
      ],
      [
        'source' => [
          'optional' => [
            'test_migration',
          ],
        ],
        'expected_value' => [
          'optional' => [
            'test_migration',
          ],
          'required' => [],
        ],
      ],
      [
        'source' => [
          'required' => [
            'req_test_migration',
          ],
          'optional' => [
            'opt_test_migration',
          ],
        ],
        'expected_value' => [
          'required' => [
            'req_test_migration',
          ],
          'optional' => [
            'opt_test_migration',
          ],
        ],
      ],
    ];
  }

  /**
   * Provides invalid migration dependencies.
   */
  public static function getInvalidMigrationDependenciesProvider() {
    return [
      'invalid key' => [
        'dependencies' => [
          'bogus' => [],
        ],
      ],
      'required not array' => [
        'dependencies' => [
          'required' => 17,
          'optional' => [],
        ],
      ],
      'optional not array' => [
        'dependencies' => [
          'required' => [],
          'optional' => 17,
        ],
      ],
    ];
  }

  /**
   * Test trackLastImported deprecation message in Migration constructor.
   *
   * @group legacy
   */
  public function testTrackLastImportedDeprecation() {
    $this
      ->expectDeprecation("The key 'trackLastImported' is deprecated in drupal:10.1.0 and is removed from drupal:11.0.0. There is no replacement. See https://www.drupal.org/node/3282894");
    $migration_plugin_manager = $this
      ->createMock(MigrationPluginManagerInterface::class);
    $source_plugin_manager = $this
      ->createMock(MigrateSourcePluginManager::class);
    $process_Plugin_manager = $this
      ->createMock(MigratePluginManagerInterface::class);
    $destination_plugin_manager = $this
      ->createMock(MigrateDestinationPluginManager::class);
    $id_map_plugin_manager = $this
      ->createMock(MigratePluginManagerInterface::class);
    new Migration([], 'test', [
      'trackLastImported' => TRUE,
    ], $migration_plugin_manager, $source_plugin_manager, $process_Plugin_manager, $destination_plugin_manager, $id_map_plugin_manager);
  }

  /**
   * Tests deprecation of getMigrationDependencies(FALSE).
   *
   * @group legacy
   */
  public function testGetMigrationDependencies() {
    $migration = new TestMigration();
    $this
      ->expectDeprecation('Calling Migration::getMigrationDependencies() without expanding the plugin IDs is deprecated in drupal:10.1.0 and is removed from drupal:11.0.0. In most cases, use getMigrationDependencies(TRUE). See https://www.drupal.org/node/3266691');
    $migration
      ->getMigrationDependencies();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
MigrationTest::getInvalidMigrationDependenciesProvider public static function Provides invalid migration dependencies.
MigrationTest::getValidMigrationDependenciesProvider public static function Provides data for valid migration configuration test.
MigrationTest::testGetMigrationDependencies public function Tests deprecation of getMigrationDependencies(FALSE).
MigrationTest::testGetMigrations public function Tests getting requirement list.
MigrationTest::testMigrationDependenciesInConstructor public function Tests checking migration dependencies in the constructor.
MigrationTest::testMigrationDependenciesWithInvalidConfig public function Tests that getting migration dependencies fails with invalid configuration.
MigrationTest::testMigrationDependenciesWithValidConfig public function Tests valid migration dependencies configuration returns expected values.
MigrationTest::testRequirementsForDestinationPlugin public function Tests checking requirements for destination plugins.
MigrationTest::testRequirementsForMigrations public function Tests checking requirements for destination plugins.
MigrationTest::testRequirementsForSourcePlugin public function Tests checking requirements for source plugins.
MigrationTest::testTrackLastImportedDeprecation public function Test trackLastImported deprecation message in Migration constructor.
PhpUnitWarnings::$deprecationWarnings private static property Deprecation warnings from PHPUnit to raise with @trigger_error().
PhpUnitWarnings::addWarning public function Converts PHPUnit deprecation warnings to E_USER_DEPRECATED.
RandomGeneratorTrait::getRandomGenerator protected function Gets the random generator for the utility methods.
RandomGeneratorTrait::randomMachineName protected function Generates a unique random string containing letters and numbers.
RandomGeneratorTrait::randomObject public function Generates a random PHP object.
RandomGeneratorTrait::randomString public function Generates a pseudo-random string of ASCII characters of codes 32 to 126.
RandomGeneratorTrait::randomStringValidate Deprecated public function Callback for random string validation.
UnitTestCase::$root protected property The app root. 1
UnitTestCase::getClassResolverStub protected function Returns a stub class resolver.
UnitTestCase::getConfigFactoryStub public function Returns a stub config factory that behaves according to the passed array.
UnitTestCase::getConfigStorageStub public function Returns a stub config storage that returns the supplied configuration.
UnitTestCase::getContainerWithCacheTagsInvalidator protected function Sets up a container with a cache tags invalidator.
UnitTestCase::getStringTranslationStub public function Returns a stub translation manager that just returns the passed string.
UnitTestCase::setUp protected function 305
UnitTestCase::setUpBeforeClass public static function
UnitTestCase::__get public function