Skip to content

Commit

Permalink
Merge pull request #681 from tame4tex/issue-680-fix
Browse files Browse the repository at this point in the history
Fixes Issue #680: Logout bug drupal 10.3.x
  • Loading branch information
jhedstrom authored Feb 26, 2025
2 parents 84df044 + 9deecf3 commit 2c23e50
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 2 deletions.
8 changes: 7 additions & 1 deletion features/backend_login.feature
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,14 @@ Feature: Backend login/logout
Given I am logged in as a user with the "authenticated user" role
Then I should be logged in on the backend

Scenario: Logout on the backend
Scenario: Logout on the backend via fast logout
Given I am logged in as a user with the "authenticated user" role
And I am logged in on the backend
When I log out
Then I should be logged out on the backend

Scenario: Logout on the backend via url
Given I am logged in as a user with the "authenticated user" role
And I am logged in on the backend
When I log out via the logout url
Then I should be logged out on the backend
14 changes: 14 additions & 0 deletions features/bootstrap/FeatureContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,20 @@ public function assertBackendLoggedOut()
if (!\Drupal::currentUser()->isAnonymous()) {
throw new \LogicException('User is still logged in on the backend.');
}
// Visit login page and ensure login form is present.
$this->getSession()->visit($this->locatePath($this->getDrupalText('login_url')));
$element = $this->getSession()->getPage();
$element->fillField($this->getDrupalText('username_field'), 'foo');
}

/**
* Logs out via the logout url rather than fast logout.
*
* @Then I log out via the logout url
*/
public function logoutViaUrl()
{
$this->logout(false);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,14 @@ protected function getLoginSubmitElement(DocumentElement $element)
return $element->findButton($this->getDrupalText('log_in'));
}

/**
* Helper to get the submit element for the logout confirmation form.
*/
protected function getLogoutConfirmSubmitElement(DocumentElement $element)
{
return $element->findButton($this->getDrupalText('log_out'));
}

/**
* {@inheritdoc}
*/
Expand Down Expand Up @@ -102,7 +110,13 @@ public function logIn(\stdClass $user)
*/
public function logout()
{
$this->getSession()->visit($this->locatePath($this->getDrupalText('logout_url')));
$session = $this->getSession();
$session->visit($this->locatePath($this->getDrupalText('logout_url')));
// Check to see if the user is on the logout confirm page (10.3+).
if ($session->getCurrentUrl() === $this->locatePath($this->getDrupalText('logout_confirm_url'))) {
$submit = $this->getLogoutConfirmSubmitElement($session->getPage());
$submit->click();
}
$this->userManager->setCurrentUser(false);

// Log the user out on the backend if possible.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ public function configure(ArrayNodeDefinition $builder)
'Text strings, such as Log out or the Username field can be altered via behat.yml if they vary from the default values.' . PHP_EOL
. ' login_url: "/user"' . PHP_EOL
. ' logout_url: "/user/logout"' . PHP_EOL
. ' logout_confirm_url: "/user/logout/confirm"' . PHP_EOL
. ' log_out: "Sign out"' . PHP_EOL
. ' log_in: "Sign in"' . PHP_EOL
. ' password_field: "Enter your password"' . PHP_EOL
Expand All @@ -144,6 +145,9 @@ public function configure(ArrayNodeDefinition $builder)
scalarNode('logout_url')->
defaultValue('/user/logout')->
end()->
scalarNode('logout_confirm_url')->
defaultValue('/user/logout/confirm')->
end()->
scalarNode('log_in')->
defaultValue('Log in')->
end()->
Expand Down

0 comments on commit 2c23e50

Please sign in to comment.