From be95626cddb3b22e14c4f329f1fdfcab84fa3386 Mon Sep 17 00:00:00 2001 From: Erik Jan de Wit Date: Fri, 10 Feb 2023 11:10:35 +0100 Subject: [PATCH] Upgrade to Cypress 12 (#4356) --- apps/admin-ui/cypress.config.mjs | 1 + .../e2e/authentication_policies.spec.ts | 4 +- .../e2e/authentication_policies_ciba.spec.ts | 2 +- .../cypress/e2e/authentication_test.spec.ts | 27 +- .../e2e/client_authorization_test.spec.ts | 36 +- .../e2e/client_registration_policies.spec.ts | 9 +- .../cypress/e2e/client_scopes_test.spec.ts | 27 +- .../cypress/e2e/clients_saml_test.spec.ts | 12 +- .../admin-ui/cypress/e2e/clients_test.spec.ts | 84 ++--- apps/admin-ui/cypress/e2e/events_test.spec.ts | 15 +- apps/admin-ui/cypress/e2e/group_test.spec.ts | 2 +- .../e2e/identity_providers_oidc_test.spec.ts | 2 +- .../e2e/identity_providers_saml_test.spec.ts | 7 +- .../e2e/identity_providers_test.spec.ts | 2 +- .../cypress/e2e/masthead_test.spec.ts | 4 +- .../cypress/e2e/partial_export_test.spec.ts | 2 +- .../cypress/e2e/partial_import_test.spec.ts | 20 +- .../cypress/e2e/realm_roles_test.spec.ts | 2 +- ...ealm_settings_client_policies_test.spec.ts | 8 +- ...ealm_settings_client_profiles_test.spec.ts | 12 +- .../e2e/realm_settings_events_test.spec.ts | 4 +- .../realm_settings_general_tab_test.spec.ts | 2 +- .../e2e/realm_settings_tabs_test.spec.ts | 2 +- .../realm_settings_user_profile_tab.spec.ts | 12 +- apps/admin-ui/cypress/e2e/realm_test.spec.ts | 5 +- .../e2e/realm_user_registration.spec.ts | 8 +- .../cypress/e2e/sessions_test.spec.ts | 3 +- .../e2e/user_fed_kerberos_test.spec.ts | 2 +- ...ser_fed_ldap_hardcoded_mapper_test.spec.ts | 2 +- .../e2e/user_fed_ldap_mapper_test.spec.ts | 2 +- .../cypress/e2e/user_fed_ldap_test.spec.ts | 7 +- apps/admin-ui/cypress/e2e/users_test.spec.ts | 12 +- apps/admin-ui/cypress/support/e2e.ts | 9 - .../cypress/support/pages/LoginPage.ts | 36 +- .../support/pages/admin-ui/Masthead.ts | 1 + .../manage/authentication/FlowDetail.ts | 2 +- .../social/ProviderSAMLSettings.ts | 6 +- .../admin-ui/manage/sessions/SessionsPage.ts | 1 + apps/admin-ui/package.json | 2 +- package-lock.json | 337 +++++++++++++++++- 40 files changed, 510 insertions(+), 223 deletions(-) diff --git a/apps/admin-ui/cypress.config.mjs b/apps/admin-ui/cypress.config.mjs index 4f08045f78..4bc1263a95 100644 --- a/apps/admin-ui/cypress.config.mjs +++ b/apps/admin-ui/cypress.config.mjs @@ -16,6 +16,7 @@ export default defineConfig({ videoCompression: false, numTestsKeptInMemory: 30, videoUploadOnPasses: false, + experimentalMemoryManagement: true, retries: { runMode: 3, diff --git a/apps/admin-ui/cypress/e2e/authentication_policies.spec.ts b/apps/admin-ui/cypress/e2e/authentication_policies.spec.ts index 38a9ac86ae..8050c7450e 100644 --- a/apps/admin-ui/cypress/e2e/authentication_policies.spec.ts +++ b/apps/admin-ui/cypress/e2e/authentication_policies.spec.ts @@ -13,8 +13,8 @@ describe("Policies", () => { describe("OTP policies tab", () => { const otpPoliciesPage = new OTPPolicies(); beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToAuthentication(); otpPoliciesPage.goToTab(); }); @@ -34,8 +34,8 @@ describe("Policies", () => { describe("Webauthn policies tabs", () => { const webauthnPage = new WebAuthnPolicies(); beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToAuthentication(); }); diff --git a/apps/admin-ui/cypress/e2e/authentication_policies_ciba.spec.ts b/apps/admin-ui/cypress/e2e/authentication_policies_ciba.spec.ts index 6634ef9d89..ab57a9252e 100644 --- a/apps/admin-ui/cypress/e2e/authentication_policies_ciba.spec.ts +++ b/apps/admin-ui/cypress/e2e/authentication_policies_ciba.spec.ts @@ -17,8 +17,8 @@ describe("Authentication - Policies - CIBA", () => { after(() => adminClient.deleteRealm(realmName)); beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToRealm(realmName); sidebarPage.goToAuthentication(); CIBAPolicyPage.goToTab(); diff --git a/apps/admin-ui/cypress/e2e/authentication_test.spec.ts b/apps/admin-ui/cypress/e2e/authentication_test.spec.ts index 0b4851a843..3646651405 100644 --- a/apps/admin-ui/cypress/e2e/authentication_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/authentication_test.spec.ts @@ -17,22 +17,21 @@ const masthead = new Masthead(); const sidebarPage = new SidebarPage(); const commonPage = new CommonPage(); const listingPage = new ListingPage(); +const realmName = "test" + crypto.randomUUID(); describe("Authentication test", () => { const detailPage = new FlowDetails(); const duplicateFlowModal = new DuplicateFlowModal(); const modalUtil = new ModalUtils(); - before(() => { - cy.wrap(adminClient.createRealm("test")); - keycloakBefore(); - loginPage.logIn(); - sidebarPage.goToRealm("test"); - }); + before(() => adminClient.createRealm(realmName)); - after(() => adminClient.deleteRealm("test")); + after(() => adminClient.deleteRealm(realmName)); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); + sidebarPage.goToRealm(realmName); sidebarPage.goToAuthentication(); }); @@ -190,19 +189,17 @@ describe("Authentication test", () => { describe("Required actions", () => { const requiredActionsPage = new RequiredActions(); - before(() => { - cy.wrap(adminClient.createRealm("test")); - keycloakBefore(); - loginPage.logIn(); - sidebarPage.goToRealm("test"); - }); + before(() => adminClient.createRealm(realmName)); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); + sidebarPage.goToRealm(realmName); sidebarPage.goToAuthentication(); requiredActionsPage.goToTab(); }); - after(() => adminClient.deleteRealm("test")); + after(() => adminClient.deleteRealm(realmName)); it("should enable delete account", () => { const action = "Delete Account"; @@ -236,8 +233,8 @@ describe("Password policies tab", () => { const passwordPoliciesPage = new PasswordPolicies(); beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToAuthentication(); passwordPoliciesPage.goToTab(); }); diff --git a/apps/admin-ui/cypress/e2e/client_authorization_test.spec.ts b/apps/admin-ui/cypress/e2e/client_authorization_test.spec.ts index 115ac18a04..93a212c97c 100644 --- a/apps/admin-ui/cypress/e2e/client_authorization_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/client_authorization_test.spec.ts @@ -22,29 +22,29 @@ describe("Client authentication subtab", () => { const permissionsSubTab = new PermissionsTab(); const clientId = "client-authentication-" + crypto.randomUUID(); - before(() => { - keycloakBefore(); - loginPage.logIn(); - sidebarPage.goToClients(); - listingPage.searchItem(clientId).goToItemDetails(clientId); - clientDetailsPage.goToAuthorizationTab(); - - cy.wrap( - adminClient.createClient({ - protocol: "openid-connect", - clientId, - publicClient: false, - authorizationServicesEnabled: true, - serviceAccountsEnabled: true, - standardFlowEnabled: true, - }) - ); - }); + before(() => + adminClient.createClient({ + protocol: "openid-connect", + clientId, + publicClient: false, + authorizationServicesEnabled: true, + serviceAccountsEnabled: true, + standardFlowEnabled: true, + }) + ); after(() => { adminClient.deleteClient(clientId); }); + beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); + sidebarPage.goToClients(); + listingPage.searchItem(clientId).goToItemDetails(clientId); + clientDetailsPage.goToAuthorizationTab(); + }); + it("Should update the resource server settings", () => { policiesSubTab.setPolicy("DISABLED").formUtils().save(); masthead.checkNotificationMessage("Resource successfully updated", true); diff --git a/apps/admin-ui/cypress/e2e/client_registration_policies.spec.ts b/apps/admin-ui/cypress/e2e/client_registration_policies.spec.ts index 34123cd7d6..2781aa3f99 100644 --- a/apps/admin-ui/cypress/e2e/client_registration_policies.spec.ts +++ b/apps/admin-ui/cypress/e2e/client_registration_policies.spec.ts @@ -12,13 +12,10 @@ describe("Client registration policies subtab", () => { const sidebarPage = new SidebarPage(); const clientRegistrationPage = new ClientRegistrationPage(); - before(() => { - keycloakBefore(); - loginPage.logIn(); - sidebarPage.goToClients(); - }); - beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); + sidebarPage.goToClients(); clientRegistrationPage.goToClientRegistrationTab(); sidebarPage.waitForPageLoad(); }); diff --git a/apps/admin-ui/cypress/e2e/client_scopes_test.spec.ts b/apps/admin-ui/cypress/e2e/client_scopes_test.spec.ts index 3d555125d3..4a2c110065 100644 --- a/apps/admin-ui/cypress/e2e/client_scopes_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/client_scopes_test.spec.ts @@ -55,12 +55,9 @@ describe("Client Scopes test", () => { }); describe("Client Scope filter list items", () => { - before(() => { - keycloakBefore(); - loginPage.logIn(); - }); - beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.goToClientScopes(); }); @@ -134,12 +131,10 @@ describe("Client Scopes test", () => { describe("Client Scope modify list items", () => { const itemName = clientScopeName + 0; - before(() => { - keycloakBefore(); - loginPage.logIn(); - }); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.goToClientScopes(); }); @@ -198,12 +193,9 @@ describe("Client Scopes test", () => { }); describe("Client Scope delete list items ", () => { - before(() => { - keycloakBefore(); - loginPage.logIn(); - }); - beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.goToClientScopes(); }); @@ -258,12 +250,9 @@ describe("Client Scopes test", () => { }); describe("Client Scope creation", () => { - before(() => { - keycloakBefore(); - loginPage.logIn(); - }); - beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.goToClientScopes(); }); diff --git a/apps/admin-ui/cypress/e2e/clients_saml_test.spec.ts b/apps/admin-ui/cypress/e2e/clients_saml_test.spec.ts index e2a8f212d4..ea99c402f6 100644 --- a/apps/admin-ui/cypress/e2e/clients_saml_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/clients_saml_test.spec.ts @@ -23,8 +23,6 @@ describe("Clients SAML tests", () => { clientId: samlClientName, publicClient: false, }); - keycloakBefore(); - loginPage.logIn(); }); after(() => { @@ -32,6 +30,8 @@ describe("Clients SAML tests", () => { }); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.goToClients(); listingPage.searchItem(samlClientName).goToItemDetails(samlClientName); }); @@ -63,8 +63,6 @@ describe("Clients SAML tests", () => { clientId, protocol: "saml", }); - keycloakBefore(); - loginPage.logIn(); }); after(() => { @@ -72,6 +70,8 @@ describe("Clients SAML tests", () => { }); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.goToClients(); listingPage.searchItem(clientId).goToItemDetails(clientId); cy.findByTestId("keysTab").click(); @@ -123,8 +123,6 @@ describe("Clients SAML tests", () => { clientId, protocol: "saml", }); - keycloakBefore(); - loginPage.logIn(); }); after(() => { @@ -132,6 +130,8 @@ describe("Clients SAML tests", () => { }); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.goToClients(); listingPage.searchItem(clientId).goToItemDetails(clientId); }); diff --git a/apps/admin-ui/cypress/e2e/clients_test.spec.ts b/apps/admin-ui/cypress/e2e/clients_test.spec.ts index 8173f1a351..63f7fdb882 100644 --- a/apps/admin-ui/cypress/e2e/clients_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/clients_test.spec.ts @@ -69,8 +69,8 @@ describe("Clients test", () => { }); beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); commonPage.sidebar().goToClients(); commonPage.tableToolbarUtils().searchItem(clientId); cy.intercept("/admin/realms/master/clients/*").as("fetchClient"); @@ -232,12 +232,9 @@ describe("Clients test", () => { }); describe("Client creation", () => { - before(() => { - keycloakBefore(); - loginPage.logIn(); - }); - beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); commonPage.sidebar().goToClients(); }); @@ -438,7 +435,6 @@ describe("Clients test", () => { it("Should fail to create imported client with empty ID", () => { commonPage.sidebar().goToClients(); - commonPage.masthead().closeAllAlertMessages(); cy.findByTestId("importClient").click(); cy.findByTestId("kc-client-id").click(); cy.findByText("Save").click(); @@ -484,30 +480,19 @@ describe("Clients test", () => { describe("Roles tab test", () => { const rolesTab = new ClientRolesTab(); - let client: string; + const client = "client_" + crypto.randomUUID(); - before(() => { - keycloakBefore(); - loginPage.logIn(); - commonPage.sidebar().goToClients(); - - client = "client_" + crypto.randomUUID(); - - commonPage.tableToolbarUtils().createClient(); - - createClientPage - .selectClientType("openid-connect") - .fillClientData(client) - .continue() - .continue() - .save(); - commonPage - .masthead() - .checkNotificationMessage("Client created successfully", true); - }); + before(() => + adminClient.createClient({ + clientId: client, + protocol: "openid-connect", + publicClient: false, + }) + ); beforeEach(() => { loginPage.logIn(); + keycloakBefore(); commonPage.sidebar().goToClients(); commonPage.tableToolbarUtils().searchItem(client); commonPage.tableUtils().clickRowItemLink(client); @@ -696,12 +681,9 @@ describe("Clients test", () => { const advancedTab = new AdvancedTab(); let client: string; - before(() => { - keycloakBefore(); - loginPage.logIn(); - }); - beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); commonPage.sidebar().goToClients(); client = "client_" + crypto.randomUUID(); commonPage.tableToolbarUtils().createClient(); @@ -814,9 +796,7 @@ describe("Clients test", () => { const serviceAccountTab = new RoleMappingTab("user"); const serviceAccountName = "service-account-client"; - before(() => { - keycloakBefore(); - loginPage.logIn(); + before(() => adminClient.createClient({ protocol: "openid-connect", clientId: serviceAccountName, @@ -824,10 +804,12 @@ describe("Clients test", () => { authorizationServicesEnabled: true, serviceAccountsEnabled: true, standardFlowEnabled: true, - }); - }); + }) + ); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); commonPage.sidebar().goToClients(); }); @@ -943,8 +925,8 @@ describe("Clients test", () => { describe("Mapping tab", () => { const mappingClient = "mapping-client"; beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); commonPage.sidebar().goToClients(); commonPage.tableToolbarUtils().searchItem(mappingClient); commonPage.tableUtils().clickRowItemLink(mappingClient); @@ -978,17 +960,17 @@ describe("Clients test", () => { describe("Keys tab test", () => { const keysName = "keys-client"; - before(() => { - keycloakBefore(); - loginPage.logIn(); + before(() => adminClient.createClient({ protocol: "openid-connect", clientId: keysName, publicClient: false, - }); - }); + }) + ); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); commonPage.sidebar().goToClients(); commonPage.tableToolbarUtils().searchItem(keysName); commonPage.tableUtils().clickRowItemLink(keysName); @@ -1014,9 +996,9 @@ describe("Clients test", () => { describe("Realm client", () => { const clientName = "master-realm"; - before(() => { - keycloakBefore(); + beforeEach(() => { loginPage.logIn(); + keycloakBefore(); commonPage.sidebar().goToClients(); commonPage.tableToolbarUtils().searchItem(clientName); commonPage.tableUtils().clickRowItemLink(clientName); @@ -1045,15 +1027,19 @@ describe("Clients test", () => { describe("Bearer only", () => { const clientId = "bearer-only"; - before(() => { - keycloakBefore(); - loginPage.logIn(); + before(() => adminClient.createClient({ clientId, protocol: "openid-connect", publicClient: false, bearerOnly: true, - }); + }) + ); + + beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); + commonPage.sidebar().goToClients(); cy.intercept("/admin/realms/master/clients/*").as("fetchClient"); commonPage.tableToolbarUtils().searchItem(clientId); diff --git a/apps/admin-ui/cypress/e2e/events_test.spec.ts b/apps/admin-ui/cypress/e2e/events_test.spec.ts index 5b8a2f5514..40115b4e35 100644 --- a/apps/admin-ui/cypress/e2e/events_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/events_test.spec.ts @@ -33,7 +33,7 @@ describe("Events tests", () => { const eventsTestUser = { eventsTestUserId: "", userRepresentation: { - username: "events-test", + username: "events-test" + crypto.randomUUID(), enabled: true, credentials: [{ value: "events-test" }], }, @@ -53,8 +53,8 @@ describe("Events tests", () => { describe("User events list", () => { beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToEvents(); }); @@ -89,8 +89,8 @@ describe("Events tests", () => { ]; beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToEvents(); }); @@ -106,6 +106,7 @@ describe("Events tests", () => { masthead.signOut(); loginPage.logIn(); + cy.visit("/"); sidebarPage.goToEvents(); eventsPage.tabUtils().checkIsCurrentTab(EventsTab.UserEvents); @@ -250,8 +251,8 @@ describe("Events tests", () => { describe("Admin events list", () => { beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToEvents(); eventsPage.goToAdminEventsTab(); }); @@ -288,8 +289,8 @@ describe("Events tests", () => { const operationTypes = ["UPDATE"]; beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToEvents(); eventsPage.goToAdminEventsTab(); }); @@ -361,8 +362,8 @@ describe("Events tests", () => { describe("Search admin events", () => { beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToEvents(); eventsPage.goToAdminEventsTab(); }); @@ -413,8 +414,8 @@ describe("Events tests", () => { describe("Check more button opens auth and representation dialogs", () => { beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToEvents(); eventsPage.goToAdminEventsTab(); }); diff --git a/apps/admin-ui/cypress/e2e/group_test.spec.ts b/apps/admin-ui/cypress/e2e/group_test.spec.ts index 51e1d1d757..622222888a 100644 --- a/apps/admin-ui/cypress/e2e/group_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/group_test.spec.ts @@ -52,8 +52,8 @@ describe("Group test", () => { after(() => adminClient.deleteGroups()); beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToGroups(); groupName = groupNamePrefix + crypto.randomUUID(); groupNames.push(groupName); diff --git a/apps/admin-ui/cypress/e2e/identity_providers_oidc_test.spec.ts b/apps/admin-ui/cypress/e2e/identity_providers_oidc_test.spec.ts index f7d56bf830..88e08e1102 100644 --- a/apps/admin-ui/cypress/e2e/identity_providers_oidc_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/identity_providers_oidc_test.spec.ts @@ -36,8 +36,8 @@ describe("OIDC identity provider test", () => { const secret = "123"; beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToIdentityProviders(); }); diff --git a/apps/admin-ui/cypress/e2e/identity_providers_saml_test.spec.ts b/apps/admin-ui/cypress/e2e/identity_providers_saml_test.spec.ts index 185504bd82..99d55644a5 100644 --- a/apps/admin-ui/cypress/e2e/identity_providers_saml_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/identity_providers_saml_test.spec.ts @@ -35,12 +35,9 @@ describe("SAML identity provider test", () => { describe("SAML identity provider creation", () => { const samlProviderName = "saml"; - before(() => { - keycloakBefore(); - loginPage.logIn(); - }); - beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.goToIdentityProviders(); }); diff --git a/apps/admin-ui/cypress/e2e/identity_providers_test.spec.ts b/apps/admin-ui/cypress/e2e/identity_providers_test.spec.ts index ba58f4f5f9..0748634e6d 100644 --- a/apps/admin-ui/cypress/e2e/identity_providers_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/identity_providers_test.spec.ts @@ -41,8 +41,8 @@ describe("Identity provider test", () => { const deleteSuccessMsg = "Provider successfully deleted."; beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToIdentityProviders(); }); diff --git a/apps/admin-ui/cypress/e2e/masthead_test.spec.ts b/apps/admin-ui/cypress/e2e/masthead_test.spec.ts index 48ddcc3ce2..0ba879ebc0 100644 --- a/apps/admin-ui/cypress/e2e/masthead_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/masthead_test.spec.ts @@ -26,8 +26,8 @@ const goToAcctMgtTest = () => { describe("Masthead tests in desktop mode", () => { beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); }); it("Test dropdown in desktop mode", () => { @@ -50,8 +50,8 @@ describe("Masthead tests in desktop mode", () => { describe("Masthead tests with kebab menu", () => { beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); masthead.setMobileMode(true); }); diff --git a/apps/admin-ui/cypress/e2e/partial_export_test.spec.ts b/apps/admin-ui/cypress/e2e/partial_export_test.spec.ts index df19a6c4b4..914837d7ca 100644 --- a/apps/admin-ui/cypress/e2e/partial_export_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/partial_export_test.spec.ts @@ -17,8 +17,8 @@ describe("Partial realm export", () => { const realmSettings = new RealmSettings(); beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToRealm(REALM_NAME).goToRealmSettings(); realmSettings.clickActionMenu(); modal.open(); diff --git a/apps/admin-ui/cypress/e2e/partial_import_test.spec.ts b/apps/admin-ui/cypress/e2e/partial_import_test.spec.ts index 3eae51d7c2..0da22e99f3 100644 --- a/apps/admin-ui/cypress/e2e/partial_import_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/partial_import_test.spec.ts @@ -14,21 +14,19 @@ describe("Partial import test", () => { const realmSettings = new RealmSettings(); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); + sidebarPage.goToRealm(TEST_REALM); sidebarPage.goToRealmSettings(); realmSettings.clickActionMenu(); }); - before(() => { - cy.wrap(null).then(() => - Promise.all([ - adminClient.createRealm(TEST_REALM), - adminClient.createRealm(TEST_REALM_2), - ]) - ); - keycloakBefore(); - loginPage.logIn(); - sidebarPage.goToRealm(TEST_REALM); - }); + before(() => + Promise.all([ + adminClient.createRealm(TEST_REALM), + adminClient.createRealm(TEST_REALM_2), + ]) + ); after(async () => { await Promise.all([ diff --git a/apps/admin-ui/cypress/e2e/realm_roles_test.spec.ts b/apps/admin-ui/cypress/e2e/realm_roles_test.spec.ts index 7c85fd4178..545c596bb2 100644 --- a/apps/admin-ui/cypress/e2e/realm_roles_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/realm_roles_test.spec.ts @@ -21,8 +21,8 @@ const rolesTab = new ClientRolesTab(); describe("Realm roles test", () => { beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToRealmRoles(); }); diff --git a/apps/admin-ui/cypress/e2e/realm_settings_client_policies_test.spec.ts b/apps/admin-ui/cypress/e2e/realm_settings_client_policies_test.spec.ts index db6ce1ee49..b82a73b4f7 100644 --- a/apps/admin-ui/cypress/e2e/realm_settings_client_policies_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/realm_settings_client_policies_test.spec.ts @@ -16,6 +16,8 @@ describe("Realm settings client policies tab tests", () => { const realmSettingsPage = new RealmSettingsPage(realmName); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage .waitForPageLoad() .goToRealm(realmName) @@ -24,11 +26,7 @@ describe("Realm settings client policies tab tests", () => { realmSettingsPage.goToClientPoliciesTab().goToClientPoliciesList(); }); - before(() => { - keycloakBefore(); - adminClient.createRealm(realmName); - loginPage.logIn(); - }); + before(() => adminClient.createRealm(realmName)); after(() => { adminClient.deleteRealm(realmName); diff --git a/apps/admin-ui/cypress/e2e/realm_settings_client_profiles_test.spec.ts b/apps/admin-ui/cypress/e2e/realm_settings_client_profiles_test.spec.ts index 53c352bd81..eeab299c16 100644 --- a/apps/admin-ui/cypress/e2e/realm_settings_client_profiles_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/realm_settings_client_profiles_test.spec.ts @@ -18,19 +18,15 @@ describe("Realm settings client profiles tab tests", () => { const realmSettingsPage = new RealmSettingsPage(realmName); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.waitForPageLoad().goToRealm(realmName).goToRealmSettings(); realmSettingsPage.goToClientPoliciesTab().goToClientProfilesList(); }); - before(() => { - keycloakBefore(); - adminClient.createRealm(realmName); - loginPage.logIn(); - }); + before(() => adminClient.createRealm(realmName)); - after(async () => { - await adminClient.deleteRealm(realmName); - }); + after(() => adminClient.deleteRealm(realmName)); it("Go to client policies profiles tab", () => { realmSettingsPage.shouldDisplayProfilesTab(); diff --git a/apps/admin-ui/cypress/e2e/realm_settings_events_test.spec.ts b/apps/admin-ui/cypress/e2e/realm_settings_events_test.spec.ts index 7db201c5b9..4f2a996930 100644 --- a/apps/admin-ui/cypress/e2e/realm_settings_events_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/realm_settings_events_test.spec.ts @@ -18,8 +18,8 @@ describe("Realm settings events tab tests", () => { const listingPage = new ListingPage(); beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToRealm(realmName); }); @@ -424,8 +424,8 @@ describe("Realm settings events tab tests", () => { describe("Realm settings events tab tests", () => { beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToRealmSettings(); cy.findByTestId("rs-realm-events-tab").click(); cy.findByTestId("rs-event-listeners-tab").click(); diff --git a/apps/admin-ui/cypress/e2e/realm_settings_general_tab_test.spec.ts b/apps/admin-ui/cypress/e2e/realm_settings_general_tab_test.spec.ts index 89c49c9e50..f5213a7f3b 100644 --- a/apps/admin-ui/cypress/e2e/realm_settings_general_tab_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/realm_settings_general_tab_test.spec.ts @@ -14,8 +14,8 @@ describe("Realm settings general tab tests", () => { const realmName = "Realm_" + crypto.randomUUID(); beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToRealm(realmName); }); diff --git a/apps/admin-ui/cypress/e2e/realm_settings_tabs_test.spec.ts b/apps/admin-ui/cypress/e2e/realm_settings_tabs_test.spec.ts index 17d8fda75a..95929dd061 100644 --- a/apps/admin-ui/cypress/e2e/realm_settings_tabs_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/realm_settings_tabs_test.spec.ts @@ -14,8 +14,8 @@ describe("Realm settings tabs tests", () => { const realmName = "Realm_" + crypto.randomUUID(); beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToRealm(realmName); }); diff --git a/apps/admin-ui/cypress/e2e/realm_settings_user_profile_tab.spec.ts b/apps/admin-ui/cypress/e2e/realm_settings_user_profile_tab.spec.ts index 99fd14f127..fa2823aace 100644 --- a/apps/admin-ui/cypress/e2e/realm_settings_user_profile_tab.spec.ts +++ b/apps/admin-ui/cypress/e2e/realm_settings_user_profile_tab.spec.ts @@ -26,17 +26,17 @@ describe("User profile tabs", () => { const realmName = "Realm_" + crypto.randomUUID(); const attributeName = "Test"; - before(() => { + before(() => adminClient.createRealm(realmName, { attributes: { userProfileEnabled: "true" }, - }); - keycloakBefore(); - loginPage.logIn(); - }); + }) + ); after(() => adminClient.deleteRealm(realmName)); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.goToRealm(realmName); sidebarPage.goToRealmSettings(); }); @@ -107,7 +107,7 @@ describe("User profile tabs", () => { getAttributesGroupTab(); listingPage.deleteItem("Test"); modalUtils.confirmModal(); - listingPage.itemExist("Test", false); + listingPage.checkEmptyList(); }); }); diff --git a/apps/admin-ui/cypress/e2e/realm_test.spec.ts b/apps/admin-ui/cypress/e2e/realm_test.spec.ts index f005845c44..a6bc188e58 100644 --- a/apps/admin-ui/cypress/e2e/realm_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/realm_test.spec.ts @@ -20,9 +20,9 @@ const editedRealmName = "Edited-Test-realm-" + crypto.randomUUID(); const testDisabledName = "Test-Disabled"; describe("Realm tests", () => { - before(() => { - keycloakBefore(); + beforeEach(() => { loginPage.logIn(); + keycloakBefore(); }); after(() => @@ -113,6 +113,7 @@ describe("Realm tests", () => { }); it("should change to Test realm", () => { + sidebarPage.goToRealm(editedRealmName); sidebarPage.getCurrentRealm().should("eq", editedRealmName); sidebarPage diff --git a/apps/admin-ui/cypress/e2e/realm_user_registration.spec.ts b/apps/admin-ui/cypress/e2e/realm_user_registration.spec.ts index 91db588d18..d255691887 100644 --- a/apps/admin-ui/cypress/e2e/realm_user_registration.spec.ts +++ b/apps/admin-ui/cypress/e2e/realm_user_registration.spec.ts @@ -21,13 +21,11 @@ describe("Realm settings - User registration tab", () => { const groupName = "The default group"; - before(() => { - adminClient.createGroup(groupName); - keycloakBefore(); - loginPage.logIn(); - }); + before(() => adminClient.createGroup(groupName)); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.goToRealmSettings(); userRegistration.goToTab(); }); diff --git a/apps/admin-ui/cypress/e2e/sessions_test.spec.ts b/apps/admin-ui/cypress/e2e/sessions_test.spec.ts index 6a74c84100..b1714904a3 100644 --- a/apps/admin-ui/cypress/e2e/sessions_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/sessions_test.spec.ts @@ -16,9 +16,10 @@ const groupPage = new GroupPage(); describe("Sessions test", () => { const admin = "admin"; const client = "security-admin-console"; + beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToSessions(); }); diff --git a/apps/admin-ui/cypress/e2e/user_fed_kerberos_test.spec.ts b/apps/admin-ui/cypress/e2e/user_fed_kerberos_test.spec.ts index 1bc4d73925..b1902b5231 100644 --- a/apps/admin-ui/cypress/e2e/user_fed_kerberos_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/user_fed_kerberos_test.spec.ts @@ -55,8 +55,8 @@ const changeSuccessMsg = describe("User Fed Kerberos tests", () => { beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToUserFederation(); }); diff --git a/apps/admin-ui/cypress/e2e/user_fed_ldap_hardcoded_mapper_test.spec.ts b/apps/admin-ui/cypress/e2e/user_fed_ldap_hardcoded_mapper_test.spec.ts index 1b4ff52001..54c73a392e 100644 --- a/apps/admin-ui/cypress/e2e/user_fed_ldap_hardcoded_mapper_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/user_fed_ldap_hardcoded_mapper_test.spec.ts @@ -74,8 +74,8 @@ const modifyDateMapper = "modify date"; describe("User Fed LDAP mapper tests", () => { beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToUserFederation(); }); diff --git a/apps/admin-ui/cypress/e2e/user_fed_ldap_mapper_test.spec.ts b/apps/admin-ui/cypress/e2e/user_fed_ldap_mapper_test.spec.ts index 20130552bf..2385035863 100644 --- a/apps/admin-ui/cypress/e2e/user_fed_ldap_mapper_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/user_fed_ldap_mapper_test.spec.ts @@ -77,8 +77,8 @@ const MsadAccountControlsMapper = "MSAD account controls"; describe("User Fed LDAP mapper tests", () => { beforeEach(() => { - keycloakBefore(); loginPage.logIn(); + keycloakBefore(); sidebarPage.goToUserFederation(); }); diff --git a/apps/admin-ui/cypress/e2e/user_fed_ldap_test.spec.ts b/apps/admin-ui/cypress/e2e/user_fed_ldap_test.spec.ts index 9c3fbb28d2..62e3b2b6aa 100644 --- a/apps/admin-ui/cypress/e2e/user_fed_ldap_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/user_fed_ldap_test.spec.ts @@ -97,12 +97,9 @@ const ldapTestFailMsg = "Error when trying to connect to LDAP. See server.log for details. LDAP test error"; describe("User Federation LDAP tests", () => { - before(() => { - keycloakBefore(); - loginPage.logIn(); - }); - beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.goToUserFederation(); cy.intercept("GET", "/admin/realms/master").as("getProvider"); }); diff --git a/apps/admin-ui/cypress/e2e/users_test.spec.ts b/apps/admin-ui/cypress/e2e/users_test.spec.ts index 2f19daf336..35bd2ce2be 100644 --- a/apps/admin-ui/cypress/e2e/users_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/users_test.spec.ts @@ -35,23 +35,21 @@ describe("User creation", () => { let itemIdWithCred = "user_crud_cred"; const itemCredential = "Password"; - before(() => { + before(async () => { for (let i = 0; i <= 2; i++) { groupName += "_" + crypto.randomUUID(); - adminClient.createGroup(groupName); + await adminClient.createGroup(groupName); groupsList = [...groupsList, groupName]; } - keycloakBefore(); - loginPage.logIn(); }); beforeEach(() => { + loginPage.logIn(); + keycloakBefore(); sidebarPage.goToUsers(); }); - after(() => { - adminClient.deleteGroups(); - }); + after(() => adminClient.deleteGroups()); it("Go to create User page", () => { createUserPage.goToCreateUser(); diff --git a/apps/admin-ui/cypress/support/e2e.ts b/apps/admin-ui/cypress/support/e2e.ts index 8b7a0d175d..3bfd6d1f36 100644 --- a/apps/admin-ui/cypress/support/e2e.ts +++ b/apps/admin-ui/cypress/support/e2e.ts @@ -23,12 +23,3 @@ import "./commands"; if (!Cypress.env("KEYCLOAK_SERVER")) { Cypress.env("KEYCLOAK_SERVER", "http://localhost:8180"); } - -// Always preserve session related cookies. -Cypress.Cookies.defaults({ - preserve: isSessionCookie, -}); - -function isSessionCookie({ name }: Cypress.Cookie) { - return name.startsWith("KEYCLOAK_") || name.startsWith("AUTH_SESSION_"); -} diff --git a/apps/admin-ui/cypress/support/pages/LoginPage.ts b/apps/admin-ui/cypress/support/pages/LoginPage.ts index ec245c100c..b3a134636f 100644 --- a/apps/admin-ui/cypress/support/pages/LoginPage.ts +++ b/apps/admin-ui/cypress/support/pages/LoginPage.ts @@ -14,20 +14,30 @@ export default class LoginPage { } logIn(userName = "admin", password = "admin") { - cy.get('[role="progressbar"]').should("not.exist"); - cy.get(this.oldLoadContainer).should("not.exist"); - cy.get(this.loadContainer).should("not.exist"); + cy.session( + [userName, password], + () => { + cy.visit("/"); + cy.get('[role="progressbar"]').should("not.exist"); + cy.get(this.oldLoadContainer).should("not.exist"); + cy.get(this.loadContainer).should("not.exist"); - cy.get("body") - .children() - .then((children) => { - if (children.length == 1) { - cy.get(this.userNameInput).type(userName); - cy.get(this.passwordInput).type(password); + cy.get("body") + .children() + .then((children) => { + if (children.length == 1) { + cy.get(this.userNameInput).type(userName); + cy.get(this.passwordInput).type(password); - cy.get(this.submitBtn).click(); - } - }); - cy.get('[role="progressbar"]').should("not.exist"); + cy.get(this.submitBtn).click(); + } + }); + }, + { + validate() { + cy.get('[role="progressbar"]').should("not.exist"); + }, + } + ); } } diff --git a/apps/admin-ui/cypress/support/pages/admin-ui/Masthead.ts b/apps/admin-ui/cypress/support/pages/admin-ui/Masthead.ts index ee1a1de454..33e7119036 100644 --- a/apps/admin-ui/cypress/support/pages/admin-ui/Masthead.ts +++ b/apps/admin-ui/cypress/support/pages/admin-ui/Masthead.ts @@ -47,6 +47,7 @@ export default class Masthead extends CommonElements { signOut() { this.userDropdown().click(); cy.get("#sign-out").click(); + Cypress.session.clearAllSavedSessions(); } accountManagement() { diff --git a/apps/admin-ui/cypress/support/pages/admin-ui/manage/authentication/FlowDetail.ts b/apps/admin-ui/cypress/support/pages/admin-ui/manage/authentication/FlowDetail.ts index bdd64a3d1a..693a0a7c0c 100644 --- a/apps/admin-ui/cypress/support/pages/admin-ui/manage/authentication/FlowDetail.ts +++ b/apps/admin-ui/cypress/support/pages/admin-ui/manage/authentication/FlowDetail.ts @@ -26,7 +26,7 @@ export default class FlowDetails { const executionId = rowDetails.children().attr("data-id"); cy.intercept( "POST", - `/admin/realms/test/authentication/executions/${executionId}/lower-priority` + `/admin/realms/test*/authentication/executions/${executionId}/lower-priority` ).as("priority"); callback(); cy.wait("@priority"); diff --git a/apps/admin-ui/cypress/support/pages/admin-ui/manage/identity_providers/social/ProviderSAMLSettings.ts b/apps/admin-ui/cypress/support/pages/admin-ui/manage/identity_providers/social/ProviderSAMLSettings.ts index b3f0d91cb5..4de2937508 100644 --- a/apps/admin-ui/cypress/support/pages/admin-ui/manage/identity_providers/social/ProviderSAMLSettings.ts +++ b/apps/admin-ui/cypress/support/pages/admin-ui/manage/identity_providers/social/ProviderSAMLSettings.ts @@ -85,17 +85,17 @@ export default class ProviderSAMLSettings extends PageObject { } public typeSsoServiceUrl(url: string) { - cy.findByTestId(this.ssoServiceUrl).click().clear().type(url); + cy.findByTestId(this.ssoServiceUrl).clear().type(url); return this; } public typeSingleLogoutServiceUrl(url: string) { - cy.findByTestId(this.singleLogoutServiceUrl).click().clear().type(url); + cy.findByTestId(this.singleLogoutServiceUrl).clear().type(url); return this; } public typeX509Certs(cert: string) { - cy.findByTestId(this.validatingX509Certs).click().clear().type(cert); + cy.findByTestId(this.validatingX509Certs).clear().type(cert); return this; } diff --git a/apps/admin-ui/cypress/support/pages/admin-ui/manage/sessions/SessionsPage.ts b/apps/admin-ui/cypress/support/pages/admin-ui/manage/sessions/SessionsPage.ts index 3ba6afe09b..e3f1eef436 100644 --- a/apps/admin-ui/cypress/support/pages/admin-ui/manage/sessions/SessionsPage.ts +++ b/apps/admin-ui/cypress/support/pages/admin-ui/manage/sessions/SessionsPage.ts @@ -19,6 +19,7 @@ export default class SessionsPage { cy.findByTestId(this.actionDropdown).should("exist").click(); cy.findByTestId(this.revocationActionItem).should("exist").click(); cy.findByTestId(this.setToNowButton).should("exist").click(); + Cypress.session.clearAllSavedSessions(); } checkNotBeforeValueExists() { diff --git a/apps/admin-ui/package.json b/apps/admin-ui/package.json index db6d5a70cd..eff62c8fc6 100644 --- a/apps/admin-ui/package.json +++ b/apps/admin-ui/package.json @@ -102,7 +102,7 @@ "@types/react": "^17.0.53", "@types/react-dom": "^17.0.18", "@vitejs/plugin-react": "^2.2.0", - "cypress": "^11.2.0", + "cypress": "^12.5.1", "del": "^7.0.0", "jsdom": "^21.1.0", "ldap-server-mock": "^6.0.1", diff --git a/package-lock.json b/package-lock.json index 1211adf8ba..0027d40114 100644 --- a/package-lock.json +++ b/package-lock.json @@ -100,7 +100,7 @@ "@types/react": "^17.0.53", "@types/react-dom": "^17.0.18", "@vitejs/plugin-react": "^2.2.0", - "cypress": "^11.2.0", + "cypress": "^12.5.1", "del": "^7.0.0", "jsdom": "^21.1.0", "ldap-server-mock": "^6.0.1", @@ -111,6 +111,314 @@ "webpack": "^5.75.0" } }, + "apps/admin-ui/node_modules/@types/node": { + "version": "14.18.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz", + "integrity": "sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==", + "dev": true + }, + "apps/admin-ui/node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "apps/admin-ui/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "apps/admin-ui/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "apps/admin-ui/node_modules/cypress": { + "version": "12.5.1", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.5.1.tgz", + "integrity": "sha512-ZmCmJ3lsyeOpBfh410m5+AO2CO1AxAzFBt7k6/uVbNcrNZje1vdiwYTpj2ksPKg9mjr9lR6V8tmlDNMvr4H/YQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^5.1.0", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.6", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^14.0.0 || ^16.0.0 || >=18.0.0" + } + }, + "apps/admin-ui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "apps/admin-ui/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "apps/admin-ui/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "apps/admin-ui/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "apps/admin-ui/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "apps/admin-ui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "apps/admin-ui/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "apps/admin-ui/node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "apps/admin-ui/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "apps/admin-ui/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "apps/admin-ui/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "apps/admin-ui/node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "apps/admin-ui/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "apps/admin-ui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "apps/admin-ui/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "apps/admin-ui/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "apps/keycloak-server": { "dependencies": { "@octokit/rest": "^19.0.7", @@ -7130,6 +7438,7 @@ "integrity": "sha512-u61UGwtu7lpsNWLUma/FKNOsrjcI6wleNmda/TyKHe0dOBcVjbCPlp1N6uwFZ0doXev7f/91YDpU9bqDCFeBLA==", "dev": true, "hasInstallScript": true, + "peer": true, "dependencies": { "@cypress/request": "^2.88.10", "@cypress/xvfb": "^1.2.4", @@ -7185,19 +7494,22 @@ "version": "14.18.36", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz", "integrity": "sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/cypress/node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/cypress/node_modules/cli-truncate": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, + "peer": true, "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -7214,6 +7526,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true, + "peer": true, "engines": { "node": ">= 6" } @@ -7222,13 +7535,15 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "peer": true }, "node_modules/cypress/node_modules/execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, + "peer": true, "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -7252,6 +7567,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "peer": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -7267,6 +7583,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "peer": true, "dependencies": { "pump": "^3.0.0" }, @@ -7282,6 +7599,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, + "peer": true, "engines": { "node": ">=8.12.0" } @@ -7291,6 +7609,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -7300,6 +7619,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "peer": true, "engines": { "node": ">=8" }, @@ -7312,6 +7632,7 @@ "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", "dev": true, + "peer": true, "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -7339,6 +7660,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "peer": true, "engines": { "node": ">=6" } @@ -7348,6 +7670,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "peer": true, "dependencies": { "path-key": "^3.0.0" }, @@ -7360,6 +7683,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "peer": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -7375,6 +7699,7 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, + "peer": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -7385,6 +7710,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -7399,6 +7725,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "peer": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7413,6 +7740,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "peer": true, "engines": { "node": ">=6" } @@ -7422,6 +7750,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" },