1<?php
2
3namespace Drupal\Tests\migrate\Kernel;
4
5use Drupal\language\Entity\ConfigurableLanguage;
6use Drupal\migrate\MigrateExecutable;
7use Drupal\node\Entity\NodeType;
8
9/**
10 * Tests migrating non-Drupal translated content.
11 *
12 * Ensure it's possible to migrate in translations, even if there's no nid or
13 * tnid property on the source.
14 *
15 * @group migrate
16 */
17class MigrateExternalTranslatedTest extends MigrateTestBase {
18
19  /**
20   * {@inheritdoc}
21   */
22  public static $modules = [
23    'system',
24    'user',
25    'language',
26    'node',
27    'field',
28    'migrate_external_translated_test',
29  ];
30
31  /**
32   * {@inheritdoc}
33   */
34  public function setUp() {
35    parent::setUp();
36    $this->installSchema('system', ['sequences']);
37    $this->installSchema('node', ['node_access']);
38    $this->installEntitySchema('user');
39    $this->installEntitySchema('node');
40
41    // Create some languages.
42    ConfigurableLanguage::createFromLangcode('en')->save();
43    ConfigurableLanguage::createFromLangcode('fr')->save();
44    ConfigurableLanguage::createFromLangcode('es')->save();
45
46    // Create a content type.
47    NodeType::create([
48      'type' => 'external_test',
49      'name' => 'Test node type',
50    ])->save();
51  }
52
53  /**
54   * Test importing and rolling back our data.
55   */
56  public function testMigrations() {
57    /** @var \Drupal\Core\Entity\ContentEntityStorageInterface $storage */
58    $storage = $this->container->get('entity_type.manager')->getStorage('node');
59    $this->assertCount(0, $storage->loadMultiple());
60
61    // Run the migrations.
62    $migration_ids = ['external_translated_test_node', 'external_translated_test_node_translation'];
63    $this->executeMigrations($migration_ids);
64    $this->assertCount(3, $storage->loadMultiple());
65
66    $node = $storage->load(1);
67    $this->assertEquals('en', $node->language()->getId());
68    $this->assertEquals('Cat', $node->title->value);
69    $this->assertEquals('Chat', $node->getTranslation('fr')->title->value);
70    $this->assertEquals('Gato', $node->getTranslation('es')->title->value);
71
72    $node = $storage->load(2);
73    $this->assertEquals('en', $node->language()->getId());
74    $this->assertEquals('Dog', $node->title->value);
75    $this->assertEquals('Chien', $node->getTranslation('fr')->title->value);
76    $this->assertFalse($node->hasTranslation('es'), "No spanish translation for node 2");
77
78    $node = $storage->load(3);
79    $this->assertEquals('en', $node->language()->getId());
80    $this->assertEquals('Monkey', $node->title->value);
81    $this->assertFalse($node->hasTranslation('fr'), "No french translation for node 3");
82    $this->assertFalse($node->hasTranslation('es'), "No spanish translation for node 3");
83
84    $this->assertNull($storage->load(4), "No node 4 migrated");
85
86    // Roll back the migrations.
87    foreach ($migration_ids as $migration_id) {
88      $migration = $this->getMigration($migration_id);
89      $executable = new MigrateExecutable($migration, $this);
90      $executable->rollback();
91    }
92
93    $this->assertCount(0, $storage->loadMultiple());
94  }
95
96}
97