Adjust the test to dynamically remove all sessions

This will handle even those sessions created by other tests.

Closes #41545

Signed-off-by: Alexander Schwartz <aschwart@redhat.com>
This commit is contained in:
Alexander Schwartz 2025-08-01 14:16:49 +02:00 committed by Pedro Igor
parent e7c98a4714
commit c1b00ac15a
3 changed files with 39 additions and 13 deletions

View File

@ -25,11 +25,20 @@ test.describe("Sign out test", () => {
page2.getByTestId("account-security/device-activity"),
).toBeVisible();
await page2.getByTestId("account-security/device-activity").click();
await expect(page2.getByTestId("row-0")).toContainText("Current session");
const count = await page2
.locator('[aria-label="device-sessions-content"]')
.count();
await page2
.getByRole("button", { name: "Sign out", exact: true })
.click();
await page2.getByRole("button", { name: "Confirm" }).click();
for (let i = 0; i < count - 1; ++i) {
await page2
.getByRole("button", { name: "Sign out", exact: true })
.first()
.click();
await page2.getByRole("button", { name: "Confirm" }).click();
await page2.getByText("Signed out").isVisible();
await page2.getByTestId("global-alerts").locator("button").click();
}
// reload pages in browsers, one should stay logged in, the other should be logged out
await page1.reload();
@ -63,6 +72,9 @@ test.describe("Sign out test", () => {
.getByRole("button", { name: "Sign out all devices", exact: true })
.click();
await page2.getByRole("button", { name: "Confirm" }).click();
await expect(
page2.getByRole("heading", { name: "Sign in to your account" }),
).toBeVisible();
// reload pages in browsers, one should stay logged in, the other should be logged out
await page1.reload();

View File

@ -1,15 +1,23 @@
import RealmRepresentation from "@keycloak/keycloak-admin-client/lib/defs/realmRepresentation";
import { test as setup } from "@playwright/test";
import { importRealm } from "./admin-client";
import { deleteRealm, importRealm } from "./admin-client";
import groupsRealm from "./realms/groups-realm.json" assert { type: "json" };
import resourcesRealm from "./realms/resources-realm.json" assert { type: "json" };
import userProfileRealm from "./realms/user-profile-realm.json" assert { type: "json" };
import verifiableCredentialsRealm from "./realms/verifiable-credentials-realm.json" assert { type: "json" };
setup("import realm", async () => {
await importRealm(groupsRealm as RealmRepresentation);
await importRealm(resourcesRealm as RealmRepresentation);
await importRealm(userProfileRealm as RealmRepresentation);
await importRealm(verifiableCredentialsRealm as RealmRepresentation);
await Promise.allSettled([
deleteRealm(groupsRealm.realm),
deleteRealm(resourcesRealm.realm),
deleteRealm(userProfileRealm.realm),
deleteRealm(verifiableCredentialsRealm.realm),
]);
await Promise.all([
importRealm(groupsRealm),
importRealm(resourcesRealm as RealmRepresentation),
importRealm(userProfileRealm),
importRealm(verifiableCredentialsRealm as RealmRepresentation),
]);
});

View File

@ -1,9 +1,15 @@
import { test as setup } from "@playwright/test";
import { deleteRealm } from "./admin-client";
import groupsRealm from "./realms/groups-realm.json" assert { type: "json" };
import resourcesRealm from "./realms/resources-realm.json" assert { type: "json" };
import userProfileRealm from "./realms/user-profile-realm.json" assert { type: "json" };
import verifiableCredentialsRealm from "./realms/verifiable-credentials-realm.json" assert { type: "json" };
setup("delete realm", async () => {
await deleteRealm("photoz");
await deleteRealm("groups");
await deleteRealm("user-profile");
await deleteRealm("verifiable-credentials");
await Promise.all([
deleteRealm(groupsRealm.realm),
deleteRealm(resourcesRealm.realm),
deleteRealm(userProfileRealm.realm),
deleteRealm(verifiableCredentialsRealm.realm),
]);
});