annotate core/modules/language/tests/src/Functional/LanguageBrowserDetectionAcceptLanguageTest.php @ 19:fa3358dc1485 tip

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