Refactor & new events tests (#2666)

This commit is contained in:
ikhomyn 2022-05-19 15:43:48 +02:00 committed by GitHub
parent a31e9f748b
commit 8b08a43af1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 1380 additions and 203 deletions

View file

@ -1,20 +1,90 @@
import LoginPage from "../support/pages/LoginPage"; import LoginPage from "../support/pages/LoginPage";
import SidebarPage from "../support/pages/admin_console/SidebarPage"; import SidebarPage from "../support/pages/admin_console/SidebarPage";
import UserEventsTab from "../support/pages/admin_console/manage/events/UserEventsTab"; import UserEventsTab, {
import AdminEventsTab from "../support/pages/admin_console/manage/events/AdminEventsTab"; UserEventSearchData,
} from "../support/pages/admin_console/manage/events/tabs/UserEventsTab";
import AdminEventsTab from "../support/pages/admin_console/manage/events/tabs/AdminEventsTab";
import RealmSettingsPage from "../support/pages/admin_console/manage/realm_settings/RealmSettingsPage"; import RealmSettingsPage from "../support/pages/admin_console/manage/realm_settings/RealmSettingsPage";
import Masthead from "../support/pages/admin_console/Masthead"; import Masthead from "../support/pages/admin_console/Masthead";
import { keycloakBefore } from "../support/util/keycloak_hooks"; import { keycloakBefore } from "../support/util/keycloak_hooks";
import EventsPage, {
EventsTab,
} from "../support/pages/admin_console/manage/events/EventsPage";
import ListingPage from "../support/pages/admin_console/ListingPage";
import adminClient from "../support/util/AdminClient";
const loginPage = new LoginPage(); const loginPage = new LoginPage();
const sidebarPage = new SidebarPage(); const sidebarPage = new SidebarPage();
const userEventsTab = new UserEventsTab(); const userEventsTab = new UserEventsTab();
const eventsPage = new EventsPage();
const adminEventsTab = new AdminEventsTab(); const adminEventsTab = new AdminEventsTab();
const realmSettingsPage = new RealmSettingsPage(); const realmSettingsPage = new RealmSettingsPage();
const masthead = new Masthead(); const masthead = new Masthead();
const listingPage = new ListingPage();
const dateFrom = new Date();
dateFrom.setDate(dateFrom.getDate() - 100);
const dateFromFormatted = `${dateFrom.getFullYear()}-${dateFrom.getMonth()}-${dateFrom.getDay()}`;
const dateTo = new Date();
dateTo.setDate(dateTo.getDate() + 100);
const dateToFormatted = `${dateTo.getFullYear()}-${dateTo.getMonth()}-${dateTo.getDay()}`;
describe("Events tests", () => { describe("Events tests", () => {
describe.skip("Search user events", () => { const eventsTestUser = {
eventsTestUserId: "",
userRepresentation: {
username: "events-test",
enabled: true,
credentials: [{ value: "events-test" }],
},
};
const eventsTestUserClientId = "admin-cli";
before(async () => {
const result = await adminClient.createUser(
eventsTestUser.userRepresentation
);
eventsTestUser.eventsTestUserId = result.id;
});
after(() =>
adminClient.deleteUser(eventsTestUser.userRepresentation.username)
);
describe("User events list", () => {
beforeEach(() => {
keycloakBefore();
loginPage.logIn();
sidebarPage.goToEvents();
});
it("Show empty when no save events", () => {
sidebarPage.goToRealmSettings();
realmSettingsPage
.goToEventsTab()
.goToUserEventsSettingsSubTab()
.enableSaveEventsSwitch()
.save()
.clearUserEvents();
sidebarPage.goToEvents();
eventsPage.goToUserEventsTab();
userEventsTab.assertNoSearchResultsExist(true);
});
it("Expand item to see more information", () => {
listingPage.expandRow(0).assertExpandedRowContainText(0, "code_id");
});
});
describe("Search user events list", () => {
const eventTypes = [
"LOGOUT",
"CODE_TO_TOKEN",
"CODE_TO_TOKEN_ERROR",
"LOGIN_ERROR",
"LOGIN",
];
beforeEach(() => { beforeEach(() => {
keycloakBefore(); keycloakBefore();
loginPage.logIn(); loginPage.logIn();
@ -23,43 +93,263 @@ describe("Events tests", () => {
it("Check search dropdown display", () => { it("Check search dropdown display", () => {
sidebarPage.goToRealmSettings(); sidebarPage.goToRealmSettings();
cy.findByTestId("rs-realm-events-tab").click();
cy.findByTestId("rs-events-tab").click();
realmSettingsPage realmSettingsPage
.toggleSwitch(realmSettingsPage.enableEvents) .goToEventsTab()
.save(realmSettingsPage.eventsUserSave); .goToUserEventsSettingsSubTab()
.disableSaveEventsSwitch()
.save();
masthead.signOut(); masthead.signOut();
loginPage.logIn(); loginPage.logIn();
sidebarPage.goToEvents(); sidebarPage.goToEvents();
eventsPage.tabUtils().checkIsCurrentTab(EventsTab.UserEvents);
userEventsTab.shouldDisplay(); userEventsTab.assertSearchUserEventDropdownMenuExist(true);
}); });
it("Check user events search form fields display", () => { it("Check user events search form fields display", () => {
userEventsTab.shouldHaveFormFields(); userEventsTab
.openSearchUserEventDropdownMenu()
.assertUserSearchDropdownMenuHasLabels();
}); });
it("Check event type dropdown options exist", () => { it("Check event type dropdown options exist", () => {
userEventsTab.shouldHaveEventTypeOptions(); userEventsTab
.openSearchUserEventDropdownMenu()
.openEventTypeSelectMenu()
.clickEventTypeSelectItem(eventTypes[0])
.clickEventTypeSelectItem(eventTypes[1])
.clickEventTypeSelectItem(eventTypes[2])
.clickEventTypeSelectItem(eventTypes[3])
.closeEventTypeSelectMenu();
}); });
it("Check `search events` button disabled by default", () => { it("Check `search events` button disabled by default", () => {
userEventsTab.shouldHaveSearchBtnDisabled(); userEventsTab
.openSearchUserEventDropdownMenu()
.assertSearchEventBtnIsEnabled(false);
}); });
it.skip("Check user events search and removal work", () => { it("Check user events search and removal work", () => {
userEventsTab.shouldDoSearchAndRemoveChips(); userEventsTab
.searchUserEventByEventType([eventTypes[0]])
.assertEventTypeChipGroupItemExist(eventTypes[0], true)
.assertEventTypeChipGroupItemExist(eventTypes[1], false)
.assertEventTypeChipGroupItemExist(eventTypes[2], false)
.assertEventTypeChipGroupItemExist(eventTypes[3], false)
.assertNoSearchResultsExist(true)
.removeEventTypeChipGroupItem(eventTypes[0])
.assertEventTypeChipGroupExist(false);
}); });
it("Check for no events logged", () => { it("Check for no events logged", () => {
userEventsTab.shouldDoNoResultsSearch(); userEventsTab
.searchUserEventByUserId("test")
.assertNoSearchResultsExist(true);
}); });
it("Check `search events` button enabled", () => { it("Check `search events` button enabled", () => {
userEventsTab.shouldHaveSearchBtnEnabled(); userEventsTab
.openSearchUserEventDropdownMenu()
.assertSearchEventBtnIsEnabled(false)
.typeUserId("11111")
.assertSearchEventBtnIsEnabled(true);
});
it("Search by user ID", () => {
sidebarPage.goToRealmSettings();
realmSettingsPage
.goToEventsTab()
.goToUserEventsSettingsSubTab()
.enableSaveEventsSwitch()
.save();
sidebarPage.goToEvents();
cy.wrap(null).then(() =>
adminClient.loginUser(
eventsTestUser.userRepresentation.username,
eventsTestUser.userRepresentation.credentials[0].value,
eventsTestUserClientId
)
);
userEventsTab
.searchUserEventByUserId(eventsTestUser.eventsTestUserId)
.assertUserIdChipGroupExist(true)
.assertEventTypeChipGroupExist(false)
.assertClientChipGroupExist(false)
.assertDateFromChipGroupExist(false)
.assertDateToChipGroupExist(false);
listingPage.itemsGreaterThan(0);
});
it("Search by event type", () => {
userEventsTab
.searchUserEventByEventType([eventTypes[4]])
.assertUserIdChipGroupExist(false)
.assertEventTypeChipGroupExist(true)
.assertClientChipGroupExist(false)
.assertDateFromChipGroupExist(false)
.assertDateToChipGroupExist(false);
listingPage.itemsGreaterThan(0);
});
it("Search by client", () => {
userEventsTab
.searchUserEventByClient(eventsTestUserClientId)
.assertUserIdChipGroupExist(false)
.assertEventTypeChipGroupExist(false)
.assertClientChipGroupExist(true)
.assertDateFromChipGroupExist(false)
.assertDateToChipGroupExist(false);
listingPage.itemsGreaterThan(0);
});
it("Search by date from", () => {
userEventsTab
.searchUserEventByDateFrom(dateFromFormatted)
.assertUserIdChipGroupExist(false)
.assertEventTypeChipGroupExist(false)
.assertClientChipGroupExist(false)
.assertDateFromChipGroupExist(true)
.assertDateToChipGroupExist(false);
listingPage.itemsGreaterThan(0);
});
it("Search by dato to", () => {
userEventsTab
.searchUserEventByDateTo(dateToFormatted)
.assertUserIdChipGroupExist(false)
.assertEventTypeChipGroupExist(false)
.assertClientChipGroupExist(false)
.assertDateFromChipGroupExist(false)
.assertDateToChipGroupExist(true);
listingPage.itemsGreaterThan(0);
});
it("Search by all elements", () => {
const searchData = new UserEventSearchData();
searchData.client = eventsTestUserClientId;
searchData.userId = eventsTestUser.eventsTestUserId;
searchData.eventType = [eventTypes[4]];
searchData.dateFrom = dateFromFormatted;
searchData.dateTo = dateToFormatted;
userEventsTab
.searchUserEvent(searchData)
.assertUserIdChipGroupExist(true)
.assertEventTypeChipGroupExist(true)
.assertClientChipGroupExist(true)
.assertDateFromChipGroupExist(true)
.assertDateToChipGroupExist(true);
listingPage.itemsGreaterThan(0);
});
});
describe("Admin events list", () => {
beforeEach(() => {
keycloakBefore();
loginPage.logIn();
sidebarPage.goToEvents();
eventsPage.goToAdminEventsTab();
});
it("Show events", () => {
sidebarPage.goToRealmSettings();
realmSettingsPage
.goToEventsTab()
.goToAdminEventsSettingsSubTab()
.enableSaveEvents()
.save();
sidebarPage.goToEvents();
eventsPage.goToAdminEventsTab();
listingPage.itemsGreaterThan(0);
});
it("Show empty when no save events", () => {
sidebarPage.goToRealmSettings();
realmSettingsPage
.goToEventsTab()
.goToAdminEventsSettingsSubTab()
.disableSaveEvents()
.save()
.clearAdminEvents();
sidebarPage.goToEvents();
eventsPage.goToAdminEventsTab();
adminEventsTab.assertNoSearchResultsExist(true);
});
});
describe("Search admin events list", () => {
const resourceTypes = ["REALM"];
const operationTypes = ["UPDATE"];
beforeEach(() => {
keycloakBefore();
loginPage.logIn();
sidebarPage.goToEvents();
eventsPage.goToAdminEventsTab();
});
it("Search by resource types", () => {
sidebarPage.goToRealmSettings();
realmSettingsPage
.goToEventsTab()
.goToAdminEventsSettingsSubTab()
.enableSaveEvents()
.save();
sidebarPage.goToEvents();
eventsPage.goToAdminEventsTab();
adminEventsTab
.searchAdminEventByResourceTypes([resourceTypes[0]])
.assertResourceTypesChipGroupExist(true);
listingPage.itemsGreaterThan(0);
});
it("Search by operation types", () => {
adminEventsTab
.searchAdminEventByOperationTypes([operationTypes[0]])
.assertOperationTypesChipGroupExist(true);
listingPage.itemsGreaterThan(0);
});
it("Search by resource path", () => {
adminEventsTab
.searchAdminEventByResourcePath("test")
.assertResourcePathChipGroupExist(true);
});
it("Search by realm", () => {
adminEventsTab
.searchAdminEventByRealm("master")
.assertRealmChipGroupExist(true);
});
it("Search by client", () => {
adminEventsTab
.searchAdminEventByClient("admin-cli")
.assertClientChipGroupExist(true);
});
it("Search by user ID", () => {
adminEventsTab
.searchAdminEventByUser("test")
.assertUserChipGroupExist(true);
});
it("Search by IP address", () => {
adminEventsTab
.searchAdminEventByIpAddress("test")
.assertIpAddressChipGroupExist(true);
});
it("Search by date from", () => {
adminEventsTab
.searchAdminEventByDateTo(dateToFormatted)
.assertDateToChipGroupExist(true);
});
it("Search by date to", () => {
adminEventsTab
.searchAdminEventByDateFrom(dateFromFormatted)
.assertDateFromChipGroupExist(true);
}); });
}); });
@ -68,40 +358,50 @@ describe("Events tests", () => {
keycloakBefore(); keycloakBefore();
loginPage.logIn(); loginPage.logIn();
sidebarPage.goToEvents(); sidebarPage.goToEvents();
cy.findByTestId("admin-events-tab").click(); eventsPage.goToAdminEventsTab();
}); });
it("Check admin events search form fields display", () => { it("Check admin events search form fields display", () => {
sidebarPage.goToRealmSettings(); sidebarPage.goToRealmSettings();
cy.findByTestId("rs-realm-events-tab").click();
cy.findByTestId("rs-admin-events-tab").click();
realmSettingsPage realmSettingsPage
.toggleSwitch(realmSettingsPage.enableAdminEvents) .goToEventsTab()
.save(realmSettingsPage.eventsAdminSave); .goToAdminEventsSettingsSubTab()
.disableSaveEvents()
.save();
sidebarPage.goToEvents(); sidebarPage.goToEvents();
cy.findByTestId("admin-events-tab").click(); eventsPage.goToAdminEventsTab();
sidebarPage.waitForPageLoad(); adminEventsTab
adminEventsTab.shouldHaveFormFields(); .openSearchAdminEventDropdownMenu()
.assertAdminSearchDropdownMenuHasLabels();
}); });
it("Check `search admin events` button disabled by default", () => { it("Check `search admin events` button disabled by default", () => {
adminEventsTab.shouldHaveSearchBtnDisabled(); adminEventsTab
.openSearchAdminEventDropdownMenu()
.assertSearchAdminBtnEnabled(false);
}); });
it("Check admin events search and removal work", () => { it("Check admin events search and removal work", () => {
sidebarPage.goToEvents(); sidebarPage.goToEvents();
cy.findByTestId("admin-events-tab").click(); eventsPage
adminEventsTab.shouldDoAdminEventsSearchAndRemoveChips(); .goToAdminEventsTab()
.searchAdminEventByResourcePath("events/config")
.assertResourcePathChipGroupItemExist("events/config", true)
.removeResourcePathChipGroup();
listingPage.itemContainValue("UPDATE", 3, "UPDATE");
}); });
it("Check for no events logged", () => { it("Check for no events logged", () => {
adminEventsTab.shouldDoNoResultsSearch(); adminEventsTab
.searchAdminEventByResourcePath("events/test")
.assertNoSearchResultsExist(true);
}); });
it("Check `search admin events` button enabled", () => { it("Check `search admin events` button enabled", () => {
adminEventsTab.shouldHaveSearchBtnEnabled(); adminEventsTab
.openSearchAdminEventDropdownMenu()
.typeIpAddress("11111")
.assertSearchAdminBtnEnabled(true);
}); });
}); });
@ -110,16 +410,17 @@ describe("Events tests", () => {
keycloakBefore(); keycloakBefore();
loginPage.logIn(); loginPage.logIn();
sidebarPage.goToEvents(); sidebarPage.goToEvents();
cy.findByTestId("admin-events-tab").click(); eventsPage.goToAdminEventsTab();
}); });
it("Check auth dialog opens and is not empty", () => { it("Check auth dialog opens and is not empty", () => {
adminEventsTab.shouldCheckAuthDialogOpensAndIsNotEmpty(); listingPage.clickRowDetails("UPDATE").clickDetailMenu("Auth");
adminEventsTab.assertAuthDialogIsNotEmpty();
}); });
it("Check representation dialog opens and is not empty", () => { it("Check representation dialog opens and is not empty", () => {
sidebarPage.waitForPageLoad(); listingPage.clickRowDetails("UPDATE").clickDetailMenu("Representation");
adminEventsTab.shouldCheckRepDialogOpensAndIsNotEmpty(); adminEventsTab.assertRepresentationDialogIsNotEmpty();
}); });
}); });
}); });

View file

@ -26,6 +26,11 @@ export default class CommonElements {
this.parentSelector + ".pf-c-select__menu > li"; this.parentSelector + ".pf-c-select__menu > li";
} }
clickPrimaryBtn() {
cy.get(this.primaryBtn).click();
return this;
}
clickSecondaryBtn(buttonName: string) { clickSecondaryBtn(buttonName: string) {
cy.get(this.secondaryBtn).contains(buttonName).click(); cy.get(this.secondaryBtn).contains(buttonName).click();
return this; return this;

View file

@ -60,6 +60,7 @@ export default class ListingPage extends CommonElements {
private changeTypeToButton = ".pf-c-select__toggle"; private changeTypeToButton = ".pf-c-select__toggle";
private toolbarChangeType = "#change-type-dropdown"; private toolbarChangeType = "#change-type-dropdown";
private tableNameColumnPrefix = "name-column-"; private tableNameColumnPrefix = "name-column-";
private rowGroup = "table:visible tbody[role='rowgroup']";
showPreviousPageTableItems() { showPreviousPageTableItems() {
cy.get(this.previousPageBtn).first().click(); cy.get(this.previousPageBtn).first().click();
@ -371,4 +372,36 @@ export default class ListingPage extends CommonElements {
this.getResourceLink(name).should("exist"); this.getResourceLink(name).should("exist");
return this; return this;
} }
private getRowGroup(index = 0) {
return cy.get(this.rowGroup).eq(index);
}
expandRow(index = 0) {
this.getRowGroup(index)
.find("[class='pf-c-button pf-m-plain'][id*='expandable']")
.click();
return this;
}
collapseRow(index = 0) {
this.getRowGroup(index)
.find("[class='pf-c-button pf-m-plain pf-m-expanded'][id*='expandable']")
.click();
return this;
}
assertExpandedRowContainText(index = 0, text: string) {
this.getRowGroup(index)
.find("tr[class='pf-c-table__expandable-row pf-m-expanded']")
.should("contain.text", text);
return this;
}
assertRowIsExpanded(index = 0, isExpanded: boolean) {
this.getRowGroup(index)
.find("[class='pf-c-button pf-m-plain pf-m-expanded'][id*='expandable']")
.should((!isExpanded ? "not." : "") + "exist");
return this;
}
} }

View file

@ -0,0 +1,320 @@
export default class PageObject {
private selectItemSelectedIcon = ".pf-c-select__menu-item-icon";
private drpDwnMenuList = ".pf-c-dropdown__menu";
private drpDwnMenuItem = ".pf-c-dropdown__menu-item";
private drpDwnMenuToggleBtn = ".pf-c-dropdown__toggle";
private selectMenuList = ".pf-c-select__menu";
private selectMenuItem = ".pf-c-select__menu-item";
private selectMenuToggleBtn = ".pf-c-select__toggle";
private switchInput = ".pf-c-switch__input";
private formLabel = ".pf-c-form__label";
private chipGroup = ".pf-c-chip-group";
private chipGroupCloseBtn = ".pf-c-chip-group__close";
private chipItem = ".pf-c-chip-group__list-item";
protected assertExist(element: Cypress.Chainable<JQuery>, exist: boolean) {
element.should((!exist ? "not." : "") + "exist");
return this;
}
protected assertIsVisible(
element: Cypress.Chainable<JQuery>,
isVisible: boolean
) {
element.should((!isVisible ? "not." : "") + "be.visible");
return this;
}
protected assertIsEnabled(
element: Cypress.Chainable<JQuery>,
isEnabled = true
) {
element.then(($btn) => {
if ($btn.hasClass("pf-m-disabled")) {
element.should(
(isEnabled ? "not." : "") + "have.class",
"pf-m-disabled"
);
} else {
element.should((isEnabled ? "not." : "") + "have.attr", "disabled");
}
});
return this;
}
protected assertIsDisabled(element: Cypress.Chainable<JQuery>) {
return this.assertIsEnabled(element, false);
}
protected assertHaveText(element: Cypress.Chainable<JQuery>, text: string) {
element.should("have.text", text);
return this;
}
protected assertHaveValue(element: Cypress.Chainable<JQuery>, value: string) {
element.should("have.value", value);
return this;
}
protected assertSwitchStateOn(
element?: Cypress.Chainable<JQuery>,
isOn = true
) {
(element ?? cy.get(this.switchInput))
.parent()
.contains(isOn ? "On" : "Off")
.should("be.visible");
return this;
}
protected assertSwitchStateOff(element?: Cypress.Chainable<JQuery>) {
return this.assertSwitchStateOn(element, false);
}
protected assertDropdownMenuIsOpen(
isOpen = true,
element?: Cypress.Chainable<JQuery>
) {
this.assertExist(element ?? cy.get(this.drpDwnMenuList), isOpen);
return this;
}
protected assertDropdownMenuIsClosed(element?: Cypress.Chainable<JQuery>) {
return this.assertDropdownMenuIsOpen(
false,
element ?? cy.get(this.drpDwnMenuList)
);
}
protected clickDropdownMenuItem(
itemName: string,
element?: Cypress.Chainable<JQuery>
) {
(element ?? cy.get(this.drpDwnMenuItem)).contains(itemName).click();
return this;
}
protected clickDropdownMenuToggleButton(
itemName: string,
element?: Cypress.Chainable<JQuery>
) {
element =
element ??
cy.get(this.drpDwnMenuToggleBtn).contains(itemName).parent().parent();
element.click();
return this;
}
protected openDropdownMenu(
itemName: string,
element?: Cypress.Chainable<JQuery>
) {
element =
element ??
cy.get(this.drpDwnMenuToggleBtn).contains(itemName).parent().parent();
this.clickDropdownMenuToggleButton(itemName, element);
this.assertDropdownMenuIsOpen(true);
return this;
}
protected closeDropdownMenu(
itemName: string,
element?: Cypress.Chainable<JQuery>
) {
element =
element ??
cy.get(this.drpDwnMenuToggleBtn).contains(itemName).parent().parent();
this.clickDropdownMenuToggleButton(itemName, element);
this.assertDropdownMenuIsOpen(false);
return this;
}
protected assertDropdownMenuItemIsSelected(
itemName: string,
isSelected: boolean,
element?: Cypress.Chainable<JQuery>
) {
element = element ?? cy.get(this.drpDwnMenuItem);
this.assertExist(
element.contains(itemName).find(this.selectItemSelectedIcon),
isSelected
);
return this;
}
protected assertDropdownMenuHasItems(
items: string[],
element?: Cypress.Chainable<JQuery>
) {
const initialElement = element;
for (const item of items) {
element = initialElement ?? cy.get(this.drpDwnMenuList);
this.assertExist(element.find(this.drpDwnMenuItem).contains(item), true);
}
return this;
}
protected assertDropdownMenuHasLabels(
items: string[],
element?: Cypress.Chainable<JQuery>
) {
const initialElement = element;
for (const item of items) {
element = initialElement ?? cy.get(this.drpDwnMenuList);
this.assertExist(element.find(this.formLabel).contains(item), true);
}
return this;
}
protected assertDropdownMenuItemsEqualTo(
number: number,
element?: Cypress.Chainable<JQuery>
) {
element = element ?? cy.get(this.drpDwnMenuList);
element.find(this.drpDwnMenuItem).should(($item) => {
expect($item).to.have.length(number);
});
return this;
}
protected assertSelectMenuIsOpen(
isOpen = true,
element?: Cypress.Chainable<JQuery>
) {
element = element ?? cy.get(this.selectMenuList);
return this.assertDropdownMenuIsOpen(isOpen, element);
}
protected assertSelectMenuIsClosed(element?: Cypress.Chainable<JQuery>) {
element = element ?? cy.get(this.selectMenuList);
return this.assertDropdownMenuIsClosed(element);
}
protected clickSelectMenuItem(
itemName: string,
element?: Cypress.Chainable<JQuery>
) {
element = element ?? cy.get(this.selectMenuItem);
return this.clickDropdownMenuItem(itemName, element);
}
protected clickSelectMenuToggleButton(
itemName: string,
element?: Cypress.Chainable<JQuery>
) {
element =
element ??
cy.get(this.selectMenuToggleBtn).contains(itemName).parent().parent();
return this.clickDropdownMenuToggleButton(itemName, element);
}
protected openSelectMenu(itemName: string, element?: Cypress.Chainable<any>) {
element =
element ??
cy.get(this.selectMenuToggleBtn).contains(itemName).parent().parent();
this.clickDropdownMenuToggleButton(itemName, element);
this.assertSelectMenuIsOpen(true);
return this;
}
protected closeSelectMenu(
itemName: string,
element?: Cypress.Chainable<JQuery>
) {
element =
element ??
cy.get(this.selectMenuToggleBtn).contains(itemName).parent().parent();
this.clickDropdownMenuToggleButton(itemName, element);
this.assertSelectMenuIsOpen(false);
return this;
}
protected assertSelectMenuItemIsSelected(
itemName: string,
isSelected: boolean,
element?: Cypress.Chainable<JQuery>
) {
element = element ?? cy.get(this.selectMenuItem);
return this.assertDropdownMenuItemIsSelected(itemName, isSelected, element);
}
protected assertSelectMenuHasItems(
items: string[],
element?: Cypress.Chainable<JQuery>
) {
const initialElement = element;
for (const item of items) {
element = initialElement ?? cy.get(this.selectMenuList);
this.assertExist(element.find(this.selectMenuItem).contains(item), true);
}
return this;
}
protected assertSelectMenuItemsEqualTo(
number: number,
element?: Cypress.Chainable<JQuery>
) {
element = element ?? cy.get(this.selectMenuList);
element.find(this.selectMenuItem).should(($item) => {
expect($item).to.have.length(number);
});
return this;
}
private getChipGroup(groupName: string) {
return cy.get(this.chipGroup).contains(groupName).parent().parent();
}
private getChipItem(itemName: string) {
return cy.get(this.chipItem).contains(itemName).parent();
}
private getChipGroupItem(groupName: string, itemName: string) {
return this.getChipGroup(groupName)
.find(this.chipItem)
.contains(itemName)
.parent();
}
protected removeChipGroup(groupName: string) {
this.getChipGroup(groupName)
.find(this.chipGroupCloseBtn)
.find("button")
.click();
return this;
}
protected removeChipItem(itemName: string) {
this.getChipItem(itemName).find("button").click();
return this;
}
protected removeChipGroupItem(groupName: string, itemName: string) {
this.getChipGroupItem(groupName, itemName).find("button").click();
return this;
}
protected assertChipGroupExist(groupName: string, exist: boolean) {
this.assertExist(cy.contains(this.chipGroup, groupName), exist);
return this;
}
protected assertChipItemExist(itemName: string, exist: boolean) {
cy.get(this.chipItem).within(() => {
cy.contains(itemName).should((exist ? "" : "not.") + "exist");
});
return this;
}
protected assertChipGroupItemExist(
groupName: string,
itemName: string,
exist: boolean
) {
this.assertExist(
this.getChipGroup(groupName).contains(this.chipItem, itemName),
exist
);
return this;
}
}

View file

@ -1,90 +0,0 @@
export default class AdminEventsTab {
searchAdminEventDrpDwn = ".pf-c-dropdown__toggle";
searchAdminEventDrpDwnBtn = "adminEventsSearchSelectorToggle";
searchForm = ".pf-c-dropdown__menu";
resourceTypesDrpDwnFld = "resource-types-searchField";
operationTypesDrpDwnFld = "operation-types-searchField";
resourcePathInputFld = "resourcePath-searchField";
userInputFld = "user-searchField";
realmInputFld = "realm-searchField";
ipAddressInputFld = "ipAddress-searchField";
dateFromInputFld = "dateFrom-searchField";
dateToInputFld = "dateTo-searchField";
searchEventsBtn = "search-events-btn";
operationTypesList = ".pf-c-form-control";
operationTypesOption = ".pf-c-select__menu-item";
operationTypesInputFld = ".pf-c-form-control.pf-c-select__toggle-typeahead";
operationTypesBtn = ".pf-c-button.pf-c-select__toggle-button.pf-m-plain";
adminEventsTabTitle = ".pf-c-title";
moreBtn = ".pf-c-dropdown__toggle.pf-m-plain";
moreDrpDwnItems = ".pf-c-dropdown__menu";
dialogTitle = ".pf-c-modal-box__title-text";
dialogClose = `[aria-label="Close"]`;
authAttrDataRow = 'tbody > tr > [data-label="Attribute"]';
authValDataRow = 'tbody > tr > [data-label="Value"]';
shouldHaveFormFields() {
cy.findByTestId(this.searchAdminEventDrpDwnBtn).click();
cy.get(this.searchForm).contains("Resource types");
cy.get(this.searchForm).contains("Operation types");
cy.get(this.searchForm).contains("Resource path");
cy.get(this.searchForm).contains("User");
cy.get(this.searchForm).contains("Realm");
cy.get(this.searchForm).contains("IP address");
cy.get(this.searchForm).contains("Date(from)");
cy.get(this.searchForm).contains("Date(to)");
cy.get(this.searchForm).contains("Search admin events");
}
shouldHaveSearchBtnDisabled() {
cy.findByTestId(this.searchAdminEventDrpDwnBtn).click();
cy.findByTestId(this.searchEventsBtn).should("have.attr", "disabled");
}
shouldDoAdminEventsSearchAndRemoveChips() {
cy.findByTestId(this.searchAdminEventDrpDwnBtn).click();
cy.findByTestId(this.resourcePathInputFld).type("events/config");
cy.intercept("/admin/realms/master/admin-events*").as("eventsFetch");
cy.findByTestId(this.searchEventsBtn).click();
cy.wait("@eventsFetch");
cy.get("table").contains("td", "events/config").should("be.visible");
cy.get("[id^=remove_group]").click();
cy.wait("@eventsFetch");
cy.get("table").should("be.visible").contains("td", "UPDATE");
}
shouldHaveSearchBtnEnabled() {
cy.findByTestId(this.searchAdminEventDrpDwnBtn).click();
cy.findByTestId(this.ipAddressInputFld).type("11111");
cy.findByTestId(this.searchEventsBtn).should("not.have.attr", "disabled");
}
shouldDoNoResultsSearch() {
cy.findByTestId(this.searchAdminEventDrpDwnBtn).click();
cy.findByTestId(this.resourcePathInputFld).type("events/test");
cy.findByTestId(this.searchEventsBtn).click();
cy.get(this.adminEventsTabTitle).contains("No search results");
}
shouldCheckAuthDialogOpensAndIsNotEmpty() {
cy.get(this.moreBtn).last().click();
cy.get(this.moreDrpDwnItems).contains("Auth").click();
cy.get(this.dialogTitle).contains("Auth");
cy.get(this.authAttrDataRow).contains("Realm");
cy.get(this.authAttrDataRow).contains("Client");
cy.get(this.authAttrDataRow).contains("User");
cy.get(this.authAttrDataRow).contains("IP address");
cy.get(this.authValDataRow).should("exist");
cy.get(this.dialogClose).click();
}
shouldCheckRepDialogOpensAndIsNotEmpty() {
cy.get(this.moreBtn).last().click();
cy.get(this.moreDrpDwnItems).contains("Representation").click();
cy.get(this.dialogTitle).contains("Representation");
cy.get(this.dialogClose).click();
}
}

View file

@ -0,0 +1,23 @@
import CommonPage from "../../../CommonPage";
import UserEventsTab from "./tabs/UserEventsTab";
import AdminEventsTab from "./tabs/AdminEventsTab";
export enum EventsTab {
UserEvents = "User events",
AdminEvents = "Admin events",
}
export default class EventsPage extends CommonPage {
private userEventsTab = new UserEventsTab();
private adminEventsTab = new AdminEventsTab();
goToUserEventsTab() {
this.tabUtils().clickTab(EventsTab.UserEvents);
return this.userEventsTab;
}
goToAdminEventsTab() {
this.tabUtils().clickTab(EventsTab.AdminEvents);
return this.adminEventsTab;
}
}

View file

@ -1,73 +0,0 @@
export default class UserEventsTab {
searchEventDrpDwn = ".pf-c-dropdown__toggle";
searchEventDrpDwnBtn = "userEventsSearchSelectorToggle";
searchForm = ".pf-c-dropdown__menu";
userIdInputFld = "userId-searchField";
eventTypeDrpDwnFld = "event-type-searchField";
clientInputFld = "client-searchField";
dateFromInputFld = "dateFrom-searchField";
dateToInputFld = "dateTo-searchField";
searchEventsBtn = "search-events-btn";
eventTypeList = ".pf-c-form-control";
eventTypeOption = ".pf-c-select__menu-item";
eventTypeInputFld = ".pf-c-form-control.pf-c-select__toggle-typeahead";
eventTypeBtn = ".pf-c-button.pf-c-select__toggle-button.pf-m-plain";
userEventsTabTitle = ".pf-c-title";
shouldDisplay() {
cy.get(this.searchEventDrpDwn).should("exist");
}
shouldHaveFormFields() {
cy.findByTestId(this.searchEventDrpDwnBtn).click();
cy.get(this.searchForm).contains("User ID");
cy.get(this.searchForm).contains("Event type");
cy.get(this.searchForm).contains("Client");
cy.get(this.searchForm).contains("Date(from)");
cy.get(this.searchForm).contains("Date(to)");
cy.get(this.searchForm).contains("Search events");
}
shouldHaveEventTypeOptions() {
cy.findByTestId(this.searchEventDrpDwnBtn).click();
cy.get(this.eventTypeList).should("exist");
}
shouldHaveSearchBtnDisabled() {
cy.findByTestId(this.searchEventDrpDwnBtn).click();
cy.findByTestId(this.searchEventsBtn).should("have.attr", "disabled");
}
shouldDoSearchAndRemoveChips() {
cy.findByTestId(this.searchEventDrpDwnBtn).click();
cy.get(this.eventTypeInputFld).type("LOGOUT");
cy.get(this.eventTypeOption).contains("LOGOUT").click();
cy.intercept("/admin/realms/master/events*").as("eventsFetch");
cy.findByTestId(this.searchEventsBtn).click();
cy.wait("@eventsFetch");
cy.get("table").contains("td", "LOGOUT");
cy.get("table").should("not.have.text", "CODE_TO_TOKEN");
cy.get("table").should("not.have.text", "CODE_TO_TOKEN_ERROR");
cy.get("table").should("not.have.text", "LOGIN_ERROR");
cy.get("table").should("not.have.text", "LOGOUT");
cy.get("[id^=remove_group]").click();
cy.wait("@eventsFetch");
cy.get("table").should("not.contain", "LOGOUT");
}
shouldHaveSearchBtnEnabled() {
cy.findByTestId(this.searchEventDrpDwnBtn).click();
cy.findByTestId(this.userIdInputFld).type("11111");
cy.findByTestId(this.searchEventsBtn).should("not.have.attr", "disabled");
}
shouldDoNoResultsSearch() {
cy.findByTestId(this.searchEventDrpDwnBtn).click();
cy.findByTestId(this.userIdInputFld).type("test");
cy.findByTestId(this.searchEventsBtn).click();
cy.get(this.userEventsTabTitle).contains("No search results");
}
}

View file

@ -0,0 +1,307 @@
import ModalUtils from "../../../../../util/ModalUtils";
import EmptyStatePage from "../../../components/EmptyStatePage";
import PageObject from "../../../components/PageObject";
enum AdminEventsTabSearchFormFieldsLabel {
ResourceTypes = "Resource types",
OperationTypes = "Operation types",
ResourcePath = "Resource path",
Realm = "Realm",
Client = "Client",
User = "User",
IpAddress = "IP address",
DateFrom = "Date(from)",
DateTo = "Date(to)",
}
export class AdminEventSearchData {
resourceTypes?: string[];
operationTypes?: string[];
resourcePath?: string;
realm?: string;
client?: string;
user?: string;
ipAddress?: string;
dateFrom?: string;
dateTo?: string;
}
const emptyStatePage = new EmptyStatePage();
const modalUtils = new ModalUtils();
export default class AdminEventsTab extends PageObject {
private searchAdminEventDrpDwnBtn = "adminEventsSearchSelectorToggle";
private searchEventsBtn = "search-events-btn";
private operationTypesInputFld =
".pf-c-form-control.pf-c-select__toggle-typeahead";
private authAttrDataRow = 'tbody > tr > [data-label="Attribute"]';
private authValDataRow = 'tbody > tr > [data-label="Value"]';
private refreshBtn = "refresh-btn";
private resourcePathInput = "#kc-resourcePath";
private realmInput = "#kc-realm";
private clienInput = "#kc-client";
private userInput = "#kc-user";
private ipAddressInput = "#kc-ipAddress";
private dateFromInput = "#kc-dateFrom";
private dateToInput = "#kc-dateTo";
public refresh() {
cy.findByTestId(this.refreshBtn).click();
return this;
}
public openSearchAdminEventDropdownMenu() {
super.openDropdownMenu("", cy.findByTestId(this.searchAdminEventDrpDwnBtn));
return this;
}
public assertAdminSearchDropdownMenuHasLabels() {
super.assertDropdownMenuHasLabels(
Object.values(AdminEventsTabSearchFormFieldsLabel)
);
return this;
}
public openResourceTypesSelectMenu() {
cy.get(this.operationTypesInputFld).first().click();
return this;
}
public closeResourceTypesSelectMenu() {
cy.get(this.operationTypesInputFld).first().click();
return this;
}
public openOperationTypesSelectMenu() {
cy.get(this.operationTypesInputFld).last().click();
return this;
}
public closeOperationTypesSelectMenu() {
cy.get(this.operationTypesInputFld).last().click();
return this;
}
public typeIpAddress(ipAddress: string) {
cy.get(this.ipAddressInput).type(ipAddress);
return this;
}
searchAdminEvent(searchData: AdminEventSearchData) {
this.openSearchAdminEventDropdownMenu();
if (searchData.resourceTypes) {
this.openResourceTypesSelectMenu();
searchData.resourceTypes.forEach((value) => {
super.clickSelectMenuItem(value);
});
this.closeResourceTypesSelectMenu();
}
if (searchData.operationTypes) {
this.openOperationTypesSelectMenu();
searchData.operationTypes.forEach((value) => {
super.clickSelectMenuItem(value);
});
this.closeOperationTypesSelectMenu();
}
if (searchData.resourcePath) {
cy.get(this.resourcePathInput).type(searchData.resourcePath);
}
if (searchData.realm) {
cy.get(this.realmInput).type(searchData.realm);
}
if (searchData.client) {
cy.get(this.clienInput).type(searchData.client);
}
if (searchData.user) {
cy.get(this.userInput).type(searchData.user);
}
if (searchData.ipAddress) {
cy.get(this.ipAddressInput).type(searchData.ipAddress);
}
if (searchData.dateFrom) {
cy.get(this.dateFromInput).type(searchData.dateFrom);
}
if (searchData.dateTo) {
cy.get(this.dateToInput).type(searchData.dateTo);
}
cy.findByTestId(this.searchEventsBtn).click();
return this;
}
public assertSearchAdminBtnEnabled(disabled: boolean) {
super.assertIsEnabled(cy.findByTestId(this.searchEventsBtn), disabled);
return this;
}
public searchAdminEventByResourceTypes(resourceTypes: string[]) {
const searchData = new AdminEventSearchData();
searchData.resourceTypes = resourceTypes;
this.searchAdminEvent(searchData);
return this;
}
public searchAdminEventByOperationTypes(operationTypes: string[]) {
const searchData = new AdminEventSearchData();
searchData.operationTypes = operationTypes;
this.searchAdminEvent(searchData);
return this;
}
public searchAdminEventByResourcePath(resourcePath: string) {
const searchData = new AdminEventSearchData();
searchData.resourcePath = resourcePath;
this.searchAdminEvent(searchData);
return this;
}
public searchAdminEventByRealm(realm: string) {
const searchData = new AdminEventSearchData();
searchData.realm = realm;
this.searchAdminEvent(searchData);
return this;
}
public searchAdminEventByClient(client: string) {
const searchData = new AdminEventSearchData();
searchData.client = client;
this.searchAdminEvent(searchData);
return this;
}
public searchAdminEventByUser(user: string) {
const searchData = new AdminEventSearchData();
searchData.user = user;
this.searchAdminEvent(searchData);
return this;
}
public searchAdminEventByIpAddress(ipAddress: string) {
const searchData = new AdminEventSearchData();
searchData.ipAddress = ipAddress;
this.searchAdminEvent(searchData);
return this;
}
public searchAdminEventByDateFrom(dateFrom: string) {
const searchData = new AdminEventSearchData();
searchData.dateFrom = dateFrom;
this.searchAdminEvent(searchData);
return this;
}
public searchAdminEventByDateTo(dateTo: string) {
const searchData = new AdminEventSearchData();
searchData.dateTo = dateTo;
this.searchAdminEvent(searchData);
return this;
}
public removeResourcePathChipGroup() {
super.removeChipGroup(AdminEventsTabSearchFormFieldsLabel.ResourcePath);
return this;
}
public assertResourceTypesChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
AdminEventsTabSearchFormFieldsLabel.ResourceTypes,
exist
);
return this;
}
public assertOperationTypesChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
AdminEventsTabSearchFormFieldsLabel.OperationTypes,
exist
);
return this;
}
public assertResourcePathChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
AdminEventsTabSearchFormFieldsLabel.ResourcePath,
exist
);
return this;
}
public assertResourcePathChipGroupItemExist(
itemName: string,
exist: boolean
) {
super.assertChipGroupItemExist(
AdminEventsTabSearchFormFieldsLabel.ResourcePath,
itemName,
exist
);
return this;
}
public assertRealmChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
AdminEventsTabSearchFormFieldsLabel.Realm,
exist
);
return this;
}
public assertClientChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
AdminEventsTabSearchFormFieldsLabel.Client,
exist
);
return this;
}
public assertUserChipGroupExist(exist: boolean) {
super.assertChipGroupExist(AdminEventsTabSearchFormFieldsLabel.User, exist);
return this;
}
public assertIpAddressChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
AdminEventsTabSearchFormFieldsLabel.IpAddress,
exist
);
return this;
}
public assertDateFromChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
AdminEventsTabSearchFormFieldsLabel.DateFrom,
exist
);
return this;
}
public assertDateToChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
AdminEventsTabSearchFormFieldsLabel.DateTo,
exist
);
return this;
}
public assertAuthDialogIsNotEmpty() {
modalUtils
.checkModalTitle("Auth")
.assertModalMessageContainText("Realm")
.assertModalMessageContainText("Client")
.assertModalMessageContainText("User")
.assertModalMessageContainText("IP address")
.assertModalHasElement(this.authAttrDataRow, true)
.assertModalHasElement(this.authValDataRow, true)
.closeModal();
return this;
}
public assertRepresentationDialogIsNotEmpty() {
modalUtils.checkModalTitle("Representation").closeModal();
return this;
}
public assertNoSearchResultsExist(exist: boolean) {
emptyStatePage.checkIfExists(exist);
return this;
}
}

View file

@ -0,0 +1,204 @@
import EmptyStatePage from "../../../components/EmptyStatePage";
import PageObject from "../../../components/PageObject";
enum UserEventsTabSearchFormFieldsLabel {
UserId = "User ID",
EventType = "Event type",
Client = "Client",
DateFrom = "Date(from)",
DateTo = "Date(to)",
}
export class UserEventSearchData {
userId?: string;
eventType?: string[];
client?: string;
dateFrom?: string;
dateTo?: string;
}
const emptyStatePage = new EmptyStatePage();
export default class UserEventsTab extends PageObject {
private searchUserEventDrpDwnToggle = "userEventsSearchSelectorToggle";
private searchUserIdInput = "#kc-userId";
private searchEventTypeSelectToggle =
".pf-c-select.keycloak__events_search__type_select";
private searchClientInput = "#kc-client";
private searchDateFromInput = "#kc-dateFrom";
private searchDateToInput = "#kc-dateTo";
private searchEventsBtn = "search-events-btn";
private refreshBtn = "refresh-btn";
public openSearchUserEventDropdownMenu() {
super.openDropdownMenu(
"",
cy.findByTestId(this.searchUserEventDrpDwnToggle)
);
return this;
}
public openEventTypeSelectMenu() {
super.openSelectMenu("", cy.get(this.searchEventTypeSelectToggle));
return this;
}
public closeEventTypeSelectMenu() {
super.closeSelectMenu("", cy.get(this.searchEventTypeSelectToggle));
return this;
}
public clickEventTypeSelectItem(itemName: string) {
super.clickSelectMenuItem(itemName);
return this;
}
public assertSearchEventBtnIsEnabled(enabled: boolean) {
super.assertIsEnabled(cy.findByTestId(this.searchEventsBtn), enabled);
return this;
}
public assertUserSearchDropdownMenuHasLabels() {
super.assertDropdownMenuHasLabels(
Object.values(UserEventsTabSearchFormFieldsLabel)
);
return this;
}
public assertSearchUserEventDropdownMenuExist(exist: boolean) {
super.assertExist(cy.findByTestId(this.searchUserEventDrpDwnToggle), exist);
return this;
}
public refresh() {
cy.findByTestId(this.refreshBtn).click();
return this;
}
public typeUserId(userId: string) {
cy.get(this.searchUserIdInput).type(userId);
return this;
}
public searchUserEvent(searchData: UserEventSearchData) {
this.openSearchUserEventDropdownMenu();
if (searchData.userId) {
this.typeUserId(searchData.userId);
}
if (searchData.eventType) {
this.openEventTypeSelectMenu();
searchData.eventType.forEach((value) => {
super.clickSelectMenuItem(value);
});
this.closeEventTypeSelectMenu();
}
if (searchData.client) {
cy.get(this.searchClientInput).type(searchData.client);
}
if (searchData.dateFrom) {
cy.get(this.searchDateFromInput).type(searchData.dateFrom);
}
if (searchData.dateTo) {
cy.get(this.searchDateToInput).type(searchData.dateTo);
}
cy.findByTestId(this.searchEventsBtn).click();
return this;
}
public searchUserEventByUserId(userId: string) {
const searchData = new UserEventSearchData();
searchData.userId = userId;
this.searchUserEvent(searchData);
return this;
}
public searchUserEventByEventType(eventType: string[]) {
const searchData = new UserEventSearchData();
searchData.eventType = eventType;
this.searchUserEvent(searchData);
return this;
}
public searchUserEventByClient(client: string) {
const searchData = new UserEventSearchData();
searchData.client = client;
this.searchUserEvent(searchData);
return this;
}
public searchUserEventByDateFrom(dateFrom: string) {
const searchData = new UserEventSearchData();
searchData.dateFrom = dateFrom;
this.searchUserEvent(searchData);
return this;
}
public searchUserEventByDateTo(dateTo: string) {
const searchData = new UserEventSearchData();
searchData.dateTo = dateTo;
this.searchUserEvent(searchData);
return this;
}
public removeEventTypeChipGroupItem(itemName: string) {
super.removeChipGroupItem(
UserEventsTabSearchFormFieldsLabel.EventType,
itemName
);
return this;
}
public assertEventTypeChipGroupItemExist(itemName: string, exist: boolean) {
super.assertChipGroupItemExist(
UserEventsTabSearchFormFieldsLabel.EventType,
itemName,
exist
);
return this;
}
public assertUserIdChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
UserEventsTabSearchFormFieldsLabel.UserId,
exist
);
return this;
}
public assertEventTypeChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
UserEventsTabSearchFormFieldsLabel.EventType,
exist
);
return this;
}
public assertClientChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
UserEventsTabSearchFormFieldsLabel.Client,
exist
);
return this;
}
public assertDateFromChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
UserEventsTabSearchFormFieldsLabel.DateFrom,
exist
);
return this;
}
public assertDateToChipGroupExist(exist: boolean) {
super.assertChipGroupExist(
UserEventsTabSearchFormFieldsLabel.DateTo,
exist
);
return this;
}
public assertNoSearchResultsExist(exist: boolean) {
emptyStatePage.checkIfExists(exist);
return this;
}
}

View file

@ -1,8 +1,13 @@
import ModalUtils from "../../../../util/ModalUtils"; import CommonPage from "../../../CommonPage";
import ListingPage from "../../ListingPage"; import ListingPage from "../../ListingPage";
import RealmSettingsEventsTab from "./tabs/RealmSettingsEventsTab";
enum RealmSettingsTab {
Events = "Events",
}
const expect = chai.expect; const expect = chai.expect;
export default class RealmSettingsPage { export default class RealmSettingsPage extends CommonPage {
generalSaveBtn = "general-tab-save"; generalSaveBtn = "general-tab-save";
generalRevertBtn = "general-tab-revert"; generalRevertBtn = "general-tab-revert";
themesSaveBtn = "themes-tab-save"; themesSaveBtn = "themes-tab-save";
@ -200,7 +205,6 @@ export default class RealmSettingsPage {
private executorAvailablePeriodInput = "#available-period"; private executorAvailablePeriodInput = "#available-period";
private listingPage = new ListingPage(); private listingPage = new ListingPage();
private modalUtils = new ModalUtils();
private addCondition = "addCondition"; private addCondition = "addCondition";
private addConditionDrpDwn = ".pf-c-select__toggle"; private addConditionDrpDwn = ".pf-c-select__toggle";
private addConditionDrpDwnOption = "conditionType-select"; private addConditionDrpDwnOption = "conditionType-select";
@ -225,12 +229,19 @@ export default class RealmSettingsPage {
private realmDisplayName = "#kc-display-name"; private realmDisplayName = "#kc-display-name";
private frontEndURL = "#kc-frontend-url"; private frontEndURL = "#kc-frontend-url";
private requireSSL = "#kc-require-ssl"; private requireSSL = "#kc-require-ssl";
private realmSettingsEventsTab = new RealmSettingsEventsTab();
private realmName?: string; private realmName?: string;
constructor(realmName?: string) { constructor(realmName?: string) {
super();
this.realmName = realmName; this.realmName = realmName;
} }
goToEventsTab() {
this.tabUtils().clickTab(RealmSettingsTab.Events);
return this.realmSettingsEventsTab;
}
disableRealm() { disableRealm() {
cy.get(this.modalDialogTitle).contains("Disable realm?"); cy.get(this.modalDialogTitle).contains("Disable realm?");
cy.get(this.modalDialogBodyText).contains( cy.get(this.modalDialogBodyText).contains(
@ -346,7 +357,7 @@ export default class RealmSettingsPage {
deleteProvider(name: string) { deleteProvider(name: string) {
this.listingPage.deleteItem(name); this.listingPage.deleteItem(name);
this.modalUtils.checkModalTitle("Delete key provider?").confirmModal(); this.modalUtils().checkModalTitle("Delete key provider?").confirmModal();
cy.get(this.alertMessage).should( cy.get(this.alertMessage).should(
"be.visible", "be.visible",

View file

@ -0,0 +1,31 @@
import CommonPage from "../../../../CommonPage";
import AdminEventsSettingsTab from "./realmsettings_events_subtabs/AdminEventsSettingsTab";
import EventListenersTab from "./realmsettings_events_subtabs/EventListenersTab";
import UserEventsSettingsTab from "./realmsettings_events_subtabs/UserEventsSettingsTab";
enum RealmSettingsEventsSubTab {
EventListeners = "Event listeners",
UserEventsSettings = "User events settings",
AdminEventsSettings = "Admin events settings",
}
export default class RealmSettingsEventsTab extends CommonPage {
private eventListenersTab = new EventListenersTab();
private userEventsSettingsTab = new UserEventsSettingsTab();
private adminEventsSettingsTab = new AdminEventsSettingsTab();
goToEventListenersSubTab() {
this.tabUtils().clickTab(RealmSettingsEventsSubTab.EventListeners, 1);
return this.eventListenersTab;
}
goToUserEventsSettingsSubTab() {
this.tabUtils().clickTab(RealmSettingsEventsSubTab.UserEventsSettings, 1);
return this.userEventsSettingsTab;
}
goToAdminEventsSettingsSubTab() {
this.tabUtils().clickTab(RealmSettingsEventsSubTab.AdminEventsSettings, 1);
return this.adminEventsSettingsTab;
}
}

View file

@ -0,0 +1,41 @@
import ModalUtils from "../../../../../../util/ModalUtils";
import PageObject from "../../../../components/PageObject";
import Masthead from "../../../../Masthead";
const masthead = new Masthead();
const modal = new ModalUtils();
export default class AdminEventsSettingsTab extends PageObject {
private saveEventsSwitch = "#adminEventsEnabled-switch";
private clearAdminEventsBtn = "#clear-admin-events";
private saveBtn = "#save-admin";
clearAdminEvents() {
cy.get(this.clearAdminEventsBtn).click();
modal.checkModalTitle("Clear events");
modal.confirmModal();
masthead.checkNotificationMessage("The admin events have been cleared");
return this;
}
disableSaveEvents() {
super.assertSwitchStateOn(cy.get(this.saveEventsSwitch));
cy.get(this.saveEventsSwitch).parent().click();
modal.checkModalTitle("Unsave events?");
modal.confirmModal();
super.assertSwitchStateOff(cy.get(this.saveEventsSwitch));
return this;
}
enableSaveEvents() {
super.assertSwitchStateOff(cy.get(this.saveEventsSwitch));
cy.get(this.saveEventsSwitch).parent().click();
super.assertSwitchStateOn(cy.get(this.saveEventsSwitch));
return this;
}
save() {
cy.get(this.saveBtn).click();
return this;
}
}

View file

@ -0,0 +1,3 @@
import PageObject from "../../../../components/PageObject";
export default class EventListenersTab extends PageObject {}

View file

@ -0,0 +1,40 @@
import ModalUtils from "../../../../../../util/ModalUtils";
import PageObject from "../../../../components/PageObject";
import Masthead from "../../../../Masthead";
const masthead = new Masthead();
const modal = new ModalUtils();
export default class UserEventsSettingsTab extends PageObject {
private saveEventsSwitch = "#eventsEnabled-switch";
private clearUserEventsBtn = "#clear-user-events";
private saveBtn = "#save-user";
clearUserEvents() {
cy.get(this.clearUserEventsBtn).click();
modal.checkModalTitle("Clear events");
modal.confirmModal();
masthead.checkNotificationMessage("The user events have been cleared");
return this;
}
disableSaveEventsSwitch() {
cy.get(this.saveEventsSwitch).parent().click();
super.assertSwitchStateOn(cy.get(this.saveEventsSwitch));
modal.checkModalTitle("Unsave events?");
modal.confirmModal();
super.assertSwitchStateOff(cy.get(this.saveEventsSwitch));
return this;
}
enableSaveEventsSwitch() {
cy.get(this.saveEventsSwitch).parent().click();
super.assertSwitchStateOn(cy.get(this.saveEventsSwitch));
return this;
}
save() {
cy.get(this.saveBtn).click();
return this;
}
}

View file

@ -22,6 +22,15 @@ class AdminClient {
}); });
} }
async loginUser(username: string, password: string, clientId: string) {
return this.client.auth({
username: username,
password: password,
grantType: "password",
clientId: clientId,
});
}
async createRealm(realm: string, payload?: RealmRepresentation) { async createRealm(realm: string, payload?: RealmRepresentation) {
await this.login(); await this.login();
await this.client.realms.create({ realm, ...payload }); await this.client.realms.create({ realm, ...payload });

View file

@ -79,4 +79,16 @@ export default class ModalUtils extends CommonElements {
return this; return this;
} }
assertModalMessageContainText(text: string) {
cy.get(this.modalMessage).should("contain.text", text);
return this;
}
assertModalHasElement(elementSelector: string, exist: boolean) {
cy.get(this.parentSelector)
.find(elementSelector)
.should((exist ? "" : ".not") + "exist");
return this;
}
} }