Realm-settings -> User Profile -> Create/Edit Attribute tests (#2410)

* added tests for creating new attribute

* added more tests

* removed temporary skips

* added more tests

* added more tests

* fixed typo

* fixed focus bug

Co-authored-by: Agnieszka Gancarczyk <agancarc@redhat.com>
This commit is contained in:
agagancarczyk 2022-04-11 15:00:08 +01:00 committed by GitHub
parent b027702ffa
commit 7418bca8f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 143 additions and 2 deletions

View file

@ -1,5 +1,6 @@
import ListingPage from "../support/pages/admin_console/ListingPage"; import ListingPage from "../support/pages/admin_console/ListingPage";
import UserProfile from "../support/pages/admin_console/manage/realm_settings/UserProfile"; import UserProfile from "../support/pages/admin_console/manage/realm_settings/UserProfile";
import Masthead from "../support/pages/admin_console/Masthead";
import SidebarPage from "../support/pages/admin_console/SidebarPage"; import SidebarPage from "../support/pages/admin_console/SidebarPage";
import LoginPage from "../support/pages/LoginPage"; import LoginPage from "../support/pages/LoginPage";
import adminClient from "../support/util/AdminClient"; import adminClient from "../support/util/AdminClient";
@ -11,6 +12,7 @@ const sidebarPage = new SidebarPage();
const userProfileTab = new UserProfile(); const userProfileTab = new UserProfile();
const listingPage = new ListingPage(); const listingPage = new ListingPage();
const modalUtils = new ModalUtils(); const modalUtils = new ModalUtils();
const masthead = new Masthead();
// Selectors // Selectors
const getUserProfileTab = () => userProfileTab.goToTab(); const getUserProfileTab = () => userProfileTab.goToTab();
@ -22,6 +24,7 @@ const clickCreateAttributeButton = () =>
describe("User profile tabs", () => { describe("User profile tabs", () => {
const realmName = "Realm_" + (Math.random() + 1).toString(36).substring(7); const realmName = "Realm_" + (Math.random() + 1).toString(36).substring(7);
const attributeName = "Test";
before(() => before(() =>
adminClient.createRealm(realmName, { adminClient.createRealm(realmName, {
@ -45,6 +48,52 @@ describe("User profile tabs", () => {
clickCreateAttributeButton(); clickCreateAttributeButton();
cy.get("p").should("have.text", "Create a new attribute"); cy.get("p").should("have.text", "Create a new attribute");
}); });
it("Completes new attribute form and performs cancel", () => {
getUserProfileTab();
getAttributesTab();
clickCreateAttributeButton();
userProfileTab
.createAttribute(attributeName, "Test display name")
.cancelAttributeCreation()
.checkElementNotInList(attributeName);
});
it("Completes new attribute form and performs submit", () => {
getUserProfileTab();
getAttributesTab();
clickCreateAttributeButton();
userProfileTab
.createAttribute(attributeName, "Display name")
.saveAttributeCreation();
masthead.checkNotificationMessage(
"Success! User Profile configuration has been saved."
);
});
it("Modifies existing attribute and performs save", () => {
getUserProfileTab();
getAttributesTab();
userProfileTab
.selectElementInList(attributeName)
.editAttribute("Edited display name")
.saveAttributeCreation();
masthead.checkNotificationMessage(
"Success! User Profile configuration has been saved."
);
});
it("Adds and removes validator to/from existing attribute and performs save", () => {
getUserProfileTab();
getAttributesTab();
userProfileTab.selectElementInList(attributeName).cancelAddingValidator();
userProfileTab.addValidator();
cy.get('tbody [data-label="Validator name"]').contains("email");
userProfileTab.cancelRemovingValidator();
userProfileTab.removeValidator();
cy.get('tbody [class="kc-emptyValidators"]').contains("No validators.");
});
}); });
describe("Attribute groups sub tab tests", () => { describe("Attribute groups sub tab tests", () => {

View file

@ -7,6 +7,26 @@ export default class UserProfile {
private actionsDrpDwn = "actions-dropdown"; private actionsDrpDwn = "actions-dropdown";
private deleteDrpDwnOption = "deleteDropdownAttributeItem"; private deleteDrpDwnOption = "deleteDropdownAttributeItem";
private editDrpDwnOption = "editDropdownAttributeItem"; private editDrpDwnOption = "editDropdownAttributeItem";
private cancelNewAttribute = "attribute-cancel";
private newAttributeNameInput = "attribute-name";
private newAttributeDisplayNameInput = "attribute-display-name";
private newAttributeEnabledWhen = 'input[name="enabledWhen"]';
private newAttributeCheckboxes = 'input[type="checkbox"]';
private newAttributeRequiredFor = 'input[name="roles"]';
private newAttributeRequiredWhen = 'input[name="requiredWhen"]';
private newAttributeEmptyValidators = 'tbody [class="kc-emptyValidators"]';
private newAttributeAnnotationKey = 'input[name="annotations[0].key"]';
private newAttributeAnnotationValue = 'input[name="annotations[0].value"]';
private validatorRolesList = 'tbody [data-label="Role name"]';
private validatorsList = 'tbody [data-label="name"]';
private saveNewAttributeBtn = "attribute-create";
private addValidatorBtn = "addValidator";
private saveValidatorBtn = "save-validator-role-button";
private removeValidatorBtn = "deleteValidator";
private deleteValidatorBtn = "confirm";
private cancelAddingValidatorBtn = "cancel-validator-role-button";
private cancelRemovingValidatorBtn = "cancel";
private validatorDialogCloseBtn = 'button[aria-label="Close"]';
goToTab() { goToTab() {
cy.findByTestId(this.userProfileTab).click(); cy.findByTestId(this.userProfileTab).click();
@ -47,4 +67,71 @@ export default class UserProfile {
cy.findByTestId(this.editDrpDwnOption).click(); cy.findByTestId(this.editDrpDwnOption).click();
return this; return this;
} }
cancelAttributeCreation() {
cy.findByTestId(this.cancelNewAttribute).click();
return this;
}
createAttribute(name: string, displayName: string) {
cy.findByTestId(this.newAttributeNameInput).type(name);
cy.findByTestId(this.newAttributeDisplayNameInput).type(displayName);
return this;
}
checkElementNotInList(name: string) {
cy.get(this.validatorsList).should("not.contain.text", name);
return this;
}
saveAttributeCreation() {
cy.findByTestId(this.saveNewAttributeBtn).click();
return this;
}
selectElementInList(name: string) {
cy.get(this.validatorsList).contains(name).click();
return this;
}
editAttribute(displayName: string) {
cy.findByTestId(this.newAttributeDisplayNameInput)
.click()
.clear()
.type(displayName);
cy.get(this.newAttributeEnabledWhen).first().check();
cy.get(this.newAttributeCheckboxes).check({ force: true });
cy.get(this.newAttributeRequiredFor).first().check({ force: true });
cy.get(this.newAttributeRequiredWhen).first().check();
cy.get(this.newAttributeEmptyValidators).contains("No validators.");
cy.get(this.newAttributeAnnotationKey).type("test");
cy.get(this.newAttributeAnnotationValue).type("123");
return this;
}
addValidator() {
cy.get(this.validatorRolesList).contains("email").click();
cy.findByTestId(this.saveValidatorBtn).click();
cy.get(this.validatorDialogCloseBtn).click();
return this;
}
removeValidator() {
cy.findByTestId(this.removeValidatorBtn).click();
cy.findByTestId(this.deleteValidatorBtn).click();
return this;
}
cancelAddingValidator() {
cy.findByTestId(this.addValidatorBtn).click();
cy.get(this.validatorRolesList).contains("email").click();
cy.findByTestId(this.cancelAddingValidatorBtn).click();
return this;
}
cancelRemovingValidator() {
cy.findByTestId(this.removeValidatorBtn).click();
cy.findByTestId(this.cancelRemovingValidatorBtn).click();
return this;
}
} }

View file

@ -30,7 +30,7 @@ export const AttributeInput = ({ name }: AttributeInputProps) => {
useEffect(() => { useEffect(() => {
if (!fields.length) { if (!fields.length) {
append({ key: "", value: "" }); append({ key: "", value: "" }, false);
} }
}, [fields]); }, [fields]);

View file

@ -46,7 +46,12 @@ export const AddValidatorRoleDialog = ({
> >
{t("common:save")} {t("common:save")}
</Button>, </Button>,
<Button key="cancel" variant="link" onClick={toggleDialog}> <Button
key="cancel"
data-testid="cancel-validator-role-button"
variant="link"
onClick={toggleDialog}
>
{t("common:cancel")} {t("common:cancel")}
</Button>, </Button>,
]} ]}