Chris@14
|
1 <?php
|
Chris@14
|
2
|
Chris@14
|
3 namespace Drupal\Tests\user\Functional;
|
Chris@14
|
4
|
Chris@14
|
5 use Drupal\Tests\BrowserTestBase;
|
Chris@14
|
6
|
Chris@14
|
7 /**
|
Chris@14
|
8 * Tests user-account links.
|
Chris@14
|
9 *
|
Chris@14
|
10 * @group user
|
Chris@14
|
11 */
|
Chris@14
|
12 class UserAccountLinksTest extends BrowserTestBase {
|
Chris@14
|
13
|
Chris@14
|
14 /**
|
Chris@14
|
15 * Modules to enable.
|
Chris@14
|
16 *
|
Chris@14
|
17 * @var array
|
Chris@14
|
18 */
|
Chris@14
|
19 public static $modules = ['menu_ui', 'block', 'test_page_test'];
|
Chris@14
|
20
|
Chris@14
|
21 /**
|
Chris@14
|
22 * {@inheritdoc}
|
Chris@14
|
23 */
|
Chris@14
|
24 protected function setUp() {
|
Chris@14
|
25 parent::setUp();
|
Chris@14
|
26 $this->drupalPlaceBlock('system_menu_block:account');
|
Chris@14
|
27 // Make test-page default.
|
Chris@14
|
28 $this->config('system.site')->set('page.front', '/test-page')->save();
|
Chris@14
|
29 }
|
Chris@14
|
30
|
Chris@14
|
31 /**
|
Chris@14
|
32 * Tests the secondary menu.
|
Chris@14
|
33 */
|
Chris@14
|
34 public function testSecondaryMenu() {
|
Chris@14
|
35 // Create a regular user.
|
Chris@14
|
36 $user = $this->drupalCreateUser([]);
|
Chris@14
|
37
|
Chris@14
|
38 // Log in and get the homepage.
|
Chris@14
|
39 $this->drupalLogin($user);
|
Chris@14
|
40 $this->drupalGet('<front>');
|
Chris@14
|
41
|
Chris@14
|
42 // For a logged-in user, expect the secondary menu to have links for "My
|
Chris@14
|
43 // account" and "Log out".
|
Chris@14
|
44 $link = $this->xpath('//ul[@class=:menu_class]/li/a[contains(@href, :href) and text()=:text]', [
|
Chris@14
|
45 ':menu_class' => 'menu',
|
Chris@14
|
46 ':href' => 'user',
|
Chris@14
|
47 ':text' => 'My account',
|
Chris@14
|
48 ]);
|
Chris@14
|
49 $this->assertEqual(count($link), 1, 'My account link is in secondary menu.');
|
Chris@14
|
50
|
Chris@14
|
51 $link = $this->xpath('//ul[@class=:menu_class]/li/a[contains(@href, :href) and text()=:text]', [
|
Chris@14
|
52 ':menu_class' => 'menu',
|
Chris@14
|
53 ':href' => 'user/logout',
|
Chris@14
|
54 ':text' => 'Log out',
|
Chris@14
|
55 ]);
|
Chris@14
|
56 $this->assertEqual(count($link), 1, 'Log out link is in secondary menu.');
|
Chris@14
|
57
|
Chris@14
|
58 // Log out and get the homepage.
|
Chris@14
|
59 $this->drupalLogout();
|
Chris@14
|
60 $this->drupalGet('<front>');
|
Chris@14
|
61
|
Chris@14
|
62 // For a logged-out user, expect the secondary menu to have a "Log in" link.
|
Chris@14
|
63 $link = $this->xpath('//ul[@class=:menu_class]/li/a[contains(@href, :href) and text()=:text]', [
|
Chris@14
|
64 ':menu_class' => 'menu',
|
Chris@14
|
65 ':href' => 'user/login',
|
Chris@14
|
66 ':text' => 'Log in',
|
Chris@14
|
67 ]);
|
Chris@14
|
68 $this->assertEqual(count($link), 1, 'Log in link is in secondary menu.');
|
Chris@14
|
69 }
|
Chris@14
|
70
|
Chris@14
|
71 /**
|
Chris@14
|
72 * Tests disabling the 'My account' link.
|
Chris@14
|
73 */
|
Chris@14
|
74 public function testDisabledAccountLink() {
|
Chris@14
|
75 // Create an admin user and log in.
|
Chris@14
|
76 $this->drupalLogin($this->drupalCreateUser(['access administration pages', 'administer menu']));
|
Chris@14
|
77
|
Chris@14
|
78 // Verify that the 'My account' link exists before we check for its
|
Chris@14
|
79 // disappearance.
|
Chris@14
|
80 $link = $this->xpath('//ul[@class=:menu_class]/li/a[contains(@href, :href) and text()=:text]', [
|
Chris@14
|
81 ':menu_class' => 'menu',
|
Chris@14
|
82 ':href' => 'user',
|
Chris@14
|
83 ':text' => 'My account',
|
Chris@14
|
84 ]);
|
Chris@14
|
85 $this->assertEqual(count($link), 1, 'My account link is in the secondary menu.');
|
Chris@14
|
86
|
Chris@14
|
87 // Verify that the 'My account' link is enabled. Do not assume the value of
|
Chris@14
|
88 // auto-increment is 1. Use XPath to obtain input element id and name using
|
Chris@14
|
89 // the consistent label text.
|
Chris@14
|
90 $this->drupalGet('admin/structure/menu/manage/account');
|
Chris@14
|
91 $label = $this->xpath('//label[contains(.,:text)]/@for', [':text' => 'Enable My account menu link']);
|
Chris@14
|
92 $this->assertFieldChecked($label[0]->getText(), "The 'My account' link is enabled by default.");
|
Chris@14
|
93
|
Chris@14
|
94 // Disable the 'My account' link.
|
Chris@14
|
95 $edit['links[menu_plugin_id:user.page][enabled]'] = FALSE;
|
Chris@14
|
96 $this->drupalPostForm('admin/structure/menu/manage/account', $edit, t('Save'));
|
Chris@14
|
97
|
Chris@14
|
98 // Get the homepage.
|
Chris@14
|
99 $this->drupalGet('<front>');
|
Chris@14
|
100
|
Chris@14
|
101 // Verify that the 'My account' link does not appear when disabled.
|
Chris@14
|
102 $link = $this->xpath('//ul[@class=:menu_class]/li/a[contains(@href, :href) and text()=:text]', [
|
Chris@14
|
103 ':menu_class' => 'menu',
|
Chris@14
|
104 ':href' => 'user',
|
Chris@14
|
105 ':text' => 'My account',
|
Chris@14
|
106 ]);
|
Chris@14
|
107 $this->assertEqual(count($link), 0, 'My account link is not in the secondary menu.');
|
Chris@14
|
108 }
|
Chris@14
|
109
|
Chris@14
|
110 /**
|
Chris@14
|
111 * Tests page title is set correctly on user account tabs.
|
Chris@14
|
112 */
|
Chris@14
|
113 public function testAccountPageTitles() {
|
Chris@14
|
114 // Default page titles are suffixed with the site name - Drupal.
|
Chris@14
|
115 $title_suffix = ' | Drupal';
|
Chris@14
|
116
|
Chris@14
|
117 $this->drupalGet('user');
|
Chris@14
|
118 $this->assertTitle('Log in' . $title_suffix, "Page title of /user is 'Log in'");
|
Chris@14
|
119
|
Chris@14
|
120 $this->drupalGet('user/login');
|
Chris@14
|
121 $this->assertTitle('Log in' . $title_suffix, "Page title of /user/login is 'Log in'");
|
Chris@14
|
122
|
Chris@14
|
123 $this->drupalGet('user/register');
|
Chris@14
|
124 $this->assertTitle('Create new account' . $title_suffix, "Page title of /user/register is 'Create new account' for anonymous users.");
|
Chris@14
|
125
|
Chris@14
|
126 $this->drupalGet('user/password');
|
Chris@14
|
127 $this->assertTitle('Reset your password' . $title_suffix, "Page title of /user/register is 'Reset your password' for anonymous users.");
|
Chris@14
|
128
|
Chris@14
|
129 // Check the page title for registered users is "My Account" in menus.
|
Chris@14
|
130 $this->drupalLogin($this->drupalCreateUser());
|
Chris@14
|
131 // After login, the client is redirected to /user.
|
Chris@14
|
132 $this->assertLink(t('My account'), 0, "Page title of /user is 'My Account' in menus for registered users");
|
Chris@14
|
133 $this->assertLinkByHref(\Drupal::urlGenerator()->generate('user.page'), 0);
|
Chris@14
|
134 }
|
Chris@14
|
135
|
Chris@14
|
136 }
|