namespace Drupal\Tests\field\Kernel\Migrate\d7;
-use Drupal\comment\Entity\CommentType;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\FieldConfigInterface;
use Drupal\taxonomy\Entity\Vocabulary;
+use Drupal\Tests\migrate\Kernel\NodeCommentCombinationTrait;
use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
-use Drupal\node\Entity\NodeType;
/**
* Migrates Drupal 7 field instances.
*/
class MigrateFieldInstanceTest extends MigrateDrupal7TestBase {
+ use NodeCommentCombinationTrait;
+
/**
- * The modules to be enabled during the test.
- *
- * @var array
+ * {@inheritdoc}
*/
public static $modules = [
'comment',
protected function setUp() {
parent::setUp();
$this->installConfig(static::$modules);
- $this->createType('page');
- $this->createType('article');
- $this->createType('blog');
- $this->createType('book');
- $this->createType('forum');
- $this->createType('test_content_type');
+ $this->createNodeCommentCombination('page');
+ $this->createNodeCommentCombination('article');
+ $this->createNodeCommentCombination('blog');
+ $this->createNodeCommentCombination('book');
+ $this->createNodeCommentCombination('forum', 'comment_forum');
+ $this->createNodeCommentCombination('test_content_type');
Vocabulary::create(['vid' => 'test_vocabulary'])->save();
$this->executeMigrations(['d7_field', 'd7_field_instance']);
}
- /**
- * Creates a node type with a corresponding comment type.
- *
- * @param string $id
- * The node type ID.
- */
- protected function createType($id) {
- NodeType::create([
- 'type' => $id,
- 'label' => $this->randomString(),
- ])->save();
-
- CommentType::create([
- 'id' => 'comment_node_' . $id,
- 'label' => $this->randomString(),
- 'target_entity_type_id' => 'node',
- ])->save();
- }
-
/**
* Asserts various aspects of a field config entity.
*
/** @var \Drupal\field\FieldConfigInterface $field */
$field = FieldConfig::load($id);
- $this->assertTrue($field instanceof FieldConfigInterface);
- $this->assertIdentical($expected_label, $field->label());
- $this->assertIdentical($expected_field_type, $field->getType());
- $this->assertIdentical($expected_entity_type, $field->getTargetEntityTypeId());
- $this->assertIdentical($expected_bundle, $field->getTargetBundle());
- $this->assertIdentical($expected_name, $field->getName());
- $this->assertEqual($is_required, $field->isRequired());
- $this->assertIdentical($expected_entity_type . '.' . $expected_name, $field->getFieldStorageDefinition()->id());
- $this->assertSame($expected_translatable, $field->isTranslatable());
+ $this->assertInstanceOf(FieldConfigInterface::class, $field);
+ $this->assertEquals($expected_label, $field->label());
+ $this->assertEquals($expected_field_type, $field->getType());
+ $this->assertEquals($expected_entity_type, $field->getTargetEntityTypeId());
+ $this->assertEquals($expected_bundle, $field->getTargetBundle());
+ $this->assertEquals($expected_name, $field->getName());
+ $this->assertEquals($is_required, $field->isRequired());
+ $this->assertEquals($expected_entity_type . '.' . $expected_name, $field->getFieldStorageDefinition()->id());
+ $this->assertEquals($expected_translatable, $field->isTranslatable());
}
/**
$this->assertEntity('comment.comment_node_book.comment_body', 'Comment', 'text_long', TRUE, FALSE);
$this->assertEntity('node.book.body', 'Body', 'text_with_summary', FALSE, FALSE);
$this->assertEntity('node.forum.taxonomy_forums', 'Forums', 'entity_reference', TRUE, FALSE);
- $this->assertEntity('comment.comment_node_forum.comment_body', 'Comment', 'text_long', TRUE, FALSE);
+ $this->assertEntity('comment.comment_forum.comment_body', 'Comment', 'text_long', TRUE, FALSE);
$this->assertEntity('node.forum.body', 'Body', 'text_with_summary', FALSE, FALSE);
$this->assertEntity('comment.comment_node_test_content_type.comment_body', 'Comment', 'text_long', TRUE, FALSE);
$this->assertEntity('node.test_content_type.field_boolean', 'Boolean', 'boolean', FALSE, FALSE);
$this->assertEntity('node.test_content_type.field_email', 'Email', 'email', FALSE, FALSE);
$this->assertEntity('node.test_content_type.field_phone', 'Phone', 'telephone', TRUE, FALSE);
$this->assertEntity('node.test_content_type.field_date', 'Date', 'datetime', FALSE, FALSE);
- $this->assertEntity('node.test_content_type.field_date_with_end_time', 'Date With End Time', 'datetime', FALSE, FALSE);
+ $this->assertEntity('node.test_content_type.field_date_with_end_time', 'Date With End Time', 'timestamp', FALSE, FALSE);
$this->assertEntity('node.test_content_type.field_file', 'File', 'file', FALSE, FALSE);
$this->assertEntity('node.test_content_type.field_float', 'Float', 'float', FALSE, FALSE);
$this->assertEntity('node.test_content_type.field_images', 'Images', 'image', TRUE, FALSE);
$this->assertEntity('node.test_content_type.field_integer_list', 'Integer List', 'list_integer', FALSE, FALSE);
$this->assertEntity('node.test_content_type.field_long_text', 'Long text', 'text_with_summary', FALSE, FALSE);
$this->assertEntity('node.test_content_type.field_term_reference', 'Term Reference', 'entity_reference', FALSE, FALSE);
- $this->assertEntity('node.test_content_type.field_text', 'Text', 'text', FALSE, FALSE);
+ $this->assertEntity('node.test_content_type.field_text', 'Text', 'string', FALSE, FALSE);
$this->assertEntity('comment.comment_node_test_content_type.field_integer', 'Integer', 'integer', FALSE, FALSE);
$this->assertEntity('user.user.field_file', 'File', 'file', FALSE, FALSE);
-
$this->assertLinkFields('node.test_content_type.field_link', DRUPAL_OPTIONAL);
$this->assertLinkFields('node.article.field_link', DRUPAL_DISABLED);
$this->assertLinkFields('node.blog.field_link', DRUPAL_REQUIRED);
}
+ /**
+ * Tests the migration of text field instances with different text processing.
+ */
+ public function testTextFieldInstances() {
+ // All text and text_long field instances using a field base that has only
+ // plain text instances should be migrated to string and string_long fields.
+ // All text_with_summary field instances using a field base that has only
+ // plain text instances should not have been migrated since there's no such
+ // thing as a string_with_summary field.
+ $this->assertEntity('node.page.field_text_plain', 'Text plain', 'string', FALSE, FALSE);
+ $this->assertEntity('node.article.field_text_plain', 'Text plain', 'string', FALSE, TRUE);
+ $this->assertEntity('node.page.field_text_long_plain', 'Text long plain', 'string_long', FALSE, FALSE);
+ $this->assertEntity('node.article.field_text_long_plain', 'Text long plain', 'string_long', FALSE, TRUE);
+ $this->assertNull(FieldConfig::load('node.page.field_text_sum_plain'));
+ $this->assertNull(FieldConfig::load('node.article.field_text_sum_plain'));
+
+ // All text, text_long and text_with_summary field instances using a field
+ // base that has only filtered text instances should be migrated to text,
+ // text_long and text_with_summary fields.
+ $this->assertEntity('node.page.field_text_filtered', 'Text filtered', 'text', FALSE, FALSE);
+ $this->assertEntity('node.article.field_text_filtered', 'Text filtered', 'text', FALSE, TRUE);
+ $this->assertEntity('node.page.field_text_long_filtered', 'Text long filtered', 'text_long', FALSE, FALSE);
+ $this->assertEntity('node.article.field_text_long_filtered', 'Text long filtered', 'text_long', FALSE, TRUE);
+ $this->assertEntity('node.page.field_text_sum_filtered', 'Text summary filtered', 'text_with_summary', FALSE, FALSE);
+ $this->assertEntity('node.article.field_text_sum_filtered', 'Text summary filtered', 'text_with_summary', FALSE, TRUE);
+
+ // All text, text_long and text_with_summary field instances using a field
+ // base that has both plain text and filtered text instances should not have
+ // been migrated.
+ $this->assertNull(FieldConfig::load('node.page.field_text_plain_filtered'));
+ $this->assertNull(FieldConfig::load('node.article.field_text_plain_filtered'));
+ $this->assertNull(FieldConfig::load('node.page.field_text_long_plain_filtered'));
+ $this->assertNull(FieldConfig::load('node.article.field_text_long_plain_filtered'));
+ $this->assertNull(FieldConfig::load('node.page.field_text_sum_plain_filtered'));
+ $this->assertNull(FieldConfig::load('node.article.field_text_sum_plain_filtered'));
+
+ // For each text field instances that were skipped, there should be a log
+ // message with the required steps to fix this.
+ $migration = $this->getMigration('d7_field_instance');
+ $messages = $migration->getIdMap()->getMessageIterator()->fetchAll();
+ $errors = array_map(function ($message) {
+ return $message->message;
+ }, $messages);
+ $this->assertCount(8, $errors);
+ sort($errors);
+ $message = 'Can\'t migrate source field field_text_long_plain_filtered configured with both plain text and filtered text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text';
+ $this->assertEquals($errors[0], $message);
+ $this->assertEquals($errors[1], $message);
+ $message = 'Can\'t migrate source field field_text_plain_filtered configured with both plain text and filtered text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text';
+ $this->assertEquals($errors[2], $message);
+ $this->assertEquals($errors[3], $message);
+ $message = 'Can\'t migrate source field field_text_sum_plain of type text_with_summary configured with plain text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text';
+ $this->assertEquals($errors[4], $message);
+ $this->assertEquals($errors[5], $message);
+ $message = 'Can\'t migrate source field field_text_sum_plain_filtered of type text_with_summary configured with plain text processing. See https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8#plain-text';
+ $this->assertEquals($errors[6], $message);
+ $this->assertEquals($errors[7], $message);
+ }
+
}