diff --git a/core/modules/user/lib/Drupal/user/Tests/UserAdminLanguageTest.php b/core/modules/user/lib/Drupal/user/Tests/UserAdminLanguageTest.php new file mode 100644 index 0000000..06a03d2 --- /dev/null +++ b/core/modules/user/lib/Drupal/user/Tests/UserAdminLanguageTest.php @@ -0,0 +1,104 @@ + 'User administration pages language settings', + 'description' => "Tests user's ability to change their administation pages language.", + 'group' => 'User', + ); + } + + /** + * Test if user can change their administration pages language. + */ + function testUserAdminLanguageConfiguration() { + global $base_url; + + // User to add and remove language. + $super_admin_user = $this->drupalCreateUser(array('administer languages', 'access administration pages')); + // User to check non-admin access. + $non_admin_user = $this->drupalCreateUser('access administration pages'); + $non_admin_user->name = 'non-admin user'; + // User to change their administration pages language. + $admin_user = $this->drupalCreateUser('access administration pages'); + $admin_user->name = 'admin user'; + + // Login as users and edit account settings. + $check_users = array($non_admin_user, $admin_user); + foreach ($check_users as $check_user) { + testUserAdminLanguageNoSetting($check_user, 'before language'); + } + + // Add custom language. + $this->drupalLogin($super_admin_user); + // Code for the language. + $langcode = 'xx'; + // The English name for the language. + $name = $this->randomName(16); + $edit = array( + 'predefined_langcode' => 'custom', + 'langcode' => $langcode, + 'name' => $name, + 'direction' => '0', + ); + $this->drupalPost('admin/config/regional/language/add', $edit, t('Add custom language')); + $this->drupalLogout(); + + // Login as non-admin user and edit account settings. + testUserAdminLanguageNoSetting($non_admin_user, 'after language'); + + // Login as admin user and edit account settings. + $this->drupalLogin($admin_user); + $path = 'user/' . $admin_user->uid . '/edit'; + $this->drupalGet($path); + // Ensure administration pages language settings widget is available. + $this->assertFieldById('edit-preferred-admin-langcode', '', 'Administration pages language selector available.'); + // Ensure custom language is present. + $this->assertText($name, 'Administration pages language present on form.'); + // Switch to our custom language. + $edit = array( + 'preferred_admin_langcode' => $langcode, + ); + $this->drupalPost($path, $edit, t('Save')); + // Ensure form was submitted successfully. + $this->assertText(t('The changes have been saved.'), 'Changes were saved.'); + // Check if language was changed. + $this->assertOptionSelected('edit-preferred-admin-langcode', $langcode, 'Administration pages language successfully updated.'); + + $this->drupalLogout(); + } + + /** + * Helper function to check if administration pages language setting is not + * available. + */ + function testUserAdminLanguageNoSetting($check_user, $context) { + $context = $check_user->name . ' '. $context; + $this->drupalLogin($check_user); + $path = 'user/' . $check_user->uid . '/edit'; + $this->drupalGet($path); + // Ensure administration pages language settings widget is not available. + $this->assertNoFieldById('edit-preferred-admin-langcode', '', 'Administration pages language selector not available (' . $context . ').'); + } +}