annotate 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
rev   line source
Chris@5 1 <?php
Chris@5 2
Chris@5 3 namespace Drupal\Tests\language\Functional;
Chris@5 4
Chris@5 5 use Drupal\Tests\BrowserTestBase;
Chris@5 6 use Drupal\language\Entity\ConfigurableLanguage;
Chris@5 7
Chris@5 8 /**
Chris@5 9 * Tests browser language detection with different accept-language headers.
Chris@5 10 *
Chris@5 11 * @group language
Chris@5 12 */
Chris@5 13 class LanguageBrowserDetectionAcceptLanguageTest extends BrowserTestBase {
Chris@5 14
Chris@5 15 /**
Chris@5 16 * Modules to enable.
Chris@5 17 *
Chris@5 18 * @var array
Chris@5 19 */
Chris@5 20 public static $modules = ['language', 'locale', 'content_translation', 'system_test'];
Chris@5 21
Chris@5 22 /**
Chris@5 23 * {@inheritdoc}
Chris@5 24 */
Chris@5 25 protected function setUp() {
Chris@5 26 parent::setUp();
Chris@5 27 // User to manage languages.
Chris@5 28 $admin = $this->drupalCreateUser([], NULL, TRUE);
Chris@5 29 $this->drupalLogin($admin);
Chris@5 30
Chris@5 31 // Create FR.
Chris@5 32 ConfigurableLanguage::createFromLangcode('fr')->save();
Chris@5 33 // Set language detection to url and browser detection.
Chris@5 34 $this->drupalPostForm('/admin/config/regional/language/detection', [
Chris@5 35 'language_interface[enabled][language-url]' => TRUE,
Chris@5 36 'language_interface[enabled][language-browser]' => TRUE,
Chris@5 37 'language_interface[enabled][language-selected]' => TRUE,
Chris@5 38 ], 'Save settings');
Chris@5 39
Chris@5 40 // Set prefixes to en and fr.
Chris@5 41 $this->drupalPostForm('/admin/config/regional/language/detection/url', [
Chris@5 42 'prefix[en]' => 'en',
Chris@5 43 'prefix[fr]' => 'fr',
Chris@5 44 ], 'Save configuration');
Chris@5 45 // Add language codes to browser detection.
Chris@5 46 $this->drupalPostForm('/admin/config/regional/language/detection/browser', [
Chris@5 47 'new_mapping[browser_langcode]' => 'fr',
Chris@5 48 'new_mapping[drupal_langcode]' => 'fr',
Chris@5 49 ], 'Save configuration');
Chris@5 50 $this->drupalPostForm('/admin/config/regional/language/detection/browser', [
Chris@5 51 'new_mapping[browser_langcode]' => 'en',
Chris@5 52 'new_mapping[drupal_langcode]' => 'en',
Chris@5 53 ], 'Save configuration');
Chris@5 54 $this->drupalPostForm('/admin/config/regional/language/detection/selected', [
Chris@5 55 'edit-selected-langcode' => 'en',
Chris@5 56 ], 'Save configuration');
Chris@5 57
Chris@5 58 $this->drupalLogout();
Chris@5 59 }
Chris@5 60
Chris@5 61 /**
Chris@5 62 * Tests with browsers with and without Accept-Language header.
Chris@5 63 */
Chris@5 64 public function testAcceptLanguageEmptyDefault() {
Chris@5 65
Chris@5 66 // Check correct headers.
Chris@5 67 $this->drupalGet('/en/system-test/echo/language test', [], ['Accept-Language' => 'en']);
Chris@5 68 $this->assertSession()->responseHeaderEquals('Content-Language', 'en');
Chris@5 69 $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'MISS');
Chris@5 70
Chris@5 71 $this->drupalGet('/fr/system-test/echo/language test', [], ['Accept-Language' => 'en']);
Chris@5 72 $this->assertSession()->responseHeaderEquals('Content-Language', 'fr');
Chris@5 73 $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'MISS');
Chris@5 74
Chris@5 75 $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'en']);
Chris@5 76 $this->assertSession()->responseHeaderEquals('Content-Language', 'en');
Chris@5 77 $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache'));
Chris@5 78
Chris@5 79 // Check with UK browser.
Chris@5 80 $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'en-UK,en']);
Chris@5 81 $this->assertSession()->responseHeaderEquals('Content-Language', 'en');
Chris@5 82 $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache'));
Chris@5 83
Chris@5 84 // Check with french browser.
Chris@5 85 $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'fr-FR,fr']);
Chris@5 86 $this->assertSession()->responseHeaderEquals('Content-Language', 'fr');
Chris@5 87 $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache'));
Chris@5 88
Chris@5 89 // Check with browser without language settings - should return fallback language.
Chris@5 90 $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => NULL]);
Chris@5 91 $this->assertSession()->responseHeaderEquals('Content-Language', 'en');
Chris@5 92 $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache'));
Chris@5 93
Chris@5 94 // Check with french browser again.
Chris@5 95 $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'fr-FR,fr']);
Chris@5 96 $this->assertSession()->responseHeaderEquals('Content-Language', 'fr');
Chris@5 97 $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache'));
Chris@5 98
Chris@5 99 // Check with UK browser.
Chris@5 100 $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'en-UK,en']);
Chris@5 101 $this->assertSession()->responseHeaderEquals('Content-Language', 'en');
Chris@5 102 $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache'));
Chris@5 103
Chris@5 104 // Check if prefixed URLs are still cached.
Chris@5 105 $this->drupalGet('/en/system-test/echo/language test', [], ['Accept-Language' => 'en']);
Chris@5 106 $this->assertSession()->responseHeaderEquals('Content-Language', 'en');
Chris@5 107 $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'HIT');
Chris@5 108
Chris@5 109 $this->drupalGet('/fr/system-test/echo/language test', [], ['Accept-Language' => 'en']);
Chris@5 110 $this->assertSession()->responseHeaderEquals('Content-Language', 'fr');
Chris@5 111 $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'HIT');
Chris@5 112 }
Chris@5 113
Chris@5 114 }