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