Mercurial > hg > isophonics-drupal-site
diff core/modules/language/tests/src/Functional/LanguageConfigurationElementTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/language/tests/src/Functional/LanguageConfigurationElementTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,253 @@ +<?php + +namespace Drupal\Tests\language\Functional; + +use Drupal\Core\Language\LanguageInterface; +use Drupal\language\Entity\ConfigurableLanguage; +use Drupal\language\Entity\ContentLanguageSettings; +use Drupal\taxonomy\Entity\Vocabulary; +use Drupal\Tests\BrowserTestBase; + +/** + * Tests the features of the language configuration element field. + * + * @group language + */ +class LanguageConfigurationElementTest extends BrowserTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = ['taxonomy', 'node', 'language', 'language_elements_test', 'field_ui']; + + protected function setUp() { + parent::setUp(); + $user = $this->drupalCreateUser(['access administration pages', 'administer languages', 'administer content types']); + $this->drupalLogin($user); + } + + /** + * Tests the language settings have been saved. + */ + public function testLanguageConfigurationElement() { + $this->drupalGet('language-tests/language_configuration_element'); + $edit['lang_configuration[langcode]'] = 'current_interface'; + $edit['lang_configuration[language_alterable]'] = FALSE; + $this->drupalPostForm(NULL, $edit, 'Save'); + $lang_conf = ContentLanguageSettings::loadByEntityTypeBundle('entity_test', 'some_bundle'); + + // Check that the settings have been saved. + $this->assertEqual($lang_conf->getDefaultLangcode(), 'current_interface'); + $this->assertFalse($lang_conf->isLanguageAlterable()); + $this->drupalGet('language-tests/language_configuration_element'); + $this->assertOptionSelected('edit-lang-configuration-langcode', 'current_interface'); + $this->assertNoFieldChecked('edit-lang-configuration-language-alterable'); + + // Reload the page and save again. + $this->drupalGet('language-tests/language_configuration_element'); + $edit['lang_configuration[langcode]'] = 'authors_default'; + $edit['lang_configuration[language_alterable]'] = TRUE; + $this->drupalPostForm(NULL, $edit, 'Save'); + $lang_conf = ContentLanguageSettings::loadByEntityTypeBundle('entity_test', 'some_bundle'); + + // Check that the settings have been saved. + $this->assertEqual($lang_conf->getDefaultLangcode(), 'authors_default'); + $this->assertTrue($lang_conf->isLanguageAlterable()); + $this->drupalGet('language-tests/language_configuration_element'); + $this->assertOptionSelected('edit-lang-configuration-langcode', 'authors_default'); + $this->assertFieldChecked('edit-lang-configuration-language-alterable'); + + // Test if content type settings have been saved. + $edit = [ + 'name' => 'Page', + 'type' => 'page', + 'language_configuration[langcode]' => 'authors_default', + 'language_configuration[language_alterable]' => TRUE, + ]; + $this->drupalPostForm('admin/structure/types/add', $edit, 'Save and manage fields'); + + // Make sure the settings are saved when creating the content type. + $this->drupalGet('admin/structure/types/manage/page'); + $this->assertOptionSelected('edit-language-configuration-langcode', 'authors_default'); + $this->assertFieldChecked('edit-language-configuration-language-alterable'); + + } + + /** + * Tests that the language_get_default_langcode() returns the correct values. + */ + public function testDefaultLangcode() { + // Add some custom languages. + foreach (['aa', 'bb', 'cc'] as $language_code) { + ConfigurableLanguage::create([ + 'id' => $language_code, + 'label' => $this->randomMachineName(), + ])->save(); + } + + // Fixed language. + ContentLanguageSettings::loadByEntityTypeBundle('entity_test', 'custom_bundle') + ->setLanguageAlterable(TRUE) + ->setDefaultLangcode('bb') + ->save(); + + $langcode = language_get_default_langcode('entity_test', 'custom_bundle'); + $this->assertEqual($langcode, 'bb'); + + // Current interface. + ContentLanguageSettings::loadByEntityTypeBundle('entity_test', 'custom_bundle') + ->setLanguageAlterable(TRUE) + ->setDefaultLangcode('current_interface') + ->save(); + + $langcode = language_get_default_langcode('entity_test', 'custom_bundle'); + $language_interface = \Drupal::languageManager()->getCurrentLanguage(); + $this->assertEqual($langcode, $language_interface->getId()); + + // Site's default. + $old_default = \Drupal::languageManager()->getDefaultLanguage(); + // Ensure the language entity default value is correct. + $configurable_language = ConfigurableLanguage::load($old_default->getId()); + $this->assertTrue($configurable_language->isDefault(), 'The en language entity is flagged as the default language.'); + + $this->config('system.site')->set('default_langcode', 'cc')->save(); + ContentLanguageSettings::loadByEntityTypeBundle('entity_test', 'custom_bundle') + ->setLanguageAlterable(TRUE) + ->setDefaultLangcode(LanguageInterface::LANGCODE_SITE_DEFAULT) + ->save(); + $langcode = language_get_default_langcode('entity_test', 'custom_bundle'); + $this->assertEqual($langcode, 'cc'); + + // Ensure the language entity default value is correct. + $configurable_language = ConfigurableLanguage::load($old_default->getId()); + $this->assertFalse($configurable_language->isDefault(), 'The en language entity is not flagged as the default language.'); + $configurable_language = ConfigurableLanguage::load('cc'); + // Check calling the + // \Drupal\language\ConfigurableLanguageInterface::isDefault() method + // directly. + $this->assertTrue($configurable_language->isDefault(), 'The cc language entity is flagged as the default language.'); + + // Check the default value of a language field when authors preferred option + // is selected. + // Create first an user and assign a preferred langcode to him. + $some_user = $this->drupalCreateUser(); + $some_user->preferred_langcode = 'bb'; + $some_user->save(); + $this->drupalLogin($some_user); + ContentLanguageSettings::create([ + 'target_entity_type_id' => 'entity_test', + 'target_bundle' => 'some_bundle', + ])->setLanguageAlterable(TRUE) + ->setDefaultLangcode('authors_default') + ->save(); + + $this->drupalGet('language-tests/language_configuration_element_test'); + $this->assertOptionSelected('edit-langcode', 'bb'); + } + + /** + * Tests that the configuration is retained when the node type is updated. + */ + public function testNodeTypeUpdate() { + // Create the article content type first if the profile used is not the + // standard one. + if ($this->profile != 'standard') { + $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']); + } + $admin_user = $this->drupalCreateUser(['administer content types']); + $this->drupalLogin($admin_user); + $edit = [ + 'language_configuration[langcode]' => 'current_interface', + 'language_configuration[language_alterable]' => TRUE, + ]; + $this->drupalPostForm('admin/structure/types/manage/article', $edit, t('Save content type')); + // Check the language default configuration for the articles. + $configuration = ContentLanguageSettings::loadByEntityTypeBundle('node', 'article'); + $uuid = $configuration->uuid(); + $this->assertEqual($configuration->getDefaultLangcode(), 'current_interface', 'The default language configuration has been saved on the Article content type.'); + $this->assertTrue($configuration->isLanguageAlterable(), 'The alterable language configuration has been saved on the Article content type.'); + // Update the article content type by changing the title label. + $edit = [ + 'title_label' => 'Name' + ]; + $this->drupalPostForm('admin/structure/types/manage/article', $edit, t('Save content type')); + // Check that we still have the settings for the updated node type. + $configuration = ContentLanguageSettings::loadByEntityTypeBundle('node', 'article'); + $this->assertEqual($configuration->getDefaultLangcode(), 'current_interface', 'The default language configuration has been kept on the updated Article content type.'); + $this->assertTrue($configuration->isLanguageAlterable(), 'The alterable language configuration has been kept on the updated Article content type.'); + $this->assertEqual($configuration->uuid(), $uuid, 'The language configuration uuid has been kept on the updated Article content type.'); + } + + /** + * Tests the language settings are deleted on bundle delete. + */ + public function testNodeTypeDelete() { + // Create the article content type first if the profile used is not the + // standard one. + if ($this->profile != 'standard') { + $this->drupalCreateContentType([ + 'type' => 'article', + 'name' => 'Article' + ]); + } + $admin_user = $this->drupalCreateUser(['administer content types']); + $this->drupalLogin($admin_user); + + // Create language configuration for the articles. + $edit = [ + 'language_configuration[langcode]' => 'authors_default', + 'language_configuration[language_alterable]' => TRUE, + ]; + $this->drupalPostForm('admin/structure/types/manage/article', $edit, t('Save content type')); + + // Check the language default configuration for articles is present. + $configuration = \Drupal::entityManager()->getStorage('language_content_settings')->load('node.article'); + $this->assertTrue($configuration, 'The language configuration is present.'); + + // Delete 'article' bundle. + $this->drupalPostForm('admin/structure/types/manage/article/delete', [], t('Delete')); + + // Check that the language configuration has been deleted. + \Drupal::entityManager()->getStorage('language_content_settings')->resetCache(); + $configuration = \Drupal::entityManager()->getStorage('language_content_settings')->load('node.article'); + $this->assertFalse($configuration, 'The language configuration was deleted after bundle was deleted.'); + } + + /** + * Tests that the configuration is retained when a vocabulary is updated. + */ + public function testTaxonomyVocabularyUpdate() { + $vocabulary = Vocabulary::create([ + 'name' => 'Country', + 'vid' => 'country', + ]); + $vocabulary->save(); + + $admin_user = $this->drupalCreateUser(['administer taxonomy']); + $this->drupalLogin($admin_user); + $edit = [ + 'default_language[langcode]' => 'current_interface', + 'default_language[language_alterable]' => TRUE, + ]; + $this->drupalPostForm('admin/structure/taxonomy/manage/country', $edit, t('Save')); + + // Check the language default configuration. + $configuration = ContentLanguageSettings::loadByEntityTypeBundle('taxonomy_term', 'country'); + $uuid = $configuration->uuid(); + $this->assertEqual($configuration->getDefaultLangcode(), 'current_interface', 'The default language configuration has been saved on the Country vocabulary.'); + $this->assertTrue($configuration->isLanguageAlterable(), 'The alterable language configuration has been saved on the Country vocabulary.'); + // Update the vocabulary. + $edit = [ + 'name' => 'Nation' + ]; + $this->drupalPostForm('admin/structure/taxonomy/manage/country', $edit, t('Save')); + // Check that we still have the settings for the updated vocabulary. + $configuration = ContentLanguageSettings::loadByEntityTypeBundle('taxonomy_term', 'country'); + $this->assertEqual($configuration->getDefaultLangcode(), 'current_interface', 'The default language configuration has been kept on the updated Country vocabulary.'); + $this->assertTrue($configuration->isLanguageAlterable(), 'The alterable language configuration has been kept on the updated Country vocabulary.'); + $this->assertEqual($configuration->uuid(), $uuid, 'The language configuration uuid has been kept on the updated Country vocabulary.'); + } + +}