You are here

public function LanguageBrowserDetectionTest::testUIBrowserLanguageMappings in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/language/tests/src/Functional/LanguageBrowserDetectionTest.php \Drupal\Tests\language\Functional\LanguageBrowserDetectionTest::testUIBrowserLanguageMappings()
  2. 10 core/modules/language/tests/src/Functional/LanguageBrowserDetectionTest.php \Drupal\Tests\language\Functional\LanguageBrowserDetectionTest::testUIBrowserLanguageMappings()

Tests for adding, editing and deleting mappings between browser language codes and Drupal language codes.

File

core/modules/language/tests/src/Functional/LanguageBrowserDetectionTest.php, line 26

Class

LanguageBrowserDetectionTest
Tests browser language detection.

Namespace

Drupal\Tests\language\Functional

Code

public function testUIBrowserLanguageMappings() {

  // User to manage languages.
  $admin_user = $this
    ->drupalCreateUser([
    'administer languages',
    'access administration pages',
  ]);
  $this
    ->drupalLogin($admin_user);

  // Check that the configure link exists.
  $this
    ->drupalGet('admin/config/regional/language/detection');
  $this
    ->assertSession()
    ->linkByHrefExists('admin/config/regional/language/detection/browser');

  // Check that defaults are loaded from language.mappings.yml.
  $this
    ->drupalGet('admin/config/regional/language/detection/browser');
  $this
    ->assertSession()
    ->fieldValueEquals('edit-mappings-zh-cn-browser-langcode', 'zh-cn');
  $this
    ->assertSession()
    ->fieldValueEquals('edit-mappings-zh-cn-drupal-langcode', 'zh-hans');

  // Delete zh-cn language code.
  $browser_langcode = 'zh-cn';
  $this
    ->drupalGet('admin/config/regional/language/detection/browser/delete/' . $browser_langcode);
  $this
    ->assertSession()
    ->pageTextContains("Are you sure you want to delete {$browser_langcode}?");

  // Confirm the delete.
  $edit = [];
  $this
    ->drupalGet('admin/config/regional/language/detection/browser/delete/' . $browser_langcode);
  $this
    ->submitForm($edit, 'Confirm');
  $this
    ->assertSession()
    ->pageTextContains("The mapping for the {$browser_langcode} browser language code has been deleted.");

  // Check we went back to the browser negotiation mapping overview.
  $this
    ->assertSession()
    ->addressEquals(Url::fromRoute('language.negotiation_browser'));

  // Check that Chinese browser language code no longer exists.
  $this
    ->assertSession()
    ->fieldNotExists('edit-mappings-zh-cn-browser-langcode');

  // Add a new custom mapping.
  $edit = [
    'new_mapping[browser_langcode]' => 'xx',
    'new_mapping[drupal_langcode]' => 'en',
  ];
  $this
    ->drupalGet('admin/config/regional/language/detection/browser');
  $this
    ->submitForm($edit, 'Save configuration');
  $this
    ->assertSession()
    ->addressEquals(Url::fromRoute('language.negotiation_browser'));
  $this
    ->assertSession()
    ->fieldValueEquals('edit-mappings-xx-browser-langcode', 'xx');
  $this
    ->assertSession()
    ->fieldValueEquals('edit-mappings-xx-drupal-langcode', 'en');

  // Add the same custom mapping again.
  $this
    ->drupalGet('admin/config/regional/language/detection/browser');
  $this
    ->submitForm($edit, 'Save configuration');
  $this
    ->assertSession()
    ->pageTextContains('Browser language codes must be unique.');

  // Change browser language code of our custom mapping to zh-sg.
  $edit = [
    'mappings[xx][browser_langcode]' => 'zh-sg',
    'mappings[xx][drupal_langcode]' => 'en',
  ];
  $this
    ->drupalGet('admin/config/regional/language/detection/browser');
  $this
    ->submitForm($edit, 'Save configuration');
  $this
    ->assertSession()
    ->pageTextContains('Browser language codes must be unique.');

  // Change Drupal language code of our custom mapping to zh-hans.
  $edit = [
    'mappings[xx][browser_langcode]' => 'xx',
    'mappings[xx][drupal_langcode]' => 'zh-hans',
  ];
  $this
    ->drupalGet('admin/config/regional/language/detection/browser');
  $this
    ->submitForm($edit, 'Save configuration');
  $this
    ->assertSession()
    ->addressEquals(Url::fromRoute('language.negotiation_browser'));
  $this
    ->assertSession()
    ->fieldValueEquals('edit-mappings-xx-browser-langcode', 'xx');
  $this
    ->assertSession()
    ->fieldValueEquals('edit-mappings-xx-drupal-langcode', 'zh-hans');
}