diff --git a/core/modules/field/tests/src/Kernel/Migrate/d7/RollbackFieldInstanceTest.php b/core/modules/field/tests/src/Kernel/Migrate/d7/RollbackFieldInstanceTest.php new file mode 100644 index 0000000000000000000000000000000000000000..e71ac3ce95c7efd9326f0530d50f056b34feedff --- /dev/null +++ b/core/modules/field/tests/src/Kernel/Migrate/d7/RollbackFieldInstanceTest.php @@ -0,0 +1,80 @@ +<?php + +namespace Drupal\Tests\field\Kernel\Migrate\d7; + +use Drupal\field\Entity\FieldConfig; +use Drupal\migrate\MigrateExecutable; + +/** + * Migrates and rolls back Drupal 7 fields. + * + * @group field + */ +class RollbackFieldInstanceTest extends MigrateFieldInstanceTest { + + /** + * Tests migrating D7 fields to field_storage_config entities, then rolling back. + */ + public function testFieldInstances() { + // Test that the field instances have migrated (prior to rollback). + parent::testFieldInstances(); + + $this->executeRollback('d7_field_instance'); + $this->executeRollback('d7_field'); + + // Check that field instances have been rolled back. + $field_instance_ids = [ + 'comment.comment_node_page.comment_body', + 'node.page.body', + 'comment.comment_node_article.comment_body', + 'node.article.body', + 'node.article.field_tags', + 'node.article.field_image', + 'comment.comment_node_blog.comment_body', + 'node.blog.body', + 'comment.comment_node_book.comment_body', + 'node.book.body', + 'node.forum.taxonomy_forums', + 'comment.comment_node_forum.comment_body', + 'node.forum.body', + 'comment.comment_node_test_content_type.comment_body', + 'node.test_content_type.field_boolean', + 'node.test_content_type.field_email', + 'node.test_content_type.field_phone', + 'node.test_content_type.field_date', + 'node.test_content_type.field_date_with_end_time', + 'node.test_content_type.field_file', + 'node.test_content_type.field_float', + 'node.test_content_type.field_images', + 'node.test_content_type.field_integer', + 'node.test_content_type.field_link', + 'node.test_content_type.field_text_list', + 'node.test_content_type.field_integer_list', + 'node.test_content_type.field_long_text', + 'node.test_content_type.field_term_reference', + 'node.test_content_type.field_text', + 'comment.comment_node_test_content_type.field_integer', + 'user.user.field_file', + ]; + foreach ($field_instance_ids as $field_instance_id) { + $this->assertNull(FieldConfig::load($field_instance_id)); + } + } + + /** + * Executes a single rollback. + * + * @param string|\Drupal\migrate\Plugin\MigrationInterface $migration + * The migration to rollback, or its ID. + */ + protected function executeRollback($migration) { + if (is_string($migration)) { + $this->migration = $this->getMigration($migration); + } + else { + $this->migration = $migration; + } + (new MigrateExecutable($this->migration, $this))->rollback(); + } + +} diff --git a/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldInstance.php b/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldInstance.php index 54bc35843f6ecc6eae56668570cf8e043792b2dd..966cb3708b23fcff13321dd8b843b2bdd9af439e 100644 --- a/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldInstance.php +++ b/core/modules/migrate/src/Plugin/migrate/destination/EntityFieldInstance.php @@ -21,4 +21,12 @@ public function getIds() { return $ids; } + /** + * {@inheritdoc} + */ + public function rollback(array $destination_identifier) { + $destination_identifier = implode('.', $destination_identifier); + parent::rollback(array($destination_identifier)); + } + }