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