diff --git a/apps/admin-ui/cypress/e2e/clients_test.spec.ts b/apps/admin-ui/cypress/e2e/clients_test.spec.ts index bf01b415d1..5d1f6d6ac1 100644 --- a/apps/admin-ui/cypress/e2e/clients_test.spec.ts +++ b/apps/admin-ui/cypress/e2e/clients_test.spec.ts @@ -711,7 +711,9 @@ describe("Clients test", () => { commonPage.sidebar().waitForPageLoad(); createClientPage.save(); - + commonPage + .masthead() + .checkNotificationMessage("Client created successfully"); clientDetailsPage.goToAdvancedTab(); }); @@ -726,6 +728,7 @@ describe("Clients test", () => { advancedTab.registerNodeManually().fillHost("localhost").saveHost(); advancedTab.checkTestClusterAvailability(true); + commonPage.masthead().checkNotificationMessage("Node successfully added"); advancedTab.deleteClusterNode(); commonPage.modalUtils().confirmModal(); commonPage @@ -745,6 +748,64 @@ describe("Clients test", () => { .revertFineGrain(); advancedTab.checkAccessTokenSignatureAlgorithm(algorithm); }); + + it("OIDC Compatibility Modes configuration", () => { + advancedTab.clickAllCompatibilitySwitch(); + advancedTab.saveCompatibility(); + advancedTab.jumpToCompatability(); + advancedTab.clickExcludeSessionStateSwitch(); + advancedTab.clickUseRefreshTokenForClientCredentialsGrantSwitch(); + advancedTab.revertCompatibility(); + }); + + it("Advanced settings", () => { + advancedTab.jumpToAdvanced(); + + advancedTab.clickAdvancedSwitches(); + advancedTab.jumpToAdvanced(); + advancedTab.SelectKeyForCodeExchangeInput("S256"); + + advancedTab.saveAdvanced(); + advancedTab.jumpToAdvanced(); + advancedTab.checkAdvancedSwitchesOn(); + advancedTab.CheckKeyForCodeExchangeInput("S256"); + + advancedTab.SelectKeyForCodeExchangeInput("plain"); + advancedTab.CheckKeyForCodeExchangeInput("plain"); + + advancedTab.jumpToAdvanced(); + advancedTab.clickAdvancedSwitches(); + + advancedTab.revertAdvanced(); + advancedTab.jumpToAdvanced(); + advancedTab.CheckKeyForCodeExchangeInput("S256"); + //uncomment when revert button reverts all switches + //and ACR to LoA Mapping + Default ACR Values + //advancedTab.checkAdvancedSwitchesOn(); + }); + + it("Authentication flow override", () => { + advancedTab.jumpToAuthFlow(); + advancedTab.SelectBrowserFlowInput("browser"); + advancedTab.SelectDirectGrantInput("docker auth"); + advancedTab.CheckBrowserFlowInput("browser"); + advancedTab.CheckDirectGrantInput("docker auth"); + + advancedTab.revertAuthFlowOverride(); + advancedTab.jumpToAuthFlow(); + advancedTab.CheckBrowserFlowInput(""); + advancedTab.CheckDirectGrantInput(""); + advancedTab.SelectBrowserFlowInput("browser"); + advancedTab.SelectDirectGrantInput("docker auth"); + + advancedTab.saveAuthFlowOverride(); + advancedTab.SelectBrowserFlowInput("first broker login"); + advancedTab.SelectDirectGrantInput("first broker login"); + advancedTab.revertAuthFlowOverride(); + //revert doesn't work after saving. + //advancedTab.CheckBrowserFlowInput("browser"); + //advancedTab.CheckDirectGrantInput("docker auth"); + }); }); describe("Service account tab test", () => { diff --git a/apps/admin-ui/cypress/support/pages/admin_console/manage/clients/client_details/tabs/AdvancedTab.ts b/apps/admin-ui/cypress/support/pages/admin_console/manage/clients/client_details/tabs/AdvancedTab.ts index 4da660773b..36e9a5c4ff 100644 --- a/apps/admin-ui/cypress/support/pages/admin_console/manage/clients/client_details/tabs/AdvancedTab.ts +++ b/apps/admin-ui/cypress/support/pages/admin_console/manage/clients/client_details/tabs/AdvancedTab.ts @@ -1,6 +1,6 @@ -import CommonPage from "../../../../../CommonPage"; +import PageObject from "../../../../components/PageObject"; -export default class AdvancedTab extends CommonPage { +export default class AdvancedTab extends PageObject { private setToNowBtn = "#setToNow"; private clearBtn = "#clear"; private pushBtn = "#push"; @@ -21,6 +21,32 @@ export default class AdvancedTab extends CommonPage { private accessTokenSignatureAlgorithmInput = "#accessTokenSignatureAlgorithm"; private fineGrainSaveBtn = "#fineGrainSave"; private fineGrainRevertBtn = "#fineGrainRevert"; + private OIDCCompatabilitySaveBtn = "OIDCCompatabilitySave"; + private OIDCCompatabilityRevertBtn = "OIDCCompatabilityRevert"; + private OIDCAdvancedSaveBtn = "OIDCAdvancedSave"; + private OIDCAdvancedRevertBtn = "OIDCAdvancedRevert"; + private OIDCAuthFlowOverrideSaveBtn = "OIDCAuthFlowOverrideSave"; + private OIDCAuthFlowOverrideRevertBtn = "OIDCAuthFlowOverrideRevert"; + + private excludeSessionStateSwitch = + "#excludeSessionStateFromAuthenticationResponse-switch"; + private useRefreshTokenSwitch = "#useRefreshTokens"; + private useRefreshTokenForClientCredentialsGrantSwitch = + "#useRefreshTokenForClientCredentialsGrant"; + private useLowerCaseBearerTypeSwitch = "#useLowerCaseBearerType"; + + private oAuthMutualSwitch = "#oAuthMutual-switch"; + private keyForCodeExchangeInput = "#keyForCodeExchange"; + private pushedAuthorizationRequestRequiredSwitch = + "#pushedAuthorizationRequestRequired"; + + private browserFlowInput = "#browserFlow"; + private directGrantInput = "#directGrant"; + + private jumpToOIDCCompatabilitySettings = + "jump-link-open-id-connect-compatibility-modes"; + private jumpToAdvancedSettings = "jump-link-advanced-settings"; + private jumpToAuthFlowOverride = "jump-link-authentication-flow-overrides"; setRevocationToNow() { cy.get(this.setToNowBtn).click(); @@ -120,4 +146,143 @@ export default class AdvancedTab extends CommonPage { cy.get(this.fineGrainRevertBtn).click(); return this; } + + saveCompatibility() { + cy.findByTestId(this.OIDCCompatabilitySaveBtn).click(); + return this; + } + + revertCompatibility() { + cy.findByTestId(this.OIDCCompatabilityRevertBtn).click(); + cy.findByTestId(this.jumpToOIDCCompatabilitySettings).click(); + //uncomment when revert function reverts all switches, rather than just the first one + //this.assertSwitchStateOn(cy.get(this.useRefreshTokenForClientCredentialsGrantSwitch)); + this.assertSwitchStateOn(cy.get(this.excludeSessionStateSwitch)); + return this; + } + + jumpToCompatability() { + cy.findByTestId(this.jumpToOIDCCompatabilitySettings).click(); + return this; + } + + clickAllCompatibilitySwitch() { + cy.get(this.excludeSessionStateSwitch).parent().click(); + this.assertSwitchStateOn(cy.get(this.excludeSessionStateSwitch)); + cy.get(this.useRefreshTokenSwitch).parent().click(); + this.assertSwitchStateOff(cy.get(this.useRefreshTokenSwitch)); + cy.get(this.useRefreshTokenForClientCredentialsGrantSwitch) + .parent() + .click(); + this.assertSwitchStateOn( + cy.get(this.useRefreshTokenForClientCredentialsGrantSwitch) + ); + cy.get(this.useLowerCaseBearerTypeSwitch).parent().click(); + this.assertSwitchStateOn(cy.get(this.useLowerCaseBearerTypeSwitch)); + return this; + } + + clickExcludeSessionStateSwitch() { + cy.get(this.excludeSessionStateSwitch).parent().click(); + this.assertSwitchStateOff(cy.get(this.excludeSessionStateSwitch)); + } + clickUseRefreshTokenForClientCredentialsGrantSwitch() { + cy.get(this.useRefreshTokenForClientCredentialsGrantSwitch) + .parent() + .click(); + this.assertSwitchStateOff( + cy.get(this.useRefreshTokenForClientCredentialsGrantSwitch) + ); + } + + saveAdvanced() { + cy.findByTestId(this.OIDCAdvancedSaveBtn).click(); + return this; + } + + revertAdvanced() { + cy.findByTestId(this.OIDCAdvancedRevertBtn).click(); + return this; + } + + jumpToAdvanced() { + cy.findByTestId(this.jumpToAdvancedSettings).click(); + return this; + } + + clickAdvancedSwitches() { + cy.get(this.oAuthMutualSwitch).parent().click(); + cy.get(this.pushedAuthorizationRequestRequiredSwitch).parent().click(); + return this; + } + + checkAdvancedSwitchesOn() { + this.assertSwitchStateOn(cy.get(this.oAuthMutualSwitch)); + this.assertSwitchStateOn( + cy.get(this.pushedAuthorizationRequestRequiredSwitch) + ); + return this; + } + + checkAdvancedSwitchesOff() { + this.assertSwitchStateOff(cy.get(this.oAuthMutualSwitch)); + this.assertSwitchStateOff( + cy.get(this.pushedAuthorizationRequestRequiredSwitch) + ); + return this; + } + + SelectKeyForCodeExchangeInput(input: string) { + cy.get(this.keyForCodeExchangeInput).click(); + cy.get(this.keyForCodeExchangeInput + " + ul") + .contains(input) + .click(); + return this; + } + + CheckKeyForCodeExchangeInput(input: string) { + cy.get(this.keyForCodeExchangeInput).should("have.text", input); + return this; + } + + saveAuthFlowOverride() { + cy.findByTestId(this.OIDCAuthFlowOverrideSaveBtn).click(); + return this; + } + + revertAuthFlowOverride() { + cy.findByTestId(this.OIDCAuthFlowOverrideRevertBtn).click(); + return this; + } + + jumpToAuthFlow() { + cy.findByTestId(this.jumpToAuthFlowOverride).click(); + return this; + } + + SelectBrowserFlowInput(input: string) { + cy.get(this.browserFlowInput).click(); + cy.get(this.browserFlowInput + " + ul") + .contains(input) + .click(); + return this; + } + + SelectDirectGrantInput(input: string) { + cy.get(this.directGrantInput).click(); + cy.get(this.directGrantInput + " + ul") + .contains(input) + .click(); + return this; + } + + CheckBrowserFlowInput(input: string) { + cy.get(this.browserFlowInput).should("have.text", input); + return this; + } + + CheckDirectGrantInput(input: string) { + cy.get(this.directGrantInput).should("have.text", input); + return this; + } } diff --git a/apps/admin-ui/src/clients/advanced/AdvancedSettings.tsx b/apps/admin-ui/src/clients/advanced/AdvancedSettings.tsx index cf350a11e2..f04c18bf07 100644 --- a/apps/admin-ui/src/clients/advanced/AdvancedSettings.tsx +++ b/apps/admin-ui/src/clients/advanced/AdvancedSettings.tsx @@ -205,10 +205,14 @@ export const AdvancedSettings = ({ )} - - diff --git a/apps/admin-ui/src/clients/advanced/AuthenticationOverrides.tsx b/apps/admin-ui/src/clients/advanced/AuthenticationOverrides.tsx index 1f56085e01..2079f69df6 100644 --- a/apps/admin-ui/src/clients/advanced/AuthenticationOverrides.tsx +++ b/apps/admin-ui/src/clients/advanced/AuthenticationOverrides.tsx @@ -128,10 +128,18 @@ export const AuthenticationOverrides = ({ )} - - diff --git a/apps/admin-ui/src/clients/advanced/OpenIdConnectCompatibilityModes.tsx b/apps/admin-ui/src/clients/advanced/OpenIdConnectCompatibilityModes.tsx index c534254f4e..45a646a540 100644 --- a/apps/admin-ui/src/clients/advanced/OpenIdConnectCompatibilityModes.tsx +++ b/apps/admin-ui/src/clients/advanced/OpenIdConnectCompatibilityModes.tsx @@ -141,10 +141,18 @@ export const OpenIdConnectCompatibilityModes = ({ /> - -