annotate core/modules/user/tests/src/Functional/UserAccountLinksTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
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 }