keycloak-scim/cypress/integration/client_scopes_test.spec.ts

135 lines
4.1 KiB
TypeScript

import LoginPage from "../support/pages/LoginPage";
import Masthead from "../support/pages/admin_console/Masthead";
import ListingPage from "../support/pages/admin_console/ListingPage";
import SidebarPage from "../support/pages/admin_console/SidebarPage";
import CreateClientScopePage from "../support/pages/admin_console/manage/client_scopes/CreateClientScopePage";
import { keycloakBefore } from "../support/util/keycloak_hooks";
import RoleMappingTab from "../support/pages/admin_console/manage/RoleMappingTab";
import ModalUtils from "../support/util/ModalUtils";
import AdminClient from "../support/util/AdminClient";
let itemId = "client_scope_crud";
const loginPage = new LoginPage();
const masthead = new Masthead();
const sidebarPage = new SidebarPage();
const listingPage = new ListingPage();
const createClientScopePage = new CreateClientScopePage();
const modalUtils = new ModalUtils();
describe("Client Scopes test", () => {
describe("Client Scope list items ", () => {
const clientScopeName = "client-scope-test";
const clientScope = {
name: clientScopeName,
description: "",
protocol: "openid-connect",
attributes: {
"include.in.token.scope": "true",
"display.on.consent.screen": "true",
"gui.order": "1",
"consent.screen.text": "",
},
};
before(async () => {
const client = new AdminClient();
for (let i = 0; i < 5; i++) {
clientScope.name = clientScopeName + i;
await client.createClientScope(clientScope);
}
});
beforeEach(() => {
keycloakBefore();
loginPage.logIn();
sidebarPage.goToClientScopes();
});
after(async () => {
const client = new AdminClient();
for (let i = 0; i < 5; i++) {
await client.deleteClientScope(clientScopeName + i);
}
});
it("should show items on next page are more than 11", () => {
listingPage.showNextPageTableItems();
cy.get(listingPage.tableRowItem).its("length").should("be.gt", 1);
});
});
describe("Client Scope creation", () => {
beforeEach(() => {
keycloakBefore();
loginPage.logIn();
sidebarPage.goToClientScopes();
});
it("should fail creating client scope", () => {
listingPage.goToCreateItem();
createClientScopePage.save().checkClientNameRequiredMessage();
createClientScopePage
.fillClientScopeData("address")
.save()
.checkClientNameRequiredMessage(false);
// The error should inform about duplicated name/id
masthead.checkNotificationMessage(
"Could not create client scope: 'Client Scope address already exists'"
);
});
it("Client scope CRUD test", () => {
itemId += "_" + (Math.random() + 1).toString(36).substring(7);
// Create
listingPage.itemExist(itemId, false).goToCreateItem();
createClientScopePage.fillClientScopeData(itemId).save();
masthead.checkNotificationMessage("Client scope created");
sidebarPage.goToClientScopes();
sidebarPage.waitForPageLoad();
// Delete
listingPage
.searchItem(itemId, false)
.itemExist(itemId)
.deleteItem(itemId);
modalUtils
.checkModalMessage("Are you sure you want to delete this client scope")
.confirmModal();
masthead.checkNotificationMessage("The client scope has been deleted");
listingPage.itemExist(itemId, false);
});
});
describe("Scope test", () => {
const scopeTab = new RoleMappingTab();
const scopeName = "address";
beforeEach(() => {
keycloakBefore();
loginPage.logIn();
sidebarPage.goToClientScopes();
});
it("Assign role", () => {
const role = "offline_access";
listingPage.searchItem(scopeName, false).goToItemDetails(scopeName);
scopeTab.goToScopeTab().clickAssignRole().selectRow(role).clickAssign();
masthead.checkNotificationMessage("Role mapping updated");
scopeTab.checkRoles([role]);
scopeTab.hideInheritedRoles().selectRow(role).clickUnAssign();
modalUtils.checkModalTitle("Remove mapping?").confirmModal();
scopeTab.checkRoles([]);
});
});
});