diff --git a/js/apps/admin-ui/cypress/e2e/realm_settings_user_profile_disabled.spec.ts b/js/apps/admin-ui/cypress/e2e/realm_settings_user_profile_disabled.spec.ts new file mode 100644 index 00000000000..e209e1f0aa1 --- /dev/null +++ b/js/apps/admin-ui/cypress/e2e/realm_settings_user_profile_disabled.spec.ts @@ -0,0 +1,155 @@ +import { v4 as uuid } from "uuid"; +import Masthead from "../support/pages/admin-ui/Masthead"; +import SidebarPage from "../support/pages/admin-ui/SidebarPage"; +import LoginPage from "../support/pages/LoginPage"; +import adminClient from "../support/util/AdminClient"; +import { keycloakBefore } from "../support/util/keycloak_hooks"; +import CreateUserPage from "../support/pages/admin-ui/manage/users/CreateUserPage"; +import RealmSettingsPage from "../support/pages/admin-ui/manage/realm_settings/RealmSettingsPage"; +import ListingPage from "../support/pages/admin-ui/ListingPage"; + +const loginPage = new LoginPage(); +const sidebarPage = new SidebarPage(); +const realmSettingsPage = new RealmSettingsPage(); +const createUserPage = new CreateUserPage(); +const masthead = new Masthead(); +const listingPage = new ListingPage(); + +describe("User profile disabled", () => { + const realmName = "Realm_" + uuid(); + + before(async () => { + await adminClient.createRealm(realmName, { + attributes: { userProfileEnabled: "false" }, + }); + }); + + after(async () => { + await adminClient.deleteRealm(realmName); + }); + + beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); + sidebarPage.goToRealm(realmName); + }); + + afterEach(() => { + sidebarPage.goToRealmSettings(); + realmSettingsPage.goToLoginTab(); + cy.findByTestId("email-as-username-switch").uncheck({ force: true }); + cy.findByTestId("edit-username-switch").uncheck({ force: true }); + }); + + it("Create user with email as username, edit username and user profile disabled", () => { + // Ensure email as username and edit username are disabled + sidebarPage.goToRealmSettings(); + realmSettingsPage.goToLoginTab(); + cy.findByTestId("email-as-username-switch").should("have.value", "off"); + cy.findByTestId("edit-username-switch").should("have.value", "off"); + + // Create user + sidebarPage.goToUsers(); + createUserPage.goToCreateUser(); + createUserPage.createUser("testuser1"); + createUserPage.save(); + masthead.checkNotificationMessage("The user has been created"); + + // Check that username is readonly + cy.get("#kc-username").should("have.attr", "readonly"); + }); + + it("Create user with email as username enabled, edit username disabled and user profile disabled", () => { + // Create user and check that username is not visible and that email is editable + sidebarPage.goToUsers(); + createUserPage.goToCreateUser(); + createUserPage.createUser("testuser2"); + createUserPage.save(); + masthead.checkNotificationMessage("The user has been created"); + + // Ensure email as username is enabled and edit username are disabled + sidebarPage.goToRealmSettings(); + realmSettingsPage.goToLoginTab(); + cy.findByTestId("email-as-username-switch").check({ force: true }); + cy.findByTestId("email-as-username-switch").should("have.value", "on"); + cy.findByTestId("edit-username-switch").should("have.value", "off"); + + //Find user and do some checks + sidebarPage.goToUsers(); + sidebarPage.waitForPageLoad(); + listingPage.goToItemDetails("testuser2"); + cy.findByTestId("view-header").should("contain.text", "testuser2"); + + cy.get("#kc-username").should("not.exist"); + cy.findByTestId("email-input").type("testuser1@gmail.com"); + cy.findByTestId("save-user").click(); + masthead.checkNotificationMessage("The user has been saved"); + cy.findByTestId("view-header").should( + "contain.text", + "testuser1@gmail.com", + ); + + cy.findByTestId("email-input").clear(); + cy.findByTestId("email-input").type("testuser2@gmail.com"); + cy.findByTestId("save-user").click(); + masthead.checkNotificationMessage("The user has been saved"); + cy.findByTestId("view-header").should( + "contain.text", + "testuser2@gmail.com", + ); + }); + + it("Create user with email as username disabled, edit username enabled and user profile disabled", () => { + // Ensure email as username is disabled and edit username is enabled + sidebarPage.goToRealmSettings(); + realmSettingsPage.goToLoginTab(); + + cy.findByTestId("email-as-username-switch").should("have.value", "off"); + cy.findByTestId("edit-username-switch").check({ force: true }); + cy.findByTestId("edit-username-switch").should("have.value", "on"); + + // Create user and check that username is visible and that email is editable + sidebarPage.goToUsers(); + createUserPage.goToCreateUser(); + cy.get("#kc-username").type("testuser3"); + cy.findByTestId("email-input").type("testuser3@test.com"); + cy.findByTestId("create-user").click(); + masthead.checkNotificationMessage("The user has been created"); + + cy.findByTestId("email-input").clear(); + cy.findByTestId("email-input").type("testuser4@test.com"); + cy.findByTestId("save-user").click(); + masthead.checkNotificationMessage("The user has been saved"); + cy.findByTestId("view-header").should("contain.text", "testuser3"); + }); + + it("Create user with email as username, edit username enabled and user profile disabled", () => { + // Create user and check that username is not visible and that email is editable + sidebarPage.goToUsers(); + createUserPage.goToCreateUser(); + createUserPage.createUser("testuser5"); + cy.findByTestId("email-input").type("testuser5@gmail.com"); + createUserPage.save(); + masthead.checkNotificationMessage("The user has been created"); + + sidebarPage.goToRealmSettings(); + realmSettingsPage.goToLoginTab(); + cy.findByTestId("edit-username-switch").check({ force: true }); + cy.findByTestId("edit-username-switch").should("have.value", "on"); + cy.findByTestId("email-as-username-switch").check({ force: true }); + cy.findByTestId("email-as-username-switch").should("have.value", "on"); + + //Find user and do some checks + sidebarPage.goToUsers(); + sidebarPage.waitForPageLoad(); + listingPage.goToItemDetails("testuser5"); + cy.findByTestId("view-header").should("contain.text", "testuser5"); + cy.get("#kc-username").should("not.exist"); + + cy.findByTestId("email-input").clear(); + cy.findByTestId("email-input").type("testuser6@test.com"); + cy.findByTestId("save-user").click(); + cy.findByTestId("view-header").should("contain.text", "testuser6@test.com"); + masthead.checkNotificationMessage("The user has been saved"); + }); +}); diff --git a/js/apps/admin-ui/cypress/e2e/realm_settings_user_profile_enabled.spec.ts b/js/apps/admin-ui/cypress/e2e/realm_settings_user_profile_enabled.spec.ts new file mode 100644 index 00000000000..3caca7b2785 --- /dev/null +++ b/js/apps/admin-ui/cypress/e2e/realm_settings_user_profile_enabled.spec.ts @@ -0,0 +1,417 @@ +import { v4 as uuid } from "uuid"; +import ListingPage from "../support/pages/admin-ui/ListingPage"; +import UserProfile from "../support/pages/admin-ui/manage/realm_settings/UserProfile"; +import Masthead from "../support/pages/admin-ui/Masthead"; +import SidebarPage from "../support/pages/admin-ui/SidebarPage"; +import LoginPage from "../support/pages/LoginPage"; +import adminClient from "../support/util/AdminClient"; +import { keycloakBefore } from "../support/util/keycloak_hooks"; +import ModalUtils from "../support/util/ModalUtils"; +import RealmSettingsPage from "../support/pages/admin-ui/manage/realm_settings/RealmSettingsPage"; +import CreateUserPage from "../support/pages/admin-ui/manage/users/CreateUserPage"; + +const loginPage = new LoginPage(); +const sidebarPage = new SidebarPage(); +const userProfileTab = new UserProfile(); +const listingPage = new ListingPage(); +const modalUtils = new ModalUtils(); +const masthead = new Masthead(); +const realmSettingsPage = new RealmSettingsPage(); +const createUserPage = new CreateUserPage(); + +// Selectors +const getUserProfileTab = () => userProfileTab.goToTab(); +const getAttributesTab = () => userProfileTab.goToAttributesTab(); +const getAttributesGroupTab = () => userProfileTab.goToAttributesGroupTab(); +const getJsonEditorTab = () => userProfileTab.goToJsonEditorTab(); +const clickCreateAttributeButton = () => + userProfileTab.createAttributeButtonClick(); + +describe("User profile tabs", () => { + const realmName = "Realm_" + uuid(); + const attributeName = "Test"; + + before(() => + adminClient.createRealm(realmName, { + attributes: { userProfileEnabled: "true" }, + }), + ); + + after(() => adminClient.deleteRealm(realmName)); + + beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); + sidebarPage.goToRealm(realmName); + sidebarPage.goToRealmSettings(); + }); + + afterEach(() => { + sidebarPage.goToRealmSettings(); + sidebarPage.waitForPageLoad(); + realmSettingsPage.goToLoginTab(); + cy.findByTestId("email-as-username-switch").uncheck({ force: true }); + cy.findByTestId("edit-username-switch").uncheck({ force: true }); + }); + + describe("Attributes sub tab tests", () => { + it("Goes to create attribute page", () => { + getUserProfileTab(); + getAttributesTab(); + clickCreateAttributeButton(); + }); + + 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(".kc-emptyValidators").contains("No validators."); + }); + }); + + describe("Attribute groups sub tab tests", () => { + it("Deletes an attributes group", () => { + cy.wrap(null).then(() => + adminClient.patchUserProfile(realmName, { + groups: [{ name: "Test" }], + }), + ); + + getUserProfileTab(); + getAttributesGroupTab(); + listingPage.deleteItem("Test"); + modalUtils.confirmModal(); + listingPage.checkEmptyList(); + }); + }); + + describe("Json Editor sub tab tests", () => { + const removedThree = ` + {ctrl+a}{backspace} + { + "attributes": [ + { + "name": "username", + "validations": { + "length": { + "min": 3, + "max": 255 {downArrow}, + "username-prohibited-characters": { + `; + + it("Removes three validators with the editor", () => { + getUserProfileTab(); + getJsonEditorTab(); + userProfileTab.typeJSON(removedThree).saveJSON(); + masthead.checkNotificationMessage( + "User profile settings successfully updated.", + ); + }); + }); + + describe("Check attribute presence when creating a user based on email as username and edit username configs enabled/disabled", () => { + it("Checks that not required attribute is not present when user is created with email as username and edit username set to disabled", () => { + getUserProfileTab(); + getAttributesTab(); + clickCreateAttributeButton(); + userProfileTab + .createAttributeNotRequiredWithoutPermissions( + "newAttribute1", + "newAttribute1", + ) + .saveAttributeCreation(); + masthead.checkNotificationMessage( + "Success! User Profile configuration has been saved.", + ); + sidebarPage.goToRealmSettings(); + realmSettingsPage.goToLoginTab(); + cy.findByTestId("email-as-username-switch").should("have.value", "off"); + cy.findByTestId("edit-username-switch").should("have.value", "off"); + // Create user + sidebarPage.goToUsers(); + createUserPage.goToCreateUser(); + cy.findByTestId("username").type("testuser7"); + cy.findByTestId("create-user").click(); + masthead.checkNotificationMessage("The user has been created"); + cy.get(".pf-c-form__label-text") + .contains("newAttribute1") + .should("not.exist"); + sidebarPage.goToRealmSettings(); + getUserProfileTab(); + getAttributesTab(); + listingPage.deleteItem("newAttribute1"); + modalUtils.confirmModal(); + masthead.checkNotificationMessage("Attribute deleted"); + }); + it("Checks that not required attribute is not present when user is created/edited with email as username enabled", () => { + getUserProfileTab(); + getAttributesTab(); + clickCreateAttributeButton(); + userProfileTab + .createAttributeNotRequiredWithoutPermissions( + "newAttribute2", + "newAttribute2", + ) + .saveAttributeCreation(); + masthead.checkNotificationMessage( + "Success! User Profile configuration has been saved.", + ); + sidebarPage.goToRealmSettings(); + realmSettingsPage.goToLoginTab(); + cy.findByTestId("email-as-username-switch").check({ force: true }); + cy.findByTestId("email-as-username-switch").should("have.value", "on"); + cy.findByTestId("edit-username-switch").should("have.value", "off"); + // Create user + sidebarPage.goToUsers(); + createUserPage.goToCreateUser(); + cy.findByTestId("email").type("testuser8@gmail.com"); + cy.get(".pf-c-form__label-text") + .contains("newAttribute2") + .should("not.exist"); + cy.findByTestId("create-user").click(); + masthead.checkNotificationMessage("The user has been created"); + // Edit user + cy.get(".pf-c-form__label-text") + .contains("newAttribute2") + .should("not.exist"); + cy.findByTestId("firstName").type("testuser9"); + cy.findByTestId("email").clear(); + cy.findByTestId("email").type("testuser9@gmail.com"); + cy.findByTestId("save-user").click(); + masthead.checkNotificationMessage("The user has been saved"); + sidebarPage.goToRealmSettings(); + getUserProfileTab(); + getAttributesTab(); + listingPage.deleteItem("newAttribute2"); + modalUtils.confirmModal(); + masthead.checkNotificationMessage("Attribute deleted"); + }); + it("Checks that not required attribute with permissions to view/edit is present when user is created", () => { + getUserProfileTab(); + getAttributesTab(); + clickCreateAttributeButton(); + userProfileTab + .createAttributeNotRequiredWithPermissions( + "newAttribute3", + "newAttribute3", + ) + .saveAttributeCreation(); + masthead.checkNotificationMessage( + "Success! User Profile configuration has been saved.", + ); + sidebarPage.goToRealmSettings(); + realmSettingsPage.goToLoginTab(); + cy.findByTestId("email-as-username-switch").should("have.value", "off"); + cy.findByTestId("edit-username-switch").should("have.value", "off"); + // Create user + sidebarPage.goToUsers(); + createUserPage.goToCreateUser(); + cy.findByTestId("username").type("testuser10"); + cy.findByTestId("create-user").click(); + masthead.checkNotificationMessage("The user has been created"); + cy.get(".pf-c-form__label-text") + .contains("newAttribute3") + .should("exist"); + sidebarPage.goToRealmSettings(); + getUserProfileTab(); + getAttributesTab(); + listingPage.deleteItem("newAttribute3"); + modalUtils.confirmModal(); + masthead.checkNotificationMessage("Attribute deleted"); + }); + it("Checks that required attribute with permissions to view/edit is present and required when user is created", () => { + getUserProfileTab(); + getAttributesTab(); + clickCreateAttributeButton(); + userProfileTab + .createAttributeRequiredWithPermissions( + "newAttribute4", + "newAttribute4", + ) + .saveAttributeCreation(); + masthead.checkNotificationMessage( + "Success! User Profile configuration has been saved.", + ); + // Create user + sidebarPage.goToUsers(); + createUserPage.goToCreateUser(); + cy.findByTestId("username").type("testuser11"); + cy.get(".pf-c-form__label-text") + .contains("newAttribute4") + .should("exist"); + cy.findByTestId("create-user").click(); + masthead.checkNotificationMessage( + "Could not create user: Please specify attribute newAttribute4.", + ); + sidebarPage.goToRealmSettings(); + getUserProfileTab(); + getAttributesTab(); + listingPage.deleteItem("newAttribute4"); + modalUtils.confirmModal(); + masthead.checkNotificationMessage("Attribute deleted"); + }); + it("Checks that required attribute with permissions to view/edit is accepted when user is created", () => { + getUserProfileTab(); + getAttributesTab(); + clickCreateAttributeButton(); + userProfileTab + .createAttributeRequiredWithPermissions( + "newAttribute5", + "newAttribute5", + ) + .saveAttributeCreation(); + masthead.checkNotificationMessage( + "Success! User Profile configuration has been saved.", + ); + // Create user + sidebarPage.goToUsers(); + createUserPage.goToCreateUser(); + cy.findByTestId("username").type("testuser12"); + cy.get(".pf-c-form__label-text") + .contains("newAttribute5") + .should("exist"); + cy.findByTestId("newAttribute5").type("MyAttribute"); + cy.findByTestId("create-user").click(); + masthead.checkNotificationMessage("The user has been created"); + sidebarPage.goToRealmSettings(); + getUserProfileTab(); + getAttributesTab(); + listingPage.deleteItem("newAttribute5"); + modalUtils.confirmModal(); + masthead.checkNotificationMessage("Attribute deleted"); + }); + it("Checks that attribute group is visible when user with existing attribute is created", () => { + getUserProfileTab(); + getAttributesGroupTab(); + cy.findAllByTestId("no-attributes-groups-empty-action").click(); + userProfileTab.createAttributeGroup("personalInfo", "personalInfo"); + userProfileTab.saveAttributesGroupCreation(); + + getAttributesTab(); + userProfileTab.selectElementInList("username"); + cy.get("#kc-attributeGroup").click(); + cy.get("button.pf-c-select__menu-item").contains("personalInfo").click(); + userProfileTab.saveAttributeCreation(); + masthead.checkNotificationMessage( + "Success! User Profile configuration has been saved.", + ); + // Create user + sidebarPage.goToUsers(); + createUserPage.goToCreateUser(); + cy.findByTestId("username").type("testuser14"); + cy.get("h1#personalinfo").should("have.text", "personalInfo"); + cy.findByTestId("create-user").click(); + masthead.checkNotificationMessage("The user has been created"); + + sidebarPage.goToRealmSettings(); + getUserProfileTab(); + getAttributesTab(); + userProfileTab.selectElementInList("username"); + cy.get("#kc-attributeGroup").click(); + cy.get("button.pf-c-select__menu-item").contains("None").click(); + userProfileTab.saveAttributeCreation(); + masthead.checkNotificationMessage( + "Success! User Profile configuration has been saved.", + ); + + getAttributesGroupTab(); + listingPage.deleteItem("personalInfo"); + modalUtils.confirmModal(); + listingPage.checkEmptyList(); + }); + it("Checks that attribute group is visible when user with a new attribute is created", () => { + getUserProfileTab(); + getAttributesGroupTab(); + cy.findAllByTestId("no-attributes-groups-empty-action").click(); + userProfileTab.createAttributeGroup("contact", "contact"); + userProfileTab.saveAttributesGroupCreation(); + getAttributesTab(); + clickCreateAttributeButton(); + userProfileTab + .createAttributeNotRequiredWithPermissions("address", "address") + .saveAttributeCreation(); + masthead.checkNotificationMessage( + "Success! User Profile configuration has been saved.", + ); + userProfileTab.selectElementInList("address"); + cy.get("#kc-attributeGroup").click(); + cy.get("button.pf-c-select__menu-item").contains("contact").click(); + userProfileTab.saveAttributeCreation(); + masthead.checkNotificationMessage( + "Success! User Profile configuration has been saved.", + ); + // Create user + sidebarPage.goToUsers(); + createUserPage.goToCreateUser(); + cy.findByTestId("username").type("testuser13"); + cy.get("h1#contact").should("have.text", "contact"); + cy.get(".pf-c-form__label-text").contains("address").should("exist"); + cy.findByTestId("address").type("MyNewAddress1"); + cy.findByTestId("create-user").click(); + masthead.checkNotificationMessage("The user has been created"); + cy.findByTestId("address").should("have.value", "MyNewAddress1"); + + // Edit attribute + cy.findByTestId("address").clear(); + cy.findByTestId("address").type("MyNewAddress2"); + cy.findByTestId("save-user").click(); + masthead.checkNotificationMessage("The user has been saved"); + cy.findByTestId("address").should("have.value", "MyNewAddress2"); + + sidebarPage.goToRealmSettings(); + getUserProfileTab(); + getAttributesTab(); + userProfileTab.selectElementInList("address"); + cy.get("#kc-attributeGroup").click(); + cy.get("button.pf-c-select__menu-item").contains("None").click(); + userProfileTab.saveAttributeCreation(); + masthead.checkNotificationMessage( + "Success! User Profile configuration has been saved.", + ); + + getAttributesGroupTab(); + listingPage.deleteItem("contact"); + modalUtils.confirmModal(); + listingPage.checkEmptyList(); + }); + }); +}); diff --git a/js/apps/admin-ui/cypress/e2e/realm_settings_user_profile_tab.spec.ts b/js/apps/admin-ui/cypress/e2e/realm_settings_user_profile_tab.spec.ts deleted file mode 100644 index 2e1f8ded488..00000000000 --- a/js/apps/admin-ui/cypress/e2e/realm_settings_user_profile_tab.spec.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { v4 as uuid } from "uuid"; -import ListingPage from "../support/pages/admin-ui/ListingPage"; -import UserProfile from "../support/pages/admin-ui/manage/realm_settings/UserProfile"; -import Masthead from "../support/pages/admin-ui/Masthead"; -import SidebarPage from "../support/pages/admin-ui/SidebarPage"; -import LoginPage from "../support/pages/LoginPage"; -import adminClient from "../support/util/AdminClient"; -import { keycloakBefore } from "../support/util/keycloak_hooks"; -import ModalUtils from "../support/util/ModalUtils"; - -const loginPage = new LoginPage(); -const sidebarPage = new SidebarPage(); -const userProfileTab = new UserProfile(); -const listingPage = new ListingPage(); -const modalUtils = new ModalUtils(); -const masthead = new Masthead(); - -// Selectors -const getUserProfileTab = () => userProfileTab.goToTab(); -const getAttributesTab = () => userProfileTab.goToAttributesTab(); -const getAttributesGroupTab = () => userProfileTab.goToAttributesGroupTab(); -const getJsonEditorTab = () => userProfileTab.goToJsonEditorTab(); -const clickCreateAttributeButton = () => - userProfileTab.createAttributeButtonClick(); - -describe("User profile tabs", () => { - const realmName = "Realm_" + uuid(); - const attributeName = "Test"; - - before(() => - adminClient.createRealm(realmName, { - attributes: { userProfileEnabled: "true" }, - }), - ); - - after(() => adminClient.deleteRealm(realmName)); - - beforeEach(() => { - loginPage.logIn(); - keycloakBefore(); - sidebarPage.goToRealm(realmName); - sidebarPage.goToRealmSettings(); - }); - - describe("Attributes sub tab tests", () => { - it("Goes to create attribute page", () => { - getUserProfileTab(); - getAttributesTab(); - clickCreateAttributeButton(); - }); - - 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(".kc-emptyValidators").contains("No validators."); - }); - }); - - describe("Attribute groups sub tab tests", () => { - it("Deletes an attributes group", () => { - cy.wrap(null).then(() => - adminClient.patchUserProfile(realmName, { - groups: [{ name: "Test" }], - }), - ); - - getUserProfileTab(); - getAttributesGroupTab(); - listingPage.deleteItem("Test"); - modalUtils.confirmModal(); - listingPage.checkEmptyList(); - }); - }); - - describe("Json Editor sub tab tests", () => { - const removedThree = ` - {ctrl+a}{backspace} -{ - "attributes": [ - { -"name": "username", -"validations": { - "length": { - "min": 3, -"max": 255 {downArrow}, -"username-prohibited-characters": { -`; - - it("Removes three validators with the editor", () => { - getUserProfileTab(); - getJsonEditorTab(); - userProfileTab.typeJSON(removedThree).saveJSON(); - masthead.checkNotificationMessage( - "User profile settings successfully updated.", - ); - }); - }); -}); diff --git a/js/apps/admin-ui/cypress/support/pages/admin-ui/manage/realm_settings/UserProfile.ts b/js/apps/admin-ui/cypress/support/pages/admin-ui/manage/realm_settings/UserProfile.ts index d6b428ace8c..718f516bf0b 100644 --- a/js/apps/admin-ui/cypress/support/pages/admin-ui/manage/realm_settings/UserProfile.ts +++ b/js/apps/admin-ui/cypress/support/pages/admin-ui/manage/realm_settings/UserProfile.ts @@ -13,8 +13,6 @@ export default class UserProfile { #newAttributeNameInput = "attribute-name"; #newAttributeDisplayNameInput = "attribute-display-name"; #newAttributeEnabledWhen = 'input[name="enabledWhen"]'; - #newAttributeCheckboxes = 'input[type="checkbox"]'; - #newAttributeRequiredFor = 'input[name="roles"]'; #newAttributeRequiredWhen = 'input[name="requiredWhen"]'; #newAttributeEmptyValidators = ".kc-emptyValidators"; #newAttributeAnnotationBtn = "annotations-add-row"; @@ -29,6 +27,14 @@ export default class UserProfile { #deleteValidatorBtn = "confirm"; #cancelAddingValidatorBtn = "cancel-validator-role-button"; #cancelRemovingValidatorBtn = "cancel"; + #newAttributeRequiredField = "input#kc-required.pf-c-switch__input"; + #newAttributeUserEdit = "user-edit"; + #newAttributeAdminEdit = "admin-edit"; + #newAttributeUserView = "user-view"; + #newAttributeAdminView = "admin-view"; + #newAttributesGroupNameInput = "input#kc-name"; + #newAttributesGroupDisplayNameInput = 'input[name="displayHeader"]'; + #saveNewAttributesGroupBtn = "saveGroupBtn"; goToTab() { cy.findByTestId(this.#userProfileTab).click(); @@ -91,6 +97,53 @@ export default class UserProfile { return this; } + createAttributeNotRequiredWithPermissions(name: string, displayName: string) { + cy.findByTestId(this.#newAttributeNameInput).type(name); + cy.findByTestId(this.#newAttributeDisplayNameInput).type(displayName); + cy.get(this.#newAttributeEnabledWhen).first().check(); + cy.findByTestId(this.#newAttributeUserEdit).first().check({ force: true }); + cy.findByTestId(this.#newAttributeUserView).first().check({ force: true }); + cy.findByTestId(this.#newAttributeAdminView).first().check({ force: true }); + return this; + } + + createAttributeNotRequiredWithoutPermissions( + name: string, + displayName: string, + ) { + cy.findByTestId(this.#newAttributeNameInput).type(name); + cy.findByTestId(this.#newAttributeDisplayNameInput).type(displayName); + cy.get(this.#newAttributeEnabledWhen).first().check(); + cy.findByTestId(this.#newAttributeAdminEdit) + .first() + .uncheck({ force: true }); + + return this; + } + + createAttributeRequiredWithPermissions(name: string, displayName: string) { + cy.findByTestId(this.#newAttributeNameInput).type(name); + cy.findByTestId(this.#newAttributeDisplayNameInput).type(displayName); + cy.get(this.#newAttributeEnabledWhen).first().check(); + cy.get(this.#newAttributeRequiredField).first().check({ force: true }); + cy.get(this.#newAttributeRequiredWhen).first().check({ force: true }); + cy.findByTestId(this.#newAttributeUserEdit).first().check({ force: true }); + cy.findByTestId(this.#newAttributeUserView).first().check({ force: true }); + cy.findByTestId(this.#newAttributeAdminView).first().check({ force: true }); + return this; + } + + createAttributeGroup(name: string, displayName: string) { + cy.get(this.#newAttributesGroupNameInput).type(name); + cy.get(this.#newAttributesGroupDisplayNameInput).type(displayName); + return this; + } + + saveAttributesGroupCreation() { + cy.findByTestId(this.#saveNewAttributesGroupBtn).click(); + return this; + } + selectElementInList(name: string) { cy.get(this.#validatorsList).contains(name).click(); return this; @@ -102,9 +155,6 @@ export default class UserProfile { .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.findByTestId(this.#newAttributeAnnotationBtn).click(); cy.findByTestId(this.#newAttributeAnnotationKey).type("test"); diff --git a/js/apps/admin-ui/src/components/view-header/ViewHeader.tsx b/js/apps/admin-ui/src/components/view-header/ViewHeader.tsx index 762210da1dc..8199e0fe529 100644 --- a/js/apps/admin-ui/src/components/view-header/ViewHeader.tsx +++ b/js/apps/admin-ui/src/components/view-header/ViewHeader.tsx @@ -93,7 +93,11 @@ export const ViewHeader = ({ - + {i18n.exists(titleKey) ? t(titleKey) : titleKey} diff --git a/js/apps/admin-ui/src/realm-settings/user-profile/AttributesGroupForm.tsx b/js/apps/admin-ui/src/realm-settings/user-profile/AttributesGroupForm.tsx index fc07a683e9f..d05c9fad44d 100644 --- a/js/apps/admin-ui/src/realm-settings/user-profile/AttributesGroupForm.tsx +++ b/js/apps/admin-ui/src/realm-settings/user-profile/AttributesGroupForm.tsx @@ -170,7 +170,7 @@ export default function AttributesGroupForm() { -