1<?php
2
3namespace Drupal\Tests\language\Kernel\Migrate\d7;
4
5use Drupal\language\Entity\ContentLanguageSettings;
6use Drupal\Core\Language\LanguageInterface;
7use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase;
8
9/**
10 * Tests migration of i18ntaxonomy vocabulary settings.
11 *
12 * @group migrate_drupal_7
13 */
14class MigrateLanguageContentTaxonomyVocabularySettingsTest extends MigrateDrupal7TestBase {
15
16  /**
17   * {@inheritdoc}
18   */
19  public static $modules = [
20    'language',
21    'content_translation',
22    'taxonomy',
23    'text',
24  ];
25
26  /**
27   * {@inheritdoc}
28   */
29  protected function setUp() {
30    parent::setUp();
31    $this->installEntitySchema('taxonomy_term');
32    $this->executeMigrations([
33      'language',
34      'd7_taxonomy_vocabulary',
35      'd7_language_content_taxonomy_vocabulary_settings',
36    ]);
37  }
38
39  /**
40   * Tests migration of 18ntaxonomy vocabulary settings.
41   */
42  public function testLanguageContentTaxonomy() {
43    $target_entity = 'taxonomy_term';
44    // No multilingual options for terms, i18n_mode = 0.
45    $this->assertLanguageContentSettings($target_entity, 'tags', LanguageInterface::LANGCODE_NOT_SPECIFIED, FALSE, ['enabled' => FALSE]);
46    $this->assertLanguageContentSettings($target_entity, 'forums', LanguageInterface::LANGCODE_NOT_SPECIFIED, FALSE, ['enabled' => FALSE]);
47    $this->assertLanguageContentSettings($target_entity, 'vocabulary_name_much_longer_th', LanguageInterface::LANGCODE_NOT_SPECIFIED, FALSE, ['enabled' => FALSE]);
48    $this->assertLanguageContentSettings($target_entity, 'test_vocabulary', LanguageInterface::LANGCODE_NOT_SPECIFIED, FALSE, ['enabled' => FALSE]);
49    // Localize, i18n_mode = 1.
50    $this->assertLanguageContentSettings($target_entity, 'vocablocalized', LanguageInterface::LANGCODE_NOT_SPECIFIED, TRUE, ['enabled' => TRUE]);
51    // Translate, i18n_mode = 4.
52    $this->assertLanguageContentSettings($target_entity, 'vocabtranslate', LanguageInterface::LANGCODE_NOT_SPECIFIED, TRUE, ['enabled' => FALSE]);
53    // Fixed language, i18n_mode = 2.
54    $this->assertLanguageContentSettings($target_entity, 'vocabfixed', 'fr', FALSE, ['enabled' => FALSE]);
55  }
56
57  /**
58   * Asserts a content language settings configuration.
59   *
60   * @param string $target_entity
61   *   The expected target entity type.
62   * @param string $bundle
63   *   The expected bundle.
64   * @param string $default_langcode
65   *   The default language code.
66   * @param bool $language_alterable
67   *   The expected state of language alterable.
68   * @param array $third_party_settings
69   *   The content translation setting.
70   */
71  public function assertLanguageContentSettings($target_entity, $bundle, $default_langcode, $language_alterable, array $third_party_settings) {
72    $config = ContentLanguageSettings::load($target_entity . '.' . $bundle);
73    $this->assertInstanceOf(ContentLanguageSettings::class, $config);
74    $this->assertSame($target_entity, $config->getTargetEntityTypeId());
75    $this->assertSame($bundle, $config->getTargetBundle());
76    $this->assertSame($default_langcode, $config->getDefaultLangcode());
77    $this->assertSame($language_alterable, $config->isLanguageAlterable());
78    $this->assertSame($third_party_settings, $config->getThirdPartySettings('content_translation'));
79  }
80
81}
82