Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / field / tests / src / Kernel / Migrate / d7 / MigrateFieldInstanceTest.php
index 1e3df9e4fc8b01ba371ada7ba76af260460dbcb3..24d4116f666385f94ebacf399b312e3d732a7781 100644 (file)
@@ -2,12 +2,11 @@
 
 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.
@@ -16,10 +15,10 @@ use Drupal\node\Entity\NodeType;
  */
 class MigrateFieldInstanceTest extends MigrateDrupal7TestBase {
 
+  use NodeCommentCombinationTrait;
+
   /**
-   * The modules to be enabled during the test.
-   *
-   * @var array
+   * {@inheritdoc}
    */
   public static $modules = [
     'comment',
@@ -40,35 +39,16 @@ class MigrateFieldInstanceTest extends MigrateDrupal7TestBase {
   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.
    *
@@ -88,15 +68,15 @@ class MigrateFieldInstanceTest extends MigrateDrupal7TestBase {
 
     /** @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());
   }
 
   /**
@@ -127,14 +107,14 @@ class MigrateFieldInstanceTest extends MigrateDrupal7TestBase {
     $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);
@@ -144,14 +124,72 @@ class MigrateFieldInstanceTest extends MigrateDrupal7TestBase {
     $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);
+  }
+
 }