function LanguageNegotiationInfoTest::testInfoAlterations
Same name in other branches
- 9 core/modules/language/tests/src/Functional/LanguageNegotiationInfoTest.php \Drupal\Tests\language\Functional\LanguageNegotiationInfoTest::testInfoAlterations()
- 8.9.x core/modules/language/tests/src/Functional/LanguageNegotiationInfoTest.php \Drupal\Tests\language\Functional\LanguageNegotiationInfoTest::testInfoAlterations()
- 11.x core/modules/language/tests/src/Functional/LanguageNegotiationInfoTest.php \Drupal\Tests\language\Functional\LanguageNegotiationInfoTest::testInfoAlterations()
Tests alterations to language types/negotiation info.
File
-
core/
modules/ language/ tests/ src/ Functional/ LanguageNegotiationInfoTest.php, line 75
Class
- LanguageNegotiationInfoTest
- Tests alterations to language types/negotiation info.
Namespace
Drupal\Tests\language\FunctionalCode
public function testInfoAlterations() : void {
$this->stateSet([
// Enable language_test type info.
'language_test.language_types' => TRUE,
// Enable language_test negotiation info (not altered yet).
'language_test.language_negotiation_info' => TRUE,
// Alter LanguageInterface::TYPE_CONTENT to be configurable.
'language_test.content_language_type' => TRUE,
]);
$this->container
->get('module_installer')
->install([
'language_test',
]);
$this->resetAll();
// Check that fixed language types are properly configured without the need
// of saving the language negotiation settings.
$this->checkFixedLanguageTypes();
$type = LanguageInterface::TYPE_CONTENT;
$language_types = $this->languageManager()
->getLanguageTypes();
$this->assertContains($type, $language_types, 'Content language type is configurable.');
// Enable some core and custom language negotiation methods. The test
// language type is supposed to be configurable.
$test_type = 'test_language_type';
$interface_method_id = LanguageNegotiationUI::METHOD_ID;
$test_method_id = 'test_language_negotiation_method';
$form_field = $type . '[enabled][' . $interface_method_id . ']';
$edit = [
$form_field => TRUE,
$type . '[enabled][' . $test_method_id . ']' => TRUE,
$test_type . '[enabled][' . $test_method_id . ']' => TRUE,
$test_type . '[configurable]' => TRUE,
];
$this->drupalGet('admin/config/regional/language/detection');
$this->submitForm($edit, 'Save settings');
// Alter language negotiation info to remove interface language negotiation
// method.
$this->stateSet([
'language_test.language_negotiation_info_alter' => TRUE,
]);
$negotiation = $this->config('language.types')
->get('negotiation.' . $type . '.enabled');
$this->assertFalse(isset($negotiation[$interface_method_id]), 'Interface language negotiation method removed from the stored settings.');
// Check that the interface language negotiation method is unavailable.
$this->drupalGet('admin/config/regional/language/detection');
$this->assertSession()
->fieldNotExists($form_field);
// Check that type-specific language negotiation methods can be assigned
// only to the corresponding language types.
foreach ($this->languageManager()
->getLanguageTypes() as $type) {
$form_field = $type . '[enabled][test_language_negotiation_method_ts]';
if ($type == $test_type) {
$this->assertSession()
->fieldExists($form_field);
}
else {
$this->assertSession()
->fieldNotExists($form_field);
}
}
// Check language negotiation results.
$this->drupalGet('');
$last = \Drupal::keyValue('language_test')->get('language_negotiation_last');
foreach ($this->languageManager()
->getDefinedLanguageTypes() as $type) {
$langcode = $last[$type];
$value = $type == LanguageInterface::TYPE_CONTENT || str_contains($type, 'test') ? 'it' : 'en';
$this->assertEquals($langcode, $value, "The negotiated language for {$type} is {$value}");
}
// Uninstall language_test and check that everything is set back to the
// original status.
$this->container
->get('module_installer')
->uninstall([
'language_test',
]);
$this->rebuildContainer();
// Check that only the core language types are available.
foreach ($this->languageManager()
->getDefinedLanguageTypes() as $type) {
$this->assertStringNotContainsString('test', $type, "The {$type} language is still available");
}
// Check that fixed language types are properly configured, even those
// previously set to configurable.
$this->checkFixedLanguageTypes();
// Check that unavailable language negotiation methods are not present in
// the negotiation settings.
$negotiation = $this->config('language.types')
->get('negotiation.' . $type . '.enabled');
$this->assertFalse(isset($negotiation[$test_method_id]), 'The disabled test language negotiation method is not part of the content language negotiation settings.');
// Check that configuration page presents the correct options and settings.
$this->assertSession()
->pageTextNotContains("Test language detection");
$this->assertSession()
->pageTextNotContains("This is a test language negotiation method");
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.