annotate core/modules/menu_ui/src/Tests/MenuLanguageTest.php @ 12:7a779792577d

Update Drupal core to v8.4.5 (via Composer)
author Chris Cannam
date Fri, 23 Feb 2018 15:52:07 +0000
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\menu_ui\Tests;
Chris@0 4
Chris@0 5 use Drupal\Component\Utility\Unicode;
Chris@0 6 use Drupal\language\Entity\ConfigurableLanguage;
Chris@0 7 use Drupal\language\Entity\ContentLanguageSettings;
Chris@0 8
Chris@0 9 /**
Chris@0 10 * Tests for menu_ui language settings.
Chris@0 11 *
Chris@0 12 * Create menu and menu links in non-English language, and edit language
Chris@0 13 * settings.
Chris@0 14 *
Chris@0 15 * @group menu_ui
Chris@0 16 */
Chris@0 17 class MenuLanguageTest extends MenuWebTestBase {
Chris@0 18
Chris@0 19 /**
Chris@0 20 * Modules to enable.
Chris@0 21 *
Chris@0 22 * @var array
Chris@0 23 */
Chris@0 24 public static $modules = ['language'];
Chris@0 25
Chris@0 26 protected function setUp() {
Chris@0 27 parent::setUp();
Chris@0 28
Chris@0 29 $this->drupalLogin($this->drupalCreateUser(['access administration pages', 'administer menu']));
Chris@0 30
Chris@0 31 // Add some custom languages.
Chris@0 32 foreach (['aa', 'bb', 'cc', 'cs'] as $language_code) {
Chris@0 33 ConfigurableLanguage::create([
Chris@0 34 'id' => $language_code,
Chris@0 35 'label' => $this->randomMachineName(),
Chris@0 36 ])->save();
Chris@0 37 }
Chris@0 38 }
Chris@0 39
Chris@0 40 /**
Chris@0 41 * Tests menu language settings and the defaults for menu link items.
Chris@0 42 */
Chris@0 43 public function testMenuLanguage() {
Chris@0 44 // Create a test menu to test the various language-related settings.
Chris@0 45 // Machine name has to be lowercase.
Chris@0 46 $menu_name = Unicode::strtolower($this->randomMachineName(16));
Chris@0 47 $label = $this->randomString();
Chris@0 48 $edit = [
Chris@0 49 'id' => $menu_name,
Chris@0 50 'description' => '',
Chris@0 51 'label' => $label,
Chris@0 52 'langcode' => 'aa',
Chris@0 53 ];
Chris@0 54 $this->drupalPostForm('admin/structure/menu/add', $edit, t('Save'));
Chris@0 55 ContentLanguageSettings::loadByEntityTypeBundle('menu_link_content', 'menu_link_content')
Chris@0 56 ->setDefaultLangcode('bb')
Chris@0 57 ->setLanguageAlterable(TRUE)
Chris@0 58 ->save();
Chris@0 59
Chris@0 60 // Check menu language.
Chris@0 61 $this->assertOptionSelected('edit-langcode', $edit['langcode'], 'The menu language was correctly selected.');
Chris@0 62
Chris@0 63 // Test menu link language.
Chris@0 64 $link_path = '/';
Chris@0 65
Chris@0 66 // Add a menu link.
Chris@0 67 $link_title = $this->randomString();
Chris@0 68 $edit = [
Chris@0 69 'title[0][value]' => $link_title,
Chris@0 70 'link[0][uri]' => $link_path,
Chris@0 71 ];
Chris@0 72 $this->drupalPostForm("admin/structure/menu/manage/$menu_name/add", $edit, t('Save'));
Chris@0 73 // Check the link was added with the correct menu link default language.
Chris@0 74 $menu_links = entity_load_multiple_by_properties('menu_link_content', ['title' => $link_title]);
Chris@0 75 $menu_link = reset($menu_links);
Chris@0 76 $this->assertMenuLink($menu_link->getPluginId(), [
Chris@0 77 'menu_name' => $menu_name,
Chris@0 78 'route_name' => '<front>',
Chris@0 79 'langcode' => 'bb',
Chris@0 80 ]);
Chris@0 81
Chris@0 82 // Edit menu link default, changing it to cc.
Chris@0 83 ContentLanguageSettings::loadByEntityTypeBundle('menu_link_content', 'menu_link_content')
Chris@0 84 ->setDefaultLangcode('cc')
Chris@0 85 ->setLanguageAlterable(TRUE)
Chris@0 86 ->save();
Chris@0 87
Chris@0 88 // Add a menu link.
Chris@0 89 $link_title = $this->randomString();
Chris@0 90 $edit = [
Chris@0 91 'title[0][value]' => $link_title,
Chris@0 92 'link[0][uri]' => $link_path,
Chris@0 93 ];
Chris@0 94 $this->drupalPostForm("admin/structure/menu/manage/$menu_name/add", $edit, t('Save'));
Chris@0 95 // Check the link was added with the correct new menu link default language.
Chris@0 96 $menu_links = entity_load_multiple_by_properties('menu_link_content', ['title' => $link_title]);
Chris@0 97 $menu_link = reset($menu_links);
Chris@0 98 $this->assertMenuLink($menu_link->getPluginId(), [
Chris@0 99 'menu_name' => $menu_name,
Chris@0 100 'route_name' => '<front>',
Chris@0 101 'langcode' => 'cc',
Chris@0 102 ]);
Chris@0 103
Chris@0 104 // Now change the language of the new link to 'bb'.
Chris@0 105 $edit = [
Chris@0 106 'langcode[0][value]' => 'bb',
Chris@0 107 ];
Chris@0 108 $this->drupalPostForm('admin/structure/menu/item/' . $menu_link->id() . '/edit', $edit, t('Save'));
Chris@0 109 $this->assertMenuLink($menu_link->getPluginId(), [
Chris@0 110 'menu_name' => $menu_name,
Chris@0 111 'route_name' => '<front>',
Chris@0 112 'langcode' => 'bb',
Chris@0 113 ]);
Chris@0 114
Chris@0 115 // Saving menu link items ends up on the edit menu page. To check the menu
Chris@0 116 // link has the correct language default on edit, go to the menu link edit
Chris@0 117 // page first.
Chris@0 118 $this->drupalGet('admin/structure/menu/item/' . $menu_link->id() . '/edit');
Chris@0 119 // Check that the language selector has the correct default value.
Chris@0 120 $this->assertOptionSelected('edit-langcode-0-value', 'bb', 'The menu link language was correctly selected.');
Chris@0 121
Chris@0 122 // Edit menu to hide the language select on menu link item add.
Chris@0 123 ContentLanguageSettings::loadByEntityTypeBundle('menu_link_content', 'menu_link_content')
Chris@0 124 ->setDefaultLangcode('cc')
Chris@0 125 ->setLanguageAlterable(FALSE)
Chris@0 126 ->save();
Chris@0 127
Chris@0 128 // Check that the language selector is not available on menu link add page.
Chris@0 129 $this->drupalGet("admin/structure/menu/manage/$menu_name/add");
Chris@0 130 $this->assertNoField('edit-langcode-0-value', 'The language selector field was hidden the page');
Chris@0 131 }
Chris@0 132
Chris@0 133 }