From 522c9d813b5f39073d809badffc85b0ebd7f1209 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Sat, 11 Nov 2017 18:21:25 +0100 Subject: [PATCH] Add category authorization to integration tests --- cix.sh | 1 + .../org/sonarqube/tests/Category1Suite.java | 11 -- .../org/sonarqube/tests/Category5Suite.java | 6 +- .../org/sonarqube/tests/Category6Suite.java | 2 +- .../PermissionTemplatesPageTest.java | 45 -------- .../authorization/AuthorizationSuite.java | 55 +++++++++ .../ExecuteAnalysisPermissionTest.java | 49 ++++---- .../IssuePermissionTest.java | 21 ++-- .../PermissionSearchTest.java | 79 +++++-------- .../PermissionTemplateTest.java | 2 +- .../ProvisioningPermissionTest.java | 65 +++++------ .../QualityProfileAdminPermissionTest.java | 9 +- .../SystemPasscodeTest.java | 34 ++---- tests/src/test/java/util/user/Groups.java | 1 - tests/src/test/java/util/user/UserRule.java | 26 ----- .../should_create.html | 94 ---------------- .../should_display_page.html | 84 -------------- .../should_manage_project_creators.html | 105 ------------------ 18 files changed, 160 insertions(+), 529 deletions(-) delete mode 100644 tests/src/test/java/org/sonarqube/tests/authorisation/PermissionTemplatesPageTest.java create mode 100644 tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java rename tests/src/test/java/org/sonarqube/tests/{authorisation => authorization}/ExecuteAnalysisPermissionTest.java (65%) rename tests/src/test/java/org/sonarqube/tests/{authorisation => authorization}/IssuePermissionTest.java (95%) rename tests/src/test/java/org/sonarqube/tests/{authorisation => authorization}/PermissionSearchTest.java (78%) rename tests/src/test/java/org/sonarqube/tests/{authorisation => authorization}/PermissionTemplateTest.java (99%) rename tests/src/test/java/org/sonarqube/tests/{authorisation => authorization}/ProvisioningPermissionTest.java (68%) rename tests/src/test/java/org/sonarqube/tests/{authorisation => authorization}/QualityProfileAdminPermissionTest.java (89%) rename tests/src/test/java/org/sonarqube/tests/{authorisation => authorization}/SystemPasscodeTest.java (72%) delete mode 100644 tests/src/test/resources/authorisation/PermissionTemplatesPageTest/should_create.html delete mode 100644 tests/src/test/resources/authorisation/PermissionTemplatesPageTest/should_display_page.html delete mode 100644 tests/src/test/resources/authorisation/PermissionTemplatesPageTest/should_manage_project_creators.html diff --git a/cix.sh b/cix.sh index 62b06de33c9..2830bc82ab4 100755 --- a/cix.sh +++ b/cix.sh @@ -33,6 +33,7 @@ case "$RUN_ACTIVITY" in case "$CATEGORY_GROUP" in Category1) CATEGORY=Category1 && runCategory + CATEGORY=authorization && runCategory CATEGORY=measure && runCategory CATEGORY=source && runCategory ;; diff --git a/tests/src/test/java/org/sonarqube/tests/Category1Suite.java b/tests/src/test/java/org/sonarqube/tests/Category1Suite.java index 8fbbe37567d..2cc1da3ed4a 100644 --- a/tests/src/test/java/org/sonarqube/tests/Category1Suite.java +++ b/tests/src/test/java/org/sonarqube/tests/Category1Suite.java @@ -23,11 +23,6 @@ import com.sonar.orchestrator.Orchestrator; import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; -import org.sonarqube.tests.authorisation.ExecuteAnalysisPermissionTest; -import org.sonarqube.tests.authorisation.IssuePermissionTest; -import org.sonarqube.tests.authorisation.PermissionSearchTest; -import org.sonarqube.tests.authorisation.ProvisioningPermissionTest; -import org.sonarqube.tests.authorisation.QualityProfileAdminPermissionTest; import org.sonarqube.tests.projectAdministration.BackgroundTasksTest; import org.sonarqube.tests.projectAdministration.ProjectAdministrationTest; import org.sonarqube.tests.projectAdministration.ProjectBulkDeletionPageTest; @@ -67,12 +62,6 @@ import static util.ItUtils.xooPlugin; QualityGateUiTest.class, QualityGateNotificationTest.class, QualityGateOnRatingMeasuresTest.class, - // authorisation - ExecuteAnalysisPermissionTest.class, - IssuePermissionTest.class, - PermissionSearchTest.class, - ProvisioningPermissionTest.class, - QualityProfileAdminPermissionTest.class, // measure ProjectsPageTest.class }) diff --git a/tests/src/test/java/org/sonarqube/tests/Category5Suite.java b/tests/src/test/java/org/sonarqube/tests/Category5Suite.java index 85125797af0..a5bc316c09f 100644 --- a/tests/src/test/java/org/sonarqube/tests/Category5Suite.java +++ b/tests/src/test/java/org/sonarqube/tests/Category5Suite.java @@ -22,10 +22,10 @@ package org.sonarqube.tests; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.sonarqube.tests.analysis.AnalysisEsResilienceTest; -import org.sonarqube.tests.authorisation.SystemPasscodeTest; import org.sonarqube.tests.ce.CeShutdownTest; import org.sonarqube.tests.ce.CeWorkersTest; import org.sonarqube.tests.issue.IssueCreationDatePluginChangedTest; +import org.sonarqube.tests.marketplace.UpdateCenterTest; import org.sonarqube.tests.qualityProfile.ActiveRuleEsResilienceTest; import org.sonarqube.tests.qualityProfile.BuiltInQualityProfilesNotificationTest; import org.sonarqube.tests.rule.RuleEsResilienceTest; @@ -36,7 +36,6 @@ import org.sonarqube.tests.settings.SettingsTestRestartingOrchestrator; import org.sonarqube.tests.startup.StartupIndexationTest; import org.sonarqube.tests.telemetry.TelemetryOptOutTest; import org.sonarqube.tests.telemetry.TelemetryUploadTest; -import org.sonarqube.tests.marketplace.UpdateCenterTest; import org.sonarqube.tests.user.OnboardingTest; import org.sonarqube.tests.user.RealmAuthenticationTest; import org.sonarqube.tests.user.SsoAuthenticationTest; @@ -72,8 +71,7 @@ import org.sonarqube.tests.user.UserEsResilienceTest; IssueCreationDatePluginChangedTest.class, // elasticsearch - StartupIndexationTest.class, - SystemPasscodeTest.class + StartupIndexationTest.class }) public class Category5Suite { diff --git a/tests/src/test/java/org/sonarqube/tests/Category6Suite.java b/tests/src/test/java/org/sonarqube/tests/Category6Suite.java index a7cec719ffc..aca8c327b4c 100644 --- a/tests/src/test/java/org/sonarqube/tests/Category6Suite.java +++ b/tests/src/test/java/org/sonarqube/tests/Category6Suite.java @@ -25,7 +25,7 @@ import java.net.InetAddress; import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; -import org.sonarqube.tests.authorisation.PermissionTemplateTest; +import org.sonarqube.tests.authorization.PermissionTemplateTest; import org.sonarqube.tests.ce.ReportFailureNotificationTest; import org.sonarqube.tests.issue.IssueNotificationsTest; import org.sonarqube.tests.issue.IssueTagsTest; diff --git a/tests/src/test/java/org/sonarqube/tests/authorisation/PermissionTemplatesPageTest.java b/tests/src/test/java/org/sonarqube/tests/authorisation/PermissionTemplatesPageTest.java deleted file mode 100644 index f94a50bb0b3..00000000000 --- a/tests/src/test/java/org/sonarqube/tests/authorisation/PermissionTemplatesPageTest.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonarqube.tests.authorisation; - -import com.sonar.orchestrator.Orchestrator; -import org.sonarqube.tests.Category1Suite; -import org.junit.ClassRule; -import org.junit.Test; - -import static util.selenium.Selenese.runSelenese; - -public class PermissionTemplatesPageTest { - - @ClassRule - public static Orchestrator orchestrator = Category1Suite.ORCHESTRATOR; - - @Test - public void should_display_page() throws Exception { - runSelenese(orchestrator, - "/authorisation/PermissionTemplatesPageTest/should_display_page.html", - "/authorisation/PermissionTemplatesPageTest/should_create.html"); - } - - @Test - public void should_manage_project_creators() throws Exception { - runSelenese(orchestrator, "/authorisation/PermissionTemplatesPageTest/should_manage_project_creators.html"); - } -} diff --git a/tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java b/tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java new file mode 100644 index 00000000000..cee2d04936e --- /dev/null +++ b/tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java @@ -0,0 +1,55 @@ +/* + * SonarQube + * Copyright (C) 2009-2017 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonarqube.tests.authorization; + +import com.sonar.orchestrator.Orchestrator; +import org.junit.ClassRule; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +import static util.ItUtils.pluginArtifact; +import static util.ItUtils.xooPlugin; + +@RunWith(Suite.class) +@Suite.SuiteClasses({ + ExecuteAnalysisPermissionTest.class, + IssuePermissionTest.class, + PermissionSearchTest.class, + ProvisioningPermissionTest.class, + QualityProfileAdminPermissionTest.class, + SystemPasscodeTest.class +}) +public class AuthorizationSuite { + + @ClassRule + public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + // reduce memory for Elasticsearch + .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") + + // for SystemPasscodeTest + // this privileged plugin provides the WS api/system_passcode/check + // that is used by the tests + .addPlugin(pluginArtifact("fake-governance-plugin")) + .setServerProperty("sonar.web.systemPasscode", SystemPasscodeTest.VALID_PASSCODE) + + .addPlugin(xooPlugin()) + .build(); + +} diff --git a/tests/src/test/java/org/sonarqube/tests/authorisation/ExecuteAnalysisPermissionTest.java b/tests/src/test/java/org/sonarqube/tests/authorization/ExecuteAnalysisPermissionTest.java similarity index 65% rename from tests/src/test/java/org/sonarqube/tests/authorisation/ExecuteAnalysisPermissionTest.java rename to tests/src/test/java/org/sonarqube/tests/authorization/ExecuteAnalysisPermissionTest.java index 65f1a52bce1..78f8cfc1e0a 100644 --- a/tests/src/test/java/org/sonarqube/tests/authorisation/ExecuteAnalysisPermissionTest.java +++ b/tests/src/test/java/org/sonarqube/tests/authorization/ExecuteAnalysisPermissionTest.java @@ -17,18 +17,16 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonarqube.tests.authorisation; +package org.sonarqube.tests.authorization; import com.sonar.orchestrator.Orchestrator; import com.sonar.orchestrator.build.BuildFailureException; -import org.sonarqube.tests.Category1Suite; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; -import org.sonar.wsclient.SonarClient; -import org.sonar.wsclient.user.UserParameters; -import org.sonarqube.ws.client.WsClient; +import org.sonarqube.qa.util.Tester; import org.sonarqube.ws.client.permission.AddGroupWsRequest; import org.sonarqube.ws.client.permission.AddProjectCreatorToTemplateWsRequest; import org.sonarqube.ws.client.permission.RemoveGroupWsRequest; @@ -36,7 +34,6 @@ import org.sonarqube.ws.client.project.UpdateVisibilityRequest; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; -import static util.ItUtils.newAdminWsClient; import static util.ItUtils.runProjectAnalysis; /** @@ -44,29 +41,27 @@ import static util.ItUtils.runProjectAnalysis; */ public class ExecuteAnalysisPermissionTest { - @ClassRule - public static Orchestrator orchestrator = Category1Suite.ORCHESTRATOR; - private final static String USER_LOGIN = "scanperm"; private final static String USER_PASSWORD = "thewhite"; private final static String PROJECT_KEY = "sample"; - private static WsClient adminWsClient; - private static SonarClient oldAdminWsClient; + @ClassRule + public static Orchestrator orchestrator = AuthorizationSuite.ORCHESTRATOR; + + @Rule + public Tester tester = new Tester(orchestrator) + // all the tests of AuthorizationSuite must disable organizations + .disableOrganizations(); @Before public void setUp() { - orchestrator.resetData(); - oldAdminWsClient = orchestrator.getServer().adminWsClient(); - oldAdminWsClient.userClient().create(UserParameters.create().login(USER_LOGIN).name(USER_LOGIN).password(USER_PASSWORD).passwordConfirmation(USER_PASSWORD)); + tester.users().generate(u -> u.setLogin(USER_LOGIN).setPassword(USER_PASSWORD)); orchestrator.getServer().provisionProject(PROJECT_KEY, "Sample"); - adminWsClient = newAdminWsClient(orchestrator); } @After public void tearDown() { addGlobalPermission("anyone", "scan"); - oldAdminWsClient.userClient().deactivate(USER_LOGIN); } @Test @@ -83,7 +78,7 @@ public class ExecuteAnalysisPermissionTest { "You're only authorized to execute a local (preview) SonarQube analysis without pushing the results to the SonarQube server. Please contact your SonarQube administrator."); } - newAdminWsClient(orchestrator).projects().updateVisibility(UpdateVisibilityRequest.builder().setProject(PROJECT_KEY).setVisibility("private").build()); + tester.wsClient().projects().updateVisibility(UpdateVisibilityRequest.builder().setProject(PROJECT_KEY).setVisibility("private").build()); try { // Execute anonymous analysis executeAnonymousAnalysis(); @@ -100,7 +95,7 @@ public class ExecuteAnalysisPermissionTest { executeAnonymousAnalysis(); // make project private - newAdminWsClient(orchestrator).projects().updateVisibility(UpdateVisibilityRequest.builder().setProject("sample").setVisibility("private").build()); + tester.wsClient().projects().updateVisibility(UpdateVisibilityRequest.builder().setProject("sample").setVisibility("private").build()); // still no error executeAnonymousAnalysis(); @@ -117,7 +112,7 @@ public class ExecuteAnalysisPermissionTest { @Test public void execute_analysis_with_scan_on_default_template() { removeGlobalPermission("anyone", "scan"); - adminWsClient.permissions().addProjectCreatorToTemplate(AddProjectCreatorToTemplateWsRequest.builder() + tester.wsClient().permissions().addProjectCreatorToTemplate(AddProjectCreatorToTemplateWsRequest.builder() .setPermission("scan") .setTemplateId("default_template") .build()); @@ -125,20 +120,16 @@ public class ExecuteAnalysisPermissionTest { runProjectAnalysis(orchestrator, "shared/xoo-sample", "sonar.login", USER_LOGIN, "sonar.password", USER_PASSWORD, "sonar.projectKey", "ANOTHER_PROJECT_KEY"); } - private static void addProjectPermission(String groupName, String projectKey, String permission) { - adminWsClient.permissions().addGroup(new AddGroupWsRequest().setGroupName(groupName).setProjectKey(projectKey).setPermission(permission)); - } - - private static void addGlobalPermission(String groupName, String permission) { - adminWsClient.permissions().addGroup(new AddGroupWsRequest().setGroupName(groupName).setPermission(permission)); + private void addProjectPermission(String groupName, String projectKey, String permission) { + tester.wsClient().permissions().addGroup(new AddGroupWsRequest().setGroupName(groupName).setProjectKey(projectKey).setPermission(permission)); } - private static void removeProjectPermission(String groupName, String projectKey, String permission) { - adminWsClient.permissions().removeGroup(new RemoveGroupWsRequest().setGroupName(groupName).setProjectKey(projectKey).setPermission(permission)); + private void addGlobalPermission(String groupName, String permission) { + tester.wsClient().permissions().addGroup(new AddGroupWsRequest().setGroupName(groupName).setPermission(permission)); } - private static void removeGlobalPermission(String groupName, String permission) { - adminWsClient.permissions().removeGroup(new RemoveGroupWsRequest().setGroupName(groupName).setPermission(permission)); + private void removeGlobalPermission(String groupName, String permission) { + tester.wsClient().permissions().removeGroup(new RemoveGroupWsRequest().setGroupName(groupName).setPermission(permission)); } private static void executeLoggedAnalysis() { diff --git a/tests/src/test/java/org/sonarqube/tests/authorisation/IssuePermissionTest.java b/tests/src/test/java/org/sonarqube/tests/authorization/IssuePermissionTest.java similarity index 95% rename from tests/src/test/java/org/sonarqube/tests/authorisation/IssuePermissionTest.java rename to tests/src/test/java/org/sonarqube/tests/authorization/IssuePermissionTest.java index 21f39e7d636..910bb6124c2 100644 --- a/tests/src/test/java/org/sonarqube/tests/authorisation/IssuePermissionTest.java +++ b/tests/src/test/java/org/sonarqube/tests/authorization/IssuePermissionTest.java @@ -17,21 +17,21 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonarqube.tests.authorisation; +package org.sonarqube.tests.authorization; import com.sonar.orchestrator.Orchestrator; import com.sonar.orchestrator.build.SonarScanner; -import org.sonarqube.tests.Category1Suite; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.wsclient.SonarClient; import org.sonar.wsclient.base.HttpException; import org.sonar.wsclient.issue.Issue; import org.sonar.wsclient.issue.IssueQuery; import org.sonar.wsclient.user.UserParameters; +import org.sonarqube.qa.util.Tester; import org.sonarqube.ws.Issues; -import org.sonarqube.ws.client.WsClient; import org.sonarqube.ws.client.issue.BulkChangeRequest; import org.sonarqube.ws.client.permission.AddUserWsRequest; import org.sonarqube.ws.client.project.UpdateVisibilityRequest; @@ -40,24 +40,25 @@ import util.ItUtils; import static java.util.Arrays.asList; import static junit.framework.TestCase.fail; import static org.assertj.core.api.Assertions.assertThat; -import static util.ItUtils.newAdminWsClient; import static util.ItUtils.newUserWsClient; import static util.ItUtils.projectDir; public class IssuePermissionTest { @ClassRule - public static Orchestrator orchestrator = Category1Suite.ORCHESTRATOR; - public WsClient adminWsClient = newAdminWsClient(orchestrator); + public static Orchestrator orchestrator = AuthorizationSuite.ORCHESTRATOR; + + @Rule + public Tester tester = new Tester(orchestrator) + // all the tests of AuthorizationSuite must disable organizations + .disableOrganizations(); @Before public void init() { - orchestrator.resetData(); - ItUtils.restoreProfile(orchestrator, getClass().getResource("/authorisation/one-issue-per-line-profile.xml")); orchestrator.getServer().provisionProject("privateProject", "PrivateProject"); - newAdminWsClient(orchestrator).projects().updateVisibility(UpdateVisibilityRequest.builder().setProject("privateProject").setVisibility("private").build()); + tester.wsClient().projects().updateVisibility(UpdateVisibilityRequest.builder().setProject("privateProject").setVisibility("private").build()); orchestrator.getServer().associateProjectToQualityProfile("privateProject", "xoo", "one-issue-per-line"); SonarScanner privateProject = SonarScanner.create(projectDir("shared/xoo-sample")) .setProperty("sonar.projectKey", "privateProject") @@ -263,7 +264,7 @@ public class IssuePermissionTest { } private void addUserPermission(String login, String projectKey, String permission) { - adminWsClient.permissions().addUser( + tester.wsClient().permissions().addUser( new AddUserWsRequest() .setLogin(login) .setProjectKey(projectKey) diff --git a/tests/src/test/java/org/sonarqube/tests/authorisation/PermissionSearchTest.java b/tests/src/test/java/org/sonarqube/tests/authorization/PermissionSearchTest.java similarity index 78% rename from tests/src/test/java/org/sonarqube/tests/authorisation/PermissionSearchTest.java rename to tests/src/test/java/org/sonarqube/tests/authorization/PermissionSearchTest.java index 7698aa3bb8e..703544e337f 100644 --- a/tests/src/test/java/org/sonarqube/tests/authorisation/PermissionSearchTest.java +++ b/tests/src/test/java/org/sonarqube/tests/authorization/PermissionSearchTest.java @@ -17,20 +17,19 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonarqube.tests.authorisation; +package org.sonarqube.tests.authorization; import com.sonar.orchestrator.Orchestrator; import com.sonar.orchestrator.build.SonarScanner; -import org.sonarqube.tests.Category1Suite; -import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; +import org.junit.rules.RuleChain; +import org.sonarqube.qa.util.Tester; import org.sonarqube.ws.WsPermissions; import org.sonarqube.ws.WsPermissions.Permission; import org.sonarqube.ws.WsPermissions.SearchTemplatesWsResponse; import org.sonarqube.ws.client.PostRequest; -import org.sonarqube.ws.client.WsClient; import org.sonarqube.ws.client.permission.AddGroupToTemplateWsRequest; import org.sonarqube.ws.client.permission.AddGroupWsRequest; import org.sonarqube.ws.client.permission.AddProjectCreatorToTemplateWsRequest; @@ -38,7 +37,6 @@ import org.sonarqube.ws.client.permission.AddUserToTemplateWsRequest; import org.sonarqube.ws.client.permission.AddUserWsRequest; import org.sonarqube.ws.client.permission.CreateTemplateWsRequest; import org.sonarqube.ws.client.permission.GroupsWsRequest; -import org.sonarqube.ws.client.permission.PermissionsService; import org.sonarqube.ws.client.permission.RemoveGroupFromTemplateWsRequest; import org.sonarqube.ws.client.permission.RemoveProjectCreatorFromTemplateWsRequest; import org.sonarqube.ws.client.permission.RemoveUserFromTemplateWsRequest; @@ -48,65 +46,58 @@ import util.ItUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; -import static util.ItUtils.newAdminWsClient; import static util.ItUtils.projectDir; public class PermissionSearchTest { - @ClassRule - public static Orchestrator orchestrator = Category1Suite.ORCHESTRATOR; - private static WsClient adminWsClient; - private static PermissionsService permissionsWsClient; private static final String PROJECT_KEY = "sample"; private static final String LOGIN = "george.orwell"; private static final String GROUP_NAME = "1984"; + + @ClassRule + public static Orchestrator orchestrator = AuthorizationSuite.ORCHESTRATOR; + + private static Tester tester = new Tester(orchestrator) + // all the tests of AuthorizationSuite must disable organizations + .disableOrganizations(); + + @ClassRule + public static RuleChain ruleChain = RuleChain.outerRule(orchestrator).around(tester); @BeforeClass public static void analyzeProject() { - orchestrator.resetData(); - ItUtils.restoreProfile(orchestrator, PermissionSearchTest.class.getResource("/authorisation/one-issue-per-line-profile.xml")); orchestrator.getServer().provisionProject(PROJECT_KEY, "Sample"); orchestrator.getServer().associateProjectToQualityProfile("sample", "xoo", "one-issue-per-line"); SonarScanner sampleProject = SonarScanner.create(projectDir("shared/xoo-sample")); orchestrator.executeBuild(sampleProject); - - adminWsClient = newAdminWsClient(orchestrator); - permissionsWsClient = adminWsClient.permissions(); - createUser(LOGIN, "George Orwell"); createGroup(GROUP_NAME); } - @AfterClass - public static void delete_data() { - deactivateUser(LOGIN); - deleteGroup(GROUP_NAME); - } - @Test public void permission_web_services() { - permissionsWsClient.addUser( + tester.wsClient().permissions().addUser( new AddUserWsRequest() .setPermission("admin") .setLogin(LOGIN)); - permissionsWsClient.addGroup( + tester.wsClient().permissions().addGroup( new AddGroupWsRequest() .setPermission("admin") .setGroupName(GROUP_NAME)); - WsPermissions.WsSearchGlobalPermissionsResponse searchGlobalPermissionsWsResponse = permissionsWsClient.searchGlobalPermissions(); + WsPermissions.WsSearchGlobalPermissionsResponse searchGlobalPermissionsWsResponse = tester.wsClient().permissions().searchGlobalPermissions(); assertThat(searchGlobalPermissionsWsResponse.getPermissionsList().get(0).getKey()).isEqualTo("admin"); assertThat(searchGlobalPermissionsWsResponse.getPermissionsList().get(0).getUsersCount()).isEqualTo(1); // by default, a group has the global admin permission assertThat(searchGlobalPermissionsWsResponse.getPermissionsList().get(0).getGroupsCount()).isEqualTo(2); - WsPermissions.UsersWsResponse users = permissionsWsClient + WsPermissions.UsersWsResponse users = tester.wsClient().permissions() .users(new UsersWsRequest().setPermission("admin")); assertThat(users.getUsersList()).extracting("login").contains(LOGIN); - WsPermissions.WsGroupsResponse groupsResponse = permissionsWsClient + WsPermissions.WsGroupsResponse groupsResponse = tester.wsClient().permissions() .groups(new GroupsWsRequest() .setPermission("admin")); assertThat(groupsResponse.getGroupsList()).extracting("name").contains(GROUP_NAME); @@ -114,31 +105,31 @@ public class PermissionSearchTest { @Test public void template_permission_web_services() { - WsPermissions.CreateTemplateWsResponse createTemplateWsResponse = permissionsWsClient.createTemplate( + WsPermissions.CreateTemplateWsResponse createTemplateWsResponse = tester.wsClient().permissions().createTemplate( new CreateTemplateWsRequest() .setName("my-new-template") .setDescription("template-used-in-tests")); assertThat(createTemplateWsResponse.getPermissionTemplate().getName()).isEqualTo("my-new-template"); - permissionsWsClient.addUserToTemplate( + tester.wsClient().permissions().addUserToTemplate( new AddUserToTemplateWsRequest() .setPermission("admin") .setTemplateName("my-new-template") .setLogin(LOGIN)); - permissionsWsClient.addGroupToTemplate( + tester.wsClient().permissions().addGroupToTemplate( new AddGroupToTemplateWsRequest() .setPermission("admin") .setTemplateName("my-new-template") .setGroupName(GROUP_NAME)); - permissionsWsClient.addProjectCreatorToTemplate( + tester.wsClient().permissions().addProjectCreatorToTemplate( AddProjectCreatorToTemplateWsRequest.builder() .setPermission("admin") .setTemplateName("my-new-template") .build()); - SearchTemplatesWsResponse searchTemplatesWsResponse = permissionsWsClient.searchTemplates( + SearchTemplatesWsResponse searchTemplatesWsResponse = tester.wsClient().permissions().searchTemplates( new SearchTemplatesWsRequest() .setQuery("my-new-template")); assertThat(searchTemplatesWsResponse.getPermissionTemplates(0).getName()).isEqualTo("my-new-template"); @@ -147,26 +138,26 @@ public class PermissionSearchTest { assertThat(searchTemplatesWsResponse.getPermissionTemplates(0).getPermissions(0).getGroupsCount()).isEqualTo(1); assertThat(searchTemplatesWsResponse.getPermissionTemplates(0).getPermissions(0).getWithProjectCreator()).isTrue(); - permissionsWsClient.removeGroupFromTemplate( + tester.wsClient().permissions().removeGroupFromTemplate( new RemoveGroupFromTemplateWsRequest() .setPermission("admin") .setTemplateName("my-new-template") .setGroupName(GROUP_NAME)); - permissionsWsClient.removeUserFromTemplate( + tester.wsClient().permissions().removeUserFromTemplate( new RemoveUserFromTemplateWsRequest() .setPermission("admin") .setTemplateName("my-new-template") .setLogin(LOGIN)); - permissionsWsClient.removeProjectCreatorFromTemplate( + tester.wsClient().permissions().removeProjectCreatorFromTemplate( RemoveProjectCreatorFromTemplateWsRequest.builder() .setPermission("admin") .setTemplateName("my-new-template") .build() ); - SearchTemplatesWsResponse clearedSearchTemplatesWsResponse = permissionsWsClient.searchTemplates( + SearchTemplatesWsResponse clearedSearchTemplatesWsResponse = tester.wsClient().permissions().searchTemplates( new SearchTemplatesWsRequest() .setQuery("my-new-template")); assertThat(clearedSearchTemplatesWsResponse.getPermissionTemplates(0).getPermissionsList()) @@ -176,28 +167,16 @@ public class PermissionSearchTest { } private static void createUser(String login, String name) { - adminWsClient.wsConnector().call( + tester.wsClient().wsConnector().call( new PostRequest("api/users/create") .setParam("login", login) .setParam("name", name) .setParam("password", "123456")); } - private static void deactivateUser(String login) { - adminWsClient.wsConnector().call( - new PostRequest("api/users/deactivate") - .setParam("login", login)); - } - private static void createGroup(String groupName) { - adminWsClient.wsConnector().call( + tester.wsClient().wsConnector().call( new PostRequest("api/user_groups/create") .setParam("name", groupName)); } - - private static void deleteGroup(String groupName) { - adminWsClient.wsConnector().call( - new PostRequest("api/user_groups/delete") - .setParam("name", groupName)); - } } diff --git a/tests/src/test/java/org/sonarqube/tests/authorisation/PermissionTemplateTest.java b/tests/src/test/java/org/sonarqube/tests/authorization/PermissionTemplateTest.java similarity index 99% rename from tests/src/test/java/org/sonarqube/tests/authorisation/PermissionTemplateTest.java rename to tests/src/test/java/org/sonarqube/tests/authorization/PermissionTemplateTest.java index b0a82a81dc3..66b925d4fc4 100644 --- a/tests/src/test/java/org/sonarqube/tests/authorisation/PermissionTemplateTest.java +++ b/tests/src/test/java/org/sonarqube/tests/authorization/PermissionTemplateTest.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonarqube.tests.authorisation; +package org.sonarqube.tests.authorization; import com.sonar.orchestrator.Orchestrator; import java.util.Arrays; diff --git a/tests/src/test/java/org/sonarqube/tests/authorisation/ProvisioningPermissionTest.java b/tests/src/test/java/org/sonarqube/tests/authorization/ProvisioningPermissionTest.java similarity index 68% rename from tests/src/test/java/org/sonarqube/tests/authorisation/ProvisioningPermissionTest.java rename to tests/src/test/java/org/sonarqube/tests/authorization/ProvisioningPermissionTest.java index a71af6eecc5..27c5b610d6e 100644 --- a/tests/src/test/java/org/sonarqube/tests/authorisation/ProvisioningPermissionTest.java +++ b/tests/src/test/java/org/sonarqube/tests/authorization/ProvisioningPermissionTest.java @@ -17,77 +17,67 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonarqube.tests.authorisation; +package org.sonarqube.tests.authorization; import com.sonar.orchestrator.Orchestrator; -import org.sonarqube.tests.Category1Suite; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExpectedException; +import org.junit.rules.RuleChain; +import org.sonarqube.qa.util.Tester; import org.sonarqube.ws.WsProjects.CreateWsResponse.Project; -import org.sonarqube.ws.client.HttpException; import org.sonarqube.ws.client.permission.AddGroupWsRequest; import org.sonarqube.ws.client.permission.AddUserWsRequest; -import org.sonarqube.ws.client.permission.PermissionsService; import org.sonarqube.ws.client.permission.RemoveGroupWsRequest; import org.sonarqube.ws.client.permission.RemoveUserWsRequest; import org.sonarqube.ws.client.project.CreateRequest; -import util.user.UserRule; +import util.ItUtils; import static org.assertj.core.api.Assertions.assertThat; -import static util.ItUtils.newAdminWsClient; -import static util.ItUtils.newUserWsClient; import static util.selenium.Selenese.runSelenese; public class ProvisioningPermissionTest { - @Rule - public ExpectedException thrown = ExpectedException.none(); - - @ClassRule - public static Orchestrator orchestrator = Category1Suite.ORCHESTRATOR; - - @ClassRule - public static UserRule userRule = UserRule.from(orchestrator); - private static final String PASSWORD = "password"; - private static final String ADMIN_WITH_PROVISIONING = "admin-with-provisioning"; private static final String ADMIN_WITHOUT_PROVISIONING = "admin-without-provisioning"; private static final String USER_WITH_PROVISIONING = "user-with-provisioning"; private static final String USER_WITHOUT_PROVISIONING = "user-without-provisioning"; - private static PermissionsService permissionsWsClient; + @ClassRule + public static Orchestrator orchestrator = AuthorizationSuite.ORCHESTRATOR; + + private static Tester tester = new Tester(orchestrator) + // all the tests of AuthorizationSuite must disable organizations + .disableOrganizations(); + + @ClassRule + public static RuleChain ruleChain = RuleChain.outerRule(orchestrator).around(tester); @BeforeClass public static void init() { - permissionsWsClient = newAdminWsClient(orchestrator).permissions(); - // remove default permission "provisioning" from anyone(); - permissionsWsClient.removeGroup(new RemoveGroupWsRequest().setGroupName("anyone").setPermission("provisioning")); + tester.wsClient().permissions().removeGroup(new RemoveGroupWsRequest().setGroupName("anyone").setPermission("provisioning")); - userRule.createUser(ADMIN_WITH_PROVISIONING, PASSWORD); + tester.users().generate(u -> u.setLogin(ADMIN_WITH_PROVISIONING).setPassword(PASSWORD)); addUserPermission(ADMIN_WITH_PROVISIONING, "admin"); addUserPermission(ADMIN_WITH_PROVISIONING, "provisioning"); - userRule.createUser(ADMIN_WITHOUT_PROVISIONING, PASSWORD); + tester.users().generate(u -> u.setLogin(ADMIN_WITHOUT_PROVISIONING).setPassword(PASSWORD)); addUserPermission(ADMIN_WITHOUT_PROVISIONING, "admin"); removeUserPermission(ADMIN_WITHOUT_PROVISIONING, "provisioning"); - userRule.createUser(USER_WITH_PROVISIONING, PASSWORD); + tester.users().generate(u -> u.setLogin(USER_WITH_PROVISIONING).setPassword(PASSWORD)); addUserPermission(USER_WITH_PROVISIONING, "provisioning"); - userRule.createUser(USER_WITHOUT_PROVISIONING, PASSWORD); + tester.users().generate(u -> u.setLogin(USER_WITHOUT_PROVISIONING).setPassword(PASSWORD)); removeUserPermission(USER_WITHOUT_PROVISIONING, "provisioning"); } @AfterClass public static void restoreData() throws Exception { - userRule.resetUsers(); - permissionsWsClient.addGroup(new AddGroupWsRequest().setGroupName("anyone").setPermission("provisioning")); + tester.wsClient().permissions().addGroup(new AddGroupWsRequest().setGroupName("anyone").setPermission("provisioning")); } /** @@ -117,7 +107,7 @@ public class ProvisioningPermissionTest { final String newKey = "new-project"; final String newName = "New Project"; - Project created = newUserWsClient(orchestrator, USER_WITH_PROVISIONING, PASSWORD).projects() + Project created = tester.as(USER_WITH_PROVISIONING, PASSWORD).wsClient().projects() .create(CreateRequest.builder().setKey(newKey).setName(newName).build()) .getProject(); @@ -132,19 +122,18 @@ public class ProvisioningPermissionTest { */ @Test public void user_cannot_provision_project_through_ws_if_he_does_not_have_provisioning_permission() { - thrown.expect(HttpException.class); - thrown.expectMessage("403"); - - newUserWsClient(orchestrator, USER_WITHOUT_PROVISIONING, PASSWORD).projects() - .create(CreateRequest.builder().setKey("new-project").setName("New Project").build()) - .getProject(); + ItUtils.expectForbiddenError(() -> { + tester.as(USER_WITHOUT_PROVISIONING, PASSWORD).wsClient().projects() + .create(CreateRequest.builder().setKey("new-project").setName("New Project").build()) + .getProject(); + }); } private static void addUserPermission(String login, String permission) { - permissionsWsClient.addUser(new AddUserWsRequest().setLogin(login).setPermission(permission)); + tester.wsClient().permissions().addUser(new AddUserWsRequest().setLogin(login).setPermission(permission)); } private static void removeUserPermission(String login, String permission) { - permissionsWsClient.removeUser(new RemoveUserWsRequest().setLogin(login).setPermission(permission)); + tester.wsClient().permissions().removeUser(new RemoveUserWsRequest().setLogin(login).setPermission(permission)); } } diff --git a/tests/src/test/java/org/sonarqube/tests/authorisation/QualityProfileAdminPermissionTest.java b/tests/src/test/java/org/sonarqube/tests/authorization/QualityProfileAdminPermissionTest.java similarity index 89% rename from tests/src/test/java/org/sonarqube/tests/authorisation/QualityProfileAdminPermissionTest.java rename to tests/src/test/java/org/sonarqube/tests/authorization/QualityProfileAdminPermissionTest.java index b96d5cc719c..97d784d596a 100644 --- a/tests/src/test/java/org/sonarqube/tests/authorisation/QualityProfileAdminPermissionTest.java +++ b/tests/src/test/java/org/sonarqube/tests/authorization/QualityProfileAdminPermissionTest.java @@ -17,13 +17,12 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonarqube.tests.authorisation; +package org.sonarqube.tests.authorization; import com.sonar.orchestrator.Orchestrator; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; -import org.sonarqube.tests.Category1Suite; import org.sonarqube.qa.util.Tester; import org.sonarqube.ws.client.permission.AddUserWsRequest; import org.sonarqube.ws.client.qualityprofile.CreateRequest; @@ -37,10 +36,12 @@ import static util.ItUtils.runProjectAnalysis; public class QualityProfileAdminPermissionTest { @ClassRule - public static Orchestrator orchestrator = Category1Suite.ORCHESTRATOR; + public static Orchestrator orchestrator = AuthorizationSuite.ORCHESTRATOR; @Rule - public Tester tester = new Tester(orchestrator).disableOrganizations(); + public Tester tester = new Tester(orchestrator) + // all the tests of AuthorizationSuite must disable organizations + .disableOrganizations(); @Test public void permission_should_grant_access_to_profile() { diff --git a/tests/src/test/java/org/sonarqube/tests/authorisation/SystemPasscodeTest.java b/tests/src/test/java/org/sonarqube/tests/authorization/SystemPasscodeTest.java similarity index 72% rename from tests/src/test/java/org/sonarqube/tests/authorisation/SystemPasscodeTest.java rename to tests/src/test/java/org/sonarqube/tests/authorization/SystemPasscodeTest.java index b7fabd3bb92..5ec92f46fdd 100644 --- a/tests/src/test/java/org/sonarqube/tests/authorisation/SystemPasscodeTest.java +++ b/tests/src/test/java/org/sonarqube/tests/authorization/SystemPasscodeTest.java @@ -17,12 +17,10 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonarqube.tests.authorisation; +package org.sonarqube.tests.authorization; import com.sonar.orchestrator.Orchestrator; -import com.sonar.orchestrator.OrchestratorBuilder; -import org.junit.AfterClass; -import org.junit.BeforeClass; +import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.sonarqube.qa.util.Tester; @@ -31,36 +29,20 @@ import org.sonarqube.ws.client.WsRequest; import org.sonarqube.ws.client.WsResponse; import static org.assertj.core.api.Assertions.assertThat; -import static util.ItUtils.pluginArtifact; public class SystemPasscodeTest { - private static final String VALID_PASSCODE = "123456"; + static final String VALID_PASSCODE = "123456"; private static final String INVALID_PASSCODE = "not" + VALID_PASSCODE; private static final String PASSCODE_HEADER = "X-Sonar-Passcode"; - private static Orchestrator orchestrator; - - @BeforeClass - public static void setUp() throws Exception { - OrchestratorBuilder builder = Orchestrator.builderEnv() - // this privileged plugin provides the WS api/system_passcode/check - // that is used by the tests - .addPlugin(pluginArtifact("fake-governance-plugin")) - .setServerProperty("sonar.web.systemPasscode", VALID_PASSCODE); - orchestrator = builder.build(); - orchestrator.start(); - } - - @AfterClass - public static void stop() { - if (orchestrator != null) { - orchestrator.stop(); - } - } + @ClassRule + public static Orchestrator orchestrator = AuthorizationSuite.ORCHESTRATOR; @Rule - public Tester tester = new Tester(orchestrator); + public Tester tester = new Tester(orchestrator) + // all the tests of AuthorizationSuite must disable organizations + .disableOrganizations(); @Test public void system_access_is_granted_if_valid_passcode_is_sent_through_http_header() { diff --git a/tests/src/test/java/util/user/Groups.java b/tests/src/test/java/util/user/Groups.java index 8aa1f63c869..32ef4f27250 100644 --- a/tests/src/test/java/util/user/Groups.java +++ b/tests/src/test/java/util/user/Groups.java @@ -27,7 +27,6 @@ import org.sonarqube.qa.util.Tester; * @deprecated replaced by {@link Tester} */ @Deprecated - public class Groups { private List groups; diff --git a/tests/src/test/java/util/user/UserRule.java b/tests/src/test/java/util/user/UserRule.java index 994e4a0c2e7..beb07e114d2 100644 --- a/tests/src/test/java/util/user/UserRule.java +++ b/tests/src/test/java/util/user/UserRule.java @@ -31,7 +31,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.junit.rules.ExternalResource; import org.sonarqube.qa.util.Tester; -import org.sonarqube.ws.Organizations; import org.sonarqube.ws.WsUsers; import org.sonarqube.ws.client.GetRequest; import org.sonarqube.ws.client.PostRequest; @@ -139,13 +138,6 @@ public class UserRule extends ExternalResource implements GroupManagement { createUser(login, login, null, password); } - public WsUsers.CreateWsResponse.User createAdministrator(Organizations.Organization organization, String password) { - WsUsers.CreateWsResponse.User user = generate(p -> p.setPassword(password)); - adminWsClient.organizations().addMember(organization.getKey(), user.getLogin()); - forOrganization(organization.getKey()).associateGroupsToUser(user.getLogin(), "Owners"); - return user; - } - /** * Create a new admin user with random login, having password same as login */ @@ -161,28 +153,10 @@ public class UserRule extends ExternalResource implements GroupManagement { return login; } - /** - * Create a new root user with random login, having password same as login - */ - public String createRootUser() { - String login = randomAlphabetic(10).toLowerCase(); - return createRootUser(login, login); - } - - public String createRootUser(String login, String password) { - createUser(login, password); - setRoot(login); - return login; - } - public void setRoot(String login) { adminWsClient().roots().setRoot(login); } - public void unsetRoot(String login) { - adminWsClient().roots().unsetRoot(login); - } - public Optional getUserByLogin(String login) { return FluentIterable.from(getUsers().getUsers()).firstMatch(new MatchUserLogin(login)); } diff --git a/tests/src/test/resources/authorisation/PermissionTemplatesPageTest/should_create.html b/tests/src/test/resources/authorisation/PermissionTemplatesPageTest/should_create.html deleted file mode 100644 index 5265dab2239..00000000000 --- a/tests/src/test/resources/authorisation/PermissionTemplatesPageTest/should_create.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - should_create - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
open/sessions/new
typepasswordroot-user
typeloginroot-user
clickAndWaitname=commit
open/permission_templates
waitForElementPresentcss=.page-actions button
clickcss=.page-actions button
waitForElementPresentcss=#permission-template-name
typecss=#permission-template-nameCustom
typecss=#permission-template-descriptionDescription
typecss=#permission-template-project-key-pattern.*
clickcss=#permission-template-submit
waitForElementPresentcss=tr[data-name="Custom"]
assertTextcss=tr[data-name="Custom"] .js-name*Custom*
assertTextcss=tr[data-name="Custom"] .js-description*Description*
assertTextcss=tr[data-name="Custom"] .js-project-key-pattern*.*
- - diff --git a/tests/src/test/resources/authorisation/PermissionTemplatesPageTest/should_display_page.html b/tests/src/test/resources/authorisation/PermissionTemplatesPageTest/should_display_page.html deleted file mode 100644 index 2e05e15a692..00000000000 --- a/tests/src/test/resources/authorisation/PermissionTemplatesPageTest/should_display_page.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - should_display_page - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
open/sessions/new
typeloginadmin
typepasswordadmin
clickAndWaitcommit
open/permission_templates
waitForElementPresentcss=tr[data-id="default_template"]
assertTextcss=tr[data-id="default_template"] .js-name*Default template*
assertTextcss=tr[data-id="default_template"] .js-defaults*Projects*
assertTextcss=tr[data-id="default_template"] .js-description*This permission template will be used*
assertElementPresentcss=td[data-permission="user"]
assertElementPresentcss=td[data-permission="codeviewer"]
assertElementPresentcss=td[data-permission="issueadmin"]
assertElementPresentcss=td[data-permission="admin"]
assertElementPresentcss=td[data-permission="scan"]
- - diff --git a/tests/src/test/resources/authorisation/PermissionTemplatesPageTest/should_manage_project_creators.html b/tests/src/test/resources/authorisation/PermissionTemplatesPageTest/should_manage_project_creators.html deleted file mode 100644 index d6226cb6fa7..00000000000 --- a/tests/src/test/resources/authorisation/PermissionTemplatesPageTest/should_manage_project_creators.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - should_manage_project_creators - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
open/sessions/new
typepasswordadmin-user
typeloginadmin-user
clickAndWaitname=commit
open/permission_templates
waitForElementPresentcss=td[data-permission="user"]
clickcss=td[data-permission="user"] .js-update-users
waitForElementPresentcss=#grant-to-project-creators
assertElementPresentcss=#grant-to-project-creators:not(:checked)
clickcss=#grant-to-project-creators
clickcss=.js-modal-close
waitForElementPresentcss=td[data-permission="user"] .js-project-creators
clickcss=td[data-permission="user"] .js-update-users
waitForElementPresentcss=#grant-to-project-creators
assertElementPresentcss=#grant-to-project-creators:checked
clickcss=#grant-to-project-creators
clickcss=.js-modal-close
waitForElementNotPresentcss=td[data-permission="user"] .js-project-creators
- - -- 2.39.5