More updates to stop using dev or alpha or beta versions.
[yaffs-website] / web / core / modules / system / src / Tests / Entity / EntityTranslationFormTest.php
1 <?php
2
3 namespace Drupal\system\Tests\Entity;
4
5 use Drupal\Core\Language\LanguageInterface;
6 use Drupal\field\Entity\FieldStorageConfig;
7 use Drupal\language\Entity\ConfigurableLanguage;
8 use Drupal\simpletest\WebTestBase;
9
10 /**
11  * Tests entity translation form.
12  *
13  * @group Entity
14  */
15 class EntityTranslationFormTest extends WebTestBase {
16
17   /**
18    * Modules to enable.
19    *
20    * @var array
21    */
22   public static $modules = ['entity_test', 'language', 'node'];
23
24   protected $langcodes;
25
26   protected function setUp() {
27     parent::setUp();
28     // Enable translations for the test entity type.
29     \Drupal::state()->set('entity_test.translation', TRUE);
30
31     // Create test languages.
32     $this->langcodes = [];
33     for ($i = 0; $i < 2; ++$i) {
34       $language = ConfigurableLanguage::create([
35         'id' => 'l' . $i,
36         'label' => $this->randomString(),
37       ]);
38       $this->langcodes[$i] = $language->id();
39       $language->save();
40     }
41   }
42
43   /**
44    * Tests entity form language.
45    */
46   public function testEntityFormLanguage() {
47     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
48
49     $web_user = $this->drupalCreateUser(['create page content', 'edit own page content', 'administer content types']);
50     $this->drupalLogin($web_user);
51
52     // Create a node with language LanguageInterface::LANGCODE_NOT_SPECIFIED.
53     $edit = [];
54     $edit['title[0][value]'] = $this->randomMachineName(8);
55     $edit['body[0][value]'] = $this->randomMachineName(16);
56     $this->drupalGet('node/add/page');
57     $form_langcode = \Drupal::state()->get('entity_test.form_langcode');
58     $this->drupalPostForm(NULL, $edit, t('Save'));
59
60     $node = $this->drupalGetNodeByTitle($edit['title[0][value]']);
61
62     $this->assertTrue($node->language()->getId() == $form_langcode, 'Form language is the same as the entity language.');
63
64     // Edit the node and test the form language.
65     $this->drupalGet($this->langcodes[0] . '/node/' . $node->id() . '/edit');
66     $form_langcode = \Drupal::state()->get('entity_test.form_langcode');
67     $this->assertTrue($node->language()->getId() == $form_langcode, 'Form language is the same as the entity language.');
68
69     // Explicitly set form langcode.
70     $langcode = $this->langcodes[0];
71     $form_state_additions['langcode'] = $langcode;
72     \Drupal::service('entity.form_builder')->getForm($node, 'default', $form_state_additions);
73     $form_langcode = \Drupal::state()->get('entity_test.form_langcode');
74     $this->assertTrue($langcode == $form_langcode, 'Form language is the same as the language parameter.');
75
76     // Enable language selector.
77     $this->drupalGet('admin/structure/types/manage/page');
78     $edit = ['language_configuration[language_alterable]' => TRUE, 'language_configuration[langcode]' => LanguageInterface::LANGCODE_NOT_SPECIFIED];
79     $this->drupalPostForm('admin/structure/types/manage/page', $edit, t('Save content type'));
80     $this->assertRaw(t('The content type %type has been updated.', ['%type' => 'Basic page']), 'Basic page content type has been updated.');
81
82     // Create a node with language.
83     $edit = [];
84     $langcode = $this->langcodes[0];
85     $edit['title[0][value]'] = $this->randomMachineName(8);
86     $edit['body[0][value]'] = $this->randomMachineName(16);
87     $edit['langcode[0][value]'] = $langcode;
88     $this->drupalPostForm('node/add/page', $edit, t('Save'));
89     $this->assertText(t('Basic page @title has been created.', ['@title' => $edit['title[0][value]']]), 'Basic page created.');
90
91     // Verify that the creation message contains a link to a node.
92     $view_link = $this->xpath('//div[@class="messages"]//a[contains(@href, :href)]', [':href' => 'node/']);
93     $this->assert(isset($view_link), 'The message area contains a link to a node');
94
95     // Check to make sure the node was created.
96     $node = $this->drupalGetNodeByTitle($edit['title[0][value]']);
97     $this->assertTrue($node, 'Node found in database.');
98
99     // Make body translatable.
100     $field_storage = FieldStorageConfig::loadByName('node', 'body');
101     $field_storage->setTranslatable(TRUE);
102     $field_storage->save();
103     $field_storage = FieldStorageConfig::loadByName('node', 'body');
104     $this->assertTrue($field_storage->isTranslatable(), 'Field body is translatable.');
105
106     // Create a body translation and check the form language.
107     $langcode2 = $this->langcodes[1];
108     $translation = $node->addTranslation($langcode2);
109     $translation->title->value = $this->randomString();
110     $translation->body->value = $this->randomMachineName(16);
111     $translation->setOwnerId($web_user->id());
112     $node->save();
113     $this->drupalGet($langcode2 . '/node/' . $node->id() . '/edit');
114     $form_langcode = \Drupal::state()->get('entity_test.form_langcode');
115     $this->assertTrue($langcode2 == $form_langcode, "Node edit form language is $langcode2.");
116   }
117
118 }