keycloak-memoizeit

Details

diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractBrokerTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractBrokerTest.java
index 0b568b8..e6e0aeb 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractBrokerTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractBrokerTest.java
@@ -28,8 +28,15 @@ import java.net.URLEncoder;
 import java.util.List;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.keycloak.testsuite.admin.ApiUtil.createUserWithAdminClient;
 import static org.keycloak.testsuite.admin.ApiUtil.resetUserPassword;
+import static org.keycloak.testsuite.broker.BrokerTestConstants.USER_EMAIL;
+import org.keycloak.testsuite.pages.IdpConfirmLinkPage;
+import static org.keycloak.testsuite.util.MailAssert.assertEmailAndGetUrl;
+import org.keycloak.testsuite.util.MailServer;
+import org.keycloak.testsuite.util.MailServerConfiguration;
+import org.keycloak.testsuite.util.UserBuilder;
 
 public abstract class AbstractBrokerTest extends AbstractKeycloakTest {
 
@@ -61,6 +68,9 @@ public abstract class AbstractBrokerTest extends AbstractKeycloakTest {
 
     @Page
     protected ErrorPage errorPage;
+    
+    @Page
+    protected IdpConfirmLinkPage idpConfirmLinkPage;
 
     @Override
     public void addTestRealms(List<RealmRepresentation> testRealms) {
@@ -199,6 +209,68 @@ public abstract class AbstractBrokerTest extends AbstractKeycloakTest {
 
         assertEquals(userCount, adminClient.realm(consumerRealmName()).users().count());
     }
+    
+    // KEYCLOAK-2957
+    @Test
+    public void testLinkAccountWithEmailVerified() {
+        //start mail server
+        MailServer.start();
+        MailServer.createEmailAccount(USER_EMAIL, "password");
+        
+        try {
+            //configure smpt server in the realm
+            RealmRepresentation master = adminClient.realm(consumerRealmName()).toRepresentation();
+            master.setSmtpServer(suiteContext.getSmtpServer());
+            adminClient.realm(consumerRealmName()).update(master);
+        
+            //create user on consumer's site who should be linked later
+            UserRepresentation newUser = UserBuilder.create().username("consumer").email(USER_EMAIL).enabled(true).build();
+            String userId = createUserWithAdminClient(adminClient.realm(consumerRealmName()), newUser);
+            resetUserPassword(adminClient.realm(consumerRealmName()).users().get(userId), "password", false);
+        
+            //test
+            driver.navigate().to(getAccountUrl(consumerRealmName()));
+
+            log.debug("Clicking social " + getIDPAlias());
+            accountLoginPage.clickSocial(getIDPAlias());
+
+            waitForPage("log in to");
+
+            Assert.assertTrue("Driver should be on the provider realm page right now",
+                    driver.getCurrentUrl().contains("/auth/realms/" + providerRealmName() + "/"));
+
+            log.debug("Logging in");
+            accountLoginPage.login(getUserLogin(), getUserPassword());
+
+            waitForPage("update account information");
+
+            Assert.assertTrue(updateAccountInformationPage.isCurrent());
+            Assert.assertTrue("We must be on correct realm right now",
+                    driver.getCurrentUrl().contains("/auth/realms/" + consumerRealmName() + "/"));
+
+            log.debug("Updating info on updateAccount page");
+            updateAccountInformationPage.updateAccountInformation("Firstname", "Lastname");
+
+            //link account by email
+            waitForPage("account already exists");
+            idpConfirmLinkPage.clickLinkAccount();
+            
+            String url = assertEmailAndGetUrl(MailServerConfiguration.FROM, USER_EMAIL, 
+                    "Someone wants to link your ", false);
+
+            log.info("navigating to url from email: " + url);
+            driver.navigate().to(url);
+
+            //test if user is logged in
+            assertEquals(accountPage.buildUri().toASCIIString().replace("master", "consumer") + "/", driver.getCurrentUrl());
+            
+            //test if the user has verified email
+            assertTrue(adminClient.realm(consumerRealmName()).users().get(userId).toRepresentation().isEmailVerified());
+        } finally {
+            // stop mail server
+            MailServer.stop();
+        }
+    }
 
     // KEYCLOAK-3267
     @Test
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/MailAssert.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/MailAssert.java
index 5d3099b..463c32f 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/MailAssert.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/util/MailAssert.java
@@ -41,7 +41,8 @@ public class MailAssert {
                 message= SslMailServer.getLastReceivedMessage();
             } else {
                 message = MailServer.getLastReceivedMessage();
-            }            assertNotNull("There is no received email.", message);
+            }            
+            assertNotNull("There is no received email.", message);
             assertEquals(recipient, message.getRecipients(RecipientType.TO)[0].toString());
             assertEquals(from, message.getFrom()[0].toString());