0dd29079ae42179715f035c2b38c9b936c4a9c97
[yaffs-website] / web / core / modules / user / src / Tests / UserLanguageCreationTest.php
1 <?php
2
3 namespace Drupal\user\Tests;
4
5 use Drupal\language\Entity\ConfigurableLanguage;
6 use Drupal\simpletest\WebTestBase;
7
8 /**
9  * Tests whether proper language is stored for new users and access to language
10  * selector.
11  *
12  * @group user
13  */
14 class UserLanguageCreationTest extends WebTestBase {
15
16   /**
17    * Modules to enable.
18    *
19    * @var array
20    */
21   public static $modules = ['user', 'language'];
22
23   /**
24    * Functional test for language handling during user creation.
25    */
26   public function testLocalUserCreation() {
27     // User to add and remove language and create new users.
28     $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages', 'administer users']);
29     $this->drupalLogin($admin_user);
30
31     // Add predefined language.
32     $langcode = 'fr';
33     ConfigurableLanguage::createFromLangcode($langcode)->save();
34
35     // Set language negotiation.
36     $edit = [
37       'language_interface[enabled][language-url]' => TRUE,
38     ];
39     $this->drupalPostForm('admin/config/regional/language/detection', $edit, t('Save settings'));
40     $this->assertText(t('Language detection configuration saved.'), 'Set language negotiation.');
41
42     // Check if the language selector is available on admin/people/create and
43     // set to the currently active language.
44     $this->drupalGet($langcode . '/admin/people/create');
45     $this->assertOptionSelected("edit-preferred-langcode", $langcode, 'Global language set in the language selector.');
46
47     // Create a user with the admin/people/create form and check if the correct
48     // language is set.
49     $username = $this->randomMachineName(10);
50     $edit = [
51       'name' => $username,
52       'mail' => $this->randomMachineName(4) . '@example.com',
53       'pass[pass1]' => $username,
54       'pass[pass2]' => $username,
55     ];
56
57     $this->drupalPostForm($langcode . '/admin/people/create', $edit, t('Create new account'));
58
59     $user = user_load_by_name($username);
60     $this->assertEqual($user->getPreferredLangcode(), $langcode, 'New user has correct preferred language set.');
61     $this->assertEqual($user->language()->getId(), $langcode, 'New user has correct profile language set.');
62
63     // Register a new user and check if the language selector is hidden.
64     $this->drupalLogout();
65
66     $this->drupalGet($langcode . '/user/register');
67     $this->assertNoFieldByName('language[fr]', 'Language selector is not accessible.');
68
69     $username = $this->randomMachineName(10);
70     $edit = [
71       'name' => $username,
72       'mail' => $this->randomMachineName(4) . '@example.com',
73     ];
74
75     $this->drupalPostForm($langcode . '/user/register', $edit, t('Create new account'));
76
77     $user = user_load_by_name($username);
78     $this->assertEqual($user->getPreferredLangcode(), $langcode, 'New user has correct preferred language set.');
79     $this->assertEqual($user->language()->getId(), $langcode, 'New user has correct profile language set.');
80
81     // Test if the admin can use the language selector and if the
82     // correct language is was saved.
83     $user_edit = $langcode . '/user/' . $user->id() . '/edit';
84
85     $this->drupalLogin($admin_user);
86     $this->drupalGet($user_edit);
87     $this->assertOptionSelected("edit-preferred-langcode", $langcode, 'Language selector is accessible and correct language is selected.');
88
89     // Set pass_raw so we can log in the new user.
90     $user->pass_raw = $this->randomMachineName(10);
91     $edit = [
92       'pass[pass1]' => $user->pass_raw,
93       'pass[pass2]' => $user->pass_raw,
94     ];
95
96     $this->drupalPostForm($user_edit, $edit, t('Save'));
97
98     $this->drupalLogin($user);
99     $this->drupalGet($user_edit);
100     $this->assertOptionSelected("edit-preferred-langcode", $langcode, 'Language selector is accessible and correct language is selected.');
101   }
102
103 }