diff options
author | Grégoire Aubert <gregoire.aubert@sonarsource.com> | 2017-11-20 12:36:09 +0100 |
---|---|---|
committer | Grégoire Aubert <gregoire.aubert@sonarsource.com> | 2017-11-24 17:22:33 +0100 |
commit | ad4567f4361fa1843cd57dc614e0ed0c653c86d2 (patch) | |
tree | d4cbcdc63fcfc8a8cdc477136c679dfd4367b4bd /tests | |
parent | afff558a2cac07019ff5886ccdada9eb25aa1b0c (diff) | |
download | sonarqube-ad4567f4361fa1843cd57dc614e0ed0c653c86d2.tar.gz sonarqube-ad4567f4361fa1843cd57dc614e0ed0c653c86d2.zip |
Update users permission IT's
Diffstat (limited to 'tests')
5 files changed, 47 insertions, 373 deletions
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 686732cb340..a99d247263c 100644 --- a/tests/src/test/java/org/sonarqube/tests/user/RealmAuthenticationTest.java +++ b/tests/src/test/java/org/sonarqube/tests/user/RealmAuthenticationTest.java @@ -19,6 +19,7 @@ */ package org.sonarqube.tests.user; +import com.codeborne.selenide.Condition; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.sonar.orchestrator.Orchestrator; @@ -37,7 +38,9 @@ import org.sonar.wsclient.connectors.HttpClient4Connector; import org.sonar.wsclient.services.AuthenticationQuery; import org.sonar.wsclient.user.UserParameters; import org.sonarqube.qa.util.Tester; +import org.sonarqube.qa.util.pageobjects.Navigation; import org.sonarqube.qa.util.pageobjects.SystemInfoPage; +import org.sonarqube.qa.util.pageobjects.UsersManagementPage; import org.sonarqube.ws.client.GetRequest; import org.sonarqube.ws.client.WsResponse; import org.sonarqube.ws.client.user.CreateRequest; @@ -233,7 +236,17 @@ public class RealmAuthenticationTest { // Given clean Sonar installation and no users in external system // Let's create and delete the user "tester" in Sonar DB - runSelenese(orchestrator, "/user/ExternalAuthenticationTest/create-and-delete-user.html"); + Navigation nav = tester.openBrowser(); + UsersManagementPage page = nav.logIn().submitCredentials(ADMIN_USER_LOGIN).openUsersManagement(); + page + .createUser(USER_LOGIN) + .hasUsersCount(3) + .getUser(USER_LOGIN) + .deactivateUser(); + page.hasUsersCount(2); + nav.logOut() + .logIn().submitWrongCredentials(USER_LOGIN, USER_LOGIN) + .getErrorMessage().shouldHave(Condition.text("Authentication failed")); // And now update the security with the user that was deleted String login = USER_LOGIN; diff --git a/tests/src/test/java/org/sonarqube/tests/user/UsersPageTest.java b/tests/src/test/java/org/sonarqube/tests/user/UsersPageTest.java index 38b62681a9c..2aa83ffae74 100644 --- a/tests/src/test/java/org/sonarqube/tests/user/UsersPageTest.java +++ b/tests/src/test/java/org/sonarqube/tests/user/UsersPageTest.java @@ -20,26 +20,27 @@ package org.sonarqube.tests.user; import com.sonar.orchestrator.Orchestrator; +import org.junit.After; +import org.sonarqube.ws.Users.CreateWsResponse.User; +import org.sonarqube.qa.util.Tester; +import org.sonarqube.qa.util.pageobjects.UsersManagementPage; import org.sonarqube.tests.Category1Suite; import java.util.List; -import org.junit.After; import org.junit.Before; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.sonarqube.ws.Users; -import org.sonarqube.ws.client.WsClient; import org.sonarqube.ws.client.user.GroupsRequest; -import util.selenium.Selenese; import util.user.UserRule; + import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic; import static org.assertj.core.api.Assertions.assertThat; -import static util.ItUtils.newAdminWsClient; public class UsersPageTest { - private static final String ADMIN_USER_LOGIN = "admin-user"; + private User adminUser; @ClassRule public static Orchestrator orchestrator = Category1Suite.ORCHESTRATOR; @@ -47,38 +48,54 @@ public class UsersPageTest { @Rule public UserRule userRule = UserRule.from(orchestrator); - private WsClient adminClient = newAdminWsClient(orchestrator); + @Rule + public Tester tester = new Tester(orchestrator).disableOrganizations(); @Before - public void initAdminUser() throws Exception { - userRule.createAdminUser(ADMIN_USER_LOGIN, ADMIN_USER_LOGIN); + public void initUsers() throws Exception { + adminUser = tester.users().generateAdministrator(u -> u.setLogin("admin-user").setPassword("admin-user")); + tester.users().generate(u -> u.setLogin("random-user").setPassword("random-user")); } @After - public void deleteAdminUser() { + public void resetUsers() { userRule.resetUsers(); } @Test public void generate_and_revoke_user_token() { - Selenese.runSelenese(orchestrator, "/user/UsersPageTest/generate_and_revoke_user_token.html"); + UsersManagementPage page = tester.openBrowser().logIn().submitCredentials(adminUser.getLogin()).openUsersManagement(); + tester.wsClient().users().skipOnboardingTutorial(); + + page + .hasUsersCount(3) + .getUser(adminUser.getLogin()) + .hasTokensCount(0) + .generateToken("token-test") + .hasTokensCount(1) + .revokeToken("token-test") + .hasTokensCount(0); } @Test public void admin_should_change_his_own_password() { - Selenese.runSelenese(orchestrator, "/user/UsersPageTest/admin_should_change_its_own_password.html"); + UsersManagementPage page = tester.openBrowser().logIn().submitCredentials(adminUser.getLogin()).openUsersManagement(); + tester.wsClient().users().skipOnboardingTutorial(); + page + .hasUsersCount(3) + .getUser(adminUser.getLogin()) + .changePassword(adminUser.getLogin(), "newpassword"); } @Test public void return_groups_belonging_to_a_user() { String login = randomAlphabetic(10); String group = randomAlphabetic(10); - userRule.createUser(login, login); - userRule.createGroup(group); - userRule.associateGroupsToUser(login, group); - - List<Users.GroupsWsResponse.Group> result = adminClient.users().groups(GroupsRequest.builder().setLogin(login).build()).getGroupsList(); + tester.users().generate(u -> u.setLogin(login).setPassword(login)); + tester.groups().generate(null, g -> g.setName(group)); + tester.groups().addMemberToGroups(tester.organizations().getDefaultOrganization(), login, group); + List<Users.GroupsWsResponse.Group> result = tester.as(adminUser.getLogin()).wsClient().users().groups(GroupsRequest.builder().setLogin(login).build()).getGroupsList(); assertThat(result).extracting(Users.GroupsWsResponse.Group::getName).contains(group); } } diff --git a/tests/src/test/resources/user/ExternalAuthenticationTest/create-and-delete-user.html b/tests/src/test/resources/user/ExternalAuthenticationTest/create-and-delete-user.html deleted file mode 100644 index 9be06a9320a..00000000000 --- a/tests/src/test/resources/user/ExternalAuthenticationTest/create-and-delete-user.html +++ /dev/null @@ -1,149 +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>create-and-delete-users</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> - <thead> - <tr> - <td rowspan="1" colspan="3">create-and-delete-users</td> - </tr> - </thead> - <tbody> - <tr> - <td>open</td> - <td>/sessions/new</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>login</td> - <td>admin-user</td> -</tr> -<tr> - <td>type</td> - <td>password</td> - <td>admin-user</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>commit</td> - <td></td> -</tr> -<tr> - <td>waitForElementPresent</td> - <td>css=.js-user-authenticated</td> - <td></td> -</tr> -<tr> - <td>open</td> - <td>/users</td> - <td></td> -</tr> -<tr> - <td>store</td> - <td>javascript{new Date().getTime()}</td> - <td>userId</td> -</tr> -<tr> - <td>waitForText</td> - <td>content</td> - <td>*Create User*</td> -</tr> -<tr> - <td>click</td> - <td>id=users-create</td> - <td></td> -</tr> -<tr> - <td>waitForText</td> - <td>id=create-user-form</td> - <td>*Create User*</td> -</tr> -<tr> - <td>type</td> - <td>id=create-user-login</td> - <td>${userId}</td> -</tr> -<tr> - <td>type</td> - <td>id=create-user-name</td> - <td>Name of ${userId}</td> -</tr> -<tr> - <td>type</td> - <td>id=create-user-password</td> - <td>password</td> -</tr> -<tr> - <td>click</td> - <td>id=create-user-submit</td> - <td></td> -</tr> -<tr> - <td>waitForText</td> - <td>id=users-list</td> - <td>*${userId}*</td> -</tr> -<tr> - <td>click</td> - <td>css=[data-login="${userId}"] .dropdown-toggle</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>css=[data-login="${userId}"] .js-user-deactivate</td> - <td></td> -</tr> -<tr> - <td>waitForText</td> - <td>id=deactivate-user-form</td> - <td>*${userId}*</td> -</tr> -<tr> - <td>click</td> - <td>id=deactivate-user-submit</td> - <td></td> -</tr> -<tr> - <td>waitForNotText</td> - <td>id=users-list</td> - <td>*${userId}*</td> -</tr> -<tr> - <td>open</td> - <td>/sessions/logout</td> - <td></td> -</tr> -<tr> - <td>open</td> - <td>/sessions/new</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>login</td> - <td>tester</td> -</tr> -<tr> - <td>type</td> - <td>password</td> - <td>password</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>commit</td> - <td>deactivate-user-form</td> -</tr> -<tr> - <td>waitForText</td> - <td>login_form</td> - <td>*Authentication failed*</td> -</tr> -</tbody> -</table> -</body> -</html> diff --git a/tests/src/test/resources/user/UsersPageTest/admin_should_change_its_own_password.html b/tests/src/test/resources/user/UsersPageTest/admin_should_change_its_own_password.html deleted file mode 100644 index 228686fcd62..00000000000 --- a/tests/src/test/resources/user/UsersPageTest/admin_should_change_its_own_password.html +++ /dev/null @@ -1,96 +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"/> - <link rel="selenium.base" href="http://localhost:49506"/> - <title>admin_should_change_its_own_password</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> -<thead> -<tr> -<td rowspan="1" colspan="3">admin_should_change_its_own_password</td> -</tr> -</thead> -<tbody> - -<tr> - <td>open</td> - <td>/sessions/login</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>login</td> - <td>admin-user</td> -</tr> -<tr> - <td>type</td> - <td>password</td> - <td>admin-user</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>commit</td> - <td></td> -</tr> -<tr> - <td>waitForElementPresent</td> - <td>css=.js-user-authenticated</td> - <td></td> -</tr> -<tr> - <td>open</td> - <td>/users</td> - <td></td> -</tr> -<tr> - <td>waitForElementPresent</td> - <td>css=[data-login=admin-user]</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>css=[data-login=admin-user] .dropdown-toggle</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>css=[data-login=admin-user] .js-user-change-password</td> - <td></td> -</tr> -<tr> - <td>waitForElementPresent</td> - <td>css=.modal</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>id=change-user-password-old-password</td> - <td>admin-user</td> -</tr> -<tr> - <td>type</td> - <td>id=change-user-password-password</td> - <td>new-admin-user</td> -</tr> -<tr> - <td>type</td> - <td>id=change-user-password-password-confirmation</td> - <td>new-admin-user</td> -</tr> -<tr> - <td>click</td> - <td>id=change-user-password-submit</td> - <td></td> -</tr> -<tr> - <td>assertElementNotPresent</td> - <td>css=.modal</td> - <td></td> -</tr> -</tbody> -</table> -</body> -</html> diff --git a/tests/src/test/resources/user/UsersPageTest/generate_and_revoke_user_token.html b/tests/src/test/resources/user/UsersPageTest/generate_and_revoke_user_token.html deleted file mode 100644 index 1c816cbd3d7..00000000000 --- a/tests/src/test/resources/user/UsersPageTest/generate_and_revoke_user_token.html +++ /dev/null @@ -1,111 +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"/> - <link rel="selenium.base" href="http://localhost:49506"/> - <title>generate_and_revoke_user_token</title> -</head> -<body> -<table cellpadding="1" cellspacing="1" border="1"> - <thead> - <tr> - <td rowspan="1" colspan="3">generate_and_revoke_user_token</td> - </tr> - </thead> - <tbody> - -<tr> - <td>open</td> - <td>/sessions/new</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>login</td> - <td>admin-user</td> -</tr> -<tr> - <td>type</td> - <td>password</td> - <td>admin-user</td> -</tr> -<tr> - <td>clickAndWait</td> - <td>commit</td> - <td></td> -</tr> -<tr> - <td>waitForElementPresent</td> - <td>css=.js-user-authenticated</td> - <td></td> -</tr> -<tr> - <td>open</td> - <td>/users</td> - <td></td> -</tr> -<tr> - <td>waitForElementPresent</td> - <td>css=.js-user-tokens</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>css=.js-user-tokens</td> - <td></td> -</tr> -<tr> - <td>waitForText</td> - <td>css=.modal</td> - <td>*No tokens*</td> -</tr> -<tr> - <td>waitForElementPresent</td> - <td>css=.js-generate-token-form input</td> - <td></td> -</tr> -<tr> - <td>type</td> - <td>css=.js-generate-token-form input</td> - <td>test-token</td> -</tr> -<tr> - <td>click</td> - <td>css=.js-generate-token-form button</td> - <td></td> -</tr> -<tr> - <td>waitForElementPresent</td> - <td>css=.modal code</td> - <td></td> -</tr> -<tr> - <td>waitForText</td> - <td>css=.modal</td> - <td>*test-token*</td> -</tr> -<tr> - <td>waitForElementPresent</td> - <td>css=.js-revoke-token-form</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>css=.js-revoke-token-form button</td> - <td></td> -</tr> -<tr> - <td>click</td> - <td>css=.js-revoke-token-form button</td> - <td></td> -</tr> -<tr> - <td>assertElementNotPresent</td> - <td>css=.js-revoke-token-form</td> - <td></td> -</tr> -</tbody> -</table> -</body> -</html> |