function MigrateEntityContentBaseTest::testFields

Test destination fields() method.

File

core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php, line 370

Class

MigrateEntityContentBaseTest
Tests the EntityContentBase destination.

Namespace

Drupal\Tests\migrate\Kernel

Code

public function testFields() : void {
    $entity_type_manager = $this->container
        ->get('entity_type.manager');
    // Create two bundles for the entity_test_with_bundle entity type.
    $bundle_storage = $entity_type_manager->getStorage('entity_test_bundle');
    $bundle_storage->create([
        'id' => 'test_bundle_no_fields',
        'label' => 'Test bundle without fields',
    ])
        ->save();
    $bundle_storage->create([
        'id' => 'test_bundle_with_fields',
        'label' => 'Test bundle with fields',
    ])
        ->save();
    // Create a mock migration and get the destination plugin manager.
    $migration = $this->prophesize(MigrationInterface::class)
        ->reveal();
    
    /** @var \Drupal\migrate\Plugin\MigrateDestinationPluginManager $manager */
    $manager = \Drupal::service('plugin.manager.migrate.destination');
    // Test with an entity type with no bundles.
    $destination_plugin = $manager->createInstance('entity:entity_test_no_bundle', [], $migration);
    $fields = $destination_plugin->fields();
    $this->assertArrayHasKey('id', $fields);
    // Confirm the test field is not found.
    $this->assertArrayNotHasKey('field_text', $fields);
    // Create a text field attached to the entity with no bundles.
    FieldStorageConfig::create([
        'type' => 'string',
        'entity_type' => 'entity_test_no_bundle',
        'field_name' => 'field_text',
    ])->save();
    FieldConfig::create([
        'entity_type' => 'entity_test_no_bundle',
        'bundle' => 'entity_test_no_bundle',
        'field_name' => 'field_text',
    ])->save();
    // Confirm that the 'field_text' is now found.
    $destination_plugin = $manager->createInstance('entity:entity_test_no_bundle', [], $migration);
    $fields = $destination_plugin->fields();
    $this->assertArrayHasKey('id', $fields);
    $this->assertArrayHasKey('field_text', $fields);
    // Repeat the test with an entity with bundles.
    $destination_plugin = $manager->createInstance('entity:entity_test_with_bundle', [], $migration);
    $fields = $destination_plugin->fields();
    $this->assertArrayHasKey('id', $fields);
    $this->assertArrayNotHasKey('field_text', $fields);
    // Create a text field attached to the entity with bundles.
    FieldStorageConfig::create([
        'type' => 'string',
        'entity_type' => 'entity_test_with_bundle',
        'field_name' => 'field_text',
    ])->save();
    FieldConfig::create([
        'entity_type' => 'entity_test_with_bundle',
        'bundle' => 'test_bundle_with_fields',
        'field_name' => 'field_text',
    ])->save();
    // Confirm that the 'field_text' is found when the default bundle is set.
    $destination_plugin = $manager->createInstance('entity:entity_test_with_bundle', [
        'default_bundle' => 'test_bundle_with_fields',
    ], $migration);
    $fields = $destination_plugin->fields();
    $this->assertArrayHasKey('id', $fields);
    $this->assertArrayHasKey('field_text', $fields);
    // Confirm that the 'field_text' is not found when the default bundle is not
    // set.
    $destination_plugin = $manager->createInstance('entity:entity_test_with_bundle', [], $migration);
    $fields = $destination_plugin->fields();
    $this->assertArrayHasKey('id', $fields);
    $this->assertArrayNotHasKey('field_text', $fields);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.