Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\path\Functional;
|
Chris@0
|
4
|
Chris@17
|
5 use Drupal\Core\Language\LanguageInterface;
|
Chris@17
|
6
|
Chris@0
|
7 /**
|
Chris@0
|
8 * Confirm that the Path module user interface works with languages.
|
Chris@0
|
9 *
|
Chris@0
|
10 * @group path
|
Chris@0
|
11 */
|
Chris@0
|
12 class PathLanguageUiTest extends PathTestBase {
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * Modules to enable.
|
Chris@0
|
16 *
|
Chris@0
|
17 * @var array
|
Chris@0
|
18 */
|
Chris@0
|
19 public static $modules = ['path', 'locale', 'locale_test'];
|
Chris@0
|
20
|
Chris@0
|
21 protected function setUp() {
|
Chris@0
|
22 parent::setUp();
|
Chris@0
|
23
|
Chris@0
|
24 // Create and log in user.
|
Chris@0
|
25 $web_user = $this->drupalCreateUser(['edit any page content', 'create page content', 'administer url aliases', 'create url aliases', 'administer languages', 'access administration pages']);
|
Chris@0
|
26 $this->drupalLogin($web_user);
|
Chris@0
|
27
|
Chris@0
|
28 // Enable French language.
|
Chris@0
|
29 $edit = [];
|
Chris@0
|
30 $edit['predefined_langcode'] = 'fr';
|
Chris@0
|
31
|
Chris@0
|
32 $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add language'));
|
Chris@0
|
33
|
Chris@0
|
34 // Enable URL language detection and selection.
|
Chris@0
|
35 $edit = ['language_interface[enabled][language-url]' => 1];
|
Chris@0
|
36 $this->drupalPostForm('admin/config/regional/language/detection', $edit, t('Save settings'));
|
Chris@0
|
37 }
|
Chris@0
|
38
|
Chris@0
|
39 /**
|
Chris@0
|
40 * Tests that a language-neutral URL alias works.
|
Chris@0
|
41 */
|
Chris@0
|
42 public function testLanguageNeutralUrl() {
|
Chris@0
|
43 $name = $this->randomMachineName(8);
|
Chris@0
|
44 $edit = [];
|
Chris@0
|
45 $edit['source'] = '/admin/config/search/path';
|
Chris@0
|
46 $edit['alias'] = '/' . $name;
|
Chris@0
|
47 $this->drupalPostForm('admin/config/search/path/add', $edit, t('Save'));
|
Chris@0
|
48
|
Chris@0
|
49 $this->drupalGet($name);
|
Chris@0
|
50 $this->assertText(t('Filter aliases'), 'Language-neutral URL alias works');
|
Chris@0
|
51 }
|
Chris@0
|
52
|
Chris@0
|
53 /**
|
Chris@0
|
54 * Tests that a default language URL alias works.
|
Chris@0
|
55 */
|
Chris@0
|
56 public function testDefaultLanguageUrl() {
|
Chris@0
|
57 $name = $this->randomMachineName(8);
|
Chris@0
|
58 $edit = [];
|
Chris@0
|
59 $edit['source'] = '/admin/config/search/path';
|
Chris@0
|
60 $edit['alias'] = '/' . $name;
|
Chris@0
|
61 $edit['langcode'] = 'en';
|
Chris@0
|
62 $this->drupalPostForm('admin/config/search/path/add', $edit, t('Save'));
|
Chris@0
|
63
|
Chris@0
|
64 $this->drupalGet($name);
|
Chris@0
|
65 $this->assertText(t('Filter aliases'), 'English URL alias works');
|
Chris@0
|
66 }
|
Chris@0
|
67
|
Chris@0
|
68 /**
|
Chris@0
|
69 * Tests that a non-default language URL alias works.
|
Chris@0
|
70 */
|
Chris@0
|
71 public function testNonDefaultUrl() {
|
Chris@0
|
72 $name = $this->randomMachineName(8);
|
Chris@0
|
73 $edit = [];
|
Chris@0
|
74 $edit['source'] = '/admin/config/search/path';
|
Chris@0
|
75 $edit['alias'] = '/' . $name;
|
Chris@0
|
76 $edit['langcode'] = 'fr';
|
Chris@0
|
77 $this->drupalPostForm('admin/config/search/path/add', $edit, t('Save'));
|
Chris@0
|
78
|
Chris@0
|
79 $this->drupalGet('fr/' . $name);
|
Chris@0
|
80 $this->assertText(t('Filter aliases'), 'Foreign URL alias works');
|
Chris@0
|
81 }
|
Chris@0
|
82
|
Chris@17
|
83 /**
|
Chris@17
|
84 * Test that language unspecific aliases are shown and saved in the node form.
|
Chris@17
|
85 */
|
Chris@17
|
86 public function testNotSpecifiedNode() {
|
Chris@17
|
87 // Create test node.
|
Chris@17
|
88 $node = $this->drupalCreateNode();
|
Chris@17
|
89
|
Chris@17
|
90 // Create a language-unspecific alias in the admin UI, ensure that is
|
Chris@17
|
91 // displayed and the langcode is not changed when saving.
|
Chris@17
|
92 $edit = [
|
Chris@17
|
93 'source' => '/node/' . $node->id(),
|
Chris@17
|
94 'alias' => '/' . $this->getRandomGenerator()->word(8),
|
Chris@17
|
95 'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
|
Chris@17
|
96 ];
|
Chris@17
|
97 $this->drupalPostForm('admin/config/search/path/add', $edit, t('Save'));
|
Chris@17
|
98
|
Chris@17
|
99 $this->drupalGet($node->toUrl('edit-form'));
|
Chris@17
|
100 $this->assertSession()->fieldValueEquals('path[0][alias]', $edit['alias']);
|
Chris@17
|
101 $this->drupalPostForm(NULL, [], t('Save'));
|
Chris@17
|
102
|
Chris@17
|
103 $this->drupalGet('admin/config/search/path');
|
Chris@17
|
104 $this->assertSession()->pageTextContains('None');
|
Chris@17
|
105 $this->assertSession()->pageTextNotContains('English');
|
Chris@17
|
106
|
Chris@17
|
107 // Create another node, with no alias, to ensure non-language specific
|
Chris@17
|
108 // aliases are loaded correctly.
|
Chris@17
|
109 $node = $this->drupalCreateNode();
|
Chris@17
|
110 $this->drupalget($node->toUrl('edit-form'));
|
Chris@17
|
111 $this->drupalPostForm(NULL, [], t('Save'));
|
Chris@17
|
112 $this->assertSession()->pageTextNotContains(t('The alias is already in use.'));
|
Chris@17
|
113 }
|
Chris@17
|
114
|
Chris@0
|
115 }
|