Skip to content

Commit

Permalink
Fix tests broken due the OIDC RP-Initiated Logout
Browse files Browse the repository at this point in the history
Closes #311
  • Loading branch information
mposolda committed Apr 4, 2022
1 parent b01fec8 commit eb76620
Show file tree
Hide file tree
Showing 7 changed files with 2,488 additions and 1,290 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,7 @@ target
# Node.js #
###########
node_modules

# Keycloak distribution
keycloak
keycloak-dist
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import org.keycloak.admin.client.Keycloak;
import org.keycloak.admin.client.resource.ClientsResource;
import org.keycloak.admin.client.token.TokenManager;
import org.keycloak.quickstart.uma.page.LogoutConfirmPage;
import org.keycloak.quickstart.uma.page.PhotozPage;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.representations.idm.authorization.ResourceServerRepresentation;
Expand Down Expand Up @@ -92,6 +93,9 @@ public class ArquillianAuthzUMATest {
@Page
private PhotozPage photozPage;

@Page
private LogoutConfirmPage logoutConfirmPage;

@Drone
private WebDriver webDriver;

Expand Down Expand Up @@ -165,7 +169,7 @@ public void testShareResource() {
photozPage.login("alice", "alice", null);
photozPage.createAlbum("Germany Vacations");
shareResource("alice", "alice", "jdoe", "Germany Vacations", VIEW_SCOPE, DELETE_SCOPE);
photozPage.logout();
logout();

photozPage.login("jdoe", "jdoe", null);
// jdoe's album list should be empty, but shared albums list shouldn't.
Expand All @@ -178,7 +182,7 @@ public void testShareResource() {
// jdoe should be able to delete alice's shared album.
photozPage.deleteSharedAlbum("Germany Vacations");
Assert.assertTrue(emptySharedList.isDisplayed());
photozPage.logout();
logout();

// log back in as alice and this time share the created album without granting delete permissions.
photozPage.login("alice", "alice", null);
Expand All @@ -187,7 +191,7 @@ public void testShareResource() {
Assert.assertEquals("You don't have any albums, yet.", emptyAlbumsList.getText());
photozPage.createAlbum("Italy Vacations");
shareResource("alice", "alice", "jdoe", "Italy Vacations", VIEW_SCOPE);
photozPage.logout();
logout();

photozPage.login("jdoe", "jdoe", null);
// jdoe's album list should be empty, but shared albums list shouldn't.
Expand All @@ -198,11 +202,11 @@ public void testShareResource() {
Assert.assertFalse(emptySharedList.isDisplayed());
photozPage.deleteSharedAlbum("Italy Vacations", false);
Assert.assertTrue(photozPage.wasDenied());
photozPage.logout();
logout();

photozPage.login("alice", "alice", null);
photozPage.deleteAlbum("Italy Vacations");
photozPage.logout();
logout();
}

private void shareResource(String ownerUsername, String ownerPassword, String user, String resourceName, String... scopes) {
Expand Down Expand Up @@ -247,4 +251,9 @@ private void shareResource(String ownerUsername, String ownerPassword, String us

client.close();
}

private void logout() {
photozPage.logout();
logoutConfirmPage.confirmLogout();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.keycloak.quickstart.uma.page;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

import static org.jboss.arquillian.graphene.Graphene.waitGui;

/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class LogoutConfirmPage {

@FindBy(css = "input[type=\"submit\"]")
private WebElement confirmLogoutButton;

public void confirmLogout() {
waitGui().until().element(confirmLogoutButton).is().clickable();
confirmLogoutButton.click();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import org.junit.runner.RunWith;
import org.keycloak.admin.client.Config;
import org.keycloak.admin.client.token.TokenManager;
import org.keycloak.quickstart.uma.page.LogoutConfirmPage;
import org.keycloak.quickstart.uma.page.PhotozPage;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.test.FluentTestsHelper;
Expand Down Expand Up @@ -87,6 +88,9 @@ public class ArquillianAuthzUMATest {
@Page
private PhotozPage photozPage;

@Page
private LogoutConfirmPage logoutConfirmPage;

@Drone
private WebDriver webDriver;

Expand Down Expand Up @@ -165,7 +169,7 @@ public void testCreateDeleteAlbum() {
photozPage.deleteAlbum("France Vacations");
Assert.assertTrue(emptyAlbumsList.isDisplayed());

photozPage.logout();
logout();
}

@Test
Expand All @@ -176,15 +180,15 @@ public void testRequestEntitlements() {
Assert.assertTrue(pageSource.contains("album:view"));
Assert.assertTrue(pageSource.contains("album:delete"));
Assert.assertTrue(pageSource.contains("admin:manage"));
photozPage.logout();
logout();

photozPage.login("alice", "alice", null);
photozPage.requestEntitlements();
pageSource = webDriver.getPageSource();
Assert.assertTrue(pageSource.contains("profile:view"));
Assert.assertFalse(pageSource.contains("album:view"));
Assert.assertFalse(pageSource.contains("admin:manage"));
photozPage.logout();
logout();
}

@Test
Expand All @@ -195,7 +199,7 @@ public void testShareResource() {
shareResource("alice", "alice", "jdoe", "Germany Vacations", VIEW_SCOPE, DELETE_SCOPE);
photozPage.viewAlbum("Germany Vacations");
webDriver.navigate().to(contextRoot);
photozPage.logout();
logout();

photozPage.login("jdoe", "jdoe", null);
// jdoe's album list should be empty, but shared albums list shouldn't.
Expand All @@ -209,13 +213,13 @@ public void testShareResource() {
// jdoe should be able to delete alice's shared album.
photozPage.deleteSharedAlbum("Germany Vacations");
Assert.assertTrue(emptySharedList.isDisplayed());
photozPage.logout();
logout();

// log back in as alice and this time share the created album without granting delete permissions.
photozPage.login("alice", "alice", null);
photozPage.createAlbum("Greece Vacations");
shareResource("alice", "alice", "jdoe", "Greece Vacations", VIEW_SCOPE);
photozPage.logout();
logout();

// log back in as jdoe and attempt to delete the shared album.
photozPage.login("jdoe", "jdoe", null);
Expand All @@ -232,7 +236,7 @@ public void testShareResource() {
// jdoe should now be able to remove the shared album.
photozPage.deleteSharedAlbum("Greece Vacations");
Assert.assertTrue(emptySharedList.isDisplayed());
photozPage.logout();
logout();
}

private void grantRequestedPermission(String ownerUsername, String ownerPassword, String resourceName) {
Expand Down Expand Up @@ -332,4 +336,9 @@ private TokenManager getTokenManager(String username, String password, Client cl
client
);
}

private void logout() {
photozPage.logout();
logoutConfirmPage.confirmLogout();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.keycloak.quickstart.uma.page;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

import static org.jboss.arquillian.graphene.Graphene.waitGui;

/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class LogoutConfirmPage {

@FindBy(css = "input[type=\"submit\"]")
private WebElement confirmLogoutButton;

@FindBy(className = "instruction")
private WebElement infoMessage;

public void confirmLogout() {
waitGui().until().element(confirmLogoutButton).is().clickable();
confirmLogoutButton.click();
}
}
Loading

0 comments on commit eb76620

Please sign in to comment.