From: Julien Lancelot Date: Wed, 31 Jan 2018 10:49:17 +0000 (+0100) Subject: SONAR-10338 Add ITs X-Git-Tag: 7.5~1716 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8ee77ab8844db1732360d2cd22e8f4809b0c6731;p=sonarqube.git SONAR-10338 Add ITs --- diff --git a/tests/src/test/java/org/sonarqube/tests/user/OAuth2IdentityProviderTest.java b/tests/src/test/java/org/sonarqube/tests/user/OAuth2IdentityProviderTest.java index 0c7b1744d15..9ad8f1a79cc 100644 --- a/tests/src/test/java/org/sonarqube/tests/user/OAuth2IdentityProviderTest.java +++ b/tests/src/test/java/org/sonarqube/tests/user/OAuth2IdentityProviderTest.java @@ -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() { diff --git a/tests/src/test/java/org/sonarqube/tests/user/RealmAuthenticationTest.java b/tests/src/test/java/org/sonarqube/tests/user/RealmAuthenticationTest.java index 36ad102dd95..e5586b474e2 100644 --- a/tests/src/test/java/org/sonarqube/tests/user/RealmAuthenticationTest.java +++ b/tests/src/test/java/org/sonarqube/tests/user/RealmAuthenticationTest.java @@ -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 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 index 7d038ac592d..00000000000 --- a/tests/src/test/resources/user/OAuth2IdentityProviderTest/fail_when_email_already_exists.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - fail_when_email_already_exists - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
french
open/sessions/new
waitForTextcontent*Log in with Fake oauth2 identity provider*
clickcss=.oauth-providers a
waitForTextbd*You're not authorized to access this page. Please contact the administrator.*
assertTextbd*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*
- -