Search in sources :

Example 11 with JSObjectBuilder

use of org.keycloak.testsuite.util.javascript.JSObjectBuilder in project keycloak by keycloak.

the class JavascriptAdapterTest method checkInitWithInvalidRealm.

// In case of incorrect/unavailable realm provided in KeycloakConfig,
// JavaScript Adapter init() should fail-fast and reject Promise with KeycloakError.
@Test
public void checkInitWithInvalidRealm() {
    JSObjectBuilder keycloakConfig = JSObjectBuilder.create().add("url", authServerContextRootPage + "/auth").add("realm", "invalid-realm-name").add("clientId", CLIENT_ID);
    JSObjectBuilder initOptions = defaultArguments().add("messageReceiveTimeout", 5000);
    testExecutor.configure(keycloakConfig).init(initOptions, assertErrorResponse("Timeout when waiting for 3rd party check iframe message."));
}
Also used : JSObjectBuilder(org.keycloak.testsuite.util.javascript.JSObjectBuilder) Test(org.junit.Test)

Example 12 with JSObjectBuilder

use of org.keycloak.testsuite.util.javascript.JSObjectBuilder in project keycloak by keycloak.

the class JavascriptAdapterTest method testScopeInInitOptionsShouldBeConsideredByLoginUrl.

/**
 * Test for scope handling via {@code initOptions}: <pre>{@code
 * Keycloak keycloak = new Keycloak(); keycloak.init({.... scope: "profile email phone"})
 * }</pre>
 * See KEYCLOAK-14412
 */
@Test
public void testScopeInInitOptionsShouldBeConsideredByLoginUrl() {
    JSObjectBuilder initOptions = defaultArguments().loginRequiredOnLoad().add("scope", "openid profile email phone");
    try {
        testExecutor.init(initOptions);
        throw new RuntimeException("Probably the login-required OnLoad mode doesn't work, because testExecutor should fail with error that page was redirected.");
    } catch (WebDriverException ex) {
    // should happen
    }
    testExecutor.loginForm(testUser, this::assertOnTestAppUrl).init(initOptions, this::assertAdapterIsLoggedIn).executeScript("return window.keycloak.tokenParsed.scope", assertOutputContains("phone"));
}
Also used : JSObjectBuilder(org.keycloak.testsuite.util.javascript.JSObjectBuilder) WebDriverException(org.openqa.selenium.WebDriverException) Test(org.junit.Test)

Example 13 with JSObjectBuilder

use of org.keycloak.testsuite.util.javascript.JSObjectBuilder in project keycloak by keycloak.

the class JavascriptAdapterTest method testAcrInLoginOptionsShouldBeConsideredByLoginUrl.

/**
 * Test for acr handling via {@code loginOptions}: <pre>{@code
 * Keycloak keycloak = new Keycloak(); keycloak.login({.... acr: { values: ["foo", "bar"], essential: false}})
 * }</pre>
 */
@Test
public void testAcrInLoginOptionsShouldBeConsideredByLoginUrl() {
    // Test when no "acr" option given. Claims parameter won't be passed to Keycloak server
    testExecutor.configure().init(defaultArguments());
    JSObjectBuilder loginOptions = JSObjectBuilder.create();
    testExecutor.login(loginOptions, (JavascriptStateValidator) (driver, output, events) -> {
        try {
            String queryString = new URL(driver.getCurrentUrl()).getQuery();
            String claimsParam = UriUtils.decodeQueryString(queryString).getFirst(OIDCLoginProtocol.CLAIMS_PARAM);
            Assert.assertNull(claimsParam);
        } catch (IOException ioe) {
            throw new AssertionError(ioe);
        }
    });
    // Test given "acr" option will be translated into the "claims" parameter passed to Keycloak server
    jsDriver.navigate().to(testAppUrl);
    testExecutor.configure().init(defaultArguments());
    JSObjectBuilder acr1 = JSObjectBuilder.create().add("values", new String[] { "foo", "bar" }).add("essential", false);
    loginOptions = JSObjectBuilder.create().add("acr", acr1);
    testExecutor.login(loginOptions, (JavascriptStateValidator) (driver, output, events) -> {
        try {
            String queryString = new URL(driver.getCurrentUrl()).getQuery();
            String claimsParam = UriUtils.decodeQueryString(queryString).getFirst(OIDCLoginProtocol.CLAIMS_PARAM);
            Assert.assertNotNull(claimsParam);
            ClaimsRepresentation claimsRep = JsonSerialization.readValue(claimsParam, ClaimsRepresentation.class);
            ClaimsRepresentation.ClaimValue<String> claimValue = claimsRep.getClaimValue(IDToken.ACR, ClaimsRepresentation.ClaimContext.ID_TOKEN, String.class);
            Assert.assertNames(claimValue.getValues(), "foo", "bar");
            Assert.assertThat(claimValue.isEssential(), is(false));
        } catch (IOException ioe) {
            throw new AssertionError(ioe);
        }
    });
}
Also used : JavascriptBrowser(org.keycloak.testsuite.util.JavascriptBrowser) URL(java.net.URL) JavascriptStateValidator(org.keycloak.testsuite.util.javascript.JavascriptStateValidator) AssertEvents(org.keycloak.testsuite.AssertEvents) WebElement(org.openqa.selenium.WebElement) Page(org.jboss.arquillian.graphene.page.Page) OAuthClient(org.keycloak.testsuite.util.OAuthClient) Assert.assertThat(org.junit.Assert.assertThat) Map(java.util.Map) ClientResource(org.keycloak.admin.client.resource.ClientResource) IsMapContaining.hasEntry(org.hamcrest.collection.IsMapContaining.hasEntry) UriUtils(org.keycloak.common.util.UriUtils) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) DisableFeature(org.keycloak.testsuite.arquillian.annotation.DisableFeature) AUTH_SERVER_HOST(org.keycloak.testsuite.util.ServerURLs.AUTH_SERVER_HOST) UpdatePassword(org.keycloak.testsuite.auth.page.login.UpdatePassword) IDToken(org.keycloak.representations.IDToken) RealmRepresentation(org.keycloak.representations.idm.RealmRepresentation) EventRepresentation(org.keycloak.representations.idm.EventRepresentation) XMLHttpRequest(org.keycloak.testsuite.util.javascript.XMLHttpRequest) ClientRepresentation(org.keycloak.representations.idm.ClientRepresentation) List(java.util.List) URLAssert.assertCurrentUrlStartsWith(org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith) TimeoutException(org.openqa.selenium.TimeoutException) Details(org.keycloak.events.Details) OIDCLoginProtocol(org.keycloak.protocol.oidc.OIDCLoginProtocol) Matchers.greaterThan(org.hamcrest.Matchers.greaterThan) Matchers.is(org.hamcrest.Matchers.is) OAuth2Constants(org.keycloak.OAuth2Constants) WaitUtils.waitUntilElement(org.keycloak.testsuite.util.WaitUtils.waitUntilElement) CoreMatchers.anyOf(org.hamcrest.CoreMatchers.anyOf) Profile(org.keycloak.common.Profile) Assert(org.keycloak.testsuite.Assert) AuthServerContainerExclude(org.keycloak.testsuite.arquillian.annotation.AuthServerContainerExclude) WebDriver(org.openqa.selenium.WebDriver) WebDriverException(org.openqa.selenium.WebDriverException) JavascriptTestExecutor(org.keycloak.testsuite.util.javascript.JavascriptTestExecutor) OAuthGrant(org.keycloak.testsuite.auth.page.login.OAuthGrant) RealmBuilder(org.keycloak.testsuite.util.RealmBuilder) UserBuilder(org.keycloak.testsuite.util.UserBuilder) CoreMatchers.both(org.hamcrest.CoreMatchers.both) Matchers.lessThan(org.hamcrest.Matchers.lessThan) URLAssert.assertCurrentUrlDoesntStartWith(org.keycloak.testsuite.util.URLAssert.assertCurrentUrlDoesntStartWith) Assume(org.junit.Assume) Math.toIntExact(java.lang.Math.toIntExact) AuthServer(org.keycloak.testsuite.arquillian.annotation.AuthServerContainerExclude.AuthServer) Retry(org.keycloak.common.util.Retry) Before(org.junit.Before) ClaimsRepresentation(org.keycloak.representations.ClaimsRepresentation) ApiUtil(org.keycloak.testsuite.admin.ApiUtil) SuiteContext(org.keycloak.testsuite.arquillian.SuiteContext) UserRepresentation(org.keycloak.representations.idm.UserRepresentation) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) EventType(org.keycloak.events.EventType) IOException(java.io.IOException) WaitUtils.waitForPageToLoad(org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad) JsonSerialization(org.keycloak.util.JsonSerialization) Rule(org.junit.Rule) JSObjectBuilder(org.keycloak.testsuite.util.javascript.JSObjectBuilder) Applications(org.keycloak.testsuite.auth.page.account.Applications) Assert.assertEquals(org.junit.Assert.assertEquals) ClaimsRepresentation(org.keycloak.representations.ClaimsRepresentation) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) IOException(java.io.IOException) URL(java.net.URL) JSObjectBuilder(org.keycloak.testsuite.util.javascript.JSObjectBuilder) Test(org.junit.Test)

Example 14 with JSObjectBuilder

use of org.keycloak.testsuite.util.javascript.JSObjectBuilder in project keycloak by keycloak.

the class JavascriptAdapterTest method testSilentCheckSsoLoginWithLoginIframeDisabled.

@Test
public void testSilentCheckSsoLoginWithLoginIframeDisabled() {
    JSObjectBuilder checkSSO = defaultArguments().checkSSOOnLoad().add("silentCheckSsoRedirectUri", authServerContextRootPage.toString().replace(AUTH_SERVER_HOST, JS_APP_HOST) + JAVASCRIPT_URL + "/silent-check-sso.html");
    testExecutor.init(checkSSO, this::assertInitNotAuth, SuiteContext.BROWSER_STRICT_COOKIES).login(this::assertOnLoginPage).loginForm(testUser, this::assertOnTestAppUrl).init(checkSSO, this::assertInitAuth, false).refresh().init(checkSSO.disableCheckLoginIframe(), this::assertInitAuth, SuiteContext.BROWSER_STRICT_COOKIES);
}
Also used : JSObjectBuilder(org.keycloak.testsuite.util.javascript.JSObjectBuilder) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)14 JSObjectBuilder (org.keycloak.testsuite.util.javascript.JSObjectBuilder)14 CoreMatchers.containsString (org.hamcrest.CoreMatchers.containsString)3 IOException (java.io.IOException)2 Math.toIntExact (java.lang.Math.toIntExact)2 URL (java.net.URL)2 List (java.util.List)2 Map (java.util.Map)2 CoreMatchers.anyOf (org.hamcrest.CoreMatchers.anyOf)2 CoreMatchers.both (org.hamcrest.CoreMatchers.both)2 Matchers.greaterThan (org.hamcrest.Matchers.greaterThan)2 Matchers.is (org.hamcrest.Matchers.is)2 Matchers.lessThan (org.hamcrest.Matchers.lessThan)2 IsMapContaining.hasEntry (org.hamcrest.collection.IsMapContaining.hasEntry)2 Page (org.jboss.arquillian.graphene.page.Page)2 Assert.assertEquals (org.junit.Assert.assertEquals)2 Assert.assertThat (org.junit.Assert.assertThat)2 Assert.assertTrue (org.junit.Assert.assertTrue)2 Assume (org.junit.Assume)2 Before (org.junit.Before)2