function NodeFieldMultilingualTest::testMultilingualNodeForm

Same name in other branches
  1. 9 core/modules/node/tests/src/Functional/NodeFieldMultilingualTest.php \Drupal\Tests\node\Functional\NodeFieldMultilingualTest::testMultilingualNodeForm()
  2. 8.9.x core/modules/node/tests/src/Functional/NodeFieldMultilingualTest.php \Drupal\Tests\node\Functional\NodeFieldMultilingualTest::testMultilingualNodeForm()
  3. 10 core/modules/node/tests/src/Functional/NodeFieldMultilingualTest.php \Drupal\Tests\node\Functional\NodeFieldMultilingualTest::testMultilingualNodeForm()

Tests whether field languages are correctly set through the node form.

File

core/modules/node/tests/src/Functional/NodeFieldMultilingualTest.php, line 74

Class

NodeFieldMultilingualTest
Tests multilingual support for fields.

Namespace

Drupal\Tests\node\Functional

Code

public function testMultilingualNodeForm() : void {
    // Create "Basic page" content.
    $langcode = language_get_default_langcode('node', 'page');
    $title_key = 'title[0][value]';
    $title_value = $this->randomMachineName(8);
    $body_key = 'body[0][value]';
    $body_value = $this->randomMachineName(16);
    // Create node to edit.
    $edit = [];
    $edit[$title_key] = $title_value;
    $edit[$body_key] = $body_value;
    $this->drupalGet('node/add/page');
    $this->submitForm($edit, 'Save');
    // Check that the node exists in the database.
    $node = $this->drupalGetNodeByTitle($edit[$title_key]);
    $this->assertNotEmpty($node, 'Node found in database.');
    $this->assertSame($langcode, $node->language()
        ->getId());
    $this->assertSame($body_value, $node->body->value);
    // Change node language.
    $langcode = 'it';
    $this->drupalGet("node/{$node->id()}/edit");
    $edit = [
        $title_key => $this->randomMachineName(8),
        'langcode[0][value]' => $langcode,
    ];
    $this->submitForm($edit, 'Save');
    $node = $this->drupalGetNodeByTitle($edit[$title_key], TRUE);
    $this->assertNotEmpty($node, 'Node found in database.');
    $this->assertSame($langcode, $node->language()
        ->getId());
    $this->assertSame($body_value, $node->body->value);
    // Enable content language URL detection.
    $this->container
        ->get('language_negotiator')
        ->saveConfiguration(LanguageInterface::TYPE_CONTENT, [
        LanguageNegotiationUrl::METHOD_ID => 0,
    ]);
    // Test multilingual field language fallback logic.
    $this->drupalGet("it/node/{$node->id()}");
    // Verify that body is correctly displayed using Italian as requested
    // language.
    $this->assertSession()
        ->pageTextContains($body_value);
    $this->drupalGet("node/{$node->id()}");
    // Verify that body is correctly displayed using English as requested
    // language.
    $this->assertSession()
        ->pageTextContains($body_value);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.