keycloak-scim/js/apps/admin-ui/cypress/e2e/sessions_test.spec.ts
2024-10-17 10:49:05 +02:00

166 lines
4.7 KiB
TypeScript

import LoginPage from "../support/pages/LoginPage";
import SidebarPage from "../support/pages/admin-ui/SidebarPage";
import SessionsPage from "../support/pages/admin-ui/manage/sessions/SessionsPage";
import CommonPage from "../support/pages/CommonPage";
import ListingPage from "../support/pages/admin-ui/ListingPage";
import { keycloakBefore } from "../support/util/keycloak_hooks";
import PageObject from "../support/pages/admin-ui/components/PageObject";
import adminClient from "../support/util/AdminClient";
import { v4 as uuid } from "uuid";
const loginPage = new LoginPage();
const sidebarPage = new SidebarPage();
const sessionsPage = new SessionsPage();
const commonPage = new CommonPage();
const listingPage = new ListingPage();
const page = new PageObject();
describe("Sessions test", () => {
const admin = "admin";
const client = "security-admin-console";
beforeEach(() => {
loginPage.logIn();
keycloakBefore();
sidebarPage.goToSessions();
});
describe("Sessions list view", () => {
it("check item values", () => {
listingPage.searchItem(client, false);
commonPage
.tableUtils()
.checkRowItemExists(admin)
.checkRowItemExists(client)
.assertRowItemActionExist(admin, "Sign out");
});
it("go to item accessed clients link", () => {
listingPage.searchItem(client, false);
commonPage.tableUtils().clickRowItemLink(client);
});
});
describe("Offline sessions", () => {
const clientId = "offline-client-" + uuid();
const username = "user-" + uuid();
beforeEach(async () => {
await Promise.all([
adminClient.createClient({
protocol: "openid-connect",
clientId,
publicClient: false,
directAccessGrantsEnabled: true,
clientAuthenticatorType: "client-secret",
secret: "secret",
standardFlowEnabled: true,
}),
adminClient.createUser({
// Create user in master realm
username: username,
enabled: true,
credentials: [{ type: "password", value: "password" }],
}),
]);
await adminClient.auth({
username,
password: "password",
grantType: "password",
clientId,
clientSecret: "secret",
scopes: ["openid", "offline_access"],
});
});
after(() =>
Promise.all([
adminClient.deleteClient(clientId),
adminClient.deleteUser(username),
]),
);
it("check offline token", () => {
sidebarPage.waitForPageLoad();
listingPage.searchItem(clientId, false);
sidebarPage.waitForPageLoad();
// Now check that offline session exists (online one has been logged off above)
// and that it is possible to revoke it
commonPage
.tableUtils()
.checkRowItemExists(username)
.selectRowItemAction(username, "Revoke");
});
});
describe("Search", () => {
it("search existing session", () => {
listingPage.searchItem(admin, false);
listingPage.itemExist(admin, true);
page.assertEmptyStateExist(false);
});
it("search non-existant session", () => {
listingPage.searchItem("non-existant-session", false);
page.assertEmptyStateExist(true);
});
});
//TODO seems these tests are not stable on CI
describe.skip("revocation", () => {
it("Clear revocation notBefore", () => {
sessionsPage.clearNotBefore();
});
it("Check if notBefore cleared", () => {
sessionsPage.checkNotBeforeCleared();
});
it("Set revocation notBefore", () => {
sessionsPage.setToNow();
});
it("Check if notBefore saved", () => {
sessionsPage.checkNotBeforeValueExists();
});
it("Push when URI not configured", () => {
sessionsPage.pushRevocation();
commonPage
.masthead()
.checkNotificationMessage(
"No push sent. No admin URI configured or no registered cluster nodes available",
);
});
});
describe("Accessibility tests for sessions", () => {
beforeEach(() => {
loginPage.logIn();
keycloakBefore();
sidebarPage.goToSessions();
cy.injectAxe();
});
it("Check a11y violations on load/ sessions", () => {
cy.checkA11y();
});
it("Check a11y violations on revocation dialog", () => {
cy.findByTestId("action-dropdown").click();
cy.findByTestId("revocation").click();
cy.checkA11y();
cy.findByTestId("cancel").click();
});
it("Check a11y violations on sign out all active sessions dialog", () => {
cy.findByTestId("action-dropdown").click();
cy.findByTestId("logout-all").click();
cy.checkA11y();
cy.findByTestId("cancel").click();
});
});
});