annotate core/modules/node/tests/src/Functional/NodeFieldMultilingualTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\node\Functional;
Chris@0 4
Chris@0 5 use Drupal\field\Entity\FieldStorageConfig;
Chris@0 6 use Drupal\language\Entity\ConfigurableLanguage;
Chris@0 7 use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl;
Chris@0 8 use Drupal\Core\Language\LanguageInterface;
Chris@0 9 use Drupal\Tests\BrowserTestBase;
Chris@0 10
Chris@0 11 /**
Chris@0 12 * Tests multilingual support for fields.
Chris@0 13 *
Chris@0 14 * @group node
Chris@0 15 */
Chris@0 16 class NodeFieldMultilingualTest extends BrowserTestBase {
Chris@0 17
Chris@0 18 /**
Chris@0 19 * Modules to enable.
Chris@0 20 *
Chris@0 21 * @var array
Chris@0 22 */
Chris@0 23 public static $modules = ['node', 'language'];
Chris@0 24
Chris@0 25 protected function setUp() {
Chris@0 26 parent::setUp();
Chris@0 27
Chris@0 28 // Create Basic page node type.
Chris@0 29 $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
Chris@0 30
Chris@0 31 // Setup users.
Chris@0 32 $admin_user = $this->drupalCreateUser(['administer languages', 'administer content types', 'access administration pages', 'create page content', 'edit own page content']);
Chris@0 33 $this->drupalLogin($admin_user);
Chris@0 34
Chris@0 35 // Add a new language.
Chris@0 36 ConfigurableLanguage::createFromLangcode('it')->save();
Chris@0 37
Chris@0 38 // Enable URL language detection and selection.
Chris@0 39 $edit = ['language_interface[enabled][language-url]' => '1'];
Chris@0 40 $this->drupalPostForm('admin/config/regional/language/detection', $edit, t('Save settings'));
Chris@0 41
Chris@0 42 // Set "Basic page" content type to use multilingual support.
Chris@0 43 $edit = [
Chris@0 44 'language_configuration[language_alterable]' => TRUE,
Chris@0 45 ];
Chris@0 46 $this->drupalPostForm('admin/structure/types/manage/page', $edit, t('Save content type'));
Chris@0 47 $this->assertRaw(t('The content type %type has been updated.', ['%type' => 'Basic page']), 'Basic page content type has been updated.');
Chris@0 48
Chris@0 49 // Make node body translatable.
Chris@0 50 $field_storage = FieldStorageConfig::loadByName('node', 'body');
Chris@0 51 $field_storage->setTranslatable(TRUE);
Chris@0 52 $field_storage->save();
Chris@0 53 }
Chris@0 54
Chris@0 55 /**
Chris@0 56 * Tests whether field languages are correctly set through the node form.
Chris@0 57 */
Chris@0 58 public function testMultilingualNodeForm() {
Chris@0 59 // Create "Basic page" content.
Chris@0 60 $langcode = language_get_default_langcode('node', 'page');
Chris@0 61 $title_key = 'title[0][value]';
Chris@0 62 $title_value = $this->randomMachineName(8);
Chris@0 63 $body_key = 'body[0][value]';
Chris@0 64 $body_value = $this->randomMachineName(16);
Chris@0 65
Chris@0 66 // Create node to edit.
Chris@0 67 $edit = [];
Chris@0 68 $edit[$title_key] = $title_value;
Chris@0 69 $edit[$body_key] = $body_value;
Chris@0 70 $this->drupalPostForm('node/add/page', $edit, t('Save'));
Chris@0 71
Chris@0 72 // Check that the node exists in the database.
Chris@0 73 $node = $this->drupalGetNodeByTitle($edit[$title_key]);
Chris@0 74 $this->assertTrue($node, 'Node found in database.');
Chris@0 75 $this->assertTrue($node->language()->getId() == $langcode && $node->body->value == $body_value, 'Field language correctly set.');
Chris@0 76
Chris@0 77 // Change node language.
Chris@0 78 $langcode = 'it';
Chris@0 79 $this->drupalGet("node/{$node->id()}/edit");
Chris@0 80 $edit = [
Chris@0 81 $title_key => $this->randomMachineName(8),
Chris@0 82 'langcode[0][value]' => $langcode,
Chris@0 83 ];
Chris@0 84 $this->drupalPostForm(NULL, $edit, t('Save'));
Chris@0 85 $node = $this->drupalGetNodeByTitle($edit[$title_key], TRUE);
Chris@0 86 $this->assertTrue($node, 'Node found in database.');
Chris@0 87 $this->assertTrue($node->language()->getId() == $langcode && $node->body->value == $body_value, 'Field language correctly changed.');
Chris@0 88
Chris@0 89 // Enable content language URL detection.
Chris@0 90 $this->container->get('language_negotiator')->saveConfiguration(LanguageInterface::TYPE_CONTENT, [LanguageNegotiationUrl::METHOD_ID => 0]);
Chris@0 91
Chris@0 92 // Test multilingual field language fallback logic.
Chris@0 93 $this->drupalGet("it/node/{$node->id()}");
Chris@0 94 $this->assertRaw($body_value, 'Body correctly displayed using Italian as requested language');
Chris@0 95
Chris@0 96 $this->drupalGet("node/{$node->id()}");
Chris@0 97 $this->assertRaw($body_value, 'Body correctly displayed using English as requested language');
Chris@0 98 }
Chris@0 99
Chris@0 100 /**
Chris@0 101 * Tests multilingual field display settings.
Chris@0 102 */
Chris@0 103 public function testMultilingualDisplaySettings() {
Chris@0 104 // Create "Basic page" content.
Chris@0 105 $title_key = 'title[0][value]';
Chris@0 106 $title_value = $this->randomMachineName(8);
Chris@0 107 $body_key = 'body[0][value]';
Chris@0 108 $body_value = $this->randomMachineName(16);
Chris@0 109
Chris@0 110 // Create node to edit.
Chris@0 111 $edit = [];
Chris@0 112 $edit[$title_key] = $title_value;
Chris@0 113 $edit[$body_key] = $body_value;
Chris@0 114 $this->drupalPostForm('node/add/page', $edit, t('Save'));
Chris@0 115
Chris@0 116 // Check that the node exists in the database.
Chris@0 117 $node = $this->drupalGetNodeByTitle($edit[$title_key]);
Chris@0 118 $this->assertTrue($node, 'Node found in database.');
Chris@0 119
Chris@0 120 // Check if node body is showed.
Chris@0 121 $this->drupalGet('node/' . $node->id());
Chris@0 122 $body = $this->xpath('//article[contains(concat(" ", normalize-space(@class), " "), :node-class)]//div[contains(concat(" ", normalize-space(@class), " "), :content-class)]/descendant::p', [
Chris@0 123 ':node-class' => ' node ',
Chris@0 124 ':content-class' => 'node__content',
Chris@0 125 ]);
Chris@0 126 $this->assertEqual($body[0]->getText(), $node->body->value, 'Node body found.');
Chris@0 127 }
Chris@0 128
Chris@0 129 }