NodeTypeInitialLanguageTest.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. namespace Drupal\Tests\node\Functional;
  3. use Drupal\Core\Language\LanguageInterface;
  4. /**
  5. * Tests node type initial language settings.
  6. *
  7. * @group node
  8. */
  9. class NodeTypeInitialLanguageTest extends NodeTestBase {
  10. /**
  11. * Modules to enable.
  12. *
  13. * @var array
  14. */
  15. public static $modules = ['language', 'field_ui'];
  16. protected function setUp() {
  17. parent::setUp();
  18. $web_user = $this->drupalCreateUser(['bypass node access', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'administer languages']);
  19. $this->drupalLogin($web_user);
  20. }
  21. /**
  22. * Tests the node type initial language defaults, and modifies them.
  23. *
  24. * The default initial language must be the site's default, and the language
  25. * locked option must be on.
  26. */
  27. public function testNodeTypeInitialLanguageDefaults() {
  28. $this->drupalGet('admin/structure/types/manage/article');
  29. $this->assertOptionSelected('edit-language-configuration-langcode', LanguageInterface::LANGCODE_SITE_DEFAULT, 'The default initial language is the site default.');
  30. $this->assertNoFieldChecked('edit-language-configuration-language-alterable', 'Language selector is hidden by default.');
  31. // Tests if the language field cannot be rearranged on the manage fields tab.
  32. $this->drupalGet('admin/structure/types/manage/article/fields');
  33. $language_field = $this->xpath('//*[@id="field-overview"]/*[@id="language"]');
  34. $this->assert(empty($language_field), 'Language field is not visible on manage fields tab.');
  35. $this->drupalGet('node/add/article');
  36. $this->assertNoField('langcode', 'Language is not selectable on node add/edit page by default.');
  37. // Adds a new language and set it as default.
  38. $edit = [
  39. 'predefined_langcode' => 'hu',
  40. ];
  41. $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add language'));
  42. $edit = [
  43. 'site_default_language' => 'hu',
  44. ];
  45. $this->drupalPostForm('admin/config/regional/language', $edit, t('Save configuration'));
  46. // Tests the initial language after changing the site default language.
  47. // First unhide the language selector.
  48. $edit = [
  49. 'language_configuration[language_alterable]' => TRUE,
  50. ];
  51. $this->drupalPostForm('admin/structure/types/manage/article', $edit, t('Save content type'));
  52. $this->drupalGet('node/add/article');
  53. $this->assertField('langcode[0][value]', 'Language is selectable on node add/edit page when language not hidden.');
  54. $this->assertOptionSelected('edit-langcode-0-value', 'hu', 'The initial language is the site default on the node add page after the site default language is changed.');
  55. // Tests if the language field can be rearranged on the manage form display
  56. // tab.
  57. $this->drupalGet('admin/structure/types/manage/article/form-display');
  58. $language_field = $this->xpath('//*[@id="langcode"]');
  59. $this->assert(!empty($language_field), 'Language field is visible on manage form display tab.');
  60. // Tests if the language field can be rearranged on the manage display tab.
  61. $this->drupalGet('admin/structure/types/manage/article/display');
  62. $language_display = $this->xpath('//*[@id="langcode"]');
  63. $this->assert(!empty($language_display), 'Language field is visible on manage display tab.');
  64. // Tests if the language field is hidden by default.
  65. $this->assertOptionSelected('edit-fields-langcode-region', 'hidden', 'Language is hidden by default on manage display tab.');
  66. // Changes the initial language settings.
  67. $edit = [
  68. 'language_configuration[langcode]' => 'en',
  69. ];
  70. $this->drupalPostForm('admin/structure/types/manage/article', $edit, t('Save content type'));
  71. $this->drupalGet('node/add/article');
  72. $this->assertOptionSelected('edit-langcode-0-value', 'en', 'The initial language is the defined language.');
  73. }
  74. /**
  75. * Tests language field visibility features.
  76. */
  77. public function testLanguageFieldVisibility() {
  78. // Creates a node to test Language field visibility feature.
  79. $edit = [
  80. 'title[0][value]' => $this->randomMachineName(8),
  81. 'body[0][value]' => $this->randomMachineName(16),
  82. ];
  83. $this->drupalPostForm('node/add/article', $edit, t('Save'));
  84. $node = $this->drupalGetNodeByTitle($edit['title[0][value]']);
  85. $this->assertTrue($node, 'Node found in database.');
  86. // Loads node page and check if Language field is hidden by default.
  87. $this->drupalGet('node/' . $node->id());
  88. $language_field = $this->xpath('//div[@id=:id]/div', [
  89. ':id' => 'field-language-display',
  90. ]);
  91. $this->assertTrue(empty($language_field), 'Language field value is not shown by default on node page.');
  92. // Configures Language field formatter and check if it is saved.
  93. $edit = [
  94. 'fields[langcode][type]' => 'language',
  95. 'fields[langcode][region]' => 'content',
  96. ];
  97. $this->drupalPostForm('admin/structure/types/manage/article/display', $edit, t('Save'));
  98. $this->drupalGet('admin/structure/types/manage/article/display');
  99. $this->assertOptionSelected('edit-fields-langcode-type', 'language', 'Language field has been set to visible.');
  100. // Loads node page and check if Language field is shown.
  101. $this->drupalGet('node/' . $node->id());
  102. $language_field = $this->xpath('//div[@id=:id]/div', [
  103. ':id' => 'field-language-display',
  104. ]);
  105. $this->assertFalse(empty($language_field), 'Language field value is shown on node page.');
  106. }
  107. }