]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10338 Add ITs
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 31 Jan 2018 10:49:17 +0000 (11:49 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 7 Feb 2018 15:43:01 +0000 (16:43 +0100)
tests/src/test/java/org/sonarqube/tests/user/OAuth2IdentityProviderTest.java
tests/src/test/java/org/sonarqube/tests/user/RealmAuthenticationTest.java
tests/src/test/resources/user/OAuth2IdentityProviderTest/fail_when_email_already_exists.html [deleted file]

index 0c7b1744d150269939a107e2122289f4fcddea70..9ad8f1a79ccbd04368f2bcb24fbb94a6eb0b86c7 100644 (file)
@@ -22,7 +22,6 @@ package org.sonarqube.tests.user;
 import com.codeborne.selenide.Condition;
 import com.sonar.orchestrator.Orchestrator;
 import java.io.File;
-import java.io.UnsupportedEncodingException;
 import java.net.HttpURLConnection;
 import okhttp3.mockwebserver.MockResponse;
 import okhttp3.mockwebserver.MockWebServer;
@@ -37,7 +36,6 @@ import org.sonarqube.qa.util.pageobjects.Navigation;
 import org.sonarqube.tests.Category4Suite;
 import org.sonarqube.ws.Users.SearchWsResponse.User;
 import org.sonarqube.ws.client.GetRequest;
-import org.sonarqube.ws.client.WsResponse;
 import org.sonarqube.ws.client.permissions.AddUserRequest;
 import org.sonarqube.ws.client.users.CreateRequest;
 import util.selenium.Selenese;
@@ -100,14 +98,6 @@ public class OAuth2IdentityProviderTest {
     verifyUser(USER_LOGIN, USER_NAME, USER_EMAIL);
   }
 
-  private void verifyUser(String login, String name, String email) {
-    User user = tester.users().getByLogin(login).orElseThrow(IllegalStateException::new);
-    assertThat(user.getLogin()).isEqualTo(login);
-    assertThat(user.getName()).isEqualTo(name);
-    assertThat(user.getEmail()).isEqualTo(email);
-    assertThat(user.getActive()).isTrue();
-  }
-
   @Test
   public void authenticate_user_through_ui() {
     simulateRedirectionToCallback();
@@ -179,16 +169,40 @@ public class OAuth2IdentityProviderTest {
   }
 
   @Test
-  public void fail_when_email_already_exists() throws Exception {
+  public void authenticate_new_user_when_email_already_exists() {
     simulateRedirectionToCallback();
     enablePlugin();
-    tester.users().generate(u -> u.setLogin("another").setName("Another").setEmail(USER_EMAIL).setPassword("another"));
-
-    Selenese.runSelenese(orchestrator, "/user/OAuth2IdentityProviderTest/fail_when_email_already_exists.html");
+    tester.users().generate(u -> u.setLogin("another").setName("Another").setEmail(USER_EMAIL));
+
+    tester.openBrowser()
+      .logIn()
+      .useOAuth2()
+      .asEmailAlreadyExistsPage()
+      .shouldHaveExistingAccount("another")
+      .shouldHaveNewAccount(USER_LOGIN)
+      .clickContinue();
+
+    assertThat(tester.users().getByLogin(USER_LOGIN).get().getEmail()).isEqualTo(USER_EMAIL);
+    assertThat(tester.users().getByLogin("another").get().getEmail()).isNullOrEmpty();
+  }
 
-    File logFile = orchestrator.getServer().getWebLogs();
-    assertThat(FileUtils.readFileToString(logFile))
-      .doesNotContain("You can't sign up because email 'john@email.com' is already used by an existing user. This means that you probably already registered with another account");
+  @Test
+  public void authenticating_existing_user_using_existing_email() {
+    simulateRedirectionToCallback();
+    enablePlugin();
+    tester.users().generate(u -> u.setLogin(USER_LOGIN).setName(USER_NAME).setEmail(null));
+    tester.users().generate(u -> u.setLogin("another").setName("Another").setEmail(USER_EMAIL));
+
+    tester.openBrowser()
+      .logIn()
+      .useOAuth2()
+      .asEmailAlreadyExistsPage()
+      .shouldHaveExistingAccount("another")
+      .shouldHaveNewAccount("john")
+      .clickContinue();
+
+    assertThat(tester.users().getByLogin(USER_LOGIN).get().getEmail()).isEqualTo(USER_EMAIL);
+    assertThat(tester.users().getByLogin("another").get().getEmail()).isNullOrEmpty();
   }
 
   @Test
@@ -216,11 +230,16 @@ public class OAuth2IdentityProviderTest {
     assertThat(user.getExternalProvider()).isEqualTo(FAKE_PROVIDER_KEY);
   }
 
+  private void verifyUser(String login, String name, String email) {
+    User user = tester.users().getByLogin(login).orElseThrow(IllegalStateException::new);
+    assertThat(user.getLogin()).isEqualTo(login);
+    assertThat(user.getName()).isEqualTo(name);
+    assertThat(user.getEmail()).isEqualTo(email);
+    assertThat(user.getActive()).isTrue();
+  }
 
   private void authenticateWithFakeAuthProvider() {
-    WsResponse response = tester.wsClient().wsConnector().call(
-      new GetRequest(("/sessions/init/" + FAKE_PROVIDER_KEY)));
-    assertThat(response.code()).isEqualTo(200);
+    tester.wsClient().wsConnector().call(new GetRequest(("/sessions/init/" + FAKE_PROVIDER_KEY))).failIfNotSuccessful();
   }
 
   private void simulateRedirectionToCallback() {
@@ -228,6 +247,10 @@ public class OAuth2IdentityProviderTest {
       .setResponseCode(HttpURLConnection.HTTP_MOVED_TEMP)
       .addHeader("Location: " + orchestrator.getServer().getUrl() + "/oauth2/callback/" + FAKE_PROVIDER_KEY)
       .setBody("Redirect to SonarQube"));
+    fakeServerAuthProvider.enqueue(new MockResponse()
+      .setResponseCode(HttpURLConnection.HTTP_MOVED_TEMP)
+      .addHeader("Location: " + orchestrator.getServer().getUrl() + "/oauth2/callback/" + FAKE_PROVIDER_KEY)
+      .setBody("Redirect to SonarQube"));
   }
 
   private void enablePlugin() {
index 36ad102dd95d002f8f7f252b852edd15c86f9a88..e5586b474e23636bec1ea51fdfa129939e90a628 100644 (file)
@@ -343,6 +343,22 @@ public class RealmAuthenticationTest {
       .containsOnly(false, USER_LOGIN, "sonarqube");
   }
 
+  @Test
+  public void fail_to_authenticate_user_when_email_already_exists() {
+    userRule.createUser("another", "Another", "tester@example.org", "another");
+
+    String username = USER_LOGIN;
+    String password = "123";
+    Map<String, String> users = Maps.newHashMap();
+    users.put(username + ".password", password);
+    users.put(username + ".name", "Tester Testerovich");
+    users.put(username + ".email", "tester@example.org");
+    users.put(username + ".groups", "sonar-user");
+    updateUsersInExtAuth(users);
+
+    verifyAuthenticationIsNotOk(username, password);
+  }
+
   private void verifyHttpException(Exception e, int expectedCode) {
     assertThat(e).isInstanceOf(HttpException.class);
     HttpException exception = (HttpException) e;
diff --git a/tests/src/test/resources/user/OAuth2IdentityProviderTest/fail_when_email_already_exists.html b/tests/src/test/resources/user/OAuth2IdentityProviderTest/fail_when_email_already_exists.html
deleted file mode 100644 (file)
index 7d038ac..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head profile="http://selenium-ide.openqa.org/profiles/test-case">
-  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-  <title>fail_when_email_already_exists</title>
-</head>
-<body>
-<table cellpadding="1" cellspacing="1" border="1">
-  <thead>
-  <tr>
-    <td rowspan="1" colspan="3">french</td>
-  </tr>
-  </thead>
-  <tbody>
-  <tr>
-    <td>open</td>
-    <td>/sessions/new</td>
-    <td></td>
-  </tr>
-  <tr>
-    <td>waitForText</td>
-    <td>content</td>
-    <td>*Log in with Fake oauth2 identity provider*</td>
-  </tr>
-  <tr>
-    <td>click</td>
-    <td>css=.oauth-providers a</td>
-    <td></td>
-  </tr>
-  <tr>
-    <td>waitForText</td>
-    <td>bd</td>
-    <td>*You're not authorized to access this page. Please contact the administrator.*</td>
-  </tr>
-  <tr>
-    <td>assertText</td>
-    <td>bd</td>
-    <td>*You can't sign up because email 'john@email.com' is already used by an existing user. This means that you probably already registered with another account*</td>
-  </tr>
-  </tbody>
-</table>
-</body>
-</html>