Mercurial > hg > cmmr2012-drupal-site
diff core/modules/language/tests/src/Functional/LanguageBrowserDetectionAcceptLanguageTest.php @ 5:12f9dff5fda9 tip
Update to Drupal core 8.7.1
author | Chris Cannam |
---|---|
date | Thu, 09 May 2019 15:34:47 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/language/tests/src/Functional/LanguageBrowserDetectionAcceptLanguageTest.php Thu May 09 15:34:47 2019 +0100 @@ -0,0 +1,114 @@ +<?php + +namespace Drupal\Tests\language\Functional; + +use Drupal\Tests\BrowserTestBase; +use Drupal\language\Entity\ConfigurableLanguage; + +/** + * Tests browser language detection with different accept-language headers. + * + * @group language + */ +class LanguageBrowserDetectionAcceptLanguageTest extends BrowserTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = ['language', 'locale', 'content_translation', 'system_test']; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + // User to manage languages. + $admin = $this->drupalCreateUser([], NULL, TRUE); + $this->drupalLogin($admin); + + // Create FR. + ConfigurableLanguage::createFromLangcode('fr')->save(); + // Set language detection to url and browser detection. + $this->drupalPostForm('/admin/config/regional/language/detection', [ + 'language_interface[enabled][language-url]' => TRUE, + 'language_interface[enabled][language-browser]' => TRUE, + 'language_interface[enabled][language-selected]' => TRUE, + ], 'Save settings'); + + // Set prefixes to en and fr. + $this->drupalPostForm('/admin/config/regional/language/detection/url', [ + 'prefix[en]' => 'en', + 'prefix[fr]' => 'fr', + ], 'Save configuration'); + // Add language codes to browser detection. + $this->drupalPostForm('/admin/config/regional/language/detection/browser', [ + 'new_mapping[browser_langcode]' => 'fr', + 'new_mapping[drupal_langcode]' => 'fr', + ], 'Save configuration'); + $this->drupalPostForm('/admin/config/regional/language/detection/browser', [ + 'new_mapping[browser_langcode]' => 'en', + 'new_mapping[drupal_langcode]' => 'en', + ], 'Save configuration'); + $this->drupalPostForm('/admin/config/regional/language/detection/selected', [ + 'edit-selected-langcode' => 'en', + ], 'Save configuration'); + + $this->drupalLogout(); + } + + /** + * Tests with browsers with and without Accept-Language header. + */ + public function testAcceptLanguageEmptyDefault() { + + // Check correct headers. + $this->drupalGet('/en/system-test/echo/language test', [], ['Accept-Language' => 'en']); + $this->assertSession()->responseHeaderEquals('Content-Language', 'en'); + $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'MISS'); + + $this->drupalGet('/fr/system-test/echo/language test', [], ['Accept-Language' => 'en']); + $this->assertSession()->responseHeaderEquals('Content-Language', 'fr'); + $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'MISS'); + + $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'en']); + $this->assertSession()->responseHeaderEquals('Content-Language', 'en'); + $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache')); + + // Check with UK browser. + $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'en-UK,en']); + $this->assertSession()->responseHeaderEquals('Content-Language', 'en'); + $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache')); + + // Check with french browser. + $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'fr-FR,fr']); + $this->assertSession()->responseHeaderEquals('Content-Language', 'fr'); + $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache')); + + // Check with browser without language settings - should return fallback language. + $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => NULL]); + $this->assertSession()->responseHeaderEquals('Content-Language', 'en'); + $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache')); + + // Check with french browser again. + $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'fr-FR,fr']); + $this->assertSession()->responseHeaderEquals('Content-Language', 'fr'); + $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache')); + + // Check with UK browser. + $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'en-UK,en']); + $this->assertSession()->responseHeaderEquals('Content-Language', 'en'); + $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache')); + + // Check if prefixed URLs are still cached. + $this->drupalGet('/en/system-test/echo/language test', [], ['Accept-Language' => 'en']); + $this->assertSession()->responseHeaderEquals('Content-Language', 'en'); + $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'HIT'); + + $this->drupalGet('/fr/system-test/echo/language test', [], ['Accept-Language' => 'en']); + $this->assertSession()->responseHeaderEquals('Content-Language', 'fr'); + $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'HIT'); + } + +}