public function TranslationTest::testTranslation in Inline Entity Form 8
Tests translating inline entities.
File
- tests/
src/ FunctionalJavascript/ TranslationTest.php, line 58
Class
- TranslationTest
- Tests translating inline entities.
Namespace
Drupal\Tests\inline_entity_form\FunctionalJavascriptCode
public function testTranslation() {
// Get the xpath selectors for the fields in this test.
$first_nested_title_field_xpath = $this
->getXpathForNthInputByLabelText('Title', 2);
$first_name_field_xpath = $this
->getXpathForNthInputByLabelText('First name', 1);
$last_name_field_xpath = $this
->getXpathForNthInputByLabelText('Last name', 1);
$assert_session = $this
->assertSession();
$page = $this
->getSession()
->getPage();
// Create a German node with a French translation.
$first_inline_node = Node::create([
'type' => 'ief_reference_type',
'langcode' => 'de',
'title' => 'Kann ein Känguru höher als ein Haus springen?',
'first_name' => 'Dieter',
]);
$translation = $first_inline_node
->toArray();
$translation['title'][0]['value'] = "Un kangourou peut-il sauter plus haut qu'une maison?";
$translation['first_name'][0]['value'] = 'Pierre';
$first_inline_node
->addTranslation('fr', $translation);
$first_inline_node
->save();
$this
->drupalGet('node/add/ief_test_complex');
$multi_fieldset = $assert_session
->elementExists('css', 'fieldset[data-drupal-selector="edit-multi"]');
$multi_fieldset
->pressButton('Add existing node');
// Reference the German node.
$this
->assertNotEmpty($field = $assert_session
->waitForElement('xpath', $this
->getXpathForAutoCompleteInput()));
$field
->setValue('Kann ein Känguru höher als ein Haus springen? (' . $first_inline_node
->id() . ')');
$page
->pressButton('Add node');
$this
->waitForRowByTitle('Kann ein Känguru höher als ein Haus springen?');
// Add a new English inline node.
$multi_fieldset
->pressButton('Add new node');
$this
->assertNotEmpty($create_button = $assert_session
->waitForButton('Create node'));
$assert_session
->elementExists('xpath', $first_nested_title_field_xpath)
->setValue('Can a kangaroo jump higher than a house?');
$assert_session
->elementExists('xpath', $first_name_field_xpath)
->setValue('John');
$assert_session
->elementExists('xpath', $last_name_field_xpath)
->setValue('Smith');
$create_button
->press();
$this
->waitForRowByTitle('Can a kangaroo jump higher than a house?');
$this
->assertRowByTitle('Kann ein Känguru höher als ein Haus springen?');
$assert_session
->elementsCount('css', 'tr.ief-row-entity', 2);
$page
->fillField('title[0][value]', 'A node');
$page
->selectFieldOption('langcode[0][value]', 'en');
$page
->pressButton('Save');
$assert_session
->pageTextContains('IEF test complex A node has been created.');
// Both inline nodes should now be in English.
$first_inline_node = $this
->drupalGetNodeByTitle('Kann ein Känguru höher als ein Haus springen?');
$second_inline_node = $this
->drupalGetNodeByTitle('Can a kangaroo jump higher than a house?');
$this
->assertSame('en', $first_inline_node
->get('langcode')->value, 'The first inline entity has the correct langcode.');
$this
->assertEquals('en', $second_inline_node
->get('langcode')->value, 'The second inline entity has the correct langcode.');
// Edit the parent node and change the source language to German.
$node = $this
->drupalGetNodeByTitle('A node');
$this
->drupalGet('node/' . $node
->id() . '/edit');
$page
->selectFieldOption('langcode[0][value]', 'de');
$page
->pressButton('Save');
// Both inline nodes should now be in German.
$first_inline_node = $this
->drupalGetNodeByTitle('Kann ein Känguru höher als ein Haus springen?', TRUE);
$second_inline_node = $this
->drupalGetNodeByTitle('Can a kangaroo jump higher than a house?', TRUE);
$this
->assertSame('de', $first_inline_node
->get('langcode')->value, 'The first inline entity has the correct langcode.');
$this
->assertSame('de', $second_inline_node
->get('langcode')->value, 'The second inline entity has the correct langcode.');
// Add a German -> French translation of the parent node.
$this
->drupalGet('node/' . $node
->id() . '/translations/add/de/fr');
$assert_session
->elementTextContains('xpath', '//fieldset[@id="edit-multi"]/legend/span', 'Multiple nodes');
// Confirm that the add and remove buttons are not present.
$multi_fieldset = $assert_session
->elementExists('css', 'fieldset[data-drupal-selector="edit-multi"]');
$this
->assertEquals(FALSE, $multi_fieldset
->hasButton('Add new node'));
$this
->assertEquals(FALSE, $multi_fieldset
->hasButton('Remove'));
// Confirm the presence of the two node titles, in the expected languages.
$first_reference = $this
->assertRowByTitle("Un kangourou peut-il sauter plus haut qu'une maison?");
$second_reference = $this
->assertRowByTitle('Can a kangaroo jump higher than a house?');
$assert_session
->elementsCount('css', 'tr.ief-row-entity', 2);
// Edit the first referenced translation.
$first_reference
->getParent()
->pressButton('Edit');
$this
->assertNotEmpty($update_button = $assert_session
->waitForButton('Update node'));
$assert_session
->elementExists('xpath', $first_nested_title_field_xpath)
->setValue("Un kangourou peut-il sauter plus haut qu'une maison? - mis à jour");
$assert_session
->elementExists('xpath', $first_name_field_xpath)
->setValue('Damien');
$update_button
->press();
$this
->waitForRowByTitle("Un kangourou peut-il sauter plus haut qu'une maison? - mis à jour");
// Edit the second referenced translation.
$second_reference
->getParent()
->pressButton('Edit');
$this
->assertNotEmpty($update_button = $assert_session
->waitForButton('Update node'));
$assert_session
->elementExists('xpath', $first_nested_title_field_xpath)
->setValue('tous les animaux qui sautent');
$assert_session
->elementExists('xpath', $first_name_field_xpath)
->setValue('Jacques');
$update_button
->press();
$this
->waitForRowByTitle('tous les animaux qui sautent');
$page
->pressButton('Save (this translation)');
$assert_session
->pageTextContains('IEF test complex A node has been updated.');
// Load using the original titles, confirming they haven't changed.
$first_inline_node = $this
->drupalGetNodeByTitle('Kann ein Känguru höher als ein Haus springen?', TRUE);
$second_inline_node = $this
->drupalGetNodeByTitle('Can a kangaroo jump higher than a house?', TRUE);
// Confirm that the expected translated values are present.
$this
->assertEquals(TRUE, $first_inline_node
->hasTranslation('fr'), 'The first inline entity has a FR translation');
$this
->assertEquals(TRUE, $second_inline_node
->hasTranslation('fr'), 'The second inline entity has a FR translation');
$first_translation = $first_inline_node
->getTranslation('fr');
$this
->assertSame("Un kangourou peut-il sauter plus haut qu'une maison? - mis à jour", $first_translation->title->value);
$this
->assertSame('Damien', $first_translation->first_name->value);
$second_translation = $second_inline_node
->getTranslation('fr');
$this
->assertEquals('tous les animaux qui sautent', $second_translation->title->value);
$this
->assertSame('Jacques', $second_translation->first_name->value);
}