From ea4f6bcef2f1c3ba8f84115d3de3af0d8e5820d2 Mon Sep 17 00:00:00 2001 From: Angie Byron Date: Wed, 7 Jul 2010 08:05:01 +0000 Subject: =?UTF-8?q?#363580=20by=20rfay,=20chx,=20Berdir,=20Rob=20Loach,=20?= =?UTF-8?q?G=C3=A1bor=20Hojtsy,=20Shawn=20DeArmond:=20Fixed=20OpenID=20log?= =?UTF-8?q?in=20fails=20when=20in=20maintenance=20mode,=20and=20403=20erro?= =?UTF-8?q?rs=20on=20certain=20user=20paths=20for=20logged-in=20users.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/simpletest/tests/menu.test | 34 ++++++++++++++++++++++++++++++- modules/simpletest/tests/menu_test.module | 23 +++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) (limited to 'modules/simpletest') diff --git a/modules/simpletest/tests/menu.test b/modules/simpletest/tests/menu.test index 0e6da766b..fdf529733 100644 --- a/modules/simpletest/tests/menu.test +++ b/modules/simpletest/tests/menu.test @@ -90,6 +90,39 @@ class MenuRouterTestCase extends DrupalWebTestCase { $this->assertRaw('seven/style.css', t("The administrative theme's CSS appears on the page.")); } + /** + * Make sure the maintenance mode can be bypassed using hook_menu_site_status_alter(). + * + * @see hook_menu_site_status_alter(). + */ + function testMaintenanceModeLoginPaths() { + variable_set('maintenance_mode', TRUE); + + $offline_message = t('@site is currently under maintenance. We should be back shortly. Thank you for your patience.', array('@site' => variable_get('site_name', 'Drupal'))); + $this->drupalLogout(); + $this->drupalGet('node'); + $this->assertText($offline_message); + $this->drupalGet('menu_login_callback'); + $this->assertText('This is menu_login_callback().', t('Maintenance mode can be bypassed through hook_login_paths().')); + } + + /** + * Test that an authenticated user hitting 'user/login' gets redirected to + * 'user' and 'user/register' gets redirected to the user edit page. + */ + function testAuthUserUserLogin() { + $loggedInUser = $this->drupalCreateUser(array()); + $this->drupalLogin($loggedInUser); + + $this->DrupalGet('user/login'); + // Check that we got to 'user'. + $this->assertTrue($this->url == url('user', array('absolute' => TRUE)), t("Logged-in user redirected to q=user on accessing q=user/login")); + + // user/register should redirect to user/UID/edit. + $this->DrupalGet('user/register'); + $this->assertTrue($this->url == url('user/' . $this->loggedInUser->uid . '/edit', array('absolute' => TRUE)), t("Logged-in user redirected to q=user/UID/edit on accessing q=user/register")); + } + /** * Test the theme callback when it is set to use an optional theme. */ @@ -491,4 +524,3 @@ class MenuTreeDataTestCase extends DrupalUnitTestCase { return $this->assert($link1['mlid'] == $link2['mlid'], $message ? $message : t('First link is identical to second link')); } } - diff --git a/modules/simpletest/tests/menu_test.module b/modules/simpletest/tests/menu_test.module index ee8f2ea1b..8bab8a208 100644 --- a/modules/simpletest/tests/menu_test.module +++ b/modules/simpletest/tests/menu_test.module @@ -189,6 +189,12 @@ function menu_test_menu() { 'type' => MENU_LOCAL_TASK, ); + $items['menu_login_callback'] = array( + 'title' => 'Used as a login path', + 'page callback' => 'menu_login_callback', + 'access callback' => TRUE, + ); + return $items; } @@ -329,3 +335,20 @@ function menu_test_static_variable($value = NULL) { } return $variable; } + +/** + * Implements hook_menu_site_status_alter(). + */ +function menu_test_menu_site_status_alter(&$menu_site_status, $path) { + // Allow access to ?q=menu_login_callback even if in maintenance mode. + if ($menu_site_status == MENU_SITE_OFFLINE && $path == 'menu_login_callback') { + $menu_site_status = MENU_SITE_ONLINE; + } +} + +/** + * Menu callback to be used as a login path. + */ +function menu_login_callback() { + return 'This is menu_login_callback().'; +} -- cgit v1.2.3