8000 Migrate organization member package to the new testsuite by vramik · Pull Request #50672 · keycloak/keycloak · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ public String getUsername() {
return createdRepresentation.getUsername();
}

public String getEmail() {
return createdRepresentation.getEmail();
}

public String getPassword() {
return getPassword(createdRepresentation);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ public boolean isSocialButtonPresent(String alias) {
return !driver.driver().findElements(By.id(id)).isEmpty();
}

public boolean isPasswordInputPresent() {
return !driver.driver().findElements(By.id("password")).isEmpty();
}

public void rememberMe(boolean value) {
boolean selected = isRememberMe();
if ((value && !selected) || !value && selected) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import org.keycloak.representations.idm.ProtocolMapperRepresentation;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.testframework.annotations.InjectRealm;
import org.keycloak.testframework.realm.ClientBuilder;
import org.keycloak.testframework.realm.CredentialBuilder;
import org.keycloak.testframework.realm.IdentityProviderBuilder;
import org.keycloak.testframework.realm.ManagedRealm;
Expand Down Expand Up @@ -75,25 +76,25 @@ protected OrganizationRepresentation createOrganization(String name) {
}

protected OrganizationRepresentation createOrganization(String name, String... orgDomains) {
return createOrganization(realm.admin(), name, orgDomains);
return createOrganization(realm, name, orgDomains);
}

protected OrganizationRepresentation createOrganization(RealmResource realmResource, String name, String... orgDomains) {
return createOrganization(realmResource, name, createOrgBroker(name), orgDomains);
protected OrganizationRepresentation createOrganization(ManagedRealm managedRealm, String name, String... orgDomains) {
return createOrganization(managedRealm, name, createOrgBroker(name), orgDomains);
}

protected OrganizationRepresentation createOrganization(String name, boolean isBrokerPublic) {
IdentityProviderRepresentation broker = createOrgBroker(name);
broker.setHideOnLogin(!isBrokerPublic);
return createOrganization(realm.admin(), name, broker, name + ".org");
return createOrganization(realm, name, broker, name + ".org");
}

protected OrganizationRepresentation createOrganization(RealmResource realmResource, String name,
protected OrganizationRepresentation createOrganization(ManagedRealm managedRealm, String name,
IdentityProviderRepresentation broker, String... orgDomains) {
OrganizationRepresentation org = createRepresentation(name, orgDomains);
String id;

try (Response response = realmResource.organizations().create(org)) {
try (Response response = managedRealm.admin().organizations().create(org)) {
assertEquals(Status.CREATED.getStatusCode(), response.getStatus());
id = ApiUtil.getCreatedId(response);
}
Expand All @@ -102,20 +103,20 @@ protected OrganizationRepresentation createOrganization(RealmResource realmResou
broker.getConfig().put(OrganizationModel.ORGANIZATION_DOMAIN_ATTRIBUTE, orgDomains[0]);
broker.getConfig().put(IdentityProviderRedirectMode.EMAIL_MATCH.getKey(), Boolean.TRUE.toString());
}
realmResource.identityProviders().create(broker).close();
managedRealm.admin().identityProviders().create(broker).close();

String brokerAlias = broker.getAlias();
realm.cleanup().add(r -> {
managedRealm.cleanup().add(r -> {
Comment thread
vramik marked this conversation as resolved.
Resolved
try {
r.identityProviders().get(brokerAlias).remove();
} catch (NotFoundException ignored) {}
Comment thread
vramik marked this conversation as resolved.
Resolved
});
Comment thread
vramik marked this conversation as resolved.
Resolved

realmResource.organizations().get(id).identityProviders().addIdentityProvider(broker.getAlias()).close();
org = realmResource.organizations().get(id).toRepresentation();
managedRealm.admin().organizations().get(id).identityProviders().addIdentityProvider(broker.getAlias()).close();
org = managedRealm.admin().organizations().get(id).toRepresentation();

String orgId = id;
realm.cleanup().add(r -> {
managedRealm.cleanup().add(r -> {
try {
r.organizations().get(orgId).delete().close();
} catch (NotFoundException ignored) {}
Expand Down Expand Up @@ -244,6 +245,35 @@ protected IdentityProviderRepresentation createOrgBroker(String orgName) {
.build();
}

public static void setUpOrgBroker(ManagedRealm providerRealm, ManagedRealm consumerRealm, String orgDomain) {
IdentityProviderRepresentation idp = new IdentityProviderRepresentation();
idp.setAlias(IDP_ALIAS);
idp.setProviderId("keycloak-oidc");
idp.setEnabled(true);
idp.setStoreToken(false);
idp.setTrustEmail(true);

String providerBaseUrl = providerRealm.getBaseUrl();
idp.setConfig(Map.of(
"clientId", CLIENT_ID,
"clientSecret", CLIENT_SECRET,
"authorizationUrl", providerBaseUrl + "/protocol/openid-connect/auth",
"tokenUrl", providerBaseUrl + "/protocol/openid-connect/token",
"userInfoUrl", providerBaseUrl + "/protocol/openid-connect/userinfo",
"defaultScope", "email profile",
"syncMode", "IMPORT",
OrganizationModel.ORGANIZATION_DOMAIN_ATTRIBUTE, orgDomain,
IdentityProviderRedirectMode.EMAIL_MATCH.getKey(), Boolean.TRUE.toString()
));

consumerRealm.admin().identityProviders().create(idp).close();
consumerRealm.cleanup().add(r -> {
try {
r.identityProviders().get(IDP_ALIAS).remove();
} catch (Exception ignored) {}
});
}

/**
* Realm configuration with organizations enabled.
*/
Expand All @@ -253,4 +283,21 @@ public RealmBuilder configure(RealmBuilder realm) {
return realm.organizationsEnabled(true);
}
}

public static final String IDP_ALIAS = "org-identity-provider";
public static final String CLIENT_ID = "broker-app";
public static final String CLIENT_SECRET = "broker-secret";

public static class ProviderRealmConf implements RealmConfig {
@Override
public RealmBuilder configure(RealmBuilder realm) {
return realm.clients(
ClientBuilder.create(CLIENT_ID)
.name(CLIENT_ID)
.secret(CLIENT_SECRET)
.redirectUris("*")
.directAccessGrantsEnabled()
);
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -495,7 +495,7 @@ public void testDomains() {
}

// create another org in a different realm with the same internet domain - should be allowed.
createOrganization(secondRealm.admin(), "testorg", "acme.com");
createOrganization(secondRealm, "testorg", "acme.com");

// try to remove a domain
organization = realm.admin().organizations().get(existing.getId());
Expand Down Expand Up @@ -669,7 +669,9 @@ public void testDeleteRealm() {
realmRes = adminClient.realms().realm(realmRep.getRealm());
realmRes.toRepresentation();

createOrganization(realmRes, "test-org", "test.org");
try (Response response = realmRes.organizations().create(createRepresentation("test-org", "test.org"))) {
assertEquals(Status.CREATED.getStatusCode(), response.getStatus());
}

List<OrganizationRepresentation> orgs = realmRes.organizations().list(-1, -1);
assertThat(orgs, hasSize(1));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.keycloak.tests.organization.admin;
package org.keycloak.tests.organization.member;

import java.util.List;
import java.util.Map;
Expand All @@ -7,8 +7,6 @@

import org.keycloak.admin.client.resource.OrganizationResource;
import org.keycloak.http.simple.SimpleHttp;
import org.keycloak.models.OrganizationModel;
import org.keycloak.models.OrganizationModel.IdentityProviderRedirectMode;
import org.keycloak.representations.account.LinkedAccountRepresentation;
import org.keycloak.representations.idm.FederatedIdentityRepresentation;
import org.keycloak.representations.idm.IdentityProviderRepresentation;
Expand All @@ -22,12 +20,9 @@
import org.keycloak.testframework.injection.LifeCycle;
import org.keycloak.testframework.oauth.OAuthClient;
import org.keycloak.testframework.oauth.annotations.InjectOAuthClient;
import org.keycloak.testframework.realm.ClientBuilder;
import org.keycloak.testframework.realm.CredentialBuilder;
import org.keycloak.testframework.realm.ManagedRealm;
import org.keycloak.testframework.realm.ManagedUser;
import org.keycloak.testframework.realm.RealmBuilder;
import org.keycloak.testframework.realm.RealmConfig;
import org.keycloak.testframework.realm.UserBuilder;
import org.keycloak.testframework.realm.UserConfig;
import org.keycloak.testframework.ui.annotations.InjectPage;
Expand All @@ -36,29 +31,30 @@
import org.keycloak.testframework.ui.page.LoginUsernamePage;
import org.keycloak.testframework.ui.webdriver.ManagedWebDriver;
import org.keycloak.testframework.util.ApiUtil;
import org.keycloak.tests.organization.admin.AbstractOrganizationTest;
import org.keycloak.testsuite.util.oauth.AccessTokenResponse;

import com.fasterxml.jackson.core.type.TypeReference;
import org.junit.jupiter.api.Test;

import static org.keycloak.tests.organization.admin.AbstractOrganizationTest.IDP_ALIAS;
import static org.keycloak.tests.organization.admin.AbstractOrganizationTest.setUpOrgBroker;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

@KeycloakIntegrationTest
public class OrganizationMemberIdpLinkTest {

private static final String IDP_ALIAS = "org-identity-provider";
private static final String SECOND_IDP_ALIAS = "second-identity-provider";
private static final String CLIENT_ID = "broker-app";
private static final String CLIENT_SECRET = "broker-secret";
private static final String ORG_NAME = "testorg";
private static final String ORG_DOMAIN = "testorg.org";

@InjectRealm(ref = "provider", config = ProviderRealmConf.class, lifecycle = LifeCycle.METHOD)
@InjectRealm(ref = "provider", config = AbstractOrganizationTest.ProviderRealmConf.class, lifecycle = LifeCycle.METHOD)
ManagedRealm providerRealm;

@InjectRealm(ref = "consumer", config = ConsumerRealmConf.class, lifecycle = LifeCycle.METHOD)
@InjectRealm(ref = "consumer", config = AbstractOrganizationTest.OrganizationRealmConfig.class, lifecycle = LifeCycle.METHOD)
ManagedRealm consumerRealm;

@InjectUser(ref = "alice", realmRef = "provider", config = AliceUserConf.class)
Expand Down Expand Up @@ -158,7 +154,7 @@ public void testUnmanagedMemberCanLinkAdditionalIdp() {
}

private OrganizationRepresentation createOrganization() {
setUpOrgBroker();
setUpOrgBroker(providerRealm, consumerRealm, ORG_DOMAIN);

OrganizationRepresentation org = new OrganizationRepresentation();
org.setName(ORG_NAME);
Expand Down Expand Up @@ -247,54 +243,4 @@ public UserBuilder configure(UserBuilder builder) {
.name("Alice", "Org");
}
}

static class ProviderRealmConf implements RealmConfig {
@Override
public RealmBuilder configure(RealmBuilder realm) {
return realm.clients(
ClientBuilder.create(CLIENT_ID)
.name(CLIENT_ID)
.secret(CLIENT_SECRET)
.redirectUris("*")
.directAccessGrantsEnabled()
);
}
}

static class ConsumerRealmConf implements RealmConfig {
@Override
public RealmBuilder configure(RealmBuilder realm) {
return realm.organizationsEnabled(true);
}
}

private void setUpOrgBroker() {
IdentityProviderRepresentation idp = new IdentityProviderRepresentation();
idp.setAlias(IDP_ALIAS);
idp.setProviderId("keycloak-oidc");
idp.setEnabled(true);
idp.setStoreToken(false);
idp.setTrustEmail(true);

String providerBaseUrl = providerRealm.getBaseUrl();
Map<String, String> config = Map.of(
"clientId", CLIENT_ID,
"clientSecret", CLIENT_SECRET,
"authorizationUrl", providerBaseUrl + "/protocol/openid-connect/auth",
"tokenUrl", providerBaseUrl + "/protocol/openid-connect/token",
"userInfoUrl", providerBaseUrl + "/protocol/openid-connect/userinfo",
"defaultScope", "email profile",
"syncMode", "IMPORT",
OrganizationModel.ORGANIZATION_DOMAIN_ATTRIBUTE, ORG_DOMAIN,
IdentityProviderRedirectMode.EMAIL_MATCH.getKey(), Boolean.TRUE.toString()
);
idp.setConfig(config);

consumerRealm.admin().identityProviders().create(idp).close();
consumerRealm.cleanup().add(r -> {
try {
r.identityProviders().get(IDP_ALIAS).remove();
} catch (Exception ignored) {}
});
}
}
Loading
Loading
0