Unverified Commit 6bac0baa authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3199578 by quietone, danflanagan8, huzooka: Fix...

Issue #3199578 by quietone, danflanagan8, huzooka: Fix EntityReferenceTranslationDeriver process pipeline

(cherry picked from commit 1f019ab9)
parent b9e1ed7c
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -153,7 +153,7 @@ public function getDerivativeDefinitions($base_plugin_definition) {
            'plugin' => 'sub_process',
            'source' => $field_name,
            'process' => [
              'target_id' => [
              'translation_target_id' => [
                [
                  'plugin' => 'migration_lookup',
                  'source' => 'target_id',
@@ -162,13 +162,22 @@ public function getDerivativeDefinitions($base_plugin_definition) {
                ],
                [
                  'plugin' => 'skip_on_empty',
                  'method' => 'row',
                  'method' => 'process',
                ],
                [
                  'plugin' => 'extract',
                  'index' => [0],
                ],
              ],
              'target_id' => [
                [
                  'plugin' => 'null_coalesce',
                  'source' => [
                    '@translation_target_id',
                    'target_id',
                  ],
                ],
              ],
            ],
          ];

+15 −5
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
 * @file
 * A database agnostic dump for testing purposes.
 *
 * This file was generated by the Drupal 8.0 db-tools.php script.
 * This file was generated by the Drupal 9.3.0-dev db-tools.php script.
 */
use Drupal\Core\Database\Database;
@@ -4312,7 +4312,7 @@
  'storage_module' => 'field_sql_storage',
  'storage_active' => '1',
  'locked' => '0',
  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:3:{s:11:"target_type";s:4:"node";s:7:"handler";s:4:"base";s:16:"handler_settings";a:2:{s:14:"target_bundles";a:1:{s:7:"article";s:7:"article";}s:4:"sort";a:1:{s:4:"type";s:4:"none";}}}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:28:"field_data_field_reference_2";a:1:{s:9:"target_id";s:27:"field_reference_2_target_id";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:32:"field_revision_field_reference_2";a:1:{s:9:"target_id";s:27:"field_reference_2_target_id";}}}}}s:12:"foreign keys";a:1:{s:4:"node";a:2:{s:5:"table";s:4:"node";s:7:"columns";a:1:{s:9:"target_id";s:3:"nid";}}}s:7:"indexes";a:1:{s:9:"target_id";a:1:{i:0;s:9:"target_id";}}s:2:"id";s:2:"39";}',
  'data' => 'a:7:{s:12:"translatable";s:1:"0";s:12:"entity_types";a:0:{}s:8:"settings";a:3:{s:11:"target_type";s:4:"node";s:7:"handler";s:4:"base";s:16:"handler_settings";a:2:{s:14:"target_bundles";a:2:{s:7:"article";s:7:"article";s:5:"forum";s:5:"forum";}s:4:"sort";a:1:{s:4:"type";s:4:"none";}}}s:7:"storage";a:5:{s:4:"type";s:17:"field_sql_storage";s:8:"settings";a:0:{}s:6:"module";s:17:"field_sql_storage";s:6:"active";s:1:"1";s:7:"details";a:1:{s:3:"sql";a:2:{s:18:"FIELD_LOAD_CURRENT";a:1:{s:28:"field_data_field_reference_2";a:1:{s:9:"target_id";s:27:"field_reference_2_target_id";}}s:19:"FIELD_LOAD_REVISION";a:1:{s:32:"field_revision_field_reference_2";a:1:{s:9:"target_id";s:27:"field_reference_2_target_id";}}}}}s:12:"foreign keys";a:1:{s:4:"node";a:2:{s:5:"table";s:4:"node";s:7:"columns";a:1:{s:9:"target_id";s:3:"nid";}}}s:7:"indexes";a:1:{s:9:"target_id";a:1:{i:0;s:9:"target_id";}}s:2:"id";s:2:"39";}',
  'cardinality' => '1',
  'translatable' => '0',
  'deleted' => '0',
@@ -8181,7 +8181,7 @@
  'bundle' => 'article',
  'deleted' => '0',
  'entity_id' => '2',
  'revision_id' => '2',
  'revision_id' => '11',
  'language' => 'und',
  'delta' => '0',
  'field_node_reference_nid' => '5',
@@ -8768,7 +8768,7 @@
  'revision_id' => '11',
  'language' => 'und',
  'delta' => '0',
  'field_reference_2_target_id' => '5',
  'field_reference_2_target_id' => '6',
))
->values(array(
  'entity_type' => 'node',
@@ -14731,6 +14731,16 @@
  'delta' => '0',
  'field_node_reference_nid' => '5',
))
->values(array(
  'entity_type' => 'node',
  'bundle' => 'article',
  'deleted' => '0',
  'entity_id' => '2',
  'revision_id' => '11',
  'language' => 'und',
  'delta' => '0',
  'field_node_reference_nid' => '5',
))
->execute();
$connection->schema()->createTable('field_revision_field_phone', array(
  'fields' => array(
@@ -15378,7 +15388,7 @@
  'revision_id' => '11',
  'language' => 'und',
  'delta' => '0',
  'field_reference_2_target_id' => '5',
  'field_reference_2_target_id' => '6',
))
->values(array(
  'entity_type' => 'node',
+21 −5
Original line number Diff line number Diff line
@@ -51,8 +51,6 @@ protected function setUp(): void {
      'language',
      'd7_language_content_settings',
      'd7_taxonomy_vocabulary',
      'd7_node',
      'd7_node_translation',
    ]);
  }

@@ -70,12 +68,16 @@ protected function getFileMigrationInfo() {

  /**
   * Tests entity reference translations.
   *
   * @dataProvider providerTestEntityReferenceTranslations
   */
  public function testEntityReferenceTranslations() {
  public function testEntityReferenceTranslations($node_migrations) {
    $this->executeMigrations($node_migrations);

    // Test the entity reference field before the follow-up migrations.
    $node = Node::load(2);
    $this->assertSame('5', $node->get('field_reference')->target_id);
    $this->assertSame('5', $node->get('field_reference_2')->target_id);
    $this->assertSame('6', $node->get('field_reference_2')->target_id);
    $translation = $node->getTranslation('is');
    $this->assertSame('4', $translation->get('field_reference')->target_id);
    $this->assertSame('4', $translation->get('field_reference_2')->target_id);
@@ -99,7 +101,7 @@ public function testEntityReferenceTranslations() {
    // Test the entity reference field after the follow-up migrations.
    $node = Node::load(2);
    $this->assertSame('4', $node->get('field_reference')->target_id);
    $this->assertSame('4', $node->get('field_reference_2')->target_id);
    $this->assertSame('6', $node->get('field_reference_2')->target_id);
    $translation = $node->getTranslation('is');
    $this->assertSame('4', $translation->get('field_reference')->target_id);
    $this->assertSame('4', $translation->get('field_reference_2')->target_id);
@@ -115,4 +117,18 @@ public function testEntityReferenceTranslations() {
    $this->assertSame('2', $user->get('field_reference')->target_id);
  }

  /**
   * Data provider for testEntityReferenceTranslations().
   */
  public function providerTestEntityReferenceTranslations() {
    return [
      [
        ['d7_node', 'd7_node_translation'],
      ],
      [
        ['d7_node_complete'],
      ],
    ];
  }

}
+1 −1
Original line number Diff line number Diff line
@@ -237,7 +237,7 @@ public function testUpgradeAndIncremental() {
  protected function assertFollowUpMigrationResults() {
    $node = Node::load(2);
    $this->assertSame('4', $node->get('field_reference')->target_id);
    $this->assertSame('4', $node->get('field_reference_2')->target_id);
    $this->assertSame('6', $node->get('field_reference_2')->target_id);
    $translation = $node->getTranslation('is');
    $this->assertSame('4', $translation->get('field_reference')->target_id);
    $this->assertSame('4', $translation->get('field_reference_2')->target_id);
+10 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@

use Drupal\migrate\MigrateExecutable;
use Drupal\migrate_drupal\NodeMigrateType;
use Drupal\node\Entity\Node;
use Drupal\node\NodeInterface;
use Drupal\Tests\file\Kernel\Migrate\d7\FileMigrationSetupTrait;
use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
@@ -136,6 +137,15 @@ public function testNodeCompleteMigration() {
      $this->assertSame('Bob', $revision->field_user_reference[0]->entity->getAccountName());
    }

    // Test the translated node reference in the latest revision of node 2. This
    // references the legacy site node 4 instead of node 2. The reference is
    // fixed by the followup migrations, 'd7_entity_reference_translation' and
    // tested in \Drupal\Tests\migrate_drupal\Kernel\d7\FollowUpMigrationsTest.
    $node = Node::load(2);
    $this->assertSame('6', $node->get('field_reference_2')->target_id);
    $translation = $node->getTranslation('is');
    $this->assertSame('4', $translation->get('field_reference_2')->target_id);

    // Test the order in multi-value fields.
    $revision = $this->nodeStorage->loadRevision(1);
    $this->assertSame([