From e66016814fcc95e2861a0902dd91776c4a3b1372 Mon Sep 17 00:00:00 2001
From: Nathaniel Catchpole <catch@35733.no-reply.drupal.org>
Date: Wed, 9 Mar 2016 11:01:30 +0900
Subject: [PATCH] Issue #2616220 by webflo, quietone: Obey field cardinality in
 vocabulary migration

---
 core/modules/migrate_drupal/tests/fixtures/drupal6.php         | 2 +-
 .../taxonomy/migration_templates/d6_vocabulary_field.yml       | 3 +--
 .../taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php       | 2 ++
 .../Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php    | 1 +
 .../src/Tests/Migrate/d6/MigrateVocabularyFieldTest.php        | 2 ++
 .../taxonomy/tests/src/Unit/Migrate/d6/VocabularyTest.php      | 3 +++
 6 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal6.php b/core/modules/migrate_drupal/tests/fixtures/drupal6.php
index 3b9efe524eb1..8f883003afd8 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal6.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal6.php
@@ -34072,7 +34072,7 @@
   'help' => '',
   'relations' => '1',
   'hierarchy' => '2',
-  'multiple' => '0',
+  'multiple' => '1',
   'required' => '0',
   'tags' => '0',
   'module' => 'taxonomy',
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml
index 5139f318b993..a1c97356f04d 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml
@@ -8,7 +8,6 @@ source:
     entity_type: node
     type: entity_reference
     target_entity_type: taxonomy_term
-    cardinality: -1
 process:
   entity_type: 'constants/entity_type'
   type: 'constants/type'
@@ -21,7 +20,7 @@ process:
       plugin: skip_on_empty
       method: row
   'settings/target_type': 'constants/target_entity_type'
-  cardinality: 'constants/cardinality'
+  cardinality: cardinality
 destination:
   plugin: md_entity:field_storage_config
 migration_dependencies:
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php b/core/modules/taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php
index d2d3f19853a1..5c605bb4fc3f 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php
@@ -9,6 +9,7 @@
 
 use Drupal\migrate\Row;
 use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
 
 /**
  * Drupal 6 vocabularies source from database.
@@ -72,6 +73,7 @@ public function prepareRow(Row $row) {
       ->execute()
       ->fetchCol();
     $row->setSourceProperty('node_types', $node_types);
+    $row->setSourceProperty('cardinality', ($row->getSourceProperty('tags') == 1 || $row->getSourceProperty('multiple') == 1) ?  FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED : 1);
     return parent::prepareRow($row);
   }
 
diff --git a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php
index bab6ae552ad2..8f2307da419c 100644
--- a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php
+++ b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php
@@ -10,6 +10,7 @@
 use Drupal\field\Entity\FieldConfig;
 use Drupal\migrate\Entity\Migration;
 use Drupal\migrate_drupal\Tests\d6\MigrateDrupal6TestBase;
+use Drupal\taxonomy\Entity\Vocabulary;
 
 /**
  * Vocabulary field instance migration.
diff --git a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldTest.php b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldTest.php
index 9e866d82eb05..b8d99ed879f8 100644
--- a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldTest.php
+++ b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldTest.php
@@ -37,11 +37,13 @@ protected function setUp() {
   public function testVocabularyField() {
     // Test that the field exists.
     $field_storage_id = 'node.tags';
+    /** @var \Drupal\field\FieldStorageConfigInterface $field_storage */
     $field_storage = FieldStorageConfig::load($field_storage_id);
     $this->assertIdentical($field_storage_id, $field_storage->id());
 
     $settings = $field_storage->getSettings();
     $this->assertIdentical('taxonomy_term', $settings['target_type'], "Target type is correct.");
+    $this->assertIdentical(1, $field_storage->getCardinality(), "Field cardinality in 1.");
 
     $this->assertIdentical(array('node', 'tags'), Migration::load('d6_vocabulary_field')->getIdMap()->lookupDestinationID(array(4)), "Test IdMap");
   }
diff --git a/core/modules/taxonomy/tests/src/Unit/Migrate/d6/VocabularyTest.php b/core/modules/taxonomy/tests/src/Unit/Migrate/d6/VocabularyTest.php
index 60362d73c89c..ab263d1975bc 100644
--- a/core/modules/taxonomy/tests/src/Unit/Migrate/d6/VocabularyTest.php
+++ b/core/modules/taxonomy/tests/src/Unit/Migrate/d6/VocabularyTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\Tests\taxonomy\Unit\Migrate\d6;
 
 use Drupal\Tests\migrate\Unit\MigrateSqlSourceTestCase;
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
 
 /**
  * Tests D6 vocabulary source plugin.
@@ -39,6 +40,7 @@ class VocabularyTest extends MigrateSqlSourceTestCase {
       'module' => 'taxonomy',
       'weight' => 0,
       'node_types' => ['page', 'article'],
+      'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
     ],
     [
       'vid' => 2,
@@ -53,6 +55,7 @@ class VocabularyTest extends MigrateSqlSourceTestCase {
       'module' => 'taxonomy',
       'weight' => 0,
       'node_types' => ['article'],
+      'cardinality' => 1,
     ],
   ];
 
-- 
GitLab